deck-presenter-mode
tokyo-night default theme, 'T' toggles 5 themes, 'S' opens teleprompter popup
1How It Works & Mechanism
This skill is a "template package" for html-anything: frontmatter supplies metadata to the selector, and the SKILL.md body (after frontmatter) is read as-is by loader to serve as model instructions.
const { fm, body } = parseFrontmatter(raw);
The actual prompt sent to the model = shared design guidelines + this template body + [Input Format] + [User Content]; the shared guidelines also include an override rule stating that slide counts/layout numbers in the template are not upper limits.
return `${SHARED_DESIGN_DIRECTIVES} ${opts.body.trim()}
Output discipline is strictly enforced by shared guidelines: the agent is forbidden from using any filesystem tools; HTML must be streamed via stdout text and saved to disk by the frontend.
- **禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何
Speaker support is implemented via per-slide 'aside.notes': the body requires 150-300 words of verbatim script per slide; on the application side, deck.ts extracts aside.notes into a notes panel and strips them from the slide body.
notes = stripTags(inner);
The teleprompter popup is driven by keyboard shortcuts: 'T' toggles themes, 'S' opens the popup, which contains four cards: CURRENT / NEXT / SCRIPT / TIMER.
- 右下小 toolbar: T 切主题 / S 打开 popup
The theme mechanism provides "1 default + 5 switchable": default is tokyo-night, cycled with the 'T' key (including one light theme).
- 默认 tokyo-night; 共 5 套主题 (含 light)
Slide containers adhere to repository-wide deck conventions: example.html sections contain a class with slide and feature 8 aside.notes blocks, parsed slide-by-slide by deck.ts to extract scripts.
const SLIDE_RE =
2Core Capabilities
3External Dependencies
| Kind | Dependency / Endpoint |
|---|---|
| cli | 宿主本机 agent CLI(由应用侧 spawn;非本 skill 指令) |
| network | Google Fonts(产物示例引用,非 skill 正文要求) |
| network | 产物样例正文里的第三方出处文本(非调用) |
4Recommended Governance & Evidence
- 网络端点: Declared external network access: example.html contains multiple Google Fonts @import statements (fonts.googleapis.com); fetched by the browser during artifact rendering.
5Second-Pass Verification
- [ok] 文件清单(2 个文件,无脚本) — SKILL.md(687B) + example.html(37604B)。
- [ok] 正文零端点复核 — SKILL.md 内 http/CDN/fetch/script 零命中。
- [ok] 目录内端点自证 — example.html: 多条 fonts.googleapis.com @import + 一处 github.com/lewislulu/html-ppt-skill 文本;无远程 script、无 fetch/XHR。
- [ok] 无凭证读取 — key/secret/token/.env 零命中。
- [ok] 无写盘指令 — SKILL.md 无 write/save 类指令;shared.ts 明令禁文件工具。
- [ok] 交互约定逐字可复核 — T 切主题 / S 打开 popup / CURRENT·NEXT·SCRIPT·TIMER 四卡 / 默认 tokyo-night 5 套主题均在正文。
- [ok] aside.notes 机制在宿主侧有真实实现 — deck.ts 的 `notes = stripTags(inner);` 与 class 含 notes 的 aside 匹配正则,说明「含逐字稿」不是空头承诺。
- [ok] 样例产物与机制一致 — example.html: 6 个 <section>、8 处 class 含 slide、8 处 aside.notes → 稿件可被逐页抽出。
6Verdict & Scenarios
1b8a4ed4e3c3279c…