arXiv Daily Digest Deck (Meta-Skill)
A near-pure tool_call + linear DAG meta-skill: fetch arXiv via
the public Atom API, write a per-paper structured digest, render it
into a PPTX deck, and persist the digest into long-term memory under
the arxiv-daily topic.
Trigger surface
Fire manually with the English trigger arxiv daily digest or one of the
localized triggers listed in the frontmatter. Category override: include a
cs.XX token anywhere in the invocation.
Fallback
If fetch_arxiv fails (network or parse), the downstream steps
short-circuit by emitting _SKIPPED markers; no half-baked PPTX or
memory note is written. Operator can retry by re-invoking, or
manually run curl 'http://export.arxiv.org/api/query?…'.
1---
2name: meta-arxiv-daily-digest-deck
3visibility: experimental
4invocation: experimental_internal
5disable-model-invocation: true
6description: "Fetch the day's top arXiv submissions in a chosen category, write a structured per-paper digest, render the digest as a PPTX deck (one slide per paper), and persist the digest to long-term memory. Use for a daily 'arxiv morning briefing' — manual fire or cron-scheduled."
7kind: meta
8meta_priority: 55
9always: false
10triggers:
11 - "arxiv daily digest"
12 - "arxiv digest deck"
13 - "arxiv 日报"
14 - "arxiv 晨刊"
15provenance:
16 origin: opensquilla-original
17 license: Apache-2.0
18composition:
19 steps:
20 - id: fetch_arxiv
21 kind: agent
22 skill: sub-agent
23 with:
24 task: |
25 Fetch the latest papers from arXiv's public API.
26
27 Default query: cs.CL OR cs.AI, sorted by submittedDate descending,
28 max_results=6. If the user's invocation contains a category override,
29 honor it (look for `cs.XX` patterns in the message).
30
31 User invocation:
32 {{ inputs.user_message | xml_escape | truncate(200) }}
33
34 URL template: `http://export.arxiv.org/api/query?search_query=<query>&sortBy=submittedDate&sortOrder=descending&max_results=6`
35
36 Use the available HTTP fetch tool. Parse the Atom XML response and
37 extract for each entry: id (with version), title, summary (the abstract),
38 authors (up to 5), pdf URL.
39
40 Reply with ONLY a JSON array on one line, no preamble:
41 [{"id":"...", "title":"...", "abstract":"...", "authors":[...], "pdf_url":"..."}, ...]
42
43 If the fetch fails (HTTP error, parse error, empty result), reply with
44 exactly: FETCH_FAILED: <one-line cause>
45 - id: digest_papers
46 kind: agent
47 skill: summarize
48 depends_on: [fetch_arxiv]
49 with:
50 task: |
51 Write a structured digest for each paper. Skip if upstream is
52 FETCH_FAILED — reply with `DIGEST_SKIPPED` in that case.
53
54 Papers JSON from upstream:
55 ---
56 {{ outputs.fetch_arxiv | truncate(10000) }}
57 ---
58
59 For each paper, output this exact block (separate papers with a line of `---`):
60
61 ## <Paper Title>
62 **Authors**: <first 3 author names, then et al. if more>
63 **arXiv ID**: <id>
64 **Core claim** (1 sentence): <claim>
65 **Method summary** (2-3 sentences): <how>
66 **Key numbers** (if present): <metric: value, metric: value>
67 **Why it matters** (1 sentence): <relevance>
68 - id: render_deck
69 kind: agent
70 skill: pptx
71 depends_on: [digest_papers]
72 with:
73 task: |
74 Render the per-paper digest below into a PPTX deck. One slide per
75 paper. Slide title = paper title. Slide body = the rest of that
76 paper's digest block. Title slide first with text
77 `arXiv Daily Digest — {{ inputs.user_message | xml_escape | truncate(80) }}`.
78
79 Digest body:
80 ---
81 {{ outputs.digest_papers | truncate(12000) }}
82 ---
83
84 Save to: `{{ inputs.workspace_dir }}/arxiv-daily/digest.pptx`
85 (overwrite OK; cron mode keeps only the latest, manual fire uses
86 the same name and the user can rename after if needed). Create
87 the `arxiv-daily/` subdirectory if missing.
88
89 Reply with the absolute output path on a single line, no preamble.
90
91 If the digest is `DIGEST_SKIPPED`, reply: `RENDER_SKIPPED`.
92 - id: persist
93 kind: tool_call
94 tool: memory_save
95 tool_allowlist: [memory_save]
96 depends_on: [digest_papers, render_deck]
97 tool_args:
98 path: "memory/arxiv-daily.md"
99 mode: append
100 content: |
101 === arxiv-daily digest ===
102 invocation: {{ inputs.user_message | xml_escape | truncate(200) }}
103 deck: {{ outputs.render_deck | truncate(200) }}
104 digest:
105 {{ outputs.digest_papers | truncate(8000) }}
106---
107
108# arXiv Daily Digest Deck (Meta-Skill)
109
110A near-pure **`tool_call` + linear DAG** meta-skill: fetch arXiv via
111the public Atom API, write a per-paper structured digest, render it
112into a PPTX deck, and persist the digest into long-term memory under
113the `arxiv-daily` topic.
114
115## Trigger surface
116
117Fire manually with the English trigger `arxiv daily digest` or one of the
118localized triggers listed in the frontmatter. Category override: include a
119`cs.XX` token anywhere in the invocation.
120
121## Fallback
122
123If `fetch_arxiv` fails (network or parse), the downstream steps
124short-circuit by emitting `_SKIPPED` markers; no half-baked PPTX or
125memory note is written. Operator can retry by re-invoking, or
126manually run `curl 'http://export.arxiv.org/api/query?…'`.