open-slide 詳細教學

對應 repo: https://github.com/1weiho/open-slide(3.5k stars / 248 forks / @open-slide/core@1.6.0,截至 2026-05-22)

1. 專案定位

1.1 它是什麼

1weiho (Yiwei Ho) 開源的 agent-native React 簡報框架。核心理念:「slides are visual code, agents are great at writing code; the missing runtime turns ‘make slides about X’ into a polished deck」。一行 npx @open-slide/cli init scaffold workspace,餘下交給 agent + 內建 5 個 skill。

1.2 它解決什麼問題

痛點傳統做法open-slide
寫 PPT 太慢 / 排版繁瑣Keynote / Google Slidesagent 寫 React,框架 scale 1920×1080
字小 / 字大跨螢幕手動調固定 canvas + 自動 scale
評審改稿迴圈screenshot 在 Slack 標in-browser inspector + @slide-comment marker + /apply-comments
找 logo SVG自己 Google + Figma整合 svgl.app 內建搜尋
出 PDFexport → fuck up shadows自家 export 內建 strip shadows during PDF
演講分享帶 keynote 檔出靜態 HTML 一鍵 deploy 任一處

1.3 與其他 slide / presentation tool 差異

工具開源agent-native1920×1080 lock跨 agent評審迴圈
open-slide✅ MIT✅ 5 skill built-in✅ enforced✅ Claude / Codex / Cursor@slide-comment
Slidev (slidevjs)✅ MIT❌ vue + md16:9 自由
reveal.js✅ MIT❌ HTML自由
Marp✅ MIT❌ md only自由
Keynote / PPT / Google Slides
ConardLi/web-video-presentation (garden-skills)✅ MIT skill✅ Claude Code skill1920×1080跨 5 agent評審非系統化

web-video-presentationopen-slide互補關係:前者是 skill 自己提供 scaffold;後者是 framework 提供 scaffold + 自帶 skill。

1.4 適合誰用

  • 需要簡報的工程師 / DevRel / 技術寫作者:寫 conf talk / company all-hands / product demo / 教學影片預先排練
  • AI 顧問 / 課程講師:用 agent 快速產內容變化(同一主題多份不同 deck)
  • 設計工程師:把 deck 當 React 練習場,順便看設計細節
  • 想學「agent-native framework 怎麼設計」的人:本 repo 是極佳 reference(skills-lock 機制、@slide-comment 制度、scaffold 模式)

2. 安裝指南

2.1 一行 scaffold(最快路徑)

1npx @open-slide/cli init my-slide
2cd my-slide
3pnpm dev

scaffold 出來的結構:

1my-slide/
2├── slides/intro/index.tsx          # 第一張 demo slide
3├── themes/                         # theme 設定
4├── assets/                         # images / videos / fonts
5├── open-slide.config.ts            # framework config
6├── AGENTS.md / CLAUDE.md           # agent 守則
7├── netlify.toml / vercel.json      # deploy 預設
8├── package.json
9└── tsconfig.json

2.2 既有 workspace 手動串

1# 純加 @open-slide/core 進去(不用 scaffold)
2pnpm add @open-slide/core
3# 在 vite.config.ts 加 plugin(看 packages/core/README.md)

