research-copilot 0.2.17 → 0.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -1
- package/app/out/main/index.mjs +2842 -188
- package/app/out/preload/index.js +2 -0
- package/app/out/renderer/assets/{MilkdownMarkdownEditor-tTNRIB2K.css → MilkdownMarkdownEditor-BW0Pt28W.css} +103 -15
- package/app/out/renderer/assets/{MilkdownMarkdownEditor-CuTa5j4S.js → MilkdownMarkdownEditor-OhCrq3X0.js} +99 -52
- package/app/out/renderer/assets/{arc-BAWS3N-F.js → arc-DLr0RP8F.js} +1 -1
- package/app/out/renderer/assets/{blockDiagram-c4efeb88-BHadwPqY.js → blockDiagram-c4efeb88-XhKChw2n.js} +8 -8
- package/app/out/renderer/assets/{c4Diagram-c83219d4-B3kOxRad.js → c4Diagram-c83219d4-DDoJmoIQ.js} +3 -3
- package/app/out/renderer/assets/{channel-Bll9CBqI.js → channel-CJCgJSqV.js} +1 -1
- package/app/out/renderer/assets/{classDiagram-beda092f-Dv7owGyx.js → classDiagram-beda092f-CAmimZpz.js} +6 -6
- package/app/out/renderer/assets/{classDiagram-v2-2358418a-cWrqk5tQ.js → classDiagram-v2-2358418a-Bma4E_Eg.js} +10 -10
- package/app/out/renderer/assets/{clone-D-DQ4nnY.js → clone-C338dmoI.js} +1 -1
- package/app/out/renderer/assets/{createText-1719965b-ciE8YuqI.js → createText-1719965b-_up4NJqB.js} +2 -2
- package/app/out/renderer/assets/{edges-96097737-DycnAYk_.js → edges-96097737-Bpp6hVLn.js} +3 -3
- package/app/out/renderer/assets/{erDiagram-0228fc6a-Sv78YNMY.js → erDiagram-0228fc6a-bjTh_7ap.js} +5 -5
- package/app/out/renderer/assets/{flowDb-c6c81e3f-BiOarg9b.js → flowDb-c6c81e3f-BjVV4DVk.js} +1 -1
- package/app/out/renderer/assets/{flowDiagram-50d868cf-19J80nxU.js → flowDiagram-50d868cf-gmeaaZ6z.js} +12 -12
- package/app/out/renderer/assets/{flowDiagram-v2-4f6560a1-c-kGsubV.js → flowDiagram-v2-4f6560a1-nem5zs2M.js} +12 -12
- package/app/out/renderer/assets/{flowchart-elk-definition-6af322e1-DRrYbiSC.js → flowchart-elk-definition-6af322e1-DPaGAYRw.js} +6 -6
- package/app/out/renderer/assets/{ganttDiagram-a2739b55-BadmpvMy.js → ganttDiagram-a2739b55-CnAti19E.js} +3 -3
- package/app/out/renderer/assets/{gitGraphDiagram-82fe8481-BdVoj60Q.js → gitGraphDiagram-82fe8481-DQWHD3SJ.js} +2 -2
- package/app/out/renderer/assets/{graph-jZhookGR.js → graph-DKiKgH8m.js} +1 -1
- package/app/out/renderer/assets/{index-B8fh500_.js → index-4s-c5d65.js} +3 -3
- package/app/out/renderer/assets/{index-5325376f-CbxmatXv.js → index-5325376f-G-0aO-2i.js} +6 -6
- package/app/out/renderer/assets/{index-CAlpJ3-o.js → index-9q_P5ULR.js} +4 -4
- package/app/out/renderer/assets/{index-cavFRVgM.js → index-B1A3JxQj.js} +3 -3
- package/app/out/renderer/assets/{index-B9kkJj3J.js → index-BBUrmGmY.js} +6 -6
- package/app/out/renderer/assets/{index-CMGDsC_t.js → index-BQho5LH-.js} +6 -6
- package/app/out/renderer/assets/{index-CirXkIv2.js → index-BUVlmsgO.js} +3 -3
- package/app/out/renderer/assets/{index-BWCwSkxb.js → index-BzEthrJ4.js} +3 -3
- package/app/out/renderer/assets/{index-B2UUF9y9.js → index-C1YzkB4z.js} +1289 -419
- package/app/out/renderer/assets/{index-D-ZMmLhv.js → index-CGo665vD.js} +3 -3
- package/app/out/renderer/assets/{index-DQwFQR1s.js → index-CPZaxR35.js} +3 -3
- package/app/out/renderer/assets/{index-DOUTte7i.js → index-CSyD1mbL.js} +3 -3
- package/app/out/renderer/assets/{index-BUcSHPha.js → index-Cf7vlFSn.js} +3 -3
- package/app/out/renderer/assets/{index-CZX0435B.js → index-CluH1o2q.js} +6 -6
- package/app/out/renderer/assets/{index-lAZsmnj1.css → index-CogwQwDN.css} +185 -32
- package/app/out/renderer/assets/{index-DEO9Jh2Y.js → index-Cw1n3klA.js} +5 -5
- package/app/out/renderer/assets/{index-BBUnWjLe.js → index-DFzvntIw.js} +3 -3
- package/app/out/renderer/assets/{index-g91Iwgxa.js → index-DHzyAhWM.js} +4 -4
- package/app/out/renderer/assets/{index-47oNNEnx.js → index-DhliHfCM.js} +6 -6
- package/app/out/renderer/assets/{index-DF_C6DjR.js → index-DkVFbCxC.js} +3 -3
- package/app/out/renderer/assets/{index-HCRA2-Q6.js → index-DpZJP5MT.js} +6 -6
- package/app/out/renderer/assets/{index-BXpNbFhG.js → index-Gfd_DiMG.js} +3 -3
- package/app/out/renderer/assets/{index-B110aKST.js → index-jOvNAYyP.js} +3 -3
- package/app/out/renderer/assets/{index-BTE0dEKO.js → index-rrJkk8KV.js} +6 -6
- package/app/out/renderer/assets/{index-DO5LsHlM.js → index-vfSerSmF.js} +1 -1
- package/app/out/renderer/assets/{infoDiagram-8eee0895-DpVt3Scv.js → infoDiagram-8eee0895-BCnBkXXS.js} +2 -2
- package/app/out/renderer/assets/{journeyDiagram-c64418c1-RYKX5mcV.js → journeyDiagram-c64418c1-Bq2wSX3k.js} +4 -4
- package/app/out/renderer/assets/{layout-BsbNXXgR.js → layout-BvkumzoT.js} +2 -2
- package/app/out/renderer/assets/{line-OzQTpJsh.js → line-eU4el-G4.js} +1 -1
- package/app/out/renderer/assets/{linear-DO5pdnqi.js → linear-DlBjMBEa.js} +1 -1
- package/app/out/renderer/assets/{mindmap-definition-8da855dc-D3zWs3h1.js → mindmap-definition-8da855dc-CzLBu7ao.js} +3 -3
- package/app/out/renderer/assets/{pieDiagram-a8764435-DDoNhSgQ.js → pieDiagram-a8764435--olrXFr_.js} +3 -3
- package/app/out/renderer/assets/{quadrantDiagram-1e28029f-ZO85SsRM.js → quadrantDiagram-1e28029f-BnpnBBgc.js} +3 -3
- package/app/out/renderer/assets/{requirementDiagram-08caed73-C-vKE6g8.js → requirementDiagram-08caed73-6O9WS7hn.js} +5 -5
- package/app/out/renderer/assets/{sankeyDiagram-a04cb91d-Cbqb2K-X.js → sankeyDiagram-a04cb91d-D-iJnK91.js} +2 -2
- package/app/out/renderer/assets/{sequenceDiagram-c5b8d532-BK4uvpEA.js → sequenceDiagram-c5b8d532-DBlK15cV.js} +3 -3
- package/app/out/renderer/assets/{stateDiagram-1ecb1508-DXa_YqNi.js → stateDiagram-1ecb1508-DKXKPYuk.js} +6 -6
- package/app/out/renderer/assets/{stateDiagram-v2-c2b004d7-Dm203Z8l.js → stateDiagram-v2-c2b004d7-DY288Eo5.js} +10 -10
- package/app/out/renderer/assets/{styles-b4e223ce-BV4b1eAh.js → styles-b4e223ce-CRJ_xgJ-.js} +1 -1
- package/app/out/renderer/assets/{styles-ca3715f6-CKhYSe7r.js → styles-ca3715f6-Bp_k5KLD.js} +1 -1
- package/app/out/renderer/assets/{styles-d45a18b0-DTCMfE-4.js → styles-d45a18b0-DLA8Gg6D.js} +4 -4
- package/app/out/renderer/assets/{svgDrawCommon-b86b1483-DK4i-dfJ.js → svgDrawCommon-b86b1483-Dm5CK2gQ.js} +1 -1
- package/app/out/renderer/assets/{timeline-definition-faaaa080-CE2LmuDH.js → timeline-definition-faaaa080-D-m9BHUg.js} +3 -3
- package/app/out/renderer/assets/{xychartDiagram-f5964ef8-Bd8KT9X9.js → xychartDiagram-f5964ef8-Drn4Rqev.js} +5 -5
- package/app/out/renderer/index.html +2 -2
- package/lib/skills/builtin/academic-marp-slides/SKILL.md +933 -0
- package/lib/skills/builtin/research-grants/SKILL.md +15 -11
- package/lib/skills/builtin/scholar-evaluation/SKILL.md +12 -11
- package/lib/skills/builtin/scientific-schematics/SKILL.md +463 -560
- package/lib/skills/builtin/teaching-marp-slides/SKILL.md +1218 -0
- package/package.json +1 -1
- package/scripts/audit-diagram-prompts.mjs +67 -0
- package/scripts/test-skill-routing.mjs +238 -0
- package/lib/skills/builtin/marp-slides/SKILL.md +0 -642
- package/lib/skills/builtin/scientific-schematics/references/QUICK_REFERENCE.md +0 -182
- package/lib/skills/builtin/scientific-schematics/references/README.md +0 -292
- package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic.cpython-312.pyc +0 -0
- package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic_ai.cpython-312.pyc +0 -0
- package/lib/skills/builtin/scientific-schematics/scripts/example_usage.sh +0 -85
- package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic.py +0 -141
- package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic_ai.py +0 -910
|
@@ -0,0 +1,933 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: academic-marp-slides
|
|
3
|
+
description: "Create or revise high-quality academic presentation slides in Markdown using Marp, following a disciplined multi-phase workflow. Use when the user needs conference talk slides, lab meeting decks, thesis defense presentations, research seminars, invited talks, OR wants to revise an existing Marp slide file. Enforces Assertion-Evidence structure and Mayer's multimedia learning principles. For teaching/lecture slides use `teaching-marp-slides`; for written documents use `paper-writing` or `scientific-writing`; for individual figures use `scientific-visualization`."
|
|
4
|
+
category: Presentation
|
|
5
|
+
tags: [Marp, Slides, Presentation, Conference Talk, Lab Meeting, Thesis Defense, Seminar, Research Talk, Assertion-Evidence, 做PPT, 学术幻灯片, 演示文稿, 学术报告]
|
|
6
|
+
triggers: [make slides, create presentation, conference talk, lab meeting slides, thesis defense, research presentation, seminar slides, marp, slide deck, revise slides, edit slides, improve slides, 做幻灯片, 做报告, 学术演讲, 修改幻灯片, PPT]
|
|
7
|
+
depends: [scientific-visualization, scientific-schematics]
|
|
8
|
+
license: MIT
|
|
9
|
+
metadata:
|
|
10
|
+
skill-author: Dong Dai
|
|
11
|
+
based-on: robonuggets/marp-slides, Alley Assertion-Evidence, Mayer multimedia learning principles
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Academic Research Presentation Slides with Marp
|
|
15
|
+
|
|
16
|
+
## Core Principle
|
|
17
|
+
|
|
18
|
+
**Slides are not documents.** They are visual aids for a spoken narrative. A good slide deck cannot be produced in one pass — it requires iteration through distinct phases, each with a different goal. This skill enforces a **phased workflow** that separates thinking (what to say) from structuring (what order) from visual design (how it looks). Skipping phases produces the flat, overstuffed, logically-loose decks that plague academic talks.
|
|
19
|
+
|
|
20
|
+
The two theoretical anchors:
|
|
21
|
+
|
|
22
|
+
1. **Assertion-Evidence structure** (Michael Alley): Every slide title is a **complete sentence** stating a claim. The slide body is **visual evidence** for that claim. No bullet-point lists of topics.
|
|
23
|
+
2. **Mayer's multimedia learning principles**: Images + spoken explanation beats on-screen text read aloud. Reduce redundancy, maximize signaling, keep related elements spatially close.
|
|
24
|
+
|
|
25
|
+
**Violating either of these is the most common reason academic slides fail.**
|
|
26
|
+
|
|
27
|
+
> **Note on Dry Run**: The user explicitly handles delivery rehearsal and validation themselves after receiving the draft. This skill therefore stops at a polished draft and does not prescribe dry-run steps. The user will test the deck and come back with revisions (Revise Mode).
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## When to Use This Skill
|
|
32
|
+
|
|
33
|
+
- Conference talks, invited talks, workshop presentations
|
|
34
|
+
- Lab meetings, group meetings, research seminars
|
|
35
|
+
- Thesis defenses, qualifying exams
|
|
36
|
+
- Converting a paper/preprint into a talk
|
|
37
|
+
- **Revising** an existing Marp research slide deck
|
|
38
|
+
|
|
39
|
+
### When NOT to Use
|
|
40
|
+
|
|
41
|
+
| Need | Use Instead |
|
|
42
|
+
|------|-------------|
|
|
43
|
+
| Teaching / lecture / classroom slides | `teaching-marp-slides` |
|
|
44
|
+
| Written paper, report, grant | `paper-writing`, `scientific-writing`, or `research-grants` |
|
|
45
|
+
| One standalone figure | `scientific-visualization`, `matplotlib`, or `seaborn` |
|
|
46
|
+
| Diagram / schematic only | `scientific-schematics` |
|
|
47
|
+
| Poster (static large-format) | Ask user before proceeding — Marp can do it but dedicated poster tools are better |
|
|
48
|
+
| PPTX that user will keep editing in PowerPoint | Marp PPTX export loses styling; warn the user first |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Phase 0: Mode Detection (Do This First, Every Time)
|
|
53
|
+
|
|
54
|
+
Before anything else, determine which mode applies:
|
|
55
|
+
|
|
56
|
+
### Signals for **Revise Mode**
|
|
57
|
+
- User attached or referenced an existing `.md` Marp file
|
|
58
|
+
- User says "change/fix/improve/update [existing slides]"
|
|
59
|
+
- User says "the deck I made…" / "slide 5 should…" / "this section is…"
|
|
60
|
+
- User pastes Marp Markdown and asks for edits
|
|
61
|
+
|
|
62
|
+
### Signals for **Create Mode**
|
|
63
|
+
- User describes a paper, research, or topic but has no existing deck
|
|
64
|
+
- User says "make slides for my talk on…" / "help me prepare a presentation"
|
|
65
|
+
- No Marp source file has been provided or created earlier in the conversation
|
|
66
|
+
|
|
67
|
+
If ambiguous, **ask**:
|
|
68
|
+
> "Are we starting a new deck from scratch, or revising an existing one? If existing, please share the .md source."
|
|
69
|
+
|
|
70
|
+
Then route to the appropriate mode below.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Context Gate (Required Before Create Mode)
|
|
75
|
+
|
|
76
|
+
**Good slides do not start from scratch — they are rooted in existing context.** Before entering Phase 1, run the context sweep below and summarize what you found (and what you could not find) to the user. A one-paragraph summary up front saves a Phase 3 rewrite later.
|
|
77
|
+
|
|
78
|
+
The sweep has three tiers. **Do all of tier 1 always; do tier 2 whenever it is cheap and plausibly relevant; only do tier 3 if tier 1+2 left real gaps.** Report at each tier — do not silently skip.
|
|
79
|
+
|
|
80
|
+
### Tier 1 — Local context (always do, zero cost)
|
|
81
|
+
|
|
82
|
+
Four distinct local stores. Check each one — they don't overlap:
|
|
83
|
+
|
|
84
|
+
1. **Structured memory** — `.research-pilot/memory/` holds long-lived user facts (co-author names, venue preferences, recurring style choices, prior talk themes). Read `MEMORY.md` (the index) and open any memory files whose description looks relevant. These are persistent across sessions and override inferred defaults.
|
|
85
|
+
2. **Papers wiki (RFC-005)** — the user's curated literature knowledge base. Use it as follows:
|
|
86
|
+
- `wiki_coverage` first if you don't know what's in it — returns the list of indexed topics/facets.
|
|
87
|
+
- `wiki_search` with the user's topic / method / key terms.
|
|
88
|
+
- `wiki_get` to pull a specific entry; `wiki_neighbors` to walk from a known entry to adjacent work; `wiki_source` to trace a claim back to the underlying paper.
|
|
89
|
+
- If the wiki tools return "Wiki not available", the workspace has no wiki — skip this substep and move on.
|
|
90
|
+
3. **Artifacts (local literature + notes)** — call `artifact-search` scoped to `papers` and `notes` with the user's topic/method keywords. Hits here are the user's own saved papers, reading notes, and prior session outputs. Read the most relevant before asking the user anything.
|
|
91
|
+
4. **Workspace files and session history** — scan:
|
|
92
|
+
- `.research-pilot/memory-v2/session-summaries/` for summaries of prior work on this topic
|
|
93
|
+
- `.research-pilot/memory-v2/focus/` for the user's current focus entries
|
|
94
|
+
- `.research-pilot/artifacts/tool-output/slides/` for any prior decks in this workspace (style reference)
|
|
95
|
+
- Any paper drafts, reading PDFs, or data files the user dropped into the workspace root — use `grep`/`find` for likely filenames.
|
|
96
|
+
|
|
97
|
+
If any of these sources names a PDF/DOCX by path that is not yet an artifact, run `convert-document` on it first so its content becomes usable text.
|
|
98
|
+
|
|
99
|
+
### Tier 2 — User confirmation + light expansion (do when gaps remain)
|
|
100
|
+
|
|
101
|
+
**Ask the user once, in a batched message**, whether any of these additional inputs exist:
|
|
102
|
+
- **Paper, preprint, or manuscript draft** for the research being presented (if not already found)
|
|
103
|
+
- **Prior talk slides** from the same group (style, figure choices)
|
|
104
|
+
- **Conference/venue style guide** (some conferences have templates)
|
|
105
|
+
- **Target venue examples** (published keynotes from the same venue)
|
|
106
|
+
|
|
107
|
+
**Plus, do a quick literature scan** if the slides will have a related-work section and tier 1 returned little:
|
|
108
|
+
- Call the `literature-search` tool with the user's topic + method keywords, limited to ~5–10 hits. This is a *context-building* pass, not an exhaustive survey — pull titles, venues, and abstracts to understand where the work sits.
|
|
109
|
+
- If `wiki_coverage` in tier 1 showed the wiki is well-populated on this topic, skip this step — the wiki already covers it.
|
|
110
|
+
|
|
111
|
+
### Tier 3 — Online fallback (do only if needed for a specific gap)
|
|
112
|
+
|
|
113
|
+
Use these only when a tier 1+2 gap is *load-bearing* for the deck (e.g., the user named a venue you've never heard of, or a result claim needs a citation nobody has):
|
|
114
|
+
- `web_search` for venue style guides, conference CFPs, keynote examples, or recent news tied to the claim.
|
|
115
|
+
- `web_fetch` on a specific URL the user mentioned or the search returned.
|
|
116
|
+
|
|
117
|
+
Do not use tier 3 for general background — that belongs in `literature-search` or the wiki.
|
|
118
|
+
|
|
119
|
+
### After the sweep — report and decide
|
|
120
|
+
|
|
121
|
+
Write one short paragraph to the user:
|
|
122
|
+
- **What I found:** [memory hits / wiki hits / artifact hits / workspace files / literature-search hits / web snippets]
|
|
123
|
+
- **What I still need:** [specific gaps that would change the deck — e.g., "no prior slides from your group, so I'll guess at visual style unless you share one"]
|
|
124
|
+
- **Proposed action:** either (a) proceed to Phase 1 now, or (b) pause while the user supplies one or two missing pieces
|
|
125
|
+
|
|
126
|
+
If the sweep turns up nothing substantive and the user has nothing more to share, proceed — but flag it explicitly:
|
|
127
|
+
> "No source material found locally or via a quick literature scan — I'll generate from scratch. Output will be generic and may need heavier revision. Consider sharing a paper draft, notes artifact, or a reference talk if possible."
|
|
128
|
+
|
|
129
|
+
This flag tells the user what quality to expect and invites them to supply material before committing.
|
|
130
|
+
|
|
131
|
+
## Working Posture (Applies to All Phases)
|
|
132
|
+
|
|
133
|
+
Work like a junior presenter briefing a senior advisor — not like a machine executing a template.
|
|
134
|
+
|
|
135
|
+
- **Surface assumptions before acting.** If you're inferring something the user didn't say (e.g., "I assume this is for specialists in your exact subfield"), state it.
|
|
136
|
+
- **Name decisions and their rationale.** When choosing a narrative structure or an evidence type, say why you picked it and what else you considered.
|
|
137
|
+
- **Flag unknowns.** If a slide needs a figure you don't have, mark it with a clear placeholder and a question to the user.
|
|
138
|
+
- **Less is more.** Do not add filler content. Every slide, bullet, and figure must earn its place. If a slide feels empty, that's a composition problem to solve by re-layout — not by inventing content.
|
|
139
|
+
|
|
140
|
+
These apply at every STOP AND CONFIRM gate.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
# CREATE MODE
|
|
145
|
+
|
|
146
|
+
Four phases. Each has a stop-and-confirm gate with the user. **Do not skip gates. Do not proceed to the next phase without explicit user approval — even if the answer seems obvious.**
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
Phase 1: Storyline ──► Outline on paper, no PPT (25% of total time)
|
|
150
|
+
Phase 2: Skeleton ──► Empty slide sequence (15%)
|
|
151
|
+
Phase 3: Content ──► Fill in figures + text (40%)
|
|
152
|
+
Phase 4: Polish ──► Visual refinement (20%)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Phase 1: Storyline
|
|
156
|
+
|
|
157
|
+
**Goal**: Decide what story to tell before touching any slide software.
|
|
158
|
+
|
|
159
|
+
**Tools allowed**: Prose outlines and assertion lists. **Do not create a `.md` file yet.**
|
|
160
|
+
|
|
161
|
+
### Step 1.1 — Consolidated intake (ask everything up front, in one batch)
|
|
162
|
+
|
|
163
|
+
Rather than asking questions one at a time and ping-ponging, ask for everything needed in a single structured request. If the user has already answered some of these in earlier messages or if the Context Gate surfaced them from artifacts, fill those in and only ask the remainder.
|
|
164
|
+
|
|
165
|
+
**Required before moving on:**
|
|
166
|
+
|
|
167
|
+
1. **Audience** — peers in subfield / adjacent field / broad scientific / funders / mixed
|
|
168
|
+
2. **Talk length** — lightning 5 min / short 10–12 min / standard 15–25 min / invited 45–60 min / defense 45–60 min
|
|
169
|
+
3. **Venue** — conference hall / seminar room / lab meeting / online — affects theme choice
|
|
170
|
+
4. **The one-sentence thesis** — the single most important thing the audience should remember one week later. If the user can't articulate this, help them extract it from their paper/notes, but do not proceed until it exists.
|
|
171
|
+
5. **2–3 supporting claims** that back up the thesis
|
|
172
|
+
6. **Context material available** — paper draft, prior slides, reference talks (tie to Context Gate above)
|
|
173
|
+
7. **Hard constraints** — mandatory slides (affiliation logos, funding acknowledgments), required sections (disclosures, conflicts)
|
|
174
|
+
|
|
175
|
+
Batch these as one message. Do not begin drafting assertions until the user has answered the required items (1, 2, 4, 5) at minimum.
|
|
176
|
+
|
|
177
|
+
### Step 1.2 — Draft the assertion list
|
|
178
|
+
|
|
179
|
+
Write out **every slide's title as a complete declarative sentence**. Example:
|
|
180
|
+
|
|
181
|
+
Bad (topic labels):
|
|
182
|
+
- Introduction
|
|
183
|
+
- Methods
|
|
184
|
+
- Results
|
|
185
|
+
- Discussion
|
|
186
|
+
|
|
187
|
+
Good (assertions):
|
|
188
|
+
- Predicting crystal structures beyond 30 atoms is infeasible with traditional CSP methods
|
|
189
|
+
- Existing AI generative models for crystals lack symmetry and local-environment constraints
|
|
190
|
+
- LEGO-xtal combines subgroup augmentation with SO(3)-descriptor pre-relaxation
|
|
191
|
+
- From 25 known sp² carbon structures, we generated 1,741 new low-energy allotropes
|
|
192
|
+
- We discovered four previously unknown negative-curvature graphite structures
|
|
193
|
+
|
|
194
|
+
Each assertion will become exactly one slide in Phase 2. The audience should follow the logical thread by reading titles alone.
|
|
195
|
+
|
|
196
|
+
### Step 1.3 — Propose 2–3 narrative structure options (let the user pick)
|
|
197
|
+
|
|
198
|
+
Do not pick a single narrative unilaterally. Identify the 2–3 structures that plausibly fit the research, describe the trade-off, and let the user choose. This prevents committing to the wrong arc before the user has had a chance to weigh in.
|
|
199
|
+
|
|
200
|
+
Candidate structures:
|
|
201
|
+
|
|
202
|
+
| Structure | Best when… | Risk |
|
|
203
|
+
|-----------|-----------|------|
|
|
204
|
+
| **Problem-Method-Result** | Standard research with clear problem, clean methodology, quantitative result | Feels generic; no tension |
|
|
205
|
+
| **Reversal** | Finding contradicts common belief or prior work | Requires a genuinely surprising result |
|
|
206
|
+
| **Journey** | Exploratory work, serendipitous discovery, methodology paper | Can meander without strong editing |
|
|
207
|
+
| **Comparison** | Benchmarks, head-to-head systems studies, framework papers | Audience may lose interest in the losers |
|
|
208
|
+
|
|
209
|
+
Present the 2–3 most plausible candidates to the user with a one-line trade-off for each, then wait for their pick.
|
|
210
|
+
|
|
211
|
+
### Step 1.4 — ★ STOP AND CONFIRM ★
|
|
212
|
+
|
|
213
|
+
Present to the user before writing any Markdown. Structure the handoff like a junior-to-advisor briefing:
|
|
214
|
+
|
|
215
|
+
**Proposal:**
|
|
216
|
+
1. The one-sentence thesis
|
|
217
|
+
2. The ordered list of assertion-style slide titles
|
|
218
|
+
3. The chosen narrative structure (one of the candidates the user picked)
|
|
219
|
+
4. Target slide count and time budget
|
|
220
|
+
|
|
221
|
+
**Assumptions I made (tell me if any are wrong):**
|
|
222
|
+
- [List any inferences — audience expertise level, what to omit, what to emphasize]
|
|
223
|
+
|
|
224
|
+
**Open questions:**
|
|
225
|
+
- [List anything still undecided — e.g., "unclear whether the negative result should be its own section or a subsection"]
|
|
226
|
+
|
|
227
|
+
**Do not proceed to Phase 2 without explicit approval.** Fixing a broken storyline here costs minutes; fixing it in Phase 3 costs hours.
|
|
228
|
+
|
|
229
|
+
**Persist the approved storyline.** After approval, call `artifact-create` with `type='note'` and a title like `Slides storyline — <talk title>`, storing the thesis, assertion list, and narrative choice. This gives the user a resumable checkpoint and makes the plan searchable in future sessions.
|
|
230
|
+
|
|
231
|
+
### Phase 1 Checklist
|
|
232
|
+
|
|
233
|
+
- [ ] Context Gate completed (workspace searched; source material confirmed or absence flagged)
|
|
234
|
+
- [ ] Consolidated intake completed (audience, length, venue, thesis, supporting claims, context material, constraints)
|
|
235
|
+
- [ ] One-sentence thesis is specific (not "we studied X")
|
|
236
|
+
- [ ] Every planned slide has an assertion-style title
|
|
237
|
+
- [ ] 2–3 narrative candidates were presented; user picked one
|
|
238
|
+
- [ ] STOP gate briefing surfaced assumptions and open questions
|
|
239
|
+
- [ ] User has approved the storyline
|
|
240
|
+
- [ ] Approved storyline persisted as a note artifact
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Phase 2: Skeleton
|
|
245
|
+
|
|
246
|
+
**Goal**: Translate the approved storyline into a Marp file where every slide exists but contains no visual content yet.
|
|
247
|
+
|
|
248
|
+
**Tools allowed**: Create the `.md` file with minimum front matter. Use the default theme. **No images, no CSS tuning, no colors.**
|
|
249
|
+
|
|
250
|
+
### Step 2.1 — Decide output location
|
|
251
|
+
|
|
252
|
+
Write the Marp source to `<workspace>/.research-pilot/artifacts/tool-output/slides/<slug>.md` (create the `slides/` subfolder if it does not exist). Using the project artifact tree means the deck lives alongside other session outputs and can be discovered later with `artifact-search`.
|
|
253
|
+
|
|
254
|
+
If the user has specified a different path, honor it — but mention this convention so they know where future decks will land by default.
|
|
255
|
+
|
|
256
|
+
### Step 2.2 — Minimum front matter
|
|
257
|
+
|
|
258
|
+
```markdown
|
|
259
|
+
---
|
|
260
|
+
marp: true
|
|
261
|
+
theme: default
|
|
262
|
+
paginate: true
|
|
263
|
+
math: mathjax
|
|
264
|
+
---
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Step 2.3 — One slide per assertion
|
|
268
|
+
|
|
269
|
+
For each approved assertion from Phase 1:
|
|
270
|
+
|
|
271
|
+
```markdown
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
# [Full assertion sentence from Phase 1]
|
|
275
|
+
|
|
276
|
+
> PLACEHOLDER: [one sentence describing what evidence goes here]
|
|
277
|
+
|
|
278
|
+
<!-- Speaker notes: key points to say aloud -->
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Step 2.4 — Add structural slides
|
|
282
|
+
|
|
283
|
+
- **Title slide** (1) — use `<!-- _class: lead -->` and `<!-- _paginate: false -->`
|
|
284
|
+
- **Outline slide** (1) — only if talk >20 min
|
|
285
|
+
- **Section dividers** (1 per major section) — `<!-- _class: lead -->`
|
|
286
|
+
- **Thank you / questions slide** (1)
|
|
287
|
+
- **Backup slides** (2–5) clearly marked for anticipated Q&A
|
|
288
|
+
|
|
289
|
+
### Step 2.5 — Check timing arithmetic
|
|
290
|
+
|
|
291
|
+
Standard pacing: **~1 minute per content slide**.
|
|
292
|
+
|
|
293
|
+
| Talk length | Content slides | Total incl. dividers |
|
|
294
|
+
|-------------|----------------|----------------------|
|
|
295
|
+
| 5 min | 5–7 | 6–8 |
|
|
296
|
+
| 10–12 min | 8–12 | 10–14 |
|
|
297
|
+
| 15–20 min | 13–18 | 16–22 |
|
|
298
|
+
| 25 min | 18–22 | 22–27 |
|
|
299
|
+
| 45–60 min (defense) | 30–45 | 40–55 |
|
|
300
|
+
|
|
301
|
+
If skeleton is 30% over or under target, fix it now.
|
|
302
|
+
|
|
303
|
+
### Step 2.6 — ★ STOP AND CONFIRM ★
|
|
304
|
+
|
|
305
|
+
Show the user the skeleton (titles + placeholders only). Ask:
|
|
306
|
+
|
|
307
|
+
- Does the logical flow from title to title still work when read in order?
|
|
308
|
+
- Is any slide doing too much or too little?
|
|
309
|
+
- Are there missing transitions?
|
|
310
|
+
|
|
311
|
+
Wait for approval before Phase 3.
|
|
312
|
+
|
|
313
|
+
### Phase 2 Checklist
|
|
314
|
+
|
|
315
|
+
- [ ] Skeleton file written under `.research-pilot/artifacts/tool-output/slides/` (or user-specified path)
|
|
316
|
+
- [ ] Every assertion has a slide
|
|
317
|
+
- [ ] Every slide has a placeholder describing what visual evidence goes there
|
|
318
|
+
- [ ] Slide count matches target time budget
|
|
319
|
+
- [ ] Section dividers, title, thank-you slides in place
|
|
320
|
+
- [ ] User has approved the skeleton
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Phase 3: Content
|
|
325
|
+
|
|
326
|
+
**Goal**: Replace every placeholder with actual visual evidence (figures, tables, equations) and concise supporting text.
|
|
327
|
+
|
|
328
|
+
**Tools allowed**: Embed figures, write text, build simple tables. **No theme/color polishing yet.**
|
|
329
|
+
|
|
330
|
+
### Step 3.1 — For each slide, decide evidence type
|
|
331
|
+
|
|
332
|
+
| Assertion claims… | Best evidence form |
|
|
333
|
+
|-------------------|-------------------|
|
|
334
|
+
| Quantitative comparison | Bar/line chart or table with bold winners |
|
|
335
|
+
| Structural/spatial concept | Schematic diagram or annotated figure |
|
|
336
|
+
| Procedural idea | Flowchart or numbered steps |
|
|
337
|
+
| Theoretical result | Equation with labeled terms |
|
|
338
|
+
| Qualitative contrast | Two-column before/after layout |
|
|
339
|
+
| Discovery / example | Representative image + caption |
|
|
340
|
+
|
|
341
|
+
### Step 3.2 — Source figures by priority (use project skills/tools)
|
|
342
|
+
|
|
343
|
+
1. **Existing publication figures** from the paper draft or prior slides — but simplify: remove panels, enlarge fonts, trim legends. Publication figures are too dense for slides.
|
|
344
|
+
2. **Fresh publication-quality figures** — delegate to project skills:
|
|
345
|
+
- For journal-style multi-panel plots → `load_skill('scientific-visualization')`
|
|
346
|
+
- For low-level custom plots → `load_skill('matplotlib')` or `load_skill('seaborn')`
|
|
347
|
+
- Export to `<workspace>/.research-pilot/artifacts/tool-output/slides/figures/` and embed with a relative path.
|
|
348
|
+
3. **Fresh data-driven numbers or charts** — if a claim needs a computation or re-plot the user doesn't have yet, call the `data-analyze` tool first; persist its output, then embed it.
|
|
349
|
+
4. **Schematics and concept diagrams** — call the `generate_diagram` tool (load `scientific-schematics` first for type-specific prompt guidance). Output format: PNG for final embed (recommended for slides — fixed, predictable visual), or `format: "svg"` when the author wants to hand-tweak labels / colors afterwards (writes a `.png` anchor sibling for diffing). Best quality requires `OPENAI_API_KEY`; without the key, SVG falls back to a chat-model-only path with reduced quality, or hand-write inline SVG using the Component Library below.
|
|
350
|
+
5. **Related-work / citation slides** — use the `literature-search` tool to gather references with proper metadata; pull BibTeX/DOIs into speaker notes or a References backup slide.
|
|
351
|
+
6. **Inline SVG / HTML components** — for metric cards, simple bar charts, timelines (see Component Library below).
|
|
352
|
+
|
|
353
|
+
### Step 3.3 — Follow one-idea-per-slide limits
|
|
354
|
+
|
|
355
|
+
Marp **silently clips** overflowing content. These are survival rules:
|
|
356
|
+
|
|
357
|
+
- Max 6 bullet points (prefer 3–4)
|
|
358
|
+
- Max 1 primary figure + ≤3 lines of supporting text
|
|
359
|
+
- Max 1 table with ≤5 rows and ≤5 columns
|
|
360
|
+
- Max 1 code block of ≤12 lines
|
|
361
|
+
- Body text never below 0.7em
|
|
362
|
+
|
|
363
|
+
If a slide violates these, **split it**. Never shrink text to fit.
|
|
364
|
+
|
|
365
|
+
### Step 3.4 — Less is more (reject filler content)
|
|
366
|
+
|
|
367
|
+
Every slide, bullet, figure, and icon must earn its place. Actively reject these filler patterns:
|
|
368
|
+
|
|
369
|
+
- **Stat slop** — numbers or metrics included because "slides need data," not because they support the assertion
|
|
370
|
+
- **Decorative icons** — small icons next to every bullet point that add no semantic meaning
|
|
371
|
+
- **Padding bullets** — expanding 3 real points into 5 to "fill the slide"
|
|
372
|
+
- **Restated titles** — a bullet that just rewrites the title in worse prose
|
|
373
|
+
- **Generic agenda slides** — "Outline: Intro → Method → Results → Conclusion" on a 15-min talk wastes 90 seconds
|
|
374
|
+
|
|
375
|
+
If a slide feels empty, fix it by **re-composing the layout** (larger figure, better whitespace, two-column split), never by inventing content. One thousand no's for every yes.
|
|
376
|
+
|
|
377
|
+
### Step 3.5 — Apply Mayer non-redundancy
|
|
378
|
+
|
|
379
|
+
Whatever you will say aloud must **NOT** also appear as on-screen text. On-screen text should only be:
|
|
380
|
+
|
|
381
|
+
- Key numerical values and labels
|
|
382
|
+
- Proper nouns and technical terms the audience might miss aurally
|
|
383
|
+
- The single-sentence takeaway reinforcing the title
|
|
384
|
+
|
|
385
|
+
Write spoken narration in speaker notes (HTML comments), not on the slide surface.
|
|
386
|
+
|
|
387
|
+
### Step 3.6 — Write the takeaway line
|
|
388
|
+
|
|
389
|
+
Every content slide needs a visible one-line takeaway that reinforces the title-assertion:
|
|
390
|
+
|
|
391
|
+
```markdown
|
|
392
|
+
# LEGO-xtal generates 1,741 new sp² allotropes from 25 starting structures
|
|
393
|
+
|
|
394
|
+

|
|
395
|
+
|
|
396
|
+
**A ~70× expansion of the known low-energy sp² carbon space** using only symmetry augmentation and descriptor-guided pre-relaxation.
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### Step 3.7 — ★ STOP AND CONFIRM ★
|
|
400
|
+
|
|
401
|
+
Render the deck locally and show the user. Like Phase 1, include assumptions and open questions alongside the draft:
|
|
402
|
+
|
|
403
|
+
**Deliverable:**
|
|
404
|
+
- Rendered Marp deck with figures and text filled in (HTML preview at minimum)
|
|
405
|
+
|
|
406
|
+
**Assumptions I made:**
|
|
407
|
+
- [e.g., "I picked the left panel of Figure 3 because it shows the main result most cleanly; flag if you'd prefer the combined panel."]
|
|
408
|
+
|
|
409
|
+
**Open questions:**
|
|
410
|
+
- [e.g., "Slide 7 needs a schematic I don't have — should I draw a placeholder or wait for you to provide one?"]
|
|
411
|
+
|
|
412
|
+
Ask the user to:
|
|
413
|
+
|
|
414
|
+
- Flip through and confirm each slide delivers on its title-assertion
|
|
415
|
+
- Flag any slide that feels too dense, too empty, or illogical
|
|
416
|
+
- Note any figure that needs to be replaced or redrawn
|
|
417
|
+
|
|
418
|
+
Wait for approval before Phase 4.
|
|
419
|
+
|
|
420
|
+
### Phase 3 Checklist
|
|
421
|
+
|
|
422
|
+
- [ ] Every slide has primary visual evidence
|
|
423
|
+
- [ ] No slide violates the one-idea limits
|
|
424
|
+
- [ ] No slide has more than ~30 English words (or ~50 CJK characters) of on-screen prose
|
|
425
|
+
- [ ] Every slide has a takeaway line
|
|
426
|
+
- [ ] Speaker notes exist for at least every results slide
|
|
427
|
+
- [ ] All embedded figures resolve (no broken links)
|
|
428
|
+
- [ ] User has reviewed the filled-in deck
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
## Phase 4: Polish
|
|
433
|
+
|
|
434
|
+
**Goal**: Apply consistent visual styling. **No content changes at this stage.** If content still needs changes, return to Phase 3.
|
|
435
|
+
|
|
436
|
+
### Step 4.1 — Choose and apply a theme
|
|
437
|
+
|
|
438
|
+
| Venue | Theme |
|
|
439
|
+
|-------|-------|
|
|
440
|
+
| Conference auditorium, invited talk | **Dark theme** |
|
|
441
|
+
| Lab meeting, classroom, well-lit room | **Light theme** |
|
|
442
|
+
| Print handouts needed | **Light theme** |
|
|
443
|
+
| Premium / keynote feel | **Dark theme** with single strong accent |
|
|
444
|
+
|
|
445
|
+
Paste the full CSS block from the Theme System section. **Do not invent a new theme unless specifically requested** — the provided themes are tuned for legibility.
|
|
446
|
+
|
|
447
|
+
### Step 4.2 — Enforce consistency
|
|
448
|
+
|
|
449
|
+
- **Font consistency** — one heading font, one body font, one monospace
|
|
450
|
+
- **Color consistency** — main + one accent. Semantic colors used the same way throughout.
|
|
451
|
+
- **Figure styling** — axis font size, line weight, legend placement consistent across charts
|
|
452
|
+
- **Spatial consistency** — titles, footers, pagination in same position everywhere
|
|
453
|
+
|
|
454
|
+
### Step 4.3 — Readability checks
|
|
455
|
+
|
|
456
|
+
- **Far-row test**: Zoom to 25%, squint. Anything unreadable is too small.
|
|
457
|
+
- **Print test**: Export PDF, view greyscale. Color-only distinctions should still work (add shape/bold).
|
|
458
|
+
- **Colorblind test**: Avoid red-green as sole distinguisher.
|
|
459
|
+
- **Projector test**: Body text at least `#666` on light or `#94a3b8` on dark.
|
|
460
|
+
|
|
461
|
+
### Step 4.4 — Add speaker notes and metadata
|
|
462
|
+
|
|
463
|
+
```markdown
|
|
464
|
+
<!-- Speaker note: Emphasize the 70× expansion. Pause after the number. Backup slide 3 has phonon validation if asked. -->
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Step 4.5 — Export
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
# HTML (best fidelity, use on presentation laptop)
|
|
471
|
+
npx @marp-team/marp-cli slides.md --html --allow-local-files
|
|
472
|
+
|
|
473
|
+
# PDF (backup + sharing) — ALWAYS export this too
|
|
474
|
+
npx @marp-team/marp-cli slides.md --pdf --allow-local-files
|
|
475
|
+
|
|
476
|
+
# PPTX (only if user will edit further in PowerPoint)
|
|
477
|
+
npx @marp-team/marp-cli slides.md --pptx --allow-local-files
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
**Always export HTML + PDF.** Projector failures are common; PDF is the universal fallback.
|
|
481
|
+
|
|
482
|
+
### Step 4.6 — Persist the final deliverable
|
|
483
|
+
|
|
484
|
+
Call `artifact-create` with `type='tool-output'`, title `Slides — <talk title>`, and the final Markdown content. Record the exported HTML/PDF paths in the artifact body so the user can find them later via `artifact-search`.
|
|
485
|
+
|
|
486
|
+
### Phase 4 Checklist
|
|
487
|
+
|
|
488
|
+
- [ ] Theme CSS applied consistently
|
|
489
|
+
- [ ] Fonts, colors, spacing consistent across all slides
|
|
490
|
+
- [ ] Far-row and print tests pass
|
|
491
|
+
- [ ] Speaker notes present for key slides
|
|
492
|
+
- [ ] HTML + PDF both exported
|
|
493
|
+
- [ ] Final deck persisted as a tool-output artifact
|
|
494
|
+
- [ ] User has the final deliverables
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
# REVISE MODE
|
|
499
|
+
|
|
500
|
+
**Goal**: Improve an existing deck without disturbing the user's intentional choices.
|
|
501
|
+
|
|
502
|
+
**Guiding principle — Respect the user's work.** The user has already made hundreds of decisions. Change only what's requested or clearly broken. Do not rewrite to match Claude's style preferences.
|
|
503
|
+
|
|
504
|
+
## Change-Size Classification
|
|
505
|
+
|
|
506
|
+
Classify the request before editing:
|
|
507
|
+
|
|
508
|
+
| Level | Meaning | Examples |
|
|
509
|
+
|-------|---------|----------|
|
|
510
|
+
| **L1 — Surface** | Typos, colors, rewordings, image resizing | "fix typos", "make accent green", "this figure too small" |
|
|
511
|
+
| **L2 — Local** | Rework one slide, swap a figure, tighten bullets | "rewrite slide 7", "replace figure on slide 12" |
|
|
512
|
+
| **L3 — Structural** | Reorder sections, add/remove slides, change narrative | "cut 5 min from the talk", "motivation should come after results" |
|
|
513
|
+
| **Vague** | "feels off", "middle is boring", "too dense" | Diagnose first, propose a plan |
|
|
514
|
+
|
|
515
|
+
Report which level you think applies before editing if it's anything beyond L1.
|
|
516
|
+
|
|
517
|
+
## Quick Diagnosis Checklist
|
|
518
|
+
|
|
519
|
+
When the user reports a problem but doesn't pinpoint it, run through this in order. Report findings before making edits.
|
|
520
|
+
|
|
521
|
+
**Structural level**
|
|
522
|
+
- [ ] Reading titles alone tells a coherent story?
|
|
523
|
+
- [ ] Slide count matches stated talk length (±20%)?
|
|
524
|
+
- [ ] Each section has a divider?
|
|
525
|
+
- [ ] Results slides outnumber background slides?
|
|
526
|
+
|
|
527
|
+
**Per-slide level (scan each content slide)**
|
|
528
|
+
- [ ] Title is an assertion (complete sentence with a claim)?
|
|
529
|
+
- [ ] Main visual evidence present and supports the title?
|
|
530
|
+
- [ ] Body text ≤30 English words (or ~50 CJK chars)?
|
|
531
|
+
- [ ] Takeaway line present?
|
|
532
|
+
- [ ] Not violating one-idea-per-slide limits (≤6 bullets, ≤1 primary figure)?
|
|
533
|
+
|
|
534
|
+
**Visual level**
|
|
535
|
+
- [ ] Fonts consistent throughout?
|
|
536
|
+
- [ ] One accent color used consistently?
|
|
537
|
+
- [ ] No content clipped at slide edges?
|
|
538
|
+
- [ ] Figures legible (axis labels readable)?
|
|
539
|
+
|
|
540
|
+
Flag any failing items. Let the user pick which to fix.
|
|
541
|
+
|
|
542
|
+
## Revise Mode Workflow
|
|
543
|
+
|
|
544
|
+
1. **Load and read** the existing `.md` file completely.
|
|
545
|
+
2. **Classify the request** (L1 / L2 / L3 / vague).
|
|
546
|
+
3. **If L3 or vague**: run diagnosis, propose a plan, wait for user confirmation.
|
|
547
|
+
4. **If L1 or L2 with specific targets**: execute directly.
|
|
548
|
+
5. **Use targeted edits** — not full-file rewrites. Full rewrites are a red flag that you are over-reaching.
|
|
549
|
+
6. **Report changes** as a compact, 1-indexed diff summary (e.g., "Slide 5: replaced figure; Slide 8: split into 8a + 8b").
|
|
550
|
+
7. **Do not polish unrelated slides** unless the user asked for a consistency pass.
|
|
551
|
+
|
|
552
|
+
## Common Revise Requests and How to Handle
|
|
553
|
+
|
|
554
|
+
| Request | Classification | Action |
|
|
555
|
+
|---------|---------------|--------|
|
|
556
|
+
| "Fix typos" | L1 | Scan all, fix, report count |
|
|
557
|
+
| "Change the accent color to green" | L1 | Update theme CSS only |
|
|
558
|
+
| "This figure is too small" | L2 | Adjust `w:` value, offer to simplify figure |
|
|
559
|
+
| "Rewrite slide 7's bullets" | L2 | Rewrite only slide 7, preserve style |
|
|
560
|
+
| "The middle feels too dense" | L2 vague | Diagnose first: flag overloaded slides, propose splits |
|
|
561
|
+
| "Add a slide about X" | L3 | Ask where it goes, what evidence it needs, confirm title |
|
|
562
|
+
| "Cut 5 minutes from the talk" | L3 | Identify cuttable slides, confirm before removing |
|
|
563
|
+
| "Reorganize so method comes before motivation" | L3 | Confirm the user really wants this (non-standard arc), then reorder |
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
# Reference Material (Shared by Both Modes)
|
|
568
|
+
|
|
569
|
+
## Marp Syntax Essentials
|
|
570
|
+
|
|
571
|
+
### Front matter
|
|
572
|
+
|
|
573
|
+
```markdown
|
|
574
|
+
---
|
|
575
|
+
marp: true
|
|
576
|
+
theme: default
|
|
577
|
+
paginate: true
|
|
578
|
+
math: mathjax
|
|
579
|
+
size: 16:9
|
|
580
|
+
style: |
|
|
581
|
+
/* CSS block — paste from Theme System below */
|
|
582
|
+
---
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
### Per-slide directives
|
|
586
|
+
|
|
587
|
+
```markdown
|
|
588
|
+
<!-- _class: lead --> # centered, title-like layout (this slide only)
|
|
589
|
+
<!-- _paginate: false --> # hide page number (this slide only)
|
|
590
|
+
<!-- _backgroundColor: #000 --> # override background (this slide only)
|
|
591
|
+
<!-- backgroundColor: #1a1a2e --> # set for this slide AND subsequent
|
|
592
|
+
<!-- header: "Section 2" --> # persistent header
|
|
593
|
+
<!-- footer: "Conf 2026" --> # persistent footer
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
### Images
|
|
597
|
+
|
|
598
|
+
```markdown
|
|
599
|
+
 # fixed width
|
|
600
|
+
 # fixed height
|
|
601
|
+
 # full background
|
|
602
|
+
 # split layout, image right 40%
|
|
603
|
+
 # split layout, image left 35%
|
|
604
|
+
 # fit without cropping
|
|
605
|
+
 # darkened
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### Math
|
|
609
|
+
|
|
610
|
+
```markdown
|
|
611
|
+
Inline: $E = mc^2$
|
|
612
|
+
|
|
613
|
+
Block:
|
|
614
|
+
$$
|
|
615
|
+
\mathcal{L} = \sum_i \ell(f(x_i), y_i) + \lambda \|w\|^2
|
|
616
|
+
$$
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
**Critical pitfall — math inside HTML containers**: Marp's MathJax/KaTeX plugin is a markdown-it tokenizer plugin. It can only render math that markdown-it actually tokenizes. Per CommonMark, content inside a **single-line** HTML block tag is treated as literal text and never re-parsed as Markdown, so the `$...$` never reaches the math plugin and prints as raw dollar signs in the PDF.
|
|
620
|
+
|
|
621
|
+
This fails silently — there is no warning, just literal `$` characters in the output. When you use layout components from the Inline Component Library (`<div class="cols">`, `<div class="card">`, two- / three-column grids, metric cards), you MUST use one of these patterns:
|
|
622
|
+
|
|
623
|
+
```html
|
|
624
|
+
<!-- ❌ BROKEN: math on same line as the <div> tag — will NOT render -->
|
|
625
|
+
<div class="card"><strong>$\max_\ell(\tau - t_\ell) \le S_{\max}$</strong></div>
|
|
626
|
+
|
|
627
|
+
<!-- ✅ FIX A: blank lines inside <div> force markdown-it to re-parse -->
|
|
628
|
+
<div class="card">
|
|
629
|
+
|
|
630
|
+
**$\max_\ell(\tau - t_\ell) \le S_{\max}$**
|
|
631
|
+
|
|
632
|
+
</div>
|
|
633
|
+
|
|
634
|
+
<!-- ✅ FIX B: put block math outside the container; keep only non-math content in the grid -->
|
|
635
|
+
<div class="card">
|
|
636
|
+
<div class="label">Invariant</div>
|
|
637
|
+
</div>
|
|
638
|
+
|
|
639
|
+
$$\max_\ell(\tau - t_\ell) \le S_{\max}$$
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
Rule: **whenever a slide has both a `<div>`-based layout and LaTeX math, write the math on its own line with a blank line separating it from the surrounding HTML tags.** Or write the whole slide in pure Markdown without grid containers — inline `$...$` and block `$$...$$` always render correctly in plain Markdown context.
|
|
643
|
+
|
|
644
|
+
Short exponents like `K=10⁻³` can be written with Unicode superscripts as a last resort in tight layouts, but lose LaTeX fidelity — only acceptable for trivial cases.
|
|
645
|
+
|
|
646
|
+
## Theme System
|
|
647
|
+
|
|
648
|
+
### Dark Theme (Conference / Invited Talks)
|
|
649
|
+
|
|
650
|
+
```yaml
|
|
651
|
+
style: |
|
|
652
|
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&family=JetBrains+Mono:wght@400&display=swap');
|
|
653
|
+
:root {
|
|
654
|
+
--accent: #60a5fa;
|
|
655
|
+
--dark: #0f172a;
|
|
656
|
+
--card: #1e293b;
|
|
657
|
+
--border: #334155;
|
|
658
|
+
--body: #94a3b8;
|
|
659
|
+
--label: #64748b;
|
|
660
|
+
--muted: #475569;
|
|
661
|
+
--light: #f1f5f9;
|
|
662
|
+
--green: #4ade80;
|
|
663
|
+
--red: #f87171;
|
|
664
|
+
--yellow: #fbbf24;
|
|
665
|
+
}
|
|
666
|
+
section {
|
|
667
|
+
background: var(--dark);
|
|
668
|
+
color: var(--light);
|
|
669
|
+
font-family: 'Inter', sans-serif;
|
|
670
|
+
font-weight: 300;
|
|
671
|
+
padding: 48px 64px;
|
|
672
|
+
}
|
|
673
|
+
section.lead {
|
|
674
|
+
display: flex;
|
|
675
|
+
flex-direction: column;
|
|
676
|
+
justify-content: center;
|
|
677
|
+
text-align: center;
|
|
678
|
+
}
|
|
679
|
+
h1 { font-weight: 700; font-size: 2.2em; color: var(--light); margin-bottom: 0.3em; line-height: 1.2; }
|
|
680
|
+
h2 { font-weight: 300; font-size: 1.3em; color: var(--body); margin-top: 0; }
|
|
681
|
+
h3 { font-weight: 600; font-size: 0.75em; color: var(--label); text-transform: uppercase; letter-spacing: 0.1em; }
|
|
682
|
+
p, li { color: var(--body); line-height: 1.6; font-size: 1em; }
|
|
683
|
+
strong { color: var(--light); font-weight: 600; }
|
|
684
|
+
em { color: var(--accent); font-style: normal; }
|
|
685
|
+
code { font-family: 'JetBrains Mono', monospace; font-size: 0.85em; background: var(--card); padding: 2px 6px; border-radius: 4px; }
|
|
686
|
+
pre { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
|
|
687
|
+
table { width: 100%; border-collapse: collapse; font-size: 0.85em; }
|
|
688
|
+
th { color: var(--label); font-weight: 600; text-transform: uppercase; font-size: 0.75em; letter-spacing: 0.05em; border-bottom: 1px solid var(--border); padding: 8px 12px; text-align: left; }
|
|
689
|
+
td { color: var(--body); border-bottom: 1px solid var(--border); padding: 8px 12px; }
|
|
690
|
+
a { color: var(--accent); text-decoration: none; }
|
|
691
|
+
blockquote { border-left: 3px solid var(--accent); padding-left: 16px; color: var(--muted); font-style: italic; }
|
|
692
|
+
footer { color: var(--muted); font-size: 0.6em; }
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
### Light Theme (Lab Meetings / Classrooms / Print)
|
|
696
|
+
|
|
697
|
+
```yaml
|
|
698
|
+
style: |
|
|
699
|
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&family=JetBrains+Mono:wght@400&display=swap');
|
|
700
|
+
:root {
|
|
701
|
+
--accent: #2563eb;
|
|
702
|
+
--dark: #f8fafc;
|
|
703
|
+
--card: #ffffff;
|
|
704
|
+
--border: #e2e8f0;
|
|
705
|
+
--body: #475569;
|
|
706
|
+
--label: #64748b;
|
|
707
|
+
--muted: #94a3b8;
|
|
708
|
+
--light: #0f172a;
|
|
709
|
+
--green: #16a34a;
|
|
710
|
+
--red: #dc2626;
|
|
711
|
+
--yellow: #ca8a04;
|
|
712
|
+
}
|
|
713
|
+
section {
|
|
714
|
+
background: var(--dark);
|
|
715
|
+
color: var(--light);
|
|
716
|
+
font-family: 'Inter', sans-serif;
|
|
717
|
+
font-weight: 300;
|
|
718
|
+
padding: 48px 64px;
|
|
719
|
+
}
|
|
720
|
+
section.lead {
|
|
721
|
+
display: flex;
|
|
722
|
+
flex-direction: column;
|
|
723
|
+
justify-content: center;
|
|
724
|
+
text-align: center;
|
|
725
|
+
}
|
|
726
|
+
h1 { font-weight: 700; font-size: 2.2em; color: var(--light); margin-bottom: 0.3em; line-height: 1.2; }
|
|
727
|
+
h2 { font-weight: 300; font-size: 1.3em; color: var(--body); margin-top: 0; }
|
|
728
|
+
h3 { font-weight: 600; font-size: 0.75em; color: var(--label); text-transform: uppercase; letter-spacing: 0.1em; }
|
|
729
|
+
p, li { color: var(--body); line-height: 1.6; font-size: 1em; }
|
|
730
|
+
strong { color: var(--light); font-weight: 600; }
|
|
731
|
+
em { color: var(--accent); font-style: normal; }
|
|
732
|
+
code { font-family: 'JetBrains Mono', monospace; font-size: 0.85em; background: var(--card); padding: 2px 6px; border-radius: 4px; border: 1px solid var(--border); }
|
|
733
|
+
pre { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
|
|
734
|
+
table { width: 100%; border-collapse: collapse; font-size: 0.85em; }
|
|
735
|
+
th { color: var(--label); font-weight: 600; text-transform: uppercase; font-size: 0.75em; letter-spacing: 0.05em; border-bottom: 2px solid var(--border); padding: 8px 12px; text-align: left; }
|
|
736
|
+
td { color: var(--body); border-bottom: 1px solid var(--border); padding: 8px 12px; }
|
|
737
|
+
a { color: var(--accent); text-decoration: none; }
|
|
738
|
+
blockquote { border-left: 3px solid var(--accent); padding-left: 16px; color: var(--muted); font-style: italic; }
|
|
739
|
+
footer { color: var(--label); font-size: 0.6em; }
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
### Recommended Font Pairings for Research
|
|
743
|
+
|
|
744
|
+
| Heading / Body | Best For | Notes |
|
|
745
|
+
|----------------|----------|-------|
|
|
746
|
+
| Inter 700 / Inter 300 | General research talks | Clean, highly legible, safe default |
|
|
747
|
+
| Outfit 800 / Raleway 200 | Data-heavy dashboards | High contrast weight difference |
|
|
748
|
+
| DM Serif Display / DM Sans 300 | Humanities, social science | Warmer, editorial feel |
|
|
749
|
+
| Space Grotesk 700 / IBM Plex Mono 300 | CS/Systems talks | Technical, monospace body for code-heavy content |
|
|
750
|
+
| Plus Jakarta Sans 800 / Plus Jakarta Sans 200 | Internal team presentations | Friendly, modern |
|
|
751
|
+
|
|
752
|
+
## Slide Templates
|
|
753
|
+
|
|
754
|
+
### Title slide
|
|
755
|
+
|
|
756
|
+
```markdown
|
|
757
|
+
<!-- _class: lead -->
|
|
758
|
+
<!-- _paginate: false -->
|
|
759
|
+
|
|
760
|
+
# Paper or Talk Title Here
|
|
761
|
+
## Subtitle or Key Finding in One Line
|
|
762
|
+
|
|
763
|
+
**Presenter Name**, Co-author, Co-author
|
|
764
|
+
*Affiliation — Conference / Venue, Date*
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
### Section divider
|
|
768
|
+
|
|
769
|
+
```markdown
|
|
770
|
+
<!-- _class: lead -->
|
|
771
|
+
<!-- _paginate: false -->
|
|
772
|
+
|
|
773
|
+
# Methodology
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
### Assertion-Evidence content slide (default)
|
|
777
|
+
|
|
778
|
+
```markdown
|
|
779
|
+
# LEGO-xtal generated 1,741 new sp² allotropes from 25 starting structures
|
|
780
|
+
|
|
781
|
+

|
|
782
|
+
|
|
783
|
+
**A ~70× expansion** of the known low-energy sp² carbon space, achieved without a single extra DFT calculation during generation.
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
### Two-column comparison
|
|
787
|
+
|
|
788
|
+
```markdown
|
|
789
|
+
# Pre-relaxation cuts optimization time by 10× versus pure energy-based search
|
|
790
|
+
|
|
791
|
+
<div style="display: flex; gap: 40px;">
|
|
792
|
+
<div style="flex: 1;">
|
|
793
|
+
|
|
794
|
+
### Without pre-relaxation
|
|
795
|
+
- Random init → MACE optimization
|
|
796
|
+
- ~120 min per 1k samples
|
|
797
|
+
- Many stuck in bad minima
|
|
798
|
+
|
|
799
|
+
</div>
|
|
800
|
+
<div style="flex: 1;">
|
|
801
|
+
|
|
802
|
+
### With SO(3) pre-relaxation
|
|
803
|
+
- Descriptor-guided warm start
|
|
804
|
+
- ~9.5 min per 1k samples
|
|
805
|
+
- Higher fraction reach sp² geometry
|
|
806
|
+
|
|
807
|
+
</div>
|
|
808
|
+
</div>
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
### Data table slide
|
|
812
|
+
|
|
813
|
+
```markdown
|
|
814
|
+
# Our model outperforms all baselines on three metrics
|
|
815
|
+
|
|
816
|
+
| Method | Accuracy | Latency (ms) | Memory (GB) |
|
|
817
|
+
|--------|----------|--------------|-------------|
|
|
818
|
+
| Baseline A | 78.2% | 120 | 4.2 |
|
|
819
|
+
| Baseline B | 81.5% | 95 | 6.1 |
|
|
820
|
+
| **Ours** | **86.3%** | **72** | **3.8** |
|
|
821
|
+
|
|
822
|
+
**Bold = best in column.** Averaged over 5 runs, all std < 0.3%.
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
### Equation slide
|
|
826
|
+
|
|
827
|
+
```markdown
|
|
828
|
+
# Our training objective combines supervised and contrastive losses
|
|
829
|
+
|
|
830
|
+
$$
|
|
831
|
+
\mathcal{L} = \underbrace{\mathcal{L}_{\text{CE}}(f(x), y)}_{\text{supervised}} + \lambda \underbrace{\mathcal{L}_{\text{CL}}(z_i, z_j)}_{\text{contrastive}}
|
|
832
|
+
$$
|
|
833
|
+
|
|
834
|
+
- $\lambda = 0.1$ chosen by validation
|
|
835
|
+
- $z_i, z_j$: augmented views of same input
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
### Thank you / questions
|
|
839
|
+
|
|
840
|
+
```markdown
|
|
841
|
+
<!-- _class: lead -->
|
|
842
|
+
<!-- _paginate: false -->
|
|
843
|
+
|
|
844
|
+
# Thank You
|
|
845
|
+
|
|
846
|
+
**Questions?**
|
|
847
|
+
|
|
848
|
+
your.email@university.edu
|
|
849
|
+
Paper: arxiv.org/abs/xxxx.xxxxx
|
|
850
|
+
Code: github.com/yourname/project
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
## Inline Component Library
|
|
854
|
+
|
|
855
|
+
### Metric cards
|
|
856
|
+
|
|
857
|
+
```html
|
|
858
|
+
<div style="display: flex; gap: 24px; margin-top: 24px;">
|
|
859
|
+
<div style="flex: 1; background: var(--card); border: 1px solid var(--border); border-top: 3px solid var(--accent); border-radius: 8px; padding: 20px;">
|
|
860
|
+
<div style="color: var(--label); font-size: 0.7em; text-transform: uppercase; letter-spacing: 0.1em;">New structures</div>
|
|
861
|
+
<div style="font-size: 2.2em; font-weight: 700; color: var(--light); margin: 4px 0;">1,741</div>
|
|
862
|
+
<div style="color: var(--green); font-size: 0.8em;">70× vs training</div>
|
|
863
|
+
</div>
|
|
864
|
+
</div>
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
### Simple bar chart (inline SVG)
|
|
868
|
+
|
|
869
|
+
```html
|
|
870
|
+
<svg viewBox="0 0 500 200" style="width: 100%; max-width: 600px; margin: 20px auto; display: block;">
|
|
871
|
+
<line x1="60" y1="170" x2="480" y2="170" stroke="var(--border)" stroke-width="1"/>
|
|
872
|
+
<rect x="80" y="90" width="60" height="80" fill="var(--muted)" rx="4"/>
|
|
873
|
+
<rect x="180" y="60" width="60" height="110" fill="var(--muted)" rx="4"/>
|
|
874
|
+
<rect x="280" y="30" width="60" height="140" fill="var(--accent)" rx="4"/>
|
|
875
|
+
<text x="110" y="190" fill="var(--label)" font-size="12" text-anchor="middle">Baseline A</text>
|
|
876
|
+
<text x="210" y="190" fill="var(--label)" font-size="12" text-anchor="middle">Baseline B</text>
|
|
877
|
+
<text x="310" y="190" fill="var(--light)" font-size="12" text-anchor="middle" font-weight="600">Ours</text>
|
|
878
|
+
<text x="110" y="82" fill="var(--body)" font-size="12" text-anchor="middle">78.2%</text>
|
|
879
|
+
<text x="210" y="52" fill="var(--body)" font-size="12" text-anchor="middle">81.5%</text>
|
|
880
|
+
<text x="310" y="22" fill="var(--accent)" font-size="13" text-anchor="middle" font-weight="600">86.3%</text>
|
|
881
|
+
</svg>
|
|
882
|
+
```
|
|
883
|
+
|
|
884
|
+
## Common Failure Modes
|
|
885
|
+
|
|
886
|
+
| Symptom | Root cause | Fix |
|
|
887
|
+
|---------|-----------|-----|
|
|
888
|
+
| Audience asks "what was the point?" after talk | Phase 1 was skipped; no clear thesis | Return to Phase 1 |
|
|
889
|
+
| Slides look busy and cramped | Phase 3 violated one-idea limits | Split overloaded slides |
|
|
890
|
+
| Listener got lost in the middle | Missing transitions; assertion chain has gaps | Re-read titles in order |
|
|
891
|
+
| Figures illegible from back row | Used publication figures directly | Re-export at slide sizes using `scientific-visualization` |
|
|
892
|
+
| Content overflows and gets clipped | Marp silent-clipping | Visual preview every slide |
|
|
893
|
+
| Polish consumed all the time | Started Phase 4 before content stable | No visual work until content approved |
|
|
894
|
+
| Math renders as literal `$...$` in PDF | `$...$` is inside a single-line HTML block tag (e.g., `<div class="card">...$x$...</div>`), so markdown-it never tokenizes it | Add blank lines inside the `<div>` around the math, OR move block `$$...$$` outside the container. See Math section for the canonical fix. |
|
|
895
|
+
|
|
896
|
+
## Export Reference
|
|
897
|
+
|
|
898
|
+
```bash
|
|
899
|
+
# Live preview during authoring
|
|
900
|
+
npx @marp-team/marp-cli slides.md --watch --html --allow-local-files
|
|
901
|
+
|
|
902
|
+
# Final HTML
|
|
903
|
+
npx @marp-team/marp-cli slides.md --html --allow-local-files
|
|
904
|
+
|
|
905
|
+
# PDF backup — ALWAYS produce this
|
|
906
|
+
npx @marp-team/marp-cli slides.md --pdf --allow-local-files
|
|
907
|
+
|
|
908
|
+
# PPTX (only if editing further in PowerPoint)
|
|
909
|
+
npx @marp-team/marp-cli slides.md --pptx --allow-local-files
|
|
910
|
+
```
|
|
911
|
+
|
|
912
|
+
## Integration with Other Skills and Tools
|
|
913
|
+
|
|
914
|
+
| Task | Combine with |
|
|
915
|
+
|------|-------------|
|
|
916
|
+
| Publication-quality figures | `scientific-visualization` → PNG/SVG → embed |
|
|
917
|
+
| Custom low-level plots | `matplotlib` or `seaborn` → PNG/SVG → embed |
|
|
918
|
+
| Diagrams and schematics | `scientific-schematics` → SVG → embed |
|
|
919
|
+
| Convert paper draft → talk | `convert-document` tool on PDF/DOCX → extract assertions in Phase 1 |
|
|
920
|
+
| Fresh data-driven numbers | `data-analyze` tool → feed results into Phase 3 |
|
|
921
|
+
| Related-work / references | `literature-search` tool → populate References backup slide; also used as quick tier-2 context scan in Context Gate |
|
|
922
|
+
| Search workspace for prior work | `artifact-search` on `papers`/`notes` during Context Gate (tier 1) |
|
|
923
|
+
| Paper knowledge base lookups | `wiki_search` / `wiki_get` / `wiki_coverage` / `wiki_neighbors` / `wiki_source` during Context Gate (tier 1) |
|
|
924
|
+
| Long-lived user preferences (venues, co-authors, style) | Read `.research-pilot/memory/MEMORY.md` + linked files during Context Gate (tier 1) |
|
|
925
|
+
| Online fill-ins (venue CFP, keynote examples) | `web_search` / `web_fetch` as tier-3 fallback only |
|
|
926
|
+
| Persist storyline and final deck | `artifact-create` with `type='note'` (Phase 1) and `type='tool-output'` (Phase 4) |
|
|
927
|
+
| Sister skill for lectures | `teaching-marp-slides` — use for classroom/course material |
|
|
928
|
+
|
|
929
|
+
---
|
|
930
|
+
|
|
931
|
+
## Final Reminder
|
|
932
|
+
|
|
933
|
+
Slide quality is set in Phase 1 (storyline) and by the user's own dry run after delivery. **A deck with a weak thesis and beautiful visuals loses to a deck with a sharp thesis and plain visuals — every time.** In Revise Mode, respect the user's existing choices: change only what's requested or clearly broken.
|