Speaker Notes (Presentation Script) Workflow
Generate a verbatim reading script for Quarto RevealJS slides. The presenter should be able to read these notes as-is during the talk.
CRITICAL: These are presentation scripts (대본), NOT talking points. Full spoken sentences that flow naturally when read aloud.
Phase 0: Pre-Flight Checks
0A. Identify Target File
Parse the argument to find Quarto/[PaperName].qmd. If no argument, ask the user.
0B. Language Selection
Parse --lang flag. If not provided, ask the user:
en — English script (~3,000–3,500 words for 30 min, speaking rate ~130 words/min)
ko — Korean script (~8,000–8,500 chars for 30 min, speaking rate ~280 chars/min)
0C. Check for Existing Notes
Search the QMD for ::: {.notes} blocks.
- If notes already exist: warn user and ask whether to overwrite or skip slides that have notes.
- If no notes: proceed.
0D. Locate Source Materials
- QMD file — primary source (must exist)
- Source paper — search
target-papers/ for matching paper directory
- Beamer .tex — search
Slides/ for matching file
Report what sources are available.
Phase 1: Read & Analyze Slides
- Read the complete QMD file
- Count total slides (level-2 headings
##) and sections (level-1 headings #)
- Identify slide structure: which slides are content-heavy, which are light
- Note section boundaries for narrative arc planning
- Calculate target total budget based on language selection
Report to user:
- Total slides found
- Section breakdown
- Target script length
- Source materials available
Phase 2: Batch Generation
Delegate to the script-writer agent in batches of 8–10 slides.
For each batch, provide the agent with:
- The QMD content for those slides
- The overall presentation context (paper title, what came before, what comes after)
- The language setting
- Approximate per-batch budget (total budget / number of batches, adjusted for content density)
- Relevant source paper sections (for technical slides only)
Batch sequencing:
- Process batches sequentially (each batch needs context from previous batches for transitions)
- After each batch, verify the notes were properly inserted with
::: {.notes} syntax
- Track running word/char count
Notes placement rule:
- Place
::: {.notes} at the end of each slide, before the next ## heading
- Section dividers (
#) get brief transition notes
- References slide: skip (no notes)
Phase 3: Count Verification
After all batches are complete:
- Count total script length:
- Korean: count characters excluding spaces, punctuation, and markdown syntax
- English: count words excluding markdown syntax
- Compare against target range:
- Korean: 8,000–8,500 chars (acceptable: 7,200–9,350, i.e., ±10%)
- English: 3,000–3,500 words (acceptable: 2,700–3,850, i.e., ±10%)
- If outside acceptable range:
- Too long: identify the longest notes and ask the script-writer agent to trim
- Too short: identify slides with thin notes and ask for expansion
- Re-count after adjustment
Phase 4: Render & Verify
- Run
cd Quarto && quarto render [PaperName].qmd
- Verify render succeeds without errors
- Check the HTML output for
<aside class="notes"> elements
- Report number of slides with notes vs total slides
Phase 5: Timing Report
Generate a timing report and save to quality_reports/[PaperName]_speaker_notes_report.md using the template at templates/speaker-notes-report.md.
The report should include:
- Per-section breakdown (section name, number of slides, word/char count, estimated time)
- Total estimated presentation time
- Quality checklist status
Present a summary to the user including:
- Total script length (words or chars)
- Estimated presentation time
- Coverage (slides with notes / total slides)
- Any quality concerns
Non-Negotiable Constraints
- Script, not notes. Every note must be a complete, speakable script.
- No verbatim repetition. Notes must add value beyond the slide content.
- Transitions matter. Each note should flow naturally from the previous slide.
- Budget compliance. Total must fall within ±10% of target range.
- Proper syntax. Every
::: {.notes} must have a matching ::: closure.
- No notes on References slide. Skip it entirely.
Examples
Example 1: First-time script generation
User says: /write-speaker-notes DreamZero --lang ko
Actions:
- Find
Quarto/DreamZero.qmd
- Set language to Korean, target 8,000–8,500 chars
- Read QMD, count slides, locate source paper
- Generate notes in 4-5 batches via script-writer agent
- Verify total char count within range
- Render and verify
- Generate timing report
Example 2: Adding notes to already-annotated file
User says: "Add speaker notes to the new slides I added"
Actions:
- Find QMD, detect existing
::: {.notes} blocks
- Identify slides WITHOUT notes
- Generate notes only for unannotated slides
- Verify count and render
Example 3: Language switch
User says: "/write-speaker-notes DreamZero --lang en"
Actions:
- If Korean notes exist, warn and ask whether to replace
- If replacing, remove all existing
::: {.notes} blocks first
- Generate English script targeting 3,000–3,500 words
- Verify and render
1---2name: write-speaker-notes3description: Generate speaker notes (presentation script) for Quarto RevealJS slides. Supports English and Korean. Use when user asks to "write speaker notes", "add presentation script", "speaker script", "발표 스크립트", or "스피커 노트".4---5
6# Speaker Notes (Presentation Script) Workflow
7
8Generate a verbatim reading script for Quarto RevealJS slides. The presenter should be able to read these notes as-is during the talk.
9
10**CRITICAL: These are presentation scripts (대본), NOT talking points.** Full spoken sentences that flow naturally when read aloud.
11
12---
13
14## Phase 0: Pre-Flight Checks
15
16### 0A. Identify Target File
17Parse the argument to find `Quarto/[PaperName].qmd`. If no argument, ask the user.
18
19### 0B. Language Selection
20Parse `--lang` flag. If not provided, ask the user:
21- `en` — English script (~3,000–3,500 words for 30 min, speaking rate ~130 words/min)
22- `ko` — Korean script (~8,000–8,500 chars for 30 min, speaking rate ~280 chars/min)
23
24### 0C. Check for Existing Notes
25Search the QMD for `::: {.notes}` blocks.
26- If notes already exist: warn user and ask whether to overwrite or skip slides that have notes.
27- If no notes: proceed.
28
29### 0D. Locate Source Materials
301. **QMD file** — primary source (must exist)
312. **Source paper** — search `target-papers/` for matching paper directory
323. **Beamer .tex** — search `Slides/` for matching file
33
34Report what sources are available.
35
36---
37
38## Phase 1: Read & Analyze Slides
39
401. Read the complete QMD file
412. Count total slides (level-2 headings `##`) and sections (level-1 headings `#`)
423. Identify slide structure: which slides are content-heavy, which are light
434. Note section boundaries for narrative arc planning
445. Calculate target total budget based on language selection
45
46Report to user:
47- Total slides found
48- Section breakdown
49- Target script length
50- Source materials available
51
52---
53
54## Phase 2: Batch Generation
55
56Delegate to the `script-writer` agent in batches of 8–10 slides.
57
58For each batch, provide the agent with:
591. The QMD content for those slides
602. The overall presentation context (paper title, what came before, what comes after)
613. The language setting
624. Approximate per-batch budget (total budget / number of batches, adjusted for content density)
635. Relevant source paper sections (for technical slides only)
64
65**Batch sequencing:**
66- Process batches sequentially (each batch needs context from previous batches for transitions)
67- After each batch, verify the notes were properly inserted with `::: {.notes}` syntax
68- Track running word/char count
69
70**Notes placement rule:**
71- Place `::: {.notes}` at the end of each slide, before the next `##` heading
72- Section dividers (`#`) get brief transition notes
73- References slide: skip (no notes)
74
75---
76
77## Phase 3: Count Verification
78
79After all batches are complete:
80
811. Count total script length:
82 - **Korean:** count characters excluding spaces, punctuation, and markdown syntax
83 - **English:** count words excluding markdown syntax
842. Compare against target range:
85 - Korean: 8,000–8,500 chars (acceptable: 7,200–9,350, i.e., ±10%)
86 - English: 3,000–3,500 words (acceptable: 2,700–3,850, i.e., ±10%)
873. If outside acceptable range:
88 - **Too long:** identify the longest notes and ask the script-writer agent to trim
89 - **Too short:** identify slides with thin notes and ask for expansion
90 - Re-count after adjustment
91
92---
93
94## Phase 4: Render & Verify
95
961. Run `cd Quarto && quarto render [PaperName].qmd`
972. Verify render succeeds without errors
983. Check the HTML output for `<aside class="notes">` elements
994. Report number of slides with notes vs total slides
100
101---
102
103## Phase 5: Timing Report
104
105Generate a timing report and save to `quality_reports/[PaperName]_speaker_notes_report.md` using the template at `templates/speaker-notes-report.md`.
106
107The report should include:
108- Per-section breakdown (section name, number of slides, word/char count, estimated time)
109- Total estimated presentation time
110- Quality checklist status
111
112Present a summary to the user including:
113- Total script length (words or chars)
114- Estimated presentation time
115- Coverage (slides with notes / total slides)
116- Any quality concerns
117
118---
119
120## Non-Negotiable Constraints
121
1221. **Script, not notes.** Every note must be a complete, speakable script.
1232. **No verbatim repetition.** Notes must add value beyond the slide content.
1243. **Transitions matter.** Each note should flow naturally from the previous slide.
1254. **Budget compliance.** Total must fall within ±10% of target range.
1265. **Proper syntax.** Every `::: {.notes}` must have a matching `:::` closure.
1276. **No notes on References slide.** Skip it entirely.
128
129---
130
131## Examples
132
133### Example 1: First-time script generation
134**User says:** `/write-speaker-notes DreamZero --lang ko`
135**Actions:**
1361. Find `Quarto/DreamZero.qmd`
1372. Set language to Korean, target 8,000–8,500 chars
1383. Read QMD, count slides, locate source paper
1394. Generate notes in 4-5 batches via script-writer agent
1405. Verify total char count within range
1416. Render and verify
1427. Generate timing report
143
144### Example 2: Adding notes to already-annotated file
145**User says:** "Add speaker notes to the new slides I added"
146**Actions:**
1471. Find QMD, detect existing `::: {.notes}` blocks
1482. Identify slides WITHOUT notes
1493. Generate notes only for unannotated slides
1504. Verify count and render
151
152### Example 3: Language switch
153**User says:** "/write-speaker-notes DreamZero --lang en"
154**Actions:**
1551. If Korean notes exist, warn and ask whether to replace
1562. If replacing, remove all existing `::: {.notes}` blocks first
1573. Generate English script targeting 3,000–3,500 words
1584. Verify and render