2.3 環境需求

  • Node.js >= 18(建議 20+)
  • pnpm 10.x(package.json packageManager: pnpm@10.17.0
  • 一個 coding agent(Claude Code / Codex / Cursor 任一)
  • 瀏覽器(Chrome / Edge / Firefox / Safari 任一現代版)

2.4 框架本身開發環境(contributor)

1git clone https://github.com/1weiho/open-slide
2cd open-slide
3pnpm install
4pnpm dev           # turbo: runs demo against local core
5pnpm build         # build all
6pnpm typecheck     # tsc across graph
7pnpm check         # biome (format + lint + organize imports)
8pnpm test          # vitest

flowchart TD
    U[使用者] -->|npx init| S[scaffold workspace]
    S --> D[my-slide/]
    D --> A[Claude Code / Codex / Cursor]
    A -->|讀 .claude/skills/| SK[5 內建 skill + 4 外部 skill]
    A -->|"/create-slide"| W[寫 slides/<id>/index.tsx]
    W --> DEV[pnpm dev]
    DEV --> B[瀏覽器 dev server
1920×1080 canvas] B -.in-browser inspector.- C[加 @slide-comment] C --> AC["/apply-comments"] AC --> A B --> BUILD[pnpm build] BUILD --> HTML[靜態 HTML] BUILD --> PDF[PDF export] HTML --> DEP[Vercel / Cloudflare / Netlify / Zeabur]

3. 核心架構解析

3.1 三層結構(pnpm + Turbo monorepo)


graph TB
    subgraph "Distribution (npm + GitHub Release)"
        N1["@open-slide/cli@1.2.4
scaffolder"] N2["@open-slide/core@1.6.0
runtime + Vite plugin + CLI"] end subgraph "packages/" C[core/
src/app + cli + vite + editing + files + http] CL[cli/
src + template + scripts] end subgraph "apps/ (private)" D[demo/
workspace:* 連 core
10+ 個 demo slides] W[web/
Next.js 行銷站
open-slide.dev] end subgraph "Tooling" T[turbo + pnpm-workspace] B[biome lint+format+organize] CS[changesets release] V[vitest test] SL[skills-lock.json
external skill SHA-pinning] end C --> N2 CL --> N1 CL -->|template/| D T --> C & CL & D & W B --> C & CL & D & W CS --> N1 & N2 SL --> C

3.2 一張 slide 的渲染生命週期


sequenceDiagram
    participant U as 使用者
    participant V as Vite plugin
    participant R as React Runtime
    participant C as 1920×1080 Canvas
    participant I as Inspector
    participant E as comments.ts

    U->>V: 起 dev server
    V->>V: 掃 slides/<id>/index.{tsx,jsx,ts,js}
    V->>V: 透過 virtual module exposes
    V->>R: 啟動 React app
    R->>C: 對每張 slide 包進 1920×1080 fixed canvas
    R->>R: 計算 viewport scale factor
    Note over R,C: 不論螢幕大小,slide 永遠 1920×1080,整體 scale
    U->>I: 點任一元素加 comment
    I->>E: 解析 .tsx 找到對應行
    E->>E: 在 source 插入 @slide-comment marker
    U->>U: 跑 /apply-comments
    U->>R: agent 改 .tsx
    V->>R: HMR 自動重載
    U->>U: 重複迴圈

3.3 5 個內建 skill 的職責

Skill用途
/create-slide從零起草一個 deck — 問 4 個 scoping 問題(topic & aesthetic / page count / text density / motion vs. static)→ 規劃結構 → 寫 pages
/slide-authoring技術參考:1920×1080 canvas、type scale、palette、layout 規則。agent 在寫之前必讀
/apply-comments批次套用全部 in-browser comment → 清 marker
/create-theme自製 theme(color tokens / typography)
/current-slide給 agent 當前在哪張 slide 的 context(避免猜)

3.4 4 個外部 skill(skills-lock 鎖版本)

1// skills-lock.json
2{
3  "frontend-design":              { "source": "anthropics/skills",          "computedHash": "063a0e64..." },
4  "vercel-composition-patterns":  { "source": "vercel-labs/agent-skills",   "computedHash": "575757e3..." },
5  "vercel-react-best-practices":  { "source": "vercel-labs/agent-skills",   "computedHash": "ca7b0c0c..." },
6  "web-design-guidelines":        { "source": "vercel-labs/agent-skills",   "computedHash": "f3bc47f8..." }
7}

設計意義:類似 package-lock.json 鎖 npm 版本,本檔鎖外部 skill 的「內容 hash」— 即使上游 force-push,本地裝的還是 audit 過的那個 hash。

3.5 @slide-comment marker 制度

1// slides/intro/index.tsx
2<h1 className="text-6xl font-bold">
3  {/* @slide-comment id="abc123" content="make this red" */}
4  Hello, World
5</h1>

當使用者在 dev server inspector 對 <h1> 加 comment「make this red」:

  1. comments.tsMARKER_RE.exec 解析每行
  2. 找到對應 .tsx 行號 + element identity
  3. 插入 @slide-comment id="abc123" content="..." marker
  4. /apply-comments → agent 對每個 marker 套用修改 → 寫回 .tsx → 清 marker

是「跨 stage 評審」的精華系統。

4. Helper Scripts 詳細用法

4.1 npx @open-slide/cli init

1npx @open-slide/cli init my-slide              # 全互動
2npx @open-slide/cli init my-slide --yes        # 接受所有預設

行為:

  1. mkdir my-slide
  2. 複製 packages/cli/template/ 進去
  3. package.json 設定 @open-slide/core@<pinned-version>(PR #147 修正)
  4. AGENTS.md / CLAUDE.md(symlink)
  5. 拷貝 5 個內建 skill 進 .claude/skills/ + .agents/skills/

4.2 open-slide CLI(從 @open-slide/core)

1# scaffold 後,在 workspace 內
2open-slide dev               # 起 dev server(hot reload)
3open-slide dev -p 3000 --host --open
4
5open-slide build             # build 靜態 HTML 到 dist/
6open-slide build --out-dir docs/
7
8open-slide preview           # serve 已 build 的靜態
9open-slide preview -p 4173 --host --open

4.3 monorepo workflow(contributor)

 1pnpm dev                       # turbo run dev(demo + 框架同時)
 2pnpm dev:web                   # 只跑行銷站
 3pnpm dev:demo                  # 只跑 demo
 4
 5pnpm core <script>             # 過濾到 @open-slide/core package
 6pnpm cli <script>              # 過濾到 @open-slide/cli package
 7
 8pnpm check                     # biome check(format + lint + organize imports)
 9pnpm check:fix                 # auto-fix
10
11pnpm changeset                 # 加新 changeset(必做:當 core / cli 改動)
12pnpm version-packages          # 跑 changeset version(apply CHANGELOG)
13pnpm release                   # build + changeset publish(**只 maintainer 跑**)

Hard rule(AGENTS.md):core 或 cli 改了 → 必須 pnpm changeset 加 changeset,否則 CI 擋。

4.4 packages/cli/scripts/sync-template-skills.mjs

packages/core/skills/ 同步到 packages/cli/template/.claude/skills/ — 確保 cli 出 template 時帶最新 skill 版本。

4.5 demo workspace 的 10+ 示範 deck

 1apps/demo/slides/
 2├── claude-code-intro/
 3├── harness-engineering/
 4├── image-placeholder-demo/
 5├── llm-fundamentals/
 6├── material-design-2014/
 7├── nextjs-ppr-cache/
 8├── open-slide-anatomy/
 9├── open-slide-launch/
10├── raycast-api/
11└── ssh-explained/

每個都是「agent 真實產出」的範例 — 學 prompt 寫法 / aesthetic 變化 / interactive demo 的最好教材。

5. 應用場景

場景怎麼用
產品 launch deck/create-slide → 「我們要為 X 產品做 15 頁啟動 deck,brand = 簡潔 / 黑白基調」
conf talk / keynote/create-slide → 「30 分鐘技術演講,主題 X」 → present mode + 演講者模式 + speaker notes + timer
教學影片預錄屏dev server 1920×1080 固定,OBS 直接抓 viewport
多版本變化一個 prompt 改 aesthetic 重跑 /create-slide,10 分鐘出 5 個變體
跨團隊評審把 dev server URL 分享出去,評審者 click 元素加 comment,作者 /apply-comments 批次套用
客戶提案pnpm build → static HTML → 上 Vercel 給 client URL 看
內部知識分享/create-slide 餵 internal docs,agent 出 deck,全公司分享

6. 資安掃描報告

掃描範圍:packages/core/src/packages/cli/src/scripts/、SKILL.md、SECURITY.md、scaffold template。

風險面燈號說明
eval() / new Function() / shell exec🟢 低全 repo 只發現三處 RegExp.exec(不是 shell exec):themes/theme-detail.tsx 抓 hex / editing/comments.ts 解析 marker — 安全
Shell injection🟢 低CLI scaffold 純 file 操作;無外呼 shell
Token / secret 洩漏🟢 低0 找到 hardcoded secret;package.json 無發布 key
外部 fetch🟡 中svgl 整合會打 svgl.app catalogue API(無 auth,純公開 SVG 索引)
In-browser inspector 寫檔🟡 中dev server 的 inspector 會直接寫 source(加 @slide-comment marker)— 只在 dev mode,且只寫到 workspace 內
@slide-comment marker 攻擊面🟢 低marker 純文字 comment,不執行;/apply-comments 由 agent 解析後重寫 .tsx — 由 agent 把關
skills-lock 信任🟢 低4 個外部 skill 都 SHA-pinned,來源 anthropics/skillsvercel-labs/agent-skills(兩家官方)
Scaffold template 安全🟢 低template 只有靜態檔案 + 預設 config,不含可執行 script
依賴鏈🟡 中pnpm-lock.yaml 409KB(典型大型前端專案);npm audit 應跑
AGENTS.md 守則🟢 低明確規範「不亂改 shadcn-generated UI」「不寫無 WHY 註解」「changeset 必做」 — 反映嚴謹 maintainer 心態
SECURITY.md🟡 中內容是 GitHub 預設範本(沒實際填)— 待補實際 disclosure 流程
Deploy 設定(netlify.toml / vercel.json)🟢 低純靜態 host config

綜合燈號:🟢 / 🟡(無紅燈;可放心個人 / 團隊使用)

重點建議

  • 把 dev server 暴露給網路前確認防火牆(pnpm dev --host 會 bind 0.0.0.0)
  • export PDF 前確認 deck 內沒有機密資訊(PDF 可分享 = 不可撤銷)
  • 若公司有 internal SKILL.md / theme,fork 來鎖內部 hash 進 skills-lock.json
  • 提 issue 請作者把 SECURITY.md 填實質內容

7. FAQ

Q1:跟 ConardLi/web-video-presentation 差別? A:

  • web-video-presentation一個 skill — 自帶 Vite + React + TS scaffold;focus 在「網頁假裝影片」(click-driven 16:9 narration)
  • open-slide一個 framework — 自帶 5 個 skill;focus 在「正規簡報」(present mode / 演講者模式 / PDF export / 一鍵 deploy)
  • 可以併用:用 web-video-presentation 出影片素材;用 open-slide 出正規 deck

Q2:跟 Slidev / reveal.js / Marp 差別? A:

  • Slidev:Vue + Markdown,agent friendly 但非 agent-native
  • reveal.js:HTML / JS,自由度高但無 framework guidance
  • Marp:純 Markdown,簡單但功能受限
  • open-slide:React + agent-native + canvas 鎖死 1920×1080 + 內建評審迴圈 — 對「用 agent 寫」最優

Q3:1920×1080 鎖死會不會限制設計? A:不會。所有 modern projector / screen 都能正確 scale;對視覺一致性反而有利(你不用為 4K monitor 重新調字級)。

Q4:每個 slide 一個 .tsx 不會太多檔嗎? A:每個 slide 自帶資產(圖、子組件)放同目錄 slides/<id>/;scale 到 50+ slides 仍清晰。

Q5:作者 1weiho 是誰? A:Yiwei Ho;本 repo 是個人 OSS + 已有多位社群 PR 貢獻者(Sam Serrien / Matt Van Horn / Kyle Chung 等)。

Q6:能不能完全離線跑(不用 npm)? A:scaffold 後第一次 pnpm install 要連網;之後 pnpm dev / pnpm build 全本機。svgl 搜尋會發送網路請求,可關。

Q7:5 個內建 skill 哪個最常用? A:使用者面向:/create-slide + /apply-comments。框架認知面向:/slide-authoring(讓 agent 一開始就讀對規則)。

Q8:對 enterprise 部署友善嗎? A:MIT license,靜態 HTML output → 可放企業內網 / 私有 CDN;零 server / 零 runtime / 零 lock-in;非常適合 enterprise。

Q9:vs PowerPoint / Keynote 真實取代? A:「描述驅動」勝;「點滑鼠拖元素」輸。適合寫程式的人 / 用 agent 的人;不適合完全不寫程式的 PM / 業務。但對「需要重複出 deck 的工程師團隊」是 game changer。

8. 進階技巧

8.1 自製 theme

1# 在 workspace 內
2/create-theme
3# agent 問 brand color / typography / spacing scale → 寫到 themes/<name>/

8.2 把 deck 改成「動態頁碼」

1import { useSlidePageNumber } from '@open-slide/core'
2
3export default function Slide() {
4  const { current, total } = useSlidePageNumber()
5  return <div>Page {current} of {total}</div>
6}

PR #137 加入的 hook;對自製 footer / progress bar 很方便。

8.3 評審改稿迴圈 SOP

  1. pnpm dev 啟動
  2. present mode 走過一遍
  3. 看到要改的,用 inspector 點該元素 + 輸入 comment(例:「shrink headline」「move logo to right」)
  4. 累積多個 comment 後,跑 /apply-comments
  5. agent 把所有 comment 套用、清掉 marker
  6. 重新 present → 確認結果 → 下一輪

inspector 內 assets 面板有 svgl 搜尋;輸入「stripe」「openai」等品牌名直接 drop 進去。

8.5 多檔結構的 slide

1slides/llm-fundamentals/
2├── index.tsx
3├── slide-1-intro.tsx
4├── slide-2-architecture.tsx
5└── components/
6    └── attention-diagram.tsx

index.tsx 是入口;PR #142 已修「inspector selection works in multi-file slide structures by tagging all .tsx files」。

8.6 自訂 skill / 把自家 skill 加進 skills-lock

1# 在 .agents/skills/<your-skill>/SKILL.md 加好
2# 然後手動編 skills-lock.json 加一筆(source 用 GitHub repo + SHA hash)

8.7 一鍵 deploy

1# Vercel:scaffold 已含 vercel.json
2vercel
3
4# Netlify:scaffold 已含 netlify.toml
5netlify deploy --prod
6
7# Cloudflare Pages
8wrangler pages deploy dist

9. 整合進其他工作流

既有 skill整合方式
ai-gh-save已存 standard gh-save md 在 inbox/2026-05-22-github-1weiho-open-slide.md
gh-tutorial-qd本檔產出
garden-skillsweb-video-presentation互補(影片 vs 正規 slide)
agency-agents把 marketing / strategy persona 喚醒,再透過 /create-slide 出 deck
agentmemory跨 session 記得 deck 的 brand / style — 下次出新 deck 一致性高
dari-docs把 slides 內容當 docs 測:agent 能不能照 deck 內的 install 步驟跑通?
text-to-cad機械設計 review 時用 open-slide 出 deck 展示
meeting-intel把 thematic 拆解結果直接喂 /create-slide 出 pre-meeting deck
quarkdown不互衝:quarkdown 是 markdown→html paged 排版;open-slide 是 React-based slide framework。兩條路線各有適用
patent-creator不適用(patent draft 機密邊界禁外部寫入)

10. 重點摘要 Checklist

  • 3.5k stars / 248 forks / MIT / 1 個月生命週期(2026-04-26)
  • @open-slide/core@1.6.0 + @open-slide/cli@1.2.4(2026-05-19 雙釋出)
  • pnpm + Turbo monorepo(biome + changesets + vitest)
  • 5 個內建 skill:create-slide / slide-authoring / apply-comments / create-theme / current-slide
  • 4 個外部 skill(SHA-pinned in skills-lock.json)
  • 1920×1080 固定 canvas + 自動 scale
  • @slide-comment marker + /apply-comments 評審迴圈
  • svgl logo 搜尋 + assets manager
  • present mode + 演講者模式 + speaker notes + timer
  • 靜態 HTML / PDF 雙 export
  • 一鍵 deploy(Vercel / Cloudflare / Netlify / Zeabur)
  • 跨 agent(Claude / Codex / Cursor / OpenCode 等支援 SKILL.md 的)
  • AGENTS.md → CLAUDE.md symlink(單一真實來源)
  • 10+ 個 demo deck 可參考
  • 資安綜合燈號:🟢 / 🟡(無紅燈)

11. 進一步閱讀