关于 codeck-speech
codeck-speech 是 codeck 的演讲稿撰写技能,按页编写可朗读的讲稿,并将演讲者备注与幻灯片片段同步。它适用于需要让讲述节奏贴合演示文稿结构的演讲者。
主要功能
- 01逐页撰写演讲稿
- 02按幻灯片片段组织讲述
- 03将演讲者备注同步到 HTML
- 04选择演讲风格与时长
- 05估算时长和字数
适用场景
- 01为已完成的演示文稿准备讲稿
- 02使讲述与幻灯片逐步呈现同步
- 03为演讲者模式添加备注
- 04估算并精简讲稿以符合时长
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hiyeshu/ codeck --skill codeck-speech安装后在 Claude Code 中输入/codeck-speech确认已加载。
详细介绍
codeck speech — @speech 通道
@speech 负责演讲稿、演讲节奏,以及与片段同步的备注。
写入范围:
- 可以写入
$DECK_DIR/speech.md - 可以更新
$DECK_DIR/slides.html中的 HTMLdata-notes - 可以更新
$DECK_DIR/roles/speech.md、$DECK_DIR/tasks/tasks.md和$DECK_DIR/channel/YYYY-MM-DD.md - 不得重写
deck.md、DESIGN.md、custom.css、review.md或导出文件 - 内容冲突应作为提案记录在
$DECK_DIR/threads/threads.md中
角色激活
读取 $DECK_DIR/diagnosis.md。如果推荐了演讲角色,就使用该角色。否则,根据领域和受众选择一位教练:
技术类 → Feynman:简化复杂内容,用类比搭建桥梁
商业类 → Jobs:营造期待感,加入一个“还有一件事”
学术类 → Hans Rosling:让数据讲述故事
设置
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"
读取:
- MEMORY.md — 已知的风格、时长、语言、默认设置和未解决的讨论
- tasks/tasks.md / threads/threads.md — 仅查看进行中的任务和未解决的决定
- HTML(最新的
*-r*.html)— 实际幻灯片内容 - deck.md — 结构、叙事弧线、用户意图;忽略旧版
outline.md - DESIGN.md / roles/design.md — 视觉意图和选定的骨架(演讲节奏应与视觉节奏相匹配)
如果没有 HTML,也没有 deck.md,先运行 /codeck 构建缺失的演示文稿状态。
如果只有 deck.md,则以 deck.md 为依据撰写——注明讲稿基于结构,而非最终视觉效果。
除非要调试历史记录,否则不要读取 channel/YYYY-MM-DD.md。
智能跳过: 如果用户的指示、MEMORY.md、threads/threads.md 中未解决的条目、deck.md 或现有的 speech.md 已指定风格和时长,则跳过“决定询问”。
撰写前,认领工作任务:
@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.
将交流记录追加到当天的通道文件,并更新 tasks/tasks.md。
问题
在 /codeck 下,“演讲风格”是允许进行“决定询问”的一个时机。
使用共享的 /codeck“决定询问”政策。仅当缺少风格或时长时,才创建一个 D-YYYYMMDD-NN 决定。将两者合并为一个选项,让用户决定演讲形式,而不是填写表格。
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}
当演示文稿没有提供任何线索时,使用以下默认值:
-
A) TED — 对话式、以故事为主,并留有喘息空间
-
B) 正式 — 结构清晰、措辞精准
-
C) 随意 — 自然表达,可以幽默
-
A) 5 分钟 — 闪电演讲,约 1000 词
-
B) 15 分钟 — 标准演讲,约 3000 词
-
C) 30 分钟以上 — 深入讲解,约 6000 词
如果该决定不阻塞工作,且用户未回复,则使用推荐方案,并在 MEMORY.md 中写入 assumed default。如果演讲要求会阻塞工作,且没有可用的结构化 AskUser 界面,则将其留在 threads/threads.md 中,暂停撰写 speech.md。
在 speech.md 的 front matter 和 MEMORY.md 中记录最终风格和时长。
生成
撰写前,先建立片段映射。 对 HTML 中的每张幻灯片,列出:幻灯片编号、标题、片段数量(data-f 元素)。此映射决定演讲结构——包含片段的幻灯片要设置 ### [on enter] 和 ### [fragment N] 小节;不包含片段的幻灯片只设置一个区块。不得跳过此步骤。
撰写一份完整、便于朗读的逐页讲稿。
规则
- 每张幻灯片对应一个小节 — 与演示文稿对应
- 过渡 — 自然衔接各页
- 舞台指示 — 舞台指示应使用与讲稿相同的语言。英语讲稿使用
[pause 2s]、[slow down]、[look at audience]。其他语言则将舞台指示翻译成相应语言,确保演讲者演讲时无需切换语言。 - 词数 — 中文约 200 词/分钟,英语约 130 词/分钟
- 基于来源 — 不得编造数据
- 有力的开场 — 故事、数据或问题
- 有力的结尾 — 呼应开场或发出行动号召
风格说明
**TED:**使用“你”和“我们”,长短句交替,在关键点后停顿,结尾呼应开篇。
**正式:**使用完整句子,逻辑推进,在结尾总结并展望。
**随意:**使用口语表达,可以自嘲,过渡自然随意,结尾带来惊喜。
时间预算
| 幻灯片 | 标题 | 字数 | 预计时长 |
|---|---|---|---|
| 1 | ... | ... | ... |
如果某个部分超出预算,请在撰写最终稿前直接精简。不要再提问。
回写 HTML data-notes(与片段同步)
引擎的 buildNotes() 会在演示者逐步播放时,将幻灯片的 data-notes 与每个可见片段的 data-notes 拼接起来。利用这一机制,让讲稿节奏与片段节奏同步。
工作原理
- 查看幻灯片片段——找出所有带有
data-f="N"的元素,以确定播放顺序 - 将讲稿拆分为多个段落——每一步对应一个段落(幻灯片进入 + 每个片段)
- 为每一步分配备注:
- 幻灯片的
data-notes→ 幻灯片首次出现时要说的内容(任何片段出现之前) data-f="1"元素的data-notes→ 片段 1 显示时要说的内容data-f="2"元素的data-notes→ 片段 2 显示时要说的内容- ……依此类推
- 幻灯片的
示例
幻灯片 3 的讲稿:
“我们来聊聊 codeck 背后的三个理念。[停顿 2 秒] 第一,它招募的是人,而不是规则。[停顿] 第二,等构映射。[停顿] 第三,不受架构限制。”
幻灯片 3 有 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>
演示者按键 → 共三次。备注会逐步累积:
- 第 0 步:“我们来聊聊这些理念……”
- 第 1 步:+“第一,它招募的是人……”
- 第 2 步:+“第二,等构映射……”
- 第 3 步:+“第三,不受架构限制……”
规则
- 如果幻灯片没有片段,请将完整讲稿放入幻灯片的
data-notes - 对
data-notes属性值中的引号进行 HTML 转义 - 在备注中保留舞台指示(
[pause]、[slow down]等) - 每个段落都应独立完整——演示者在每一步读取新增内容
- 讲稿段落数应与步骤数一致(1 + 片段数)
输出:$DECK_DIR/speech.md
---
style: "{style}"
duration: "{target}"
totalEstimate: "{estimate}"
---
# Speech: {topic}
---
## Slide 1: {title}
{verbatim speech text}
[pause 2s]
---
## Slide 2: {title}
### [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}
---
完成
写完后:
- 更新
MEMORY.md中的 Active Context、Latest Channel Summary、Task Index 和 Artifacts。 - 在
tasks/tasks.md中将@speech任务标记为完成。 - 如果讲稿工作暴露了内容问题,请将其添加到
threads/threads.md。 - 将交接信息追加到今天的频道文件中。
指出讲稿中最有力的时刻——最能打动听众的一句话或一次停顿:
codeck speech done.
@speech 我已编写
speech.md,同步片段备注,并在记忆中记录了讲稿的整体脉络。最有力的时刻:{第 N 张幻灯片——发生了什么,以及为何奏效。例如:“第 4 张幻灯片,问题之后的三秒停顿。沉默之中,听众会决定你是否值得倾听。”}
{一行就绪度评估}
输出:
$DECK_DIR/speech.md+ 已更新 HTML data-notes 在演示文稿中按 P 键进入演讲者模式,查看讲稿。导出:
/codeck export。概览:/codeck。