Codeck codeck-speech
git clone https://github.com/hiyeshu/codeck
T=$(mktemp -d) && git clone --depth=1 https://github.com/hiyeshu/codeck "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/codeck-speech" ~/.claude/skills/hiyeshu-codeck-codeck-speech && rm -rf "$T"
skills/codeck-speech/SKILL.mdcodeck speech
Role activation
Read
$DECK_DIR/diagnosis.md. If a speech role is recommended, use it. Otherwise, pick a coach based on domain and audience:
Technical → Feynman: simplify the complex, bridge with analogy
Business → Jobs: build anticipation, one "one more thing"
Academic → Hans Rosling: let data tell the story
Setup
DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")" mkdir -p "$DECK_DIR" bash "$HOME/.claude/skills/codeck/scripts/status.sh" "$DECK_DIR"
Read:
- HTML (latest
) — actual slide content*-r*.html - outline.md — structure, arc, user intent
- design-notes.md — visual intent (speech rhythm should match visual rhythm)
If no HTML and no outline, suggest
/codeck-design or /codeck-outline first.
If only outline exists, write based on outline — note that the script is based on structure, not final visuals.
Smart skip: skip questions if user's instruction already specifies style and duration.
Questions
Q1: Style
- A) TED — conversational, story-driven, breathing room
- B) Formal — structured, precise language
- C) Casual — natural, humor ok
Q2: Duration
- A) 5 min — lightning, ~1000 words
- B) 15 min — standard, ~3000 words
- C) 30+ min — deep dive, ~6000 words
Generate
Before writing, build a fragment map. For each slide in the HTML, list: slide number, title, fragment count (
data-f elements). This map determines the speech structure — slides with fragments get ### [on enter] + ### [fragment N] sections, slides without get a single block. Do not skip this step.
Write a complete, readable-aloud transcript. Page by page.
Rules
- One section per slide — matches the deck
- Transitions — natural bridges between pages
- Stage directions — write in the same language as the transcript. Chinese:
[停顿 2秒][放慢]
; English:[看观众][pause 2s][slow down]
; other languages: translate accordingly. The speaker must understand them without switching languages.[look at audience] - Word count — ~200 words/min Chinese, ~130 words/min English
- Source-based — no fabricated data
- Strong opening — story, data, or question
- Strong close — callback to opening or call to action
Style notes
TED: use "you" / "we", mix short and long sentences, pause after key points, end by echoing the opening.
Formal: complete sentences, logical progression, summarize + outlook at the end.
Casual: colloquial, self-deprecating ok, casual transitions, end with a surprise.
Time budget
| Slide | Title | Words | Estimate |
|---|---|---|---|
| 1 | ... | ... | ... |
- A) Help me trim the ones over time
- B) I'll manage it myself
Write back HTML data-notes (fragment-synced)
The engine's
buildNotes() concatenates the slide's data-notes with each visible fragment's data-notes as the presenter steps through. Use this to sync speech rhythm with fragment rhythm.
How it works
- Read the slide's fragments — find all elements with
to know the stepping orderdata-f="N" - Split the speech into segments — one segment per step (slide entry + each fragment)
- Assign notes to each step:
- Slide's
→ what to say when the slide first appears (before any fragment)data-notes
element'sdata-f="1"
→ what to say when fragment 1 revealsdata-notes
element'sdata-f="2"
→ what to say when fragment 2 revealsdata-notes- ...and so on
- Slide's
Example
Speech for slide 3:
"Let's talk about the three ideas behind codeck. [pause 2s] First, it recruits people, not rules. [pause] Second, isomorphic mapping. [pause] Third, no schema ceiling."
Slide 3 has
data-f="1", data-f="2", data-f="3":
<section class="slide" data-notes="Let's talk about the three ideas behind codeck. [pause 2s]"> <h2 data-f="1" data-notes="First, it recruits people, not rules. [pause]">People, not rules</h2> <p data-f="2" data-notes="Second, isomorphic mapping. [pause]">Isomorphic mapping</p> <p data-f="3" data-notes="Third, no schema ceiling.">No schema ceiling</p> </section>
Presenter presses → three times. Notes build up progressively:
- Step 0: "Let's talk about the three ideas..."
- Step 1: + "First, it recruits people..."
- Step 2: + "Second, isomorphic mapping..."
- Step 3: + "Third, no schema ceiling."
Rules
- If a slide has no fragments, put the full speech in the slide's
data-notes - HTML-escape quotes inside
attribute valuesdata-notes - Keep stage directions (
,[pause]
, etc.) in the notes[slow down] - Each segment should be self-contained — the presenter reads what's new at each step
- Match the number of speech segments to the number of steps (1 + fragment count)
Output: $DECK_DIR/speech.md
--- style: "{style}" duration: "{target}" totalEstimate: "{estimate}" --- # Speech: {topic} --- ## Slide 1: {title} <!-- estimate: {N}s | {M} words | fragments: 0 --> {verbatim speech text} [pause 2s] --- ## Slide 2: {title} <!-- estimate: {N}s | {M} words | fragments: 3 --> ### [on enter] {what to say when slide appears, before any fragment} ### [fragment 1] {what to say when fragment 1 reveals} ### [fragment 2] {what to say when fragment 2 reveals} ### [fragment 3] {what to say when fragment 3 reveals} ---
Done
Point to the single strongest moment in the script — the line or pause that will land hardest:
codeck speech done.
Strongest moment: {slide N — what happens and why it works. e.g., "Slide 4, the three-second pause after the question. That silence is where the audience decides you're worth listening to."}
{one line — readiness assessment}
Output:
+ HTML data-notes updated Press P in the deck for speaker mode to see the script.$DECK_DIR/speech.mdAll done. Need to export?
. Check progress anytime with/codeck-export./codeck