mcpField
C
codeck-speech

codeck-speech

github.com/hiyeshu文档处理199187 次安装12 周前更新
代码仓库

关于 codeck-speech

codeck-speech 是 codeck 的演讲稿撰写技能,按页编写可朗读的讲稿,并将演讲者备注与幻灯片片段同步。它适用于需要让讲述节奏贴合演示文稿结构的演讲者。

主要功能

  1. 01逐页撰写演讲稿
  2. 02按幻灯片片段组织讲述
  3. 03将演讲者备注同步到 HTML
  4. 04选择演讲风格与时长
  5. 05估算时长和字数

适用场景

  1. 01为已完成的演示文稿准备讲稿
  2. 02使讲述与幻灯片逐步呈现同步
  3. 03为演讲者模式添加备注
  4. 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 中的 HTML data-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] 小节;不包含片段的幻灯片只设置一个区块。不得跳过此步骤。

撰写一份完整、便于朗读的逐页讲稿。

规则
  1. 每张幻灯片对应一个小节 — 与演示文稿对应
  2. 过渡 — 自然衔接各页
  3. 舞台指示 — 舞台指示应使用与讲稿相同的语言。英语讲稿使用 [pause 2s]、[slow down]、[look at audience]。其他语言则将舞台指示翻译成相应语言,确保演讲者演讲时无需切换语言。
  4. 词数 — 中文约 200 词/分钟,英语约 130 词/分钟
  5. 基于来源 — 不得编造数据
  6. 有力的开场 — 故事、数据或问题
  7. 有力的结尾 — 呼应开场或发出行动号召
风格说明

**TED:**使用“你”和“我们”,长短句交替,在关键点后停顿,结尾呼应开篇。

**正式:**使用完整句子,逻辑推进,在结尾总结并展望。

**随意:**使用口语表达,可以自嘲,过渡自然随意,结尾带来惊喜。

时间预算

幻灯片标题字数预计时长
1.........

如果某个部分超出预算,请在撰写最终稿前直接精简。不要再提问。

回写 HTML data-notes(与片段同步)

引擎的 buildNotes() 会在演示者逐步播放时,将幻灯片的 data-notes 与每个可见片段的 data-notes 拼接起来。利用这一机制,让讲稿节奏与片段节奏同步。

工作原理
  1. 查看幻灯片片段——找出所有带有 data-f="N" 的元素,以确定播放顺序
  2. 将讲稿拆分为多个段落——每一步对应一个段落(幻灯片进入 + 每个片段)
  3. 为每一步分配备注:
    • 幻灯片的 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}

---

完成

写完后:

  1. 更新 MEMORY.md 中的 Active Context、Latest Channel Summary、Task Index 和 Artifacts。
  2. 在 tasks/tasks.md 中将 @speech 任务标记为完成。
  3. 如果讲稿工作暴露了内容问题,请将其添加到 threads/threads.md。
  4. 将交接信息追加到今天的频道文件中。

指出讲稿中最有力的时刻——最能打动听众的一句话或一次停顿:

codeck speech done.

@speech 我已编写 speech.md,同步片段备注,并在记忆中记录了讲稿的整体脉络。

最有力的时刻:{第 N 张幻灯片——发生了什么,以及为何奏效。例如:“第 4 张幻灯片,问题之后的三秒停顿。沉默之中,听众会决定你是否值得倾听。”}

{一行就绪度评估}

输出:$DECK_DIR/speech.md + 已更新 HTML data-notes 在演示文稿中按 P 键进入演讲者模式,查看讲稿。

导出:/codeck export。概览:/codeck。

评论

支持 Markdown