Academic Slides Iterative
Build research-talk Beamer decks through a four-phase loop:
source → content → form → fact-drift, with a self-critic gate at each
phase. Every slide carries exactly one concept, expressed as a flowchart,
code block, table, or I-O example — not as a wall of prose.
The deck itself is lean: keywords + figures, captions shrunk to
one-liners. The depth lives in a companion markdown the speaker reads
off-stage.
When to use
- User is preparing an implementation walkthrough, research talk, thesis
defense, lab meeting, or weekly research update and wants a polished
Beamer deck.
- User explicitly wants "one concept per slide" / "minimum prose" / "flowchart
and code, not bullet lists" / "두괄식" / "lead with conclusion".
- User wants the slides to actually reflect their code — function names
and real data examples — rather than generic bullet points.
- User wants to iterate until clipping / overflow / arrow overlap / stale
claim issues are all resolved.
- User wants both (a) a lean deck and (b) a companion prose document with
deeper explanations.
Non-goals
- Does not generate AI images (no external renders).
- Does not write survey papers or long-form manuscripts (see
academic-latex-pipeline).
- Does not target PowerPoint (pure LaTeX Beamer).
Phase 0 — gather grounded source material
Before writing any slide, collect concrete artefacts the talk needs to
reference.
- Read the user's intent message verbatim. Extract which acts / parts
they want covered.
- Read the code / data the talk is about. For every claim that will land
on a slide, open the actual file and cite
path:line in a scratch
note. A scratch note reference is private to the author; slides
themselves usually do not show file:line (see Phase 1 rule 8).
- If the talk cites experimental numbers, load the JSON logs and extract
the exact counts. Never paraphrase a number.
- If the talk cites function signatures or code bodies, copy them
verbatim from the source.
- If real example prompts / skills / responses exist in run artefacts,
pull at least 3 concrete examples and decide which diversity axis you
want to show.
- Seed vs agent-discovered check. If the example is a skill / prompt /
hypothesis that could have come from a hard-coded seed library or
prompt scaffold, verify its origin before calling it "what the agent
did". A slide that says "look at this skill the agent found" but shows
a seed is a factual error. Grep the seed files (e.g.,
seed_library.py,
initial_goals.json) and exclude any example found there.
Write the findings to slides_source_notes.md alongside the eventual
.tex. Every slide you later draft must cite back to a source note entry.
Phase 1 — insight-first prose outline (content gate)
Produce a Markdown outline where each slide is a heading with ≤ 80 words
of prose describing the one idea, the supporting artefact, and the
takeaway sentence. Do not start LaTeX until this outline passes the
self-critic gate below.
Mandatory structural skeleton
The outline must start with a 두괄식 TL;DR slide (slide 2, right
after title) shaped as three pillars:
[added since <baseline>] — what mechanisms are new
[worked] — what measurable effect they had
[missing] — what is still failing, honestly
Paper-digest style: the three pillars chain together as a one-sentence
narrative ("before X → added Y → got Z → still missing W"). The
baseline can be a commit hash ("since Friday's commit 1bcf2b5"), a
previous release, or a described prior state.
Body slides should be sequenced:
- Title
- TL;DR (the three-pillar slide)
- Structural overview (per-turn loop / phases / architecture)
- Module or component maps
- Per-module deep-dive slides, each with one real I-O example
- "What worked" — headline structural numbers
- "What is missing" — the honest gap
- Minimal fixes (not new architecture)
- Appendix slides — real traces, time series, lifecycle tables
Per-slide outline template
### Slide N — <title>
*One concept:* <one sentence>
*Artefact:* <flowchart | verbatim code | table | example box>
*Source:* <file:line or run JSON path (private — do not print on slide)>
*Takeaway sentence:* <one sentence the speaker will say>
Phase-1 self-critic gate
Loop the following checks until all pass:
- One concept per slide. If a slide's one concept line reads like
two ideas joined by "and", split or drop the second idea.
- Source grounded. Every slide must name a real file, line, run
namespace, or JSON path in the scratch note. "In the world model" is
not a source.
- Takeaway readable alone. If the speaker's takeaway needs the
artefact to make sense, rewrite the sentence to stand alone.
- 두괄식 TL;DR present. Slide 2 is the three-pillar
added/worked/missing slide. No "overview" / "agenda" filler slides
before it.
- No filler slides. No "what this talk contributes" / "conclusion"
/ "acknowledgements" slides unless the user explicitly asked — they
usually belong in the talk, not the slides.
- No fake taxonomies. No five-kind / taxonomy slides if the
implementation does not meaningfully split on them. Show flat lists
of real examples instead.
- Real examples over illustrations. If the talk is about a system
that has produced actual artefacts (skills, prompts, run responses),
the slide must show a real one — not a made-up one.
- Abstract on the slide, concrete in the companion. The slide body
itself should describe principles, not file paths / line numbers /
rev labels / plan codes. These belong in the companion talking-points
markdown. Exception: a short \texttt{path/file.py} citation on a
side-note for a trace slide is acceptable.
- Seeds excluded from "agent did X" slides. Any example framed as
"what the agent discovered" must not be a hard-coded seed. Verify via
grep of seed files before inclusion.
Only when all nine checks pass, proceed to Phase 2.
Phase 2 — translate to Beamer, with a render-verify loop
Per-slide generation rules
- Use Metropolis theme:
\usetheme{metropolis}. Aspect ratio 16:9.
- Load
booktabs, fancyvrb, tikz, and the TikZ libraries
positioning, arrows.meta, shapes, shapes.geometric, calc, fit, backgrounds.
- A slide is at most one of:
- a TikZ flowchart
- a
\begin{Verbatim} block with the real code / prompt / skill
- a
booktabs table with ≤ 6 rows
- a single labelled I-O box with input on top, output below
- Minimum font in code blocks:
\scriptsize. Drop to \tiny only if
the code exceeds 16 lines.
- Slide captions ≤ 2 short sentences. Delete adverbs and hedges. If a
caption runs > 2 sentences, either move content to the companion
markdown or split the slide.
- Titles use sentence case, no emoji.
- Every TikZ diagram is wrapped in
\resizebox{0.98\textwidth}{!}{ ... } or
\resizebox{!}{0.8\textheight}{ ... }.
- Arrows use
\tikzset{arr/.style={-{Latex[length=1.6mm]}, thick}}.
- Cross-module / long-range TikZ links route below (or above) the
boxes through explicit coordinate via-points. Never bend through the
centre of a labelled box.
- When two boxes may end up horizontally overlapping (common when you
place two memory / mem-L / mem-R boxes under a module row), prefer a
single wide bar spanning the full width instead.
Render-verify loop
After every compile:
- Run
pdflatex -interaction=nonstopmode twice. Record the return code.
- Grep the log for
Overfull .* too wide, Overfull .* too high,
LaTeX Error, Undefined control sequence.
- Render each page to PNG (via
pdftoppm -r 110) and visually inspect:
a. no text is clipped at the slide edge
b. arrows terminate on box borders, not through other boxes
c. arrows do not land in empty space next to a box
d. table columns do not run off the page
e. verbatim blocks are not cut off at bottom
- For every issue found, record
slide N : <issue> in a scratch list.
- Apply the smallest fix that removes the issue:
- horizontal clipping → wrap TikZ in
\resizebox{0.98\textwidth}{!}
- vertical overflow → shrink fontsize one step or split the slide
- arrow crossing a box → route via explicit coordinate below the row
- arrow hitting empty space → attach to
(node.south) -- (node.south |- target.north) patterns
- two mem boxes overlapping → collapse into one wide bar
- title with underscores rendering wrong →
\texttt{\_underscored\_}
- Recompile and loop until all five visual checks pass on every page.
Exit the loop only when:
- every
pdflatex pass exits with RC = 0
- no
LaTeX Error or Undefined control sequence in the log
- overflow warnings are either absent or explicitly within the title page
frame (Metropolis reports a known cosmetic ~15 pt vbox)
- visual inspection of every page found no clipped / overlapping / badly
aligned content
Phase 3 — fact-drift audit (re-ground against live code)
After Phase 2 closes, the deck is visually correct but may contain
stale claims. Research code moves fast; a claim that was true when the
outline was drafted may be false an hour later. Run this phase before
pushing.
Audit each slide against the current code:
- For every slide that names a mechanism ("X is blocked by whitelist"),
grep the current source. If the mechanism has been relaxed / renamed /
moved, update the slide.
- For every slide that says "the agent does not X" or "feature X is
missing", grep for
X in the codebase. If the feature is actually
wired end-to-end but silently under-used at runtime, rewrite the
slide as "infrastructure exists but unused", not "missing".
- For every numeric claim, re-read the JSON source (planner_state.json,
world_model.json, etc.) and confirm the number has not shifted. If a
newer run has a different number, prefer the newer one and name the
run namespace in the companion markdown.
- When an external critic (another agent, a reviewer) challenges a
claim, do not simply accept or reject. Open the cited file, confirm
or refute with actual lines, and amend the slide accordingly. Always
write the amended framing so it survives the next drift too.
Companion markdown (talking points)
Produce alongside the .tex a <deck>_talking_points.md that:
- Opens with a 3-line TL;DR matching slide 2's three pillars
- Has top-level sections for: Before state, Additions, Measured effects,
Honest remaining gap, Minimal fixes
- Includes a "Slide ↔ section roadmap" table near the end: one row
per slide with (slide number, one-line message, which section carries
the deep version)
- Adds a time budget block: e.g., "For a 20-minute talk, spend 2 min
on TL;DR, 5 min on structure, 8 min on module examples, 3 min on
results-and-gap, 2 min on fixes; appendix only in Q&A"
- Gives per-slide speaker script with "what to show / what to say / how
it is implemented" for each slide
- Lists 2–4 expected questions with draft answers
The companion markdown is the place for file paths, line numbers, rev
labels, and long prose. The slides stay abstract; the markdown is concrete.
Convert the markdown to a PDF via scripts/md2pdf.py (weasyprint + Korean
CJK fonts baked in).
Phase 4 — push (only when the user asks)
When the user asks, push to:
- git (if a repo is available locally or via
gh): commit with a
descriptive message that cites which slides changed and why, then
git push.
- Hugging Face datasets (if
hf auth whoami succeeds): upload the
.tex, .pdf, and companion .md and .pdf.
Always return both URLs to the user.
Paper-digest-style principle
Borrowing from the paper-digest skill: every slide and every sentence
should answer "why does this matter?" before "what does it do?".
Pair every module with the motivation that explains its existence.
Chain cause-and-effect explicitly: "we added X because Y; the
consequence was Z". The slides carry the chain compressed; the
companion markdown carries it in full.
Abstract principles over file:line: on the slide say
"Trust gate: simulator must earn accuracy before driving real actions",
not "Trust gate: planner.py:220-231 checks transition_accuracy >= gate_threshold". Move the latter into the companion.
Supporting files
references/style_guide.md — concrete examples of the "one concept,
one artefact" rule with good vs bad slide pairs.
references/tikz_recipes.md — proven TikZ patterns for decision
flowcharts, module maps with via-points, and commit loops.
references/critic_checklist.md — the Phase-1 and Phase-3 critic
gates as a one-page checklist.
scripts/render_and_check.sh — the compile + overfull-grep + page
count helper used in the render-verify loop.
scripts/md2pdf.py — companion markdown → PDF converter (weasyprint,
Noto Sans CJK KR + Noto Sans Mono CJK KR, palette matching the deck).
1---2name: academic-slides-iterative3description: Build academic Beamer slide decks through a four-phase iterative loop: (0) gather grounded source material, (1) insight-first prose outline with self-critic, (2) LaTeX render + visual verification, (3) fact-drift re-audit against live code. Every slide carries exactly one concept as a flowchart / code block / table / I-O example — never a prose bullet list. The deck itself is lean (keywords + figures); a companion talking-points markdown carries the depth. Leads with a TL;DR slide framed as "since <baseline>: [added] / [worked] / [missing]". Seeds vs agent-discovered examples are always distinguished. Matches Metropolis Beamer style, no emojis, minimum prose, flowcharts / verbatim boxes / I-O structure preferred over bullet lists. Paper-digest-style principle: explain WHY it matters at an abstract level, not WHAT each file/line does — but numbers and example payloads must be verbatim. MANDATORY TRIGGERS: academic slides, iterative slides, research talk deck, Beamer presentation, one concept per slide, impleme4license: MIT license5---67# Academic Slides Iterative89Build research-talk Beamer decks through a **four-phase loop**:10**source → content → form → fact-drift**, with a self-critic gate at each11phase. Every slide carries exactly one concept, expressed as a flowchart,12code block, table, or I-O example — not as a wall of prose.1314The deck itself is **lean**: keywords + figures, captions shrunk to15one-liners. The depth lives in a **companion markdown** the speaker reads16off-stage.1718## When to use1920- User is preparing an implementation walkthrough, research talk, thesis21 defense, lab meeting, or weekly research update and wants a polished22 Beamer deck.23- User explicitly wants "one concept per slide" / "minimum prose" / "flowchart24 and code, not bullet lists" / "두괄식" / "lead with conclusion".25- User wants the slides to actually reflect their code — function names26 and real data examples — rather than generic bullet points.27- User wants to iterate until clipping / overflow / arrow overlap / stale28 claim issues are all resolved.29- User wants both (a) a lean deck and (b) a companion prose document with30 deeper explanations.3132## Non-goals3334- Does not generate AI images (no external renders).35- Does not write survey papers or long-form manuscripts (see36 `academic-latex-pipeline`).37- Does not target PowerPoint (pure LaTeX Beamer).3839---4041## Phase 0 — gather grounded source material4243Before writing any slide, collect concrete artefacts the talk needs to44reference.45461. Read the user's intent message verbatim. Extract which acts / parts47 they want covered.482. Read the code / data the talk is about. For every claim that will land49 on a slide, open the actual file and cite `path:line` in a scratch50 note. A scratch note reference is private to the author; **slides51 themselves usually do not show file:line** (see Phase 1 rule 8).523. If the talk cites experimental numbers, load the JSON logs and extract53 the exact counts. Never paraphrase a number.544. If the talk cites function signatures or code bodies, copy them55 verbatim from the source.565. If real example prompts / skills / responses exist in run artefacts,57 pull at least 3 concrete examples and decide which diversity axis you58 want to show.596. **Seed vs agent-discovered check.** If the example is a skill / prompt /60 hypothesis that could have come from a hard-coded seed library or61 prompt scaffold, verify its origin before calling it "what the agent62 did". A slide that says "look at this skill the agent found" but shows63 a seed is a factual error. Grep the seed files (e.g., `seed_library.py`,64 `initial_goals.json`) and exclude any example found there.6566Write the findings to `slides_source_notes.md` alongside the eventual67`.tex`. Every slide you later draft must cite back to a source note entry.6869---7071## Phase 1 — insight-first prose outline (content gate)7273Produce a Markdown outline where each slide is a heading with ≤ 80 words74of prose describing the one idea, the supporting artefact, and the75takeaway sentence. **Do not start LaTeX until this outline passes the76self-critic gate below.**7778### Mandatory structural skeleton7980The outline must start with a **두괄식 TL;DR slide** (slide 2, right81after title) shaped as three pillars:8283- `[added since <baseline>]` — what mechanisms are new84- `[worked]` — what measurable effect they had85- `[missing]` — what is still failing, honestly8687Paper-digest style: the three pillars chain together as a **one-sentence88narrative** ("before X → added Y → got Z → still missing W"). The89baseline can be a commit hash ("since Friday's commit 1bcf2b5"), a90previous release, or a described prior state.9192Body slides should be sequenced:93941. Title952. **TL;DR** (the three-pillar slide)963. Structural overview (per-turn loop / phases / architecture)974. Module or component maps985. Per-module deep-dive slides, each with one real I-O example996. "What worked" — headline structural numbers1007. "What is missing" — the honest gap1018. Minimal fixes (not new architecture)1029. Appendix slides — real traces, time series, lifecycle tables103104### Per-slide outline template105106```markdown107### Slide N — <title>108*One concept:* <one sentence>109*Artefact:* <flowchart | verbatim code | table | example box>110*Source:* <file:line or run JSON path (private — do not print on slide)>111*Takeaway sentence:* <one sentence the speaker will say>112```113114### Phase-1 self-critic gate115116Loop the following checks until all pass:1171181. **One concept per slide.** If a slide's *one concept* line reads like119 two ideas joined by "and", split or drop the second idea.1202. **Source grounded.** Every slide must name a real file, line, run121 namespace, or JSON path in the scratch note. "In the world model" is122 not a source.1233. **Takeaway readable alone.** If the speaker's takeaway needs the124 artefact to make sense, rewrite the sentence to stand alone.1254. **두괄식 TL;DR present.** Slide 2 is the three-pillar126 added/worked/missing slide. No "overview" / "agenda" filler slides127 before it.1285. **No filler slides.** No "what this talk contributes" / "conclusion"129 / "acknowledgements" slides unless the user explicitly asked — they130 usually belong in the talk, not the slides.1316. **No fake taxonomies.** No five-kind / taxonomy slides if the132 implementation does not meaningfully split on them. Show flat lists133 of real examples instead.1347. **Real examples over illustrations.** If the talk is about a system135 that has produced actual artefacts (skills, prompts, run responses),136 the slide must show a real one — not a made-up one.1378. **Abstract on the slide, concrete in the companion.** The slide body138 itself should describe principles, not file paths / line numbers /139 rev labels / plan codes. These belong in the companion talking-points140 markdown. Exception: a short \texttt{path/file.py} citation on a141 side-note for a trace slide is acceptable.1429. **Seeds excluded from "agent did X" slides.** Any example framed as143 "what the agent discovered" must not be a hard-coded seed. Verify via144 grep of seed files before inclusion.145146Only when all nine checks pass, proceed to Phase 2.147148---149150## Phase 2 — translate to Beamer, with a render-verify loop151152### Per-slide generation rules153154- Use Metropolis theme: `\usetheme{metropolis}`. Aspect ratio 16:9.155- Load `booktabs`, `fancyvrb`, `tikz`, and the TikZ libraries156 `positioning, arrows.meta, shapes, shapes.geometric, calc, fit,157 backgrounds`.158- A slide is at most one of:159 - a TikZ flowchart160 - a `\begin{Verbatim}` block with the real code / prompt / skill161 - a `booktabs` table with ≤ 6 rows162 - a single labelled I-O box with input on top, output below163- Minimum font in code blocks: `\scriptsize`. Drop to `\tiny` only if164 the code exceeds 16 lines.165- Slide captions ≤ 2 short sentences. Delete adverbs and hedges. If a166 caption runs > 2 sentences, either move content to the companion167 markdown or split the slide.168- Titles use sentence case, no emoji.169- Every TikZ diagram is wrapped in170 `\resizebox{0.98\textwidth}{!}{ ... }` or171 `\resizebox{!}{0.8\textheight}{ ... }`.172- Arrows use `\tikzset{arr/.style={-{Latex[length=1.6mm]}, thick}}`.173- Cross-module / long-range TikZ links route **below** (or above) the174 boxes through explicit coordinate via-points. Never bend through the175 centre of a labelled box.176- When two boxes may end up horizontally overlapping (common when you177 place two memory / mem-L / mem-R boxes under a module row), prefer a178 **single wide bar** spanning the full width instead.179180### Render-verify loop181182After every compile:1831841. Run `pdflatex -interaction=nonstopmode` twice. Record the return code.1852. Grep the log for `Overfull .* too wide`, `Overfull .* too high`,186 `LaTeX Error`, `Undefined control sequence`.1873. Render each page to PNG (via `pdftoppm -r 110`) and visually inspect:188 a. no text is clipped at the slide edge189 b. arrows terminate on box borders, not through other boxes190 c. arrows do not land in empty space next to a box191 d. table columns do not run off the page192 e. verbatim blocks are not cut off at bottom1934. For every issue found, record `slide N : <issue>` in a scratch list.1945. Apply the smallest fix that removes the issue:195 - horizontal clipping → wrap TikZ in `\resizebox{0.98\textwidth}{!}`196 - vertical overflow → shrink fontsize one step or split the slide197 - arrow crossing a box → route via explicit coordinate below the row198 - arrow hitting empty space → attach to `(node.south) -- (node.south199 |- target.north)` patterns200 - two mem boxes overlapping → collapse into one wide bar201 - title with underscores rendering wrong → `\texttt{\_underscored\_}`2026. Recompile and loop until all five visual checks pass on every page.203204Exit the loop only when:205206- every `pdflatex` pass exits with `RC = 0`207- no `LaTeX Error` or `Undefined control sequence` in the log208- overflow warnings are either absent or explicitly within the title page209 frame (Metropolis reports a known cosmetic ~15 pt vbox)210- visual inspection of every page found no clipped / overlapping / badly211 aligned content212213---214215## Phase 3 — fact-drift audit (re-ground against live code)216217After Phase 2 closes, the deck is visually correct but may contain218stale claims. Research code moves fast; a claim that was true when the219outline was drafted may be false an hour later. Run this phase **before**220pushing.221222Audit each slide against the current code:2232241. For every slide that names a mechanism ("X is blocked by whitelist"),225 grep the current source. If the mechanism has been relaxed / renamed /226 moved, update the slide.2272. For every slide that says "the agent does not X" or "feature X is228 missing", grep for `X` in the codebase. If the feature is actually229 wired end-to-end but silently under-used at runtime, rewrite the230 slide as **"infrastructure exists but unused"**, not "missing".2313. For every numeric claim, re-read the JSON source (planner_state.json,232 world_model.json, etc.) and confirm the number has not shifted. If a233 newer run has a different number, prefer the newer one and name the234 run namespace in the companion markdown.2354. When an external critic (another agent, a reviewer) challenges a236 claim, do not simply accept or reject. Open the cited file, confirm237 or refute with actual lines, and amend the slide accordingly. Always238 write the amended framing so it survives the next drift too.239240### Companion markdown (talking points)241242Produce alongside the `.tex` a `<deck>_talking_points.md` that:243244- Opens with a 3-line TL;DR matching slide 2's three pillars245- Has top-level sections for: Before state, Additions, Measured effects,246 Honest remaining gap, Minimal fixes247- Includes a **"Slide ↔ section roadmap" table** near the end: one row248 per slide with (slide number, one-line message, which section carries249 the deep version)250- Adds a **time budget** block: e.g., "For a 20-minute talk, spend 2 min251 on TL;DR, 5 min on structure, 8 min on module examples, 3 min on252 results-and-gap, 2 min on fixes; appendix only in Q&A"253- Gives per-slide speaker script with "what to show / what to say / how254 it is implemented" for each slide255- Lists 2–4 expected questions with draft answers256257The companion markdown is the place for file paths, line numbers, rev258labels, and long prose. The slides stay abstract; the markdown is concrete.259Convert the markdown to a PDF via `scripts/md2pdf.py` (weasyprint + Korean260CJK fonts baked in).261262---263264## Phase 4 — push (only when the user asks)265266When the user asks, push to:267268- git (if a repo is available locally or via `gh`): commit with a269 descriptive message that cites which slides changed and why, then270 `git push`.271- Hugging Face datasets (if `hf auth whoami` succeeds): upload the272 `.tex`, `.pdf`, and companion `.md` and `.pdf`.273274Always return both URLs to the user.275276---277278## Paper-digest-style principle279280Borrowing from the `paper-digest` skill: every slide and every sentence281should answer "**why does this matter?**" before "what does it do?".282Pair every module with the motivation that explains its existence.283Chain cause-and-effect explicitly: "we added X **because** Y; the284consequence was Z". The slides carry the chain compressed; the285companion markdown carries it in full.286287Abstract principles over file:line: on the slide say288"Trust gate: simulator must earn accuracy before driving real actions",289not "Trust gate: `planner.py:220-231` checks `transition_accuracy >=290gate_threshold`". Move the latter into the companion.291292---293294## Supporting files295296- `references/style_guide.md` — concrete examples of the "one concept,297 one artefact" rule with good vs bad slide pairs.298- `references/tikz_recipes.md` — proven TikZ patterns for decision299 flowcharts, module maps with via-points, and commit loops.300- `references/critic_checklist.md` — the Phase-1 and Phase-3 critic301 gates as a one-page checklist.302- `scripts/render_and_check.sh` — the compile + overfull-grep + page303 count helper used in the render-verify loop.304- `scripts/md2pdf.py` — companion markdown → PDF converter (weasyprint,305 Noto Sans CJK KR + Noto Sans Mono CJK KR, palette matching the deck).