/codeck-speech
Internal speech module for /codeck. Reads deck content, asks about style and duration only when missing, generates a verbatim speech transcript with stage directions. Outputs $DECK_DIR/speech.md.
Claude Code
$ npx -y skills add hiyeshu/codeck --skill codeck-speech --agent claude-code
Codex
$ npx skills add hiyeshu/codeck --skill codeck-speech -a codex -y
Cursor
$ npx skills add hiyeshu/codeck --skill codeck-speech -a cursor -y
Gemini CLI
$ npx skills add hiyeshu/codeck --skill codeck-speech -a gemini-cli -y
GitHub Copilot
$ npx skills add hiyeshu/codeck --skill codeck-speech -a github-copilot -y
OpenCode
$ npx skills add hiyeshu/codeck --skill codeck-speech -a opencode -y
Windsurf
$ npx skills add hiyeshu/codeck --skill codeck-speech -a windsurf -y
SKILL.md
codeck-speech.SKILL.mdname: codeck-speech
version: 2.1.1
description: |
Internal speech module for /codeck. Reads deck content, asks about
style and duration only when missing, generates a verbatim speech
transcript with stage directions. Outputs $DECK_DIR/speech.md.
<!-- [INPUT]: Depends on deck content, HTML notes, MEMORY.md, tasks/tasks.md, and threads/threads.md. [OUTPUT]: Provides speech.md and fragment-synced HTML data-notes. [POS]: skills/codeck-speech lane; turns the deck into a presenter-ready talk track. [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md -->
codeck speech — @speech lane
`@speech` owns the talk track, presenter rhythm, and fragment-synced notes.
Write boundaries:
- May write `$DECK_DIR/speech.md`
- May update HTML `data-notes` in `$DECK_DIR/slides.html`
- May update `$DECK_DIR/roles/speech.md`, `$DECK_DIR/tasks/tasks.md`, and `$DECK_DIR/channel/YYYY-MM-DD.md`
- Must not rewrite `deck.md`, `DESIGN.md`, `custom.css`, `review.md`, or export files
- Content conflicts become proposals in `$DECK_DIR/threads/threads.md`
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)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
for d in \
"${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
"$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
"$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
"$HOME/.agents/skills/codeck" \
"$HOME/.codex/skills/codeck" \
"$HOME/.claude/skills/codeck"; do
if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
mkdir -p "$DECK_DIR"
mkdir -p "$DECK_DIR/channel" "$DECK_DIR/tasks" "$DECK_DIR/threads" "$DECK_DIR/roles"
bash "$CODECK_SKILL_DIR/scripts/init-room.sh" "$DECK_DIR"
bash "$CODECK_SKILL_DIR/scripts/status.sh" "$DECK_DIR"Read:
- **MEMORY.md** — known style, duration, language, defaults, open threads
- **tasks/tasks.md / threads/threads.md** — active tickets and open decisions only
- **HTML** (latest `*-r*.html`) — actual slide content
- **deck.md** — structure, arc, user intent; ignore legacy `outline.md`
- **DESIGN.md / roles/design.md** — visual intent and selected skeleton (speech rhythm should match visual rhythm)
If no HTML and no `deck.md`, run `/codeck` to build the missing deck state first.
If only `deck.md` exists, write based on `deck.md` — note that the script is based on structure, not final visuals.
Do not read `channel/YYYY-MM-DD.md` unless debugging history.
**Smart skip:** skip Decision Ask if the user's instruction, `MEMORY.md`, open `threads/threads.md` rows, `deck.md`, or existing `speech.md` already specifies style and duration.
Before writing, claim the work ticket:
@orchestrator
Owner: @speech. Task: create presenter script and sync data-notes.
@speech
I claim the speech pass. I will write `speech.md`, sync fragment notes, and leave source conflicts in threads.
Append the exchange to today's channel file and update `tasks/tasks.md`.
Questions
Speech Style is one allowed Decision Ask moment under `/codeck`.
Use the shared `/codeck` Decision Ask Policy. Create one `D-YYYYMMDD-NN` decision only when style or duration is missing. Bundle both into one choice so the user is deciding the speech shape, not filling a form.
codeck needs the speech shape.
Current read: {deck audience and rhythm}.
I suggest {recommended package} because {reason}.
A) {style + duration package} (recommended)
B) {contrasting style + duration package}
C) {deeper/shorter package}Use these defaults when the deck gives no signal:
- A) TED — conversational, story-driven, breathing room
- B) Formal — structured, precise language
- C) Casual — natural, humor ok
- A) 5 min — lightning, ~1000 words
- B) 15 min — standard, ~3000 words
- C) 30+ min — deep dive, ~6000 words
If the decision is non-blocking and the user does not answer, use the recommended package and write `assumed default` to `MEMORY.md`. If the speech commitment is blocking and no structured AskUser UI is available, leave it open in `threads/threads.md` and stop before writing `speech.md`.
Record the final style and duration in `speech.md` front matter and `MEMORY.md`.
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
1. **One section per slide** — matches the deck 2. **Transitions** — natural bridges between pages 3. **Stage directions** — write stage directions in the same language as the transcript. For English, use `[pause 2s]`, `[slow down]`, `[look at audience]`. For other languages, translate the stage directions so the speaker never has to switch languages while presenting. 4. **Word count** — ~200 words/min Chinese, ~130 words/min English 5. **Source-based** — no fabricated data 6. **Strong opening** — story, data, or question 7. **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 | |-------|-----
Read more
name: codeck-speech version: 2.1.1 description: | Internal speech module for /codeck. Reads deck content, asks about style and duration only when missing, generates a verbatim speech transcript with stage directions. Outputs $DECK_DIR/speech.md.
<!-- [INPUT]: Depends on deck content, HTML notes, MEMORY.md, tasks/tasks.md, and threads/threads.md. [OUTPUT]: Provides speech.md and fragment-synced HTML data-notes. [POS]: skills/codeck-speech lane; turns the deck into a presenter-ready talk track. [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md -->
codeck speech — @speech lane
`@speech` owns the talk track, presenter rhythm, and fragment-synced notes.
Write boundaries:
- May write `$DECK_DIR/speech.md`
- May update HTML `data-notes` in `$DECK_DIR/slides.html`
- May update `$DECK_DIR/roles/speech.md`, `$DECK_DIR/tasks/tasks.md`, and `$DECK_DIR/channel/YYYY-MM-DD.md`
- Must not rewrite `deck.md`, `DESIGN.md`, `custom.css`, `review.md`, or export files
- Content conflicts become proposals in `$DECK_DIR/threads/threads.md`
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)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
for d in \
"${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
"$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
"$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
"$HOME/.agents/skills/codeck" \
"$HOME/.codex/skills/codeck" \
"$HOME/.claude/skills/codeck"; do
if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
mkdir -p "$DECK_DIR"
mkdir -p "$DECK_DIR/channel" "$DECK_DIR/tasks" "$DECK_DIR/threads" "$DECK_DIR/roles"
bash "$CODECK_SKILL_DIR/scripts/init-room.sh" "$DECK_DIR"
bash "$CODECK_SKILL_DIR/scripts/status.sh" "$DECK_DIR"Read:
- **MEMORY.md** — known style, duration, language, defaults, open threads
- **tasks/tasks.md / threads/threads.md** — active tickets and open decisions only
- **HTML** (latest `*-r*.html`) — actual slide content
- **deck.md** — structure, arc, user intent; ignore legacy `outline.md`
- **DESIGN.md / roles/design.md** — visual intent and selected skeleton (speech rhythm should match visual rhythm)
If no HTML and no `deck.md`, run `/codeck` to build the missing deck state first.
If only `deck.md` exists, write based on `deck.md` — note that the script is based on structure, not final visuals.
Do not read `channel/YYYY-MM-DD.md` unless debugging history.
**Smart skip:** skip Decision Ask if the user's instruction, `MEMORY.md`, open `threads/threads.md` rows, `deck.md`, or existing `speech.md` already specifies style and duration.
Before writing, claim the work ticket:
@orchestrator Owner: @speech. Task: create presenter script and sync data-notes. @speech I claim the speech pass. I will write `speech.md`, sync fragment notes, and leave source conflicts in threads.
Append the exchange to today's channel file and update `tasks/tasks.md`.
Questions
Speech Style is one allowed Decision Ask moment under `/codeck`.
Use the shared `/codeck` Decision Ask Policy. Create one `D-YYYYMMDD-NN` decision only when style or duration is missing. Bundle both into one choice so the user is deciding the speech shape, not filling a form.
codeck needs the speech shape.
Current read: {deck audience and rhythm}.
I suggest {recommended package} because {reason}.
A) {style + duration package} (recommended)
B) {contrasting style + duration package}
C) {deeper/shorter package}Use these defaults when the deck gives no signal:
- A) TED — conversational, story-driven, breathing room
- B) Formal — structured, precise language
- C) Casual — natural, humor ok
- A) 5 min — lightning, ~1000 words
- B) 15 min — standard, ~3000 words
- C) 30+ min — deep dive, ~6000 words
If the decision is non-blocking and the user does not answer, use the recommended package and write `assumed default` to `MEMORY.md`. If the speech commitment is blocking and no structured AskUser UI is available, leave it open in `threads/threads.md` and stop before writing `speech.md`.
Record the final style and duration in `speech.md` front matter and `MEMORY.md`.
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
1. **One section per slide** — matches the deck 2. **Transitions** — natural bridges between pages 3. **Stage directions** — write stage directions in the same language as the transcript. For English, use `[pause 2s]`, `[slow down]`, `[look at audience]`. For other languages, translate the stage directions so the speaker never has to switch languages while presenting. 4. **Word count** — ~200 words/min Chinese, ~130 words/min English 5. **Source-based** — no fabricated data 6. **Strong opening** — story, data, or question 7. **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 | |-------|-----
A skill is a channel. codeck is a deck room. You have a folder of notes, docs, data, and images. You want a presentation. You type /codeck. codeck opens a persistent deck room.
Other skills on codeck.
More skills from other plugins.
prompt-lookup
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
ppt-master
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
morph-ppt
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
frontend-slides
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…
Questions about codeck-speech.
- Which coding agents can use codeck-speech?
- codeck-speech installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

