# Open Design > [!IMPORTANT] > ### 🔥 `0.8.0-preview` 已發佈。設計的舊世界,到此為止。 > > 開源、agent-native 的 Claude Design / Figma 替代品 —— 上線兩週,40k stars 在身,且仍在加速。**剩下的路,需要你和我們一起推完。** > > **正在 `main` 分支飛速迭代中** —— 0.8.0 是 Open Design 的下一階段。提一個 PR、扔一個想法、報一個 bug —— 你帶來的,就是這場運動接下來的樣子。 > > → [**讀公告 · 下載安裝包 · 加入這場運動**](https://github.com/nexu-io/open-design/discussions/1727) · 可與你現有的 0.7 並行安裝。 > **[Claude Design][cd] 的開源替代品。** 本地優先、可部署到 Vercel、每一層都 BYOK —— **16 套 coding-agent CLI** 在 `PATH` 上自動檢測(Claude Code, Codex, Devin for Terminal, Cursor Agent, Gemini CLI, OpenCode, Qwen, Qoder CLI, GitHub Copilot CLI, Hermes, Kimi, Pi, Kiro, Kilo, Mistral Vibe, DeepSeek TUI)就是設計引擎,由 **31 個可組合 Skills** 和 **72 套品牌級 Design System** 驅動。一個都沒裝?還有 OpenAI 相容的 BYOK 代理 `/api/proxy/stream` 備援,同一條 loop,少一次 spawn 而已。

Open Design 封面:與本地 AI 智慧體共同設計

Stars Forks Issues Pull Requests Contributors Commit activity Last commit

下載客戶端 Latest release License Agents Design systems Skills Discord Follow @nexudotio on X Quickstart

English · Español · Português (Brasil) · Deutsch · Français · 简体中文 · 繁體中文 · 한국어 · 日本語 · العربية · Русский · Українська · Türkçe

--- ## 為什麼要做這個 Anthropic 的 [Claude Design][cd](2026-04-17 釋出,基於 Opus 4.7)讓大家第一次看到:當一個 LLM 不再寫廢話、開始直接交付設計成品,會是什麼樣子。它瞬間爆紅 —— 然後保持**閉源**、付費、只跑在雲上、綁定 Anthropic 的模型和 Anthropic 的內部 skill。沒有 checkout,沒有自託管,沒有 Vercel 部署,也換不了自己的 agent。 **Open Design(OD)就是它的開源替代品。** 同一套 loop、同一種「artifact-first」心智模型,但沒有鎖定。我們不做 agent —— 你筆記本上最強的 coding agent 已經裝好了。我們要做的,是把它接進一個 skill 驅動的設計工作流:本地用 `pnpm tools-dev` 跑完整本地閉環,雲端可單獨部署 Web 層,每一層都 BYOK(自帶 Key)。 輸入「幫我做一份雜誌風的種子輪 pitch deck」。在模型揮灑第一個畫素之前,**初始化問題表單**已經先跳出來。Agent 從 5 套精選的視覺方向裡選一個。一張動態的 `TodoWrite` 計畫卡片即時流入 UI。Daemon 在磁碟上構建出一個真實的專案目錄,裡面有 seed 模板、佈局庫、自檢 checklist。Agent **強制 pre-flight** 讀取它們,對自己的輸出跑一輪**五維評審**,幾秒後吐出一個 ``,渲染在沙盒 iframe 裡。 這不是「AI 試圖做點設計」。這是一個被提示詞堆疊訓練得像高階設計師一樣工作的 AI —— 有可用的檔案系統、有確定性的色票庫、有 checklist 文化 —— 也就是 Claude Design 立下的那條線,只是這次它開源、歸你。 OD 站在四個開源專案的肩膀上: - [**`alchaincyf/huashu-design`**(花叔的畫術)](https://github.com/alchaincyf/huashu-design) —— 設計哲學的指南針。Junior-Designer 工作流、5 步品牌資產協議、anti-AI-slop checklist、五維自評審、以及方向選擇器背後的「5 流派 × 20 種設計哲學」思路 —— 全部蒸餾進 [`apps/daemon/src/prompts/discovery.ts`](apps/daemon/src/prompts/discovery.ts)。 - [**`op7418/guizang-ppt-skill`**(歸藏的雜誌風 PPT skill)](https://github.com/op7418/guizang-ppt-skill) —— Deck 模式。原樣納入在 [`skills/guizang-ppt/`](skills/guizang-ppt/) 下,原 LICENSE 保留;雜誌版式、WebGL hero、P0/P1/P2 checklist。 - [**`OpenCoworkAI/open-codesign`**](https://github.com/OpenCoworkAI/open-codesign) —— UX 北極星,也是我們最接近的同類。第一個開源的 Claude-Design 替代品。我們借鑑了它的流式 artifact 迴圈、沙盒 iframe 預覽模式(自帶 React 18 + Babel)、即時 agent 面板(todos + tool calls + 可中斷生成)、5 種匯出格式列表(HTML / PDF / PPTX / ZIP / Markdown)。我們刻意在形態上做出差異化 —— 它是桌面 Electron 應用,把 [`pi-ai`][piai] 打包進去做 agent;我們是 Web 應用 + 本地 daemon,把 agent 執行時**委託**給你已經裝好的 CLI。 - [**`multica-ai/multica`**](https://github.com/multica-ai/multica) —— Daemon 與執行時架構。PATH 掃描式 agent 檢測,本地 daemon 作為唯一的特權程序,agent-as-teammate 的世界觀。 ## 一眼概覽 | | 你拿到的 | |---|---| | **Coding-agent CLI(16 套)** | Claude Code · Codex CLI · Devin for Terminal · Cursor Agent · Gemini CLI · OpenCode · Qwen Code · Qoder CLI · GitHub Copilot CLI · Hermes (ACP) · Kimi CLI (ACP) · Pi (RPC) · Kiro CLI (ACP) · Kilo (ACP) · Mistral Vibe CLI (ACP) · DeepSeek TUI —— 在 `PATH` 上自動檢測,picker 一鍵切換 | | **BYOK 備援** | 協定專用 API 代理 `/api/proxy/{anthropic,openai,azure,google}/stream` —— 填 `baseUrl` + `apiKey` + `model`,選擇 Anthropic / OpenAI / Azure OpenAI / Google Gemini,daemon 將 SSE 正規化回同一條 chat stream。daemon 邊界拒絕內部 IP / SSRF。 | | **內建 design system** | **129 套** —— 2 套手寫起手 + 70 套從 [`awesome-design-md`][acd2] 匯入的產品系統(Linear、Stripe、Vercel、Airbnb、Tesla、Notion、Anthropic、Apple、Cursor、Supabase、Figma、小紅書…),加上 57 套從 [`awesome-design-skills`][ads] 直接收錄到 `design-systems/` 下的 design skill | | **內建 skill** | **31 個** —— 27 個 `prototype` 模式(web-prototype、saas-landing、dashboard、mobile-app、gamified-app、social-carousel、magazine-poster、dating-web、sprite-animation、motion-frames、critique、tweaks、wireframe-sketch、pm-spec、eng-runbook、finance-report、hr-onboarding、invoice、kanban-board、team-okrs…)+ 4 個 `deck` 模式(`guizang-ppt` · `simple-deck` · `replit-deck` · `weekly-update`)。Picker 按 `scenario` 分組:design / marketing / operation / engineering / product / finance / hr / sale / personal。 | | **媒體生成** | Image · video · audio surface 與設計迴圈並行。**gpt-image-2**(Azure / OpenAI)用於海報、頭像、資訊圖表、插畫地圖 · **Seedance 2.0**(ByteDance)用於電影級 15 秒 text-to-video 和 image-to-video · **HyperFrames**([heygen-com/hyperframes](https://github.com/heygen-com/hyperframes))用於 HTML→MP4 動態圖形(產品展示、動態排版、資料圖表、社群浮水印、logo 結尾)。**93 條**可一鍵複刻的 prompt gallery —— 43 條 gpt-image-2 + 39 條 Seedance + 11 條 HyperFrames —— 收錄在 [`prompt-templates/`](prompt-templates/) 下,附預覽縮圖與來源標註。與寫 code 同一個 chat 介面;生成真實的 `.mp4` / `.png` 晶片寫入專案 workspace。 | | **視覺方向** | 5 套精選流派(Editorial Monocle · Modern Minimal · Warm Soft · Tech Utility · Brutalist Experimental),每套自帶 OKLch 色票 + 字型堆疊([`apps/daemon/src/prompts/directions.ts`](apps/daemon/src/prompts/directions.ts)) | | **裝置外殼** | iPhone 15 Pro · Pixel · iPad Pro · MacBook · Browser Chrome —— 畫素級精確,跨 skill 共享,統一在 [`assets/frames/`](assets/frames/) | | **Agent 執行時** | 本地 daemon 在你的專案目錄裡 spawn CLI —— agent 擁有真實的 `Read` / `Write` / `Bash` / `WebFetch`,作用在真實磁碟上;每個 adapter 都有 Windows `ENAMETOOLONG` 備援(stdin / 臨時 prompt 檔案) | | **匯入** | 把 [Claude Design][cd] 匯出的 ZIP 直接拖到歡迎彈窗 —— `POST /api/import/claude-design` 解壓成真實專案,agent 接著 Anthropic 停下的地方繼續編輯,不用再向模型重述上下文 | | **持久化** | SQLite 在 `.od/app.sqlite`:projects · conversations · messages · tabs · 使用者 templates。明天再開,todo 卡片和開啟的檔案都還在原位。 | | **生命週期** | 唯一入口 `pnpm tools-dev`(start / stop / run / status / logs / inspect / check)—— 用型別化 sidecar stamp 啟動 daemon + web(+ desktop) | | **桌面版** | 可選 Electron 殼:渲染器 sandbox + sidecar IPC(STATUS / EVAL / SCREENSHOT / CONSOLE / CLICK / SHUTDOWN)—— 同一通道驅動 `tools-dev inspect desktop screenshot`,跑 E2E | | **部署目標** | 本地 `pnpm tools-dev` · Vercel Web 層 · 打包好的 Electron 桌面端,支援 macOS(Apple Silicon)和 Windows(x64)—— 從 [open-design.ai](https://open-design.ai/) 或 [最新 release](https://github.com/nexu-io/open-design/releases) 直接下載 | | **License** | Apache-2.0 | [acd2]: https://github.com/VoltAgent/awesome-design-md [ads]: https://github.com/bergside/awesome-design-skills ## 效果展示
01 · 入口頁
入口頁 —— 選 skill、選 design system、寫一行需求。同一個表面服務原型、deck、行動版、dashboard、editorial 頁面所有 mode。
02 · 初始化問題表單
初始化問題表單 —— 模型動筆之前,OD 先把需求鎖住:surface、受眾、調性、品牌上下文、規模。30 秒勾選項秒殺 30 分鐘來回返工。
03 · 方向選擇器
方向選擇器 —— 使用者沒有品牌上下文時,agent 自動跳第二個表單,5 套精選方向(Monocle / Modern Minimal / Tech Utility / Brutalist / Soft Warm)一個 radio 選完,色票 + 字型堆疊直接鎖定,沒有 freestyle 空間。
04 · 即時 todo 進度
即時 todo 進度 —— Agent 的計畫以即時卡片形式流入 UI。in_progresscompleted 即時切換。使用者能在中途以極低成本介入修正。
05 · 沙盒預覽
沙盒預覽 —— 每個 <artifact> 都在乾淨的 srcdoc iframe 裡渲染。可在檔案工作區裡就地編輯;可下載為 HTML / PDF / ZIP。
06 · 72 套 design system 庫
72 套 design system 庫 —— 每套產品系統都展示 4 色色卡。點進去看完整的 DESIGN.md、色票網格、live showcase。
07 · 雜誌風 deck
Deck 模式(guizang-ppt) —— 內建的 guizang-ppt-skill 原樣接入。雜誌版式、WebGL hero 背景、單檔案 HTML 輸出、可導 PDF。
08 · 行動版原型
行動版原型 —— 畫素級精確的 iPhone 15 Pro chrome(靈動島、狀態列 SVG、Home Indicator)。多螢幕原型直接複用 /frames/ 共享資源,agent 永遠不需要重新畫一遍手機。
## 內建 Skills **31 個 skill,每個一個資料夾**,都遵循 Claude Code 的 [`SKILL.md`][skill] 規範,併疊加 OD 的 `od:` frontmatter,daemon 原樣解析 —— `mode`、`platform`、`scenario`、`preview.type`、`design_system.requires`、`default_for`、`featured`、`fidelity`、`speaker_notes`、`animations`、`example_prompt`([`apps/daemon/src/skills.ts`](apps/daemon/src/skills.ts))。 兩種頂層 **mode** 撐起整個目錄:**`prototype`**(27 個 —— 任何能被渲染成單頁 artifact 的產物,從雜誌風 landing 到手機螢幕到 PM 規格文件都算)和 **`deck`**(4 個 —— 橫滑式演示,自帶 deck framework 框架)。**`scenario`** 是 picker 用來分組的欄位:`design` · `marketing` · `operation` · `engineering` · `product` · `finance` · `hr` · `sale` · `personal`。 ### 示例展示(Showcase examples) 視覺表現最強、最適合入門第一跑的幾條 skill。每條都附帶可直接開啟的 `example.html` —— 不用登入、不用配置,先看產出再動手。
dating-web
dating-web · prototype
消費級約會 / 婚戀儀表盤 —— 左側欄、社群動態 ticker、頭部 KPI、30 天雙向匹配柱狀圖,editorial 字型,剋制點綴色。
digital-eguide
digital-eguide · template
兩頁數字 e-guide —— 封面(標題、作者、TOC 預告)+ 內文跨頁(pull-quote + 步驟列表),創作者 / 生活方式風。
email-marketing
email-marketing · prototype
品牌新品釋出郵件 —— 頂部 wordmark、hero 圖、標題鎖排、主 CTA、規格網格。居中單列 + 表格降級,郵件客戶端安全。
gamified-app
gamified-app · prototype
三螢幕遊戲化移動 app 原型,黑色舞臺 —— 封面 / 今日任務(XP 緞帶 + 等級條)/ 任務詳情。
mobile-onboarding
mobile-onboarding · prototype
三螢幕行動版引導流 —— splash、價值主張、登入。狀態列、滑動點、主 CTA。
motion-frames
motion-frames · prototype
單幀 motion 設計 hero,CSS 迴圈動畫 —— 旋轉字環、地球、計時器。可直接交給 HyperFrames 等關鍵幀匯出。
social-carousel
social-carousel · prototype
1080×1080 三連社媒輪播圖 —— 三張電影感面板,標題前後呼應,品牌標識、loop 標記。
sprite-animation
sprite-animation · prototype
畫素 / 8-bit 動畫直譯器單幀 —— 米白通螢幕、畫素吉祥物、動感日文標題、迴圈 CSS keyframes,可直接錄螢幕成豎版影片。
### 設計與營銷類(prototype 模式) | Skill | 平臺 | 場景 | 產出 | |---|---|---|---| | [`web-prototype`](skills/web-prototype/) | 桌面 | design | 單頁 HTML —— landing、營銷、hero(prototype 預設) | | [`saas-landing`](skills/saas-landing/) | 桌面 | marketing | hero / features / pricing / CTA 營銷版式 | | [`dashboard`](skills/dashboard/) | 桌面 | operation | 帶側欄 + 資料密集型的後臺 | | [`pricing-page`](skills/pricing-page/) | 桌面 | sale | 獨立定價頁 + 對比表 | | [`docs-page`](skills/docs-page/) | 桌面 | engineering | 三欄文件版式 | | [`blog-post`](skills/blog-post/) | 桌面 | marketing | 長文 editorial | | [`mobile-app`](skills/mobile-app/) | 移動 | design | 帶 iPhone 15 Pro / Pixel 外殼的 app 螢幕 | | [`mobile-onboarding`](skills/mobile-onboarding/) | 移動 | design | 多螢幕行動版引導流(splash · 價值主張 · 登入) | | [`gamified-app`](skills/gamified-app/) | 移動 | personal | 三螢幕遊戲化 app 原型 | | [`email-marketing`](skills/email-marketing/) | 桌面 | marketing | 品牌新品釋出郵件(表格降級郵件客戶端安全) | | [`social-carousel`](skills/social-carousel/) | 桌面 | marketing | 1080×1080 三連社媒輪播 | | [`magazine-poster`](skills/magazine-poster/) | 桌面 | marketing | 單頁雜誌風海報 | | [`motion-frames`](skills/motion-frames/) | 桌面 | marketing | CSS 迴圈動畫的 motion hero | | [`sprite-animation`](skills/sprite-animation/) | 桌面 | marketing | 畫素 / 8-bit 動畫直譯器 | | [`dating-web`](skills/dating-web/) | 桌面 | personal | 消費級約會 / 婚戀儀表盤 | | [`digital-eguide`](skills/digital-eguide/) | 桌面 | marketing | 兩頁數字 e-guide(封面 + 內文跨頁) | | [`wireframe-sketch`](skills/wireframe-sketch/) | 桌面 | design | 手繪風線框稿 —— 服務於 "先把灰塊拼出來給使用者看" 的早期回合 | | [`critique`](skills/critique/) | 桌面 | design | 五維自評分卡(Philosophy · Hierarchy · Detail · Function · Innovation) | | [`tweaks`](skills/tweaks/) | 桌面 | design | AI 自吐 tweaks 面板 —— 模型自己丟擲值得調的引數 | ### Deck 類(deck 模式) | Skill | 預設 | 產出 | |---|---|---| | [`guizang-ppt`](skills/guizang-ppt/) | **deck 預設** | 雜誌風網頁 PPT —— 來自 [op7418/guizang-ppt-skill][guizang],原 LICENSE 保留 | | [`simple-deck`](skills/simple-deck/) | — | 極簡橫滑 deck | | [`replit-deck`](skills/replit-deck/) | — | 產品演示 deck(Replit 風) | | [`weekly-update`](skills/weekly-update/) | — | 團隊週報橫滑 deck(進度 · 阻塞 · 下一步) | ### 文件與辦公產物類(prototype 模式 + 文件場景) | Skill | Scenario | 產出 | |---|---|---| | [`pm-spec`](skills/pm-spec/) | product | PM 規格文件 + 目錄 + 決策日誌 | | [`team-okrs`](skills/team-okrs/) | product | OKR 計分表 | | [`meeting-notes`](skills/meeting-notes/) | operation | 會議決策紀要 | | [`kanban-board`](skills/kanban-board/) | operation | 看板快照 | | [`eng-runbook`](skills/eng-runbook/) | engineering | 故障 runbook | | [`finance-report`](skills/finance-report/) | finance | 高管財務摘要 | | [`invoice`](skills/invoice/) | finance | 單頁發票 | | [`hr-onboarding`](skills/hr-onboarding/) | hr | 崗位入職計畫 | 新增一個 skill 就是新增一個資料夾。讀 [`docs/skills-protocol.md`](docs/skills-protocol.md) 瞭解擴充套件 frontmatter,fork 一個現有 skill,重啟 daemon 即生效。目錄拉取走 `GET /api/skills`;單個 skill 的種子拼裝(template + 邊角檔案 references)走 `GET /api/skills/:id/example`。 ## 六個底層設計 ### 1 · 我們不帶 agent,你的就夠好 Daemon 啟動時掃 `PATH`,找 [`claude`](https://docs.anthropic.com/en/docs/claude-code)、[`codex`](https://github.com/openai/codex)、[`cursor-agent`](https://www.cursor.com/cli)、[`gemini`](https://github.com/google-gemini/gemini-cli)、[`opencode`](https://opencode.ai/)、[`qwen`](https://github.com/QwenLM/qwen-code)、`qodercli`、[`copilot`](https://github.com/features/copilot/cli)、`hermes`、`kimi` 和 [`pi`](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent)。能找到的都成為候選設計引擎 —— 走 stdio,每個 CLI 一個 adapter,model picker 一鍵切換。靈感來自 [`multica`](https://github.com/multica-ai/multica) 和 [`cc-switch`](https://github.com/farion1231/cc-switch)。一個 CLI 都沒裝?`POST /api/proxy/stream` 就是同一條管線減去 spawn —— 填任意 OpenAI 相容 `baseUrl` + `apiKey`,daemon 把 SSE 轉發回瀏覽器,loopback / link-local / RFC1918 在邊界直接拒絕。 ### 2 · Skill 是檔案,不是外掛 遵循 Claude Code [`SKILL.md` 規範](https://docs.anthropic.com/en/docs/claude-code/skills),每個 skill = `SKILL.md` + `assets/` + `references/`。把一個資料夾丟進 [`skills/`](skills/),重啟 daemon,picker 裡就能看到。內建的 `magazine-web-ppt` 就是 [`op7418/guizang-ppt-skill`](https://github.com/op7418/guizang-ppt-skill) **原樣**納入 —— 原 LICENSE 保留、原作者歸屬保留。 ### 3 · Design System 是可移植的 Markdown,不是 theme JSON [`VoltAgent/awesome-design-md`][acd2] 的 9 段式 `DESIGN.md` —— color、typography、spacing、layout、components、motion、voice、brand、anti-patterns。每個 artifact 都從啟用的 system 裡讀 token。切換 system → 下一次渲染就用新的 token。下拉框裡現成的有:**Linear、Stripe、Vercel、Airbnb、Tesla、Notion、Apple、Anthropic、Cursor、Supabase、Figma、Resend、Raycast、Lovable、Cohere、Mistral、ElevenLabs、X.AI、Spotify、Webflow、Sanity、PostHog、Sentry、MongoDB、ClickHouse、Cal、Replicate、Clay、Composio、小紅書…** 共 72 套。 ### 4 · 初始化問題表單幹掉 80% 的來回返工 OD 的提示詞堆疊把 `RULE 1` 寫死了:每個新設計任務都從 `` 開始,**不是程式碼**。Surface · 受眾 · 調性 · 品牌上下文 · 規模 · 約束。一段寫得很長的需求裡仍然有大量留白:視覺調性、色彩立場、規模 —— 而表單恰恰把這些用 30 秒勾選項鎖死。錯方向的代價是一輪對話,不是一份做完的 deck。 這就是從 [`huashu-design`](https://github.com/alchaincyf/huashu-design) 蒸餾出來的 **Junior-Designer 模式**:開工前一次性批次問完,儘早 show 出一些可見的東西(哪怕只是灰色方塊的 wireframe),讓使用者用最低成本介入修正。再疊加品牌資產協議(定位 · 下載 · `grep` hex · 寫 `brand-spec.md` · 複述),這是輸出從「AI freestyle」跳到「先看資料再畫圖的設計師」最關鍵的一步。 ### 5 · Daemon 讓 agent 感覺自己就在你筆記本上 —— 因為它就是 Daemon `spawn` CLI 時,`cwd` 設到該專案在 `.od/projects//` 下的 artifact 資料夾。Agent 拿到的 `Read` / `Write` / `Bash` / `WebFetch` 都是真工具,作用在真檔案系統上。它能 `Read` skill 的 `assets/template.html`,能 `grep` 你的 CSS 拿 hex,能寫一份 `brand-spec.md`,能實作生成的圖片,能產出 `.pptx` / `.zip` / `.pdf` —— 這些檔案在 turn 結束的時候作為下載 chip 出現在檔案工作區裡。Session、對話、訊息、tab 都持久化在本地 SQLite 裡 —— 明天再開啟這個專案,agent 的 todo 卡片還在你昨天停下的地方。 ### 6 · 提示詞堆疊本身就是產品 傳送時拼裝的不是「system + user」。它是: ``` DISCOVERY 指令 (turn-1 表單、turn-2 品牌分支、TodoWrite、五維評審) + 身份與工作流憲章 (OFFICIAL_DESIGNER_PROMPT、anti-AI-slop、Junior Designer 模式) + 啟用的 DESIGN.md (72 套備選) + 啟用的 SKILL.md (31 套備選) + 專案後設資料 (kind、fidelity、speakerNotes、animations、靈感 system id) + Skill 副檔案 (自動注入 pre-flight:先讀 assets/template.html + references/*.md) + (deck kind 且無 skill 種子時) DECK_FRAMEWORK_DIRECTIVE (nav / counter / scroll / print) ``` 每一層都可組合。每一層都是一個你能改的檔案。看 [`apps/daemon/src/prompts/system.ts`](apps/daemon/src/prompts/system.ts) 和 [`apps/daemon/src/prompts/discovery.ts`](apps/daemon/src/prompts/discovery.ts) 就知道真實契約長什麼樣。 ## 技術架構 ``` ┌─────────────── 瀏覽器(Next.js 16)─────────────────────────────┐ │ chat · 檔案工作區 · iframe 預覽 · 設定 · 匯入 │ └──────────────┬─────────────────────────────────┬───────────────┘ │ /api/*(dev 走 rewrites) │ ▼ ▼ ┌─────────────────────────────────┐ /api/proxy/stream (SSE) │ 本地 daemon(Express + SQLite)│ ─→ 任意 OpenAI 相容 │ │ 端點(BYOK) │ /api/agents /api/skills│ 含 SSRF 防禦 │ /api/design-systems /api/projects/… │ /api/chat (SSE) /api/proxy/stream (SSE) │ /api/templates /api/import/claude-design │ /api/artifacts/save /api/artifacts/lint │ /api/upload /api/projects/:id/files… │ /artifacts (靜態) /frames (靜態) │ │ 可選 sidecar IPC:/tmp/open-design/ipc//.sock │ (STATUS · EVAL · SCREENSHOT · CONSOLE · CLICK · SHUTDOWN) └─────────┬───────────────────────┘ │ spawn(cli, [...], { cwd: .od/projects/ }) ▼ ┌──────────────────────────────────────────────────────────────────┐ │ claude · codex · gemini · opencode · cursor-agent · qwen │ │ qoder · copilot · hermes (ACP) · kimi (ACP) · pi (RPC) │ │ 讀 SKILL.md + DESIGN.md,把 artifact 寫到磁碟 │ └──────────────────────────────────────────────────────────────────┘ ``` | 層 | 技術堆疊 | |---|---| | 前端 | Next.js 16 App Router + React 18 + TypeScript,可部署到 Vercel | | Daemon | Node 24 · Express · SSE 流 · `better-sqlite3`;表:`projects` · `conversations` · `messages` · `tabs` · `templates` | | Agent 傳輸層 | `child_process.spawn`,Claude Code 走 `claude-stream-json`、Qoder CLI 走 `qoder-stream-json`、Copilot 走 `copilot-stream-json`、Codex / Gemini / OpenCode / Cursor Agent 走 `json-event-stream`(每個 CLI 一個 parser)、Devin / Hermes / Kimi / Kiro / Kilo / Mistral Vibe 走 `acp-json-rpc`(Agent Client Protocol)、Pi 走 `pi-rpc`(stdio JSON-RPC)、Qwen Code / DeepSeek TUI 走 `plain` | | BYOK 代理 | `POST /api/proxy/stream` → OpenAI 相容 `/v1/chat/completions` 透傳 SSE;daemon 邊界拒絕 loopback / link-local / RFC1918 | | 儲存 | 純檔案 `.od/projects//` + SQLite `.od/app.sqlite`(已 gitignore,daemon 啟動自建)。`OD_DATA_DIR` 可改根目錄用於測試隔離 | | 預覽 | 沙盒 iframe(`srcdoc`)+ 每個 skill 的 `` parser([`apps/web/src/artifacts/parser.ts`](apps/web/src/artifacts/parser.ts)) | | 匯出 | HTML(內聯資源)· PDF(瀏覽器列印,deck-aware)· PPTX(agent 驅動經由 skill)· ZIP(archiver)· Markdown | | 生命週期 | `pnpm tools-dev start \| stop \| run \| status \| logs \| inspect \| check`;埠走 `--daemon-port` / `--web-port`,名稱空間走 `--namespace` | | 桌面版(可選) | Electron 殼 —— 透過 sidecar IPC 拿 web URL,不猜埠;同一通道(`STATUS`/`EVAL`/`SCREENSHOT`/`CONSOLE`/`CLICK`/`SHUTDOWN`)驅動 `tools-dev inspect desktop …` 跑 E2E | ## Quickstart ### 下載桌面端(不需建置) 試用 Open Design 最快的方式是直接下載預編譯的桌面端 —— 不用裝 Node、不用 pnpm、不用 clone: - **[open-design.ai](https://open-design.ai/)** —— 官方下載頁 - **[GitHub releases](https://github.com/nexu-io/open-design/releases)** ### 用 Docker 執行 不需在本機安裝 Node.js 或 pnpm 就能跑 Open Design。 #### 環境需求 * Docker Desktop * Docker Compose v2 驗證 Docker: ```bash id="70jv9o" docker compose version ``` #### 啟動 Open Design ```bash id="m9w43w" git clone https://github.com/nexu-io/open-design.git cd open-design/deploy docker compose up -d ``` 在瀏覽器開啟: ```text id="4s4xeh" http://localhost:7456 ``` #### 常用指令 ```bash id="gl95kp" # 查看 log docker compose logs -f # 重啟容器 docker compose restart # 停止容器 docker compose down # 拉取最新映像檔 docker compose pull docker compose up -d ``` 進階 Docker 設定與環境變數請參閱 [`QUICKSTART.zh-TW.md`](QUICKSTART.zh-TW.md)。 ### 從原始碼執行 ```bash git clone https://github.com/nexu-io/open-design.git cd open-design corepack enable corepack pnpm --version # 應輸出 10.33.2 pnpm install pnpm tools-dev run web # 開啟 tools-dev 輸出的 web URL ``` 環境要求:Node `~24`,pnpm `10.33.x`。`nvm` / `fnm` 只是可選輔助工具,不是專案必需步驟;如果使用它們,先執行 `nvm install 24 && nvm use 24` 或 `fnm install 24 && fnm use 24`,再執行 `pnpm install`。 Windows 使用者可參考 [`docs/windows-troubleshooting.md`](docs/windows-troubleshooting.md) 了解原生安裝路徑與一個小型雙擊啟動器。 桌面版/後臺啟動、固定埠重啟,以及 media 生成派發器檢查(`OD_BIN`、`OD_DAEMON_URL`、`apps/daemon/dist/cli.js`)見 [`QUICKSTART.zh-TW.md`](QUICKSTART.zh-TW.md)。 第一次載入會: 1. 檢測你 `PATH` 上有哪些 agent CLI,自動選一個。 2. 載入 31 個 skill + 72 套 design system。 3. 彈歡迎對話方塊,讓你貼 Anthropic key(僅 BYOK 備援路徑需要)。 4. **自動建立 `./.od/`** —— 本地執行時目錄,存放 SQLite 專案庫、各專案工作區、儲存下來的 artifact。**沒有** `od init` 這一步,daemon 啟動時會自己 `mkdir`。 輸入需求,回車,看 question form 跳出來,填,看 todo 卡片流動,看 artifact 渲染。點 **Save to disk** 或匯出整個專案 ZIP。 ### 第一次跑起來(`./.od/` 解釋) Daemon 在倉庫根下維護一個隱藏目錄,裡面所有內容都已 gitignore,純本機資料,**不要** commit。 ``` .od/ ├── app.sqlite ← 專案 · 對話 · 訊息 · 開啟的 tab ├── artifacts/ ← Save to disk 一次性渲染(帶時間戳) └── projects// ← 每個專案的工作目錄,也是 agent 的 cwd ``` | 想做什麼 | 怎麼做 | |---|---| | 看一眼裡面有啥 | `ls -la .od && sqlite3 .od/app.sqlite '.tables'` | | 完全清空,從零再來 | `pnpm tools-dev stop`,再 `rm -rf .od`,然後重新 `pnpm tools-dev run web` | | 換到別的位置 | `OD_DATA_DIR=<絕對或相對路徑> pnpm tools-dev run web` —— daemon 會解析 `~/` 並將相對路徑錨定在 repo 根。`OD_MEDIA_CONFIG_DIR=` 可單獨覆寫 `media-config.json` 的位置,適合想把 credentials 放在獨立目錄的場景。 | #### 將 pre-desktop-app 的 `.od/` 遷移到已安裝的 Desktop app 如果你先在 repo 裡跑過、後來才裝打包好的 Desktop app,兩個 writer 指向不同的根: - Repo dev-server(`pnpm tools-dev start web`)寫入 `/.od/`。 - 已安裝的 Desktop app 寫入 `/Open Design/namespaces//data/`,其中 `` 是 Electron 的 per-OS app-data 基礎路徑(`app.getPath("userData")` 回傳值中 `Open Design` 之前的部分)。channel 後綴是**平臺特定的** —— release workflow 會附加 `-win`/`-linux`: | 平臺 | ``(Electron `appData` 基礎路徑) | Stable channel | Beta channel | |---|---|---|---| | macOS | `~/Library/Application Support` | `release-stable` | `release-beta` | | Windows | `%APPDATA%`(= `%USERPROFILE%\AppData\Roaming`) | `release-stable-win` | `release-beta-win` | | Linux | `$XDG_CONFIG_HOME`(預設 `~/.config`) | `release-stable-linux` | `release-beta-linux` | 實際路徑範例: - macOS beta:`~/Library/Application Support/Open Design/namespaces/release-beta/data/` - Windows beta:`%APPDATA%\Open Design\namespaces\release-beta-win\data\` - Linux beta:`~/.config/Open Design/namespaces/release-beta-linux/data/` 如果不確定,檢查 packaged daemon 啟動後的 log,裡面會輸出解析後的 `daemonDataRoot`。 > **⚠️ 請在乾淨狀態下進行。** Migration 是**取代**(不是合併)Desktop app 的 data dir。兩個 writer 都必須完全停止後才能複製 —— 結束 Desktop app **且** 停止 repo dev-server。SQLite-WAL 兩邊都要乾淨 flush;如果任一 daemon 仍在執行,它可能在快照中途寫入 SQLite/WAL 頁或專案/artifact 檔案,導致 staged copy 不一致。如果 Desktop app 中已有你想保留的專案,請先決定哪一邊是 authoritative。 ##### 方案 A:透過 `OD_LEGACY_DATA_DIR` 一鍵自動遷移 適用於 Desktop app 的 `data/` 還是空的場景,這通常是升級後剛遇到 [#710](https://github.com/nexu-io/open-design/issues/710) 的典型狀態。先結束 Desktop app(讓它的 daemon 不再佔用 `app.sqlite`),再用 `OD_LEGACY_DATA_DIR` 指向舊 repo `.od/` 來重新啟動。Daemon 會把你的 payload staging 到隔壁 tmp 目錄,成功後才 promote 進 `data/`;任何失敗都會移除 staging 目錄,下次啟動重新嘗試。 Daemon 在以下情況會拒絕並顯示啟動錯誤: - `OD_LEGACY_DATA_DIR` 指向的路徑中沒有 `app.sqlite`(打錯字、來源已刪除、路徑錯誤) - Desktop 的 `data/` 已經包含 `app.sqlite`、`projects/`、`artifacts/`、`media-config.json` 等 —— SQLite/WAL 配對和專案樹無法安全交錯,daemon 拒絕合併而非靜默損毀任一方。如果 Desktop 已啟動過並播種了自己的 `data/`,請使用方案 B。 成功後會寫入 `.migrated-from` 標記,後續啟動不再執行。 先結束 Desktop app,再用這個環境變數重新啟動。啟動器必須把變數放進 **app 程序**的環境變數,而不是只放在執行 `open` / `xdg-open` 的 shell 裡。 **macOS**(LaunchServices 不會繼承 shell env,請直接執行二進位): ```bash OD_LEGACY_DATA_DIR="/path/to/old/repo/.od" \ "/Applications/Open Design.app/Contents/MacOS/Open Design" ``` 如果想走 Dock 啟動,先用 `launchctl` 設好變數再開: ```bash launchctl setenv OD_LEGACY_DATA_DIR "/path/to/old/repo/.od" open "/Applications/Open Design.app" # 看到 migration log 行出現後: launchctl unsetenv OD_LEGACY_DATA_DIR ``` **Linux**(直接執行二進位以確保 env var 確實傳入): ```bash OD_LEGACY_DATA_DIR="/path/to/old/repo/.od" /path/to/open-design # (例如你啟動過的 AppImage,或 /opt 下解壓出來的二進位) ``` **Windows(PowerShell):** ```powershell $env:OD_LEGACY_DATA_DIR="C:\path\to\old\repo\.od" & "$env:LOCALAPPDATA\Programs\Open Design\Open Design.exe" ``` Daemon log 會記錄 `[od-migrate] migration complete: copied N entries (...)`。首次啟動後即可清除環境變數;`.migrated-from` 標記會阻止後續重複遷移。 ##### 方案 B:手動複製 當方案 A 不適用時(Desktop 已有自己的資料,且你明確想取代它),用來將現有專案、SQLite、artifacts 和 `media-config.json` 帶到 Desktop app。 **macOS / Linux(bash):** ```bash set -euo pipefail # 1. 兩個 writer 都必須停止。 # - 結束 Desktop app(macOS Cmd+Q,Linux File → Exit)。 # - 停止 repo dev-server:在 repo 根執行 `pnpm tools-dev stop`。 # 2. 把 REPO 和 APP_DATA 設成你的實際路徑;下面是 macOS + beta 範例。 REPO="/path/to/open-design" APP_DATA="$HOME/Library/Application Support/Open Design/namespaces/release-beta/data" # 3. Preflight:看看 Desktop app 目前已有哪些東西。 ls "$APP_DATA/projects" 2>/dev/null && echo "Desktop 已有專案,請確認這是取代而非合併。" # 4. 先 staging 到隔壁目錄,再原子交換。`set -e` 加上 # 明確的 rsync exit code 檢查,確保非零複製在中途就中止, # 不會讓 Desktop data dir 處於半填充狀態。 STAGE="${APP_DATA}.staged-$(date +%F-%H%M)" mkdir -p "$STAGE" rsync -a --exclude='backup-*' "$REPO/.od/" "$STAGE/" || { echo "rsync 失敗,中止交換"; exit 1; } # 5. 備份 Desktop 目前資料,再把 staged copy promote 到位。 mv "$APP_DATA" "${APP_DATA}.fresh-baseline-$(date +%F-%H%M)" mv "$STAGE" "$APP_DATA" # 6. 重新啟動 Desktop app。Daemon 啟動時會套用 forward schema 變更。 ``` **Windows(PowerShell):** ```powershell $ErrorActionPreference = 'Stop' # 1. 兩個 writer 都必須停止。 # - 結束 Desktop app(File > Exit)。 # - 停止 repo dev-server:在 repo 根執行 `pnpm tools-dev stop`。 # 2. 把 $Repo 和 $AppData 設成你的實際路徑;下面是 stable channel 範例。 $Repo = 'C:\path\to\open-design' $AppData = Join-Path $env:APPDATA 'Open Design\namespaces\release-stable-win\data' # 3. Preflight:看看 Desktop app 目前已有哪些東西。 if (Test-Path (Join-Path $AppData 'projects')) { Write-Host 'Desktop 已有專案,請確認這是取代而非合併。' } # 4. 先 staging 到隔壁目錄。Robocopy /MIR 將來源鏡像到 staging, # exit code >= 8 才是真正的錯誤(0..7 是成功/資訊),所以明確防護後才 promote。 $Stamp = Get-Date -Format 'yyyy-MM-dd-HHmm' $Stage = "$AppData.staged-$Stamp" robocopy "$Repo\.od" $Stage /MIR /XD 'backup-*' | Out-Null if ($LASTEXITCODE -ge 8) { throw "robocopy 失敗 (exit $LASTEXITCODE),中止交換" } # 5. 備份 Desktop 目前資料,再把 staged copy promote 到位。 if (Test-Path $AppData) { Rename-Item $AppData "$AppData.fresh-baseline-$Stamp" } Rename-Item $Stage $AppData # 6. 重新啟動 Desktop app。Daemon 啟動時會套用 forward schema 變更。 ``` 重新啟動後若發現任何異常,刪除 `$APP_DATA`(Windows 為 `$AppData`)並將 `.fresh-baseline-*` 目錄改回原名即可還原。 > **⚠️ Schema migration 是 forward-only。** Daemon 啟動時會套用 `CREATE TABLE IF NOT EXISTS` / `ALTER TABLE` 變更;沒有版本 guard。遷移後**不要**用更舊的 repo checkout 開啟同一個 data dir —— 不支援的欄位或行為 mismatch 可能導致 workspace 不一致。首次啟動新版 app 前,先備份 `app.sqlite*`。 > **⚠️ 進階:repo dev-server 與 Desktop app 共用同一個 data dir。** 透過 `OD_DATA_DIR` 讓兩邊指向同一個目錄是可行的,但**一次只能跑一邊**。Daemon 在 WAL 模式下開啟 `app.sqlite`,並對 `projects/` 和 `artifacts/` 下的檔案進行不協調寫入;同時跑兩個 writer 可能損毀 SQLite 或 clobber artifact。務必先結束 Desktop app 再啟動 dev-server,先停止 dev-server 再開啟 Desktop app: > > ```bash > OD_DATA_DIR="$HOME/Library/Application Support/Open Design/namespaces/release-beta/data" \ > pnpm tools-dev start web > ``` 完整檔案地圖、指令碼、排錯 → [`QUICKSTART.zh-TW.md`](QUICKSTART.zh-TW.md)。 ## 跑專案 Open Design 可以跑成瀏覽器裡的 web app,也可以跑成 Electron 桌面版。兩種模式共用同一套本機 daemon + web 架構。 ### Web / Localhost(預設) ```bash # 前景模式 —— 生命週期指令在前景跑(log 寫進檔案) pnpm tools-dev run web # 看最近的 log: pnpm tools-dev logs # 背景模式 —— daemon + web 跑成背景行程 pnpm tools-dev start web ``` 預設 `tools-dev` 會綁到可用的暫時埠號,啟動時把實際 URL 印出來。要在停止狀態下用固定埠: ```bash pnpm tools-dev run web --daemon-port 17456 --web-port 17573 ``` 如果 daemon / web 已經在跑,用 `restart` 在現有 session 裡換埠: ```bash pnpm tools-dev restart --daemon-port 17456 --web-port 17573 ``` ### Desktop / Electron ```bash # 在背景啟動 daemon + web + desktop pnpm tools-dev # 看桌面版狀態 pnpm tools-dev inspect desktop status # 對桌面版截圖 pnpm tools-dev inspect desktop screenshot --path /tmp/open-design.png ``` 桌面版透過 sidecar IPC 自動探得 web URL —— 不用猜埠。 ### 其他常用指令 | 指令 | 用途 | |---|---| | `pnpm tools-dev status` | 顯示 sidecar 執行狀態 | | `pnpm tools-dev logs` | 看 daemon / web / desktop 的 log 尾端 | | `pnpm tools-dev stop` | 停掉所有 sidecar | | `pnpm tools-dev restart` | 全部停掉再重啟 | | `pnpm tools-dev check` | 狀態 + 最近 log + 常見診斷 | 固定埠重啟、背景啟動、完整排錯 → [`QUICKSTART.zh-TW.md`](QUICKSTART.zh-TW.md)。 ## Nix repo 根目錄已發布一個 flake。個人開發者推薦走 Home Manager;也暴露了 NixOS module 供共享/伺服器安裝使用。完整表面(data dir、secrets、`webFrontend` vs. 自己帶 server、`OD_DAEMON_URL`)請參閱 [`nix/README.md`](nix/README.md)。 ```nix # Home Manager inputs.open-design.url = "github:nexu-io/open-design"; # then: imports = [ inputs.open-design.homeManagerModules.default ]; ``` ```bash nix run github:nexu-io/open-design # 不安裝就直接啟動 daemon(`od`) ``` 開發者也有 Nix dev shell 可用,且可搭配 `direnv`: ```bash nix develop # 帶有開發 Open Design 所需相依套件的 dev shell ``` ## 從 coding agent 端使用 Open Design Open Design 內建一個 stdio MCP server。把它接進 Claude Code、Codex、Cursor、VS Code、Antigravity、Zed、Windsurf,或任何相容 MCP 的 client,另一個 repo 裡的 agent 就能直接讀取你本機 Open Design 專案裡的檔案。整個 export-then-attach 迴圈被取代掉。當 agent 呼叫 `search_files`、`get_file`、`get_artifact` 沒帶 project 參數時,MCP 預設指向你 Open Design 當下開著的那個專案(與檔案)—— 所以 *「在我的 app 裡蓋這個」*、*「對齊這套樣式」* 這類提示直接就能用。 **為什麼選 MCP?** 每改一版設計就匯出再重附 zip,會打斷節奏。MCP server 把你的設計原始碼直接暴露成結構化 API —— 設計 token CSS、JSX 元件、入口 HTML —— agent 可以照名字查詢。Agent 永遠看到的是當下這版檔案,不是上次匯出時的舊版。 在 Open Design app 裡打開 **Settings → MCP server** 就有逐 client 的安裝流程。面板會把 `node` 二進位的絕對路徑、daemon 編好的 `cli.js` 路徑,烘進每段 snippet —— 所以即使是剛 clone 下來、`od` 不在 PATH 上的環境也能用。Cursor 給一鍵 deeplink;其它 client 給可貼上的 JSON snippet(Claude Code 還附帶 `claude mcp add-json` 一行指令,不必手改 `~/.claude.json`)。裝完之後重啟或 reload 你的 client,server 才會出現。 MCP 工具呼叫成功的前提是 daemon 在本機跑著。如果 agent 是在 Open Design 起來之前就啟動,等 OD 起來後請重啟 agent,它才連得上活的 daemon。Daemon 不在線時的工具呼叫會回 `"daemon not reachable"` 的明確錯誤,不會 crash。 **安全性。** MCP server 是唯讀的 —— 它只暴露檔案讀取、檔案 metadata、搜尋,沒有任何寫盤或呼叫外部服務的能力。它在 coding agent 下面以子行程身份透過 stdio 跑;任何你註冊上的 MCP client 都會繼承本機 Open Design 專案的讀取權限。把它當作裝 VS Code 擴充套件那樣對待 —— 只註冊你信得過的 client。Daemon 預設綁到 `127.0.0.1`;要讓區網內的機器也能連,得明確設 `OD_BIND_HOST`。 ## 倉庫結構 ``` open-design/ ├── README.md ← 英文 ├── README.de.md ← Deutsch ├── README.zh-CN.md ← 简体中文 ├── README.zh-TW.md ← 本檔案 ├── QUICKSTART.zh-TW.md ← 跑 / 構建 / 部署 ├── package.json ← 單 bin: od │ ├── apps/ │ ├── daemon/ ← Node + Express,唯一的服務端 │ │ ├── src/ ← TypeScript daemon 原始碼 │ │ │ ├── cli.ts ← `od` bin 原始碼,編譯到 dist/cli.js │ │ │ ├── server.ts ← /api/* 路由(projects、chat、files、exports) │ │ │ ├── agents.ts ← PATH 掃描器 + 各 CLI 的 argv 拼裝 │ │ │ ├── claude-stream.ts ← Claude Code stdout 流式 JSON 解析 │ │ │ ├── skills.ts ← SKILL.md frontmatter 載入器 │ │ │ └── db.ts ← SQLite schema(projects/messages/templates/tabs) │ │ ├── sidecar/ ← tools-dev daemon sidecar wrapper │ │ └── tests/ ← daemon 包測試 │ │ │ └── web/ ← Next.js 16 App Router + React 客戶端 │ ├── app/ ← App Router 入口 │ ├── next.config.ts ← dev rewrites + 生產 out/ 靜態匯出 │ └── src/ ← React + TS 客戶端模組 │ ├── App.tsx ← 路由、bootstrap、設定 │ ├── components/ ← chat、composer、picker、preview、sketch… │ ├── prompts/ ← system、discovery、directions、deck framework │ ├── artifacts/ ← streaming parser + manifest │ ├── runtime/ ← iframe srcdoc、markdown、匯出輔助 │ ├── providers/ ← daemon SSE + BYOK API 傳輸 │ └── state/ ← localStorage + daemon-backed 專案狀態 │ ├── e2e/ ← Playwright UI + 外部整合/Vitest harness │ ├── packages/ │ ├── contracts/ ← web/daemon 共享 app contracts │ ├── sidecar-proto/ ← Open Design sidecar protocol contract │ ├── sidecar/ ← 通用 sidecar runtime primitives │ └── platform/ ← 通用 process/platform primitives │ ├── skills/ ← 31 個 SKILL.md skill 包(27 prototype + 4 deck) │ ├── web-prototype/ ← prototype 預設 │ ├── saas-landing/ dashboard/ pricing-page/ docs-page/ blog-post/ │ ├── mobile-app/ mobile-onboarding/ gamified-app/ │ ├── email-marketing/ social-carousel/ magazine-poster/ │ ├── motion-frames/ sprite-animation/ digital-eguide/ dating-web/ │ ├── critique/ tweaks/ wireframe-sketch/ │ ├── pm-spec/ team-okrs/ meeting-notes/ kanban-board/ │ ├── eng-runbook/ finance-report/ invoice/ hr-onboarding/ │ ├── simple-deck/ replit-deck/ weekly-update/ ← deck 模式 │ └── guizang-ppt/ ← 內建 magazine-web-ppt(deck 預設) │ ├── SKILL.md │ ├── assets/template.html ← seed │ └── references/{themes,layouts,components,checklist}.md │ ├── design-systems/ ← 72 套 DESIGN.md │ ├── default/ ← Neutral Modern(起手) │ ├── warm-editorial/ ← Warm Editorial(起手) │ ├── linear-app/ vercel/ stripe/ airbnb/ notion/ cursor/ apple/ … │ └── README.md │ ├── assets/ │ └── frames/ ← 跨 skill 共享裝置外殼 │ ├── iphone-15-pro.html │ ├── android-pixel.html │ ├── ipad-pro.html │ ├── macbook.html │ └── browser-chrome.html │ ├── templates/ │ └── deck-framework.html ← deck 基線(nav / counter / print) │ ├── scripts/ │ └── sync-design-systems.ts ← 從上游 awesome-design-md tarball 重新匯入 │ ├── docs/ │ ├── spec.md ← 產品定義、場景、差異化 │ ├── architecture.md ← 拓撲、資料流、元件 │ ├── skills-protocol.md ← 擴充套件 SKILL.md 的 od: frontmatter │ ├── agent-adapters.md ← 各 CLI 檢測 + 派發 │ ├── modes.md ← prototype / deck / template / design-system │ ├── references.md ← 詳盡的引用與師承 │ ├── roadmap.md ← 分階段交付 │ ├── schemas/ ← JSON schema │ └── examples/ ← 標準 artifact 樣例 │ └── .od/ ← 執行時資料,已 gitignore,daemon 啟動自建 ├── app.sqlite ← 專案 / 對話 / 訊息 / tab ├── projects// ← 每個專案的工作目錄(agent 的 cwd) └── artifacts/ ← 單次儲存的 artifact ``` ## Design System

72 套 Design Systems 庫 — 編輯版式雙頁

72 套開箱即用,每套一個 [`DESIGN.md`](design-systems/README.md):
完整目錄(點選展開) **AI & LLM** —— `claude` · `cohere` · `mistral-ai` · `minimax` · `together-ai` · `replicate` · `runwayml` · `elevenlabs` · `ollama` · `x-ai` **開發者工具** —— `cursor` · `vercel` · `linear-app` · `framer` · `expo` · `clickhouse` · `mongodb` · `supabase` · `hashicorp` · `posthog` · `sentry` · `warp` · `webflow` · `sanity` · `mintlify` · `lovable` · `composio` · `opencode-ai` · `voltagent` **生產力** —— `notion` · `figma` · `miro` · `airtable` · `superhuman` · `intercom` · `zapier` · `cal` · `clay` · `raycast` **金融科技** —— `stripe` · `coinbase` · `binance` · `kraken` · `mastercard` · `revolut` · `wise` **電商 / 出行** —— `shopify` · `airbnb` · `uber` · `nike` · `starbucks` · `pinterest` **媒體** —— `spotify` · `playstation` · `wired` · `theverge` · `meta` **汽車** —— `tesla` · `bmw` · `ferrari` · `lamborghini` · `bugatti` · `renault` **其他** —— `apple` · `ibm` · `nvidia` · `vodafone` · `sentry` · `resend` · `spacex` **起手** —— `default`(Neutral Modern)· `warm-editorial`
整個庫透過 [`scripts/sync-design-systems.ts`](scripts/sync-design-systems.ts) 從 [`VoltAgent/awesome-design-md`][acd2] 匯入。重新執行即可重新整理。 ## 視覺方向 當用戶沒有品牌資產時,agent 會跳第二個表單,5 套精選方向 —— 這是 [`huashu-design` 的「設計方向顧問 · 5 流派 × 20 種設計哲學」 fallback](https://github.com/alchaincyf/huashu-design#%E8%AE%BE%E8%AE%A1%E6%96%B9%E5%90%91%E9%A1%BE%E9%97%AE-fallback) 在 OD 裡的實作。每一套都是確定性 spec —— OKLch 色票、字型堆疊、版式姿態、參考列表 —— agent 直接把它**原樣**綁進 seed 模板的 `:root`。一個 radio 選完,整套視覺系統全部鎖定。零 freestyle,零 AI slop。 | 方向 | 調性 | 參考 | |---|---|---| | Editorial — Monocle / FT | 印刷雜誌,墨水 + 米色紙 + 暖紅強調 | Monocle · FT Weekend · NYT Magazine | | Modern minimal — Linear / Vercel | 冷調、結構化、剋制強調 | Linear · Vercel · Stripe | | Tech utility | 資訊密度、等寬、終端感 | Bloomberg · Bauhaus 工具 | | Brutalist | 粗糲、巨字、無陰影、刺眼強調 | Bloomberg Businessweek · Achtung | | Soft warm | 大方、低對比、桃色中性 | Notion 營銷頁 · Apple Health | 完整 spec → [`apps/daemon/src/prompts/directions.ts`](apps/daemon/src/prompts/directions.ts)。 ## 媒體生成 OD 不只到程式碼為止。同一套產出 `` HTML 的 chat 入口,也驅動**圖像**、**影片**、**音訊**生成 —— 模型 adapter 已經接進 daemon 的 media pipeline([`apps/daemon/src/media-models.ts`](apps/daemon/src/media-models.ts)、[`apps/web/src/media/models.ts`](apps/web/src/media/models.ts))。每一次渲染都是真的寫入專案工作區的檔案,`.png` 或 `.mp4` 在 turn 結束時直接以下載 chip 形式出現。 目前主力是三個模型族: | Surface | 模型 | 提供方 | 用來做什麼 | |---|---|---|---| | **圖像** | `gpt-image-2` | Azure / OpenAI | 海報、頭像、城市插畫地圖、資訊圖、雜誌風社群卡、老照片修復、產品爆炸圖 | | **影片** | `seedance-2.0` | 字節跳動 Volcengine | 15s 電影感 t2v + i2v + 音訊 —— 敘事短片、人物特寫、產品片、MV 編排 | | **影片** | `hyperframes-html` | [HeyGen 開源](https://github.com/heygen-com/hyperframes) | HTML→MP4 動態圖形 —— 產品揭曉、動力學排版、資料圖表、社群覆蓋層、Logo 收尾、TikTok 直式配卡拉 OK 字幕 | 不斷成長的 **prompt gallery** 在 [`prompt-templates/`](prompt-templates/) —— 共 **93 條可一鍵複刻 prompt**:43 條圖像(`prompt-templates/image/*.json`)、39 條 Seedance(`prompt-templates/video/*.json`,不含 `hyperframes-*`)、11 條 HyperFrames(`prompt-templates/video/hyperframes-*.json`)。每一條都帶預覽縮圖、原文 prompt、目標模型、畫面比例,以及一個用來標註授權與作者的 `source` 區塊。daemon 在 `GET /api/prompt-templates` 暴露它們;Web 入口的 **Image templates** / **Video templates** 兩個 tab 把它們渲染成卡片網格,一鍵就把 prompt 拍進 composer,並自動選好對應模型。 ### gpt-image-2 —— 圖像樣例(共 43 條,下面 5 張)
3D Stone Staircase Evolution
3D Stone Staircase Evolution Infographic
三段式石材風資訊圖
Illustrated City Food Map
Illustrated City Food Map
編輯級手繪旅行海報
Cinematic Elevator Scene
Cinematic Elevator Scene
電梯場景的單格時尚靜畫
Cyberpunk Anime Portrait
Cyberpunk Anime Portrait
頭像 —— 霓虹臉字
Glamorous Woman in Black
Glamorous Woman in Black Portrait
編輯級攝影棚肖像
完整列表 → [`prompt-templates/image/`](prompt-templates/image/)。來源:多數取自 [`YouMind-OpenLab/awesome-gpt-image-prompts`](https://github.com/YouMind-OpenLab/awesome-gpt-image-prompts)(CC-BY-4.0),逐條保留作者署名。 ### Seedance 2.0 —— 影片樣例(共 39 條,下面 5 段)
Music Podcast Guitar
Music Podcast & Guitar Technique
4K 電影感錄音棚片段
Emotional Face
Emotional Face Close-up
電影感微表情研究
Luxury Supercar
Luxury Supercar Cinematic
敘事化產品片
Forbidden City Cat
Forbidden City Cat Satire
風格化諷刺短片
Japanese Romance
Japanese Romance Short Film
15s Seedance 2.0 敘事短片
點任意縮圖即可播放實際渲染出的 MP4。完整列表 → [`prompt-templates/video/`](prompt-templates/video/)(`*-seedance-*` 與帶 Cinematic 標籤的條目)。來源:[`YouMind-OpenLab/awesome-seedance-2-prompts`](https://github.com/YouMind-OpenLab/awesome-seedance-2-prompts)(CC-BY-4.0),保留原推連結與作者 handle。 ### HyperFrames —— HTML→MP4 動態圖形(11 條可一鍵複刻樣板) [**`heygen-com/hyperframes`**](https://github.com/heygen-com/hyperframes) 是 HeyGen 開源的 agent-native 影片框架 —— 你(或 agent)寫 HTML + CSS + GSAP,HyperFrames 透過 headless Chrome + FFmpeg 確定性地渲成 MP4。Open Design 把 HyperFrames 接成一等影片模型(`hyperframes-html`),掛進 daemon dispatch;同時帶上 `skills/hyperframes/` 這個 skill,把 timeline 合約、scene transition 規則、audio-reactive 模式、字幕 / TTS、目錄元件(`npx hyperframes add `)一起教給 agent。 11 條 HyperFrames prompt 放在 [`prompt-templates/video/hyperframes-*.json`](prompt-templates/video/),每一條都是產生具體某個原型的明確 brief:
Product reveal
5s 極簡產品揭曉 · 16:9 · 推近標題卡 + shader 轉場
SaaS promo
30s SaaS 產品片 · 16:9 · Linear / ClickUp 風格帶 UI 3D 揭曉
TikTok karaoke
TikTok 卡拉 OK 口播 · 9:16 · TTS + 單字對齊字幕
Brand sizzle
30s 品牌 sizzle · 16:9 · 節拍同步動力學排版、audio-reactive
Data chart
動畫 bar-chart race · 16:9 · NYT 風資料資訊圖
Flight map
航線地圖(起 → 終) · 16:9 · Apple 風電影感路徑揭曉
Logo outro
4s 電影感 Logo 收尾 · 16:9 · 逐部件拼合 + 光暈
Money counter
$0 → $10K 數字飆升 · 9:16 · Apple 風高燃綠光閃 + 鈔票四濺
App showcase
3 手機 app 展示 · 16:9 · 懸浮三屏 + 功能旁注
Social overlay
社群卡疊加 · 9:16 · X · Reddit · Spotify · Instagram 依序入畫
Website to video
網站到影片管線 · 16:9 · 抓 3 種視口 + 轉場串聯
 
流程跟其它一樣:挑樣板、改 brief、送出。Agent 讀取自帶的 `skills/hyperframes/SKILL.md`(裡面帶 OD 專用的渲染流程 —— composition 原始檔落到 `.hyperframes-cache/`,避免汙染檔案工作區;daemon 替你觸發 `npx hyperframes render`,繞開 macOS sandbox-exec / Puppeteer 卡死;最終只有 `.mp4` 作為專案 chip 出現),寫完 composition、產出 MP4。目錄元件縮圖版權歸 HeyGen,由 HeyGen 的 CDN 提供;OSS 框架本身是 Apache-2.0。 > **已經接好但還沒出 prompt 樣板的:** Kling 2.0 / 1.6 / 1.5、Veo 3 / Veo 2、Sora 2 / Sora 2-Pro(via Fal)、MiniMax video-01 —— 都在 `VIDEO_MODELS`([`apps/web/src/media/models.ts`](apps/web/src/media/models.ts))裡。Suno v5 / v4.5、Udio v2、Lyria 2(音樂)和 gpt-4o-mini-tts、MiniMax TTS(語音)覆蓋音訊側。補全這些模型的 prompt 樣板屬於開放貢獻 —— 把 JSON 放進 `prompt-templates/video/` 或 `prompt-templates/audio/`,picker 裡就能直接看到。 ## 聊天迴圈之外,還交付了什麼 Chat / artifact 迴圈最顯眼,但這套倉庫裡還有幾個能力被埋得有點深,對照其它產品做選型之前值得先掃一遍: - **Claude Design ZIP 匯入。** 把 claude.ai 匯出的 ZIP 拖到歡迎彈窗,`POST /api/import/claude-design` 把它解壓成真實 `.od/projects//`,把入口檔案作為 tab 開啟,並預置一句「接著 Anthropic 停下的地方繼續編輯」給本地 agent。不用再讓模型重述上下文,也不用「讓模型重新畫一遍」。([`apps/daemon/src/server.ts`](apps/daemon/src/server.ts) — `/api/import/claude-design`) - **OpenAI 相容 BYOK 代理。** `POST /api/proxy/stream` 接收 `{ baseUrl, apiKey, model, messages }`,自動歸一化路徑(`…/v1/chat/completions`),把 SSE chunk 轉發回瀏覽器;同時拒絕 loopback / link-local / RFC1918 防 SSRF。任何說 OpenAI chat schema 的 vendor 都能直接用 —— Anthropic-via-OpenAI shim、DeepSeek、Groq、MiMo、OpenRouter、自託管 vLLM 都行。MiMo 會自動加 `tool_choice: 'none'`,因為它的 tool schema 和 free-form 生成不太合得來。 - **使用者自存 templates。** 喜歡某次渲染?`POST /api/templates` 把 HTML + 後設資料快照進 SQLite `templates` 表。下個專案的 picker 裡多一行「你的模板」 —— 跟內建 31 套同一個挑選面,但是你的。 - **Tab 持久化。** 每個專案記得自己開啟的檔案和當前 tab,存在 `tabs` 表裡。明天再開啟,工作區還是你昨天離開時的樣子。 - **Artifact lint API。** `POST /api/artifacts/lint` 對生成的 artifact 跑結構性檢查(`` 框架是否破損、必需的副檔案是否缺失、palette token 是否過期),返回 agent 下一回合可以讀回去的 findings。五維自評審就是用它把分數落到證據上而不是 vibe。 - **Sidecar 協議 + 桌面版自動化。** Daemon、web、desktop 程序都帶型別化的 5 欄位 stamp(`app · mode · namespace · ipc · source`),並把 JSON-RPC IPC 通道暴露在 `/tmp/open-design/ipc//.sock`。`tools-dev inspect desktop status \| eval \| screenshot` 就跑在這條通道上,所以 headless E2E 直接打到真實 Electron 殼,不用造定製夾具([`packages/sidecar-proto/`](packages/sidecar-proto/)、[`apps/desktop/src/main/`](apps/desktop/src/main/))。 - **Windows 友好的 spawn。** 任何在長 prompt 上會撞 `CreateProcess` 32 KB argv 上限的 adapter(Codex、Gemini、OpenCode、Cursor Agent、Qwen、Qoder CLI、Pi)都改走 stdin。Claude Code 和 Copilot 保留 `-p`;連 stdin 都裝不下時 daemon 退回臨時 prompt 檔案。 - **按 namespace 隔離的 runtime data。** `OD_DATA_DIR` 加 `--namespace` 給你完全隔離的 `.od/`-style 目錄樹,Playwright、beta channel、你正經的專案永遠不會共用同一個 SQLite 檔案。 ## 反 AI Slop 機制 下面整套機制都是 [`huashu-design`](https://github.com/alchaincyf/huashu-design) 的 playbook,被移植進 OD 的提示詞堆疊,並透過 skill 副檔案 pre-flight 讓每個 skill 都能實作執行。看 [`apps/daemon/src/prompts/discovery.ts`](apps/daemon/src/prompts/discovery.ts) 是真實文案: - **先表單。** Turn 1 必須是 ``,**不準** thinking、不準 tools、不準旁白。使用者用 radio 速度選預設。 - **品牌資產協議。** 使用者貼截圖或 URL 時,agent 走 5 步流程(定位 · 下載 · grep hex · 寫 `brand-spec.md` · 複述)才能開始寫 CSS。**絕不從記憶裡猜品牌色**。 - **五維評審。** 在吐 `` 之前,agent 默默給自己 1–5 分打分,五個維度:哲學 / 層級 / 執行 / 具體度 / 剋制。任一維 < 3/5 視為退步 —— 修完再評。兩輪是常態。 - **P0/P1/P2 checklist。** 每個 skill 都自帶 `references/checklist.md`,含硬性 P0。Agent 必須 P0 全過才能 emit。 - **Slop 黑名單。** 暴力紫漸變、通用 emoji 圖示、左 border 圓角卡片、手繪 SVG 真人臉、Inter 當 *display* 字型、自編指標 —— 提示詞裡全部明令禁止。 - **誠實佔位 > 假資料。** Agent 沒真數字時寫 `—` 或一個標註的灰塊,絕不寫「快 10 倍」。 ## 橫向對比 | 維度 | [Claude Design][cd](Anthropic) | [Open CoDesign][ocod] | **Open Design** | |---|---|---|---| | License | 閉源 | MIT | **Apache-2.0** | | 形態 | Web (claude.ai) | 桌面 (Electron) | **Web 應用 + 本地 daemon** | | 可部署 Vercel | ❌ | ❌ | **✅** | | Agent 執行時 | 內建 (Opus 4.7) | 內建 ([`pi-ai`][piai]) | **委託給使用者已裝好的 CLI** | | Skill | 私有 | 12 套自定義 TS 模組 + `SKILL.md` | **31 套基於檔案的 [`SKILL.md`][skill],可丟入** | | Design system | 私有 | `DESIGN.md`(v0.2 路線圖) | **`DESIGN.md` × 72 套,開箱即有** | | Provider 靈活度 | 僅 Anthropic | 7+([`pi-ai`][piai]) | **16 套 CLI adapter + OpenAI 相容 BYOK 代理** | | 初始化問題表單 | ❌ | ❌ | **✅ 硬規則 turn 1** | | 方向選擇器 | ❌ | ❌ | **✅ 5 套確定性方向** | | 即時 todo 進度 + tool 流 | ❌ | ✅ | **✅**(UX 模式來自 open-codesign) | | 沙盒 iframe 預覽 | ❌ | ✅ | **✅**(模式來自 open-codesign) | | Claude Design ZIP 匯入 | n/a | ❌ | **✅ `POST /api/import/claude-design` —— 接著 Anthropic 停下的地方繼續編輯** | | 評論模式手術刀編輯 | ❌ | ✅ | 🚧 路線圖(移植自 open-codesign) | | AI 自吐 tweaks 面板 | ❌ | ✅ | 🟡 部分 —— [`tweaks` skill](skills/tweaks/) 已發,專屬 chat-side 面板 UX 仍在路線圖 | | 檔案系統級工作區 | ❌ | 部分(Electron 沙盒) | **✅ 真 cwd、真工具、SQLite 持久化(projects · conversations · messages · tabs · templates)** | | 五維自評審 | ❌ | ❌ | **✅ Emit 前必跑** | | Artifact lint | ❌ | ❌ | **✅ `POST /api/artifacts/lint` —— 把 findings 喂回 agent** | | Sidecar IPC + 無頭桌面版 | ❌ | ❌ | **✅ stamped 程序 + `tools-dev inspect desktop status \| eval \| screenshot`** | | 匯出格式 | 受限 | HTML / PDF / PPTX / ZIP / Markdown | **HTML / PDF / PPTX(agent 驅動)/ ZIP / Markdown** | | PPT skill 複用 | N/A | 內建 | **[`guizang-ppt-skill`][guizang] 直接接入(deck 模式預設)** | | 計費門檻 | Pro / Max / Team | BYOK | **BYOK —— 填任意 OpenAI 相容 `baseUrl`** | [cd]: https://x.com/claudeai/status/2045156267690213649 [ocod]: https://github.com/OpenCoworkAI/open-codesign [piai]: https://github.com/badlogic/pi-mono/tree/main/packages/ai [acd]: https://github.com/VoltAgent/awesome-claude-design [guizang]: https://github.com/op7418/guizang-ppt-skill [skill]: https://docs.anthropic.com/en/docs/claude-code/skills ## 支援的 Coding Agent Daemon 啟動時從 `PATH` 自動檢測,無需配置。流式分發邏輯在 [`apps/daemon/src/agents.ts`](apps/daemon/src/agents.ts) 的 `AGENT_DEFS` 裡;每個 CLI 的 parser 也在同目錄。模型列表的來源要麼是探測 ` --list-models` / ` models` / ACP 握手,要麼走精選 fallback。 | Agent | 二進位制 | 流式格式 | argv 形態(拼裝好的 prompt 路徑) | |---|---|---|---| | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | `claude` | `claude-stream-json`(型別化事件) | `claude -p --output-format stream-json --verbose [--include-partial-messages] [--add-dir …] --permission-mode bypassPermissions` | | [Codex CLI](https://github.com/openai/codex) | `codex` | `json-event-stream` + `codex` parser | `codex exec --json --skip-git-repo-check --sandbox workspace-write -c sandbox_workspace_write.network_access=true [-C cwd] [--model …] [-c model_reasoning_effort=…]`(prompt 走 stdin) | | Devin for Terminal | `devin` | `acp-json-rpc` | `devin --permission-mode dangerous --respect-workspace-trust false acp` | | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | `gemini` | `json-event-stream` + `gemini` parser | `GEMINI_CLI_TRUST_WORKSPACE=true gemini --output-format stream-json --yolo [--model …]`(prompt 走 stdin) | | [OpenCode](https://opencode.ai/) | `opencode` | `json-event-stream` + `opencode` parser | `opencode run --format json --dangerously-skip-permissions [--model …] -`(prompt 走 stdin) | | [Cursor Agent](https://www.cursor.com/cli) | `cursor-agent` | `json-event-stream` + `cursor-agent` parser | `cursor-agent --print --output-format stream-json --stream-partial-output --force --trust [--workspace cwd] [--model …] -`(prompt 走 stdin) | | [Qwen Code](https://github.com/QwenLM/qwen-code) | `qwen` | `plain`(原始 stdout chunk) | `qwen --yolo [--model …] -`(prompt 走 stdin) | | Qoder CLI | `qodercli` | `qoder-stream-json`(型別化事件) | `qodercli -p --output-format stream-json --permission-mode bypass_permissions [--cwd cwd] [--model …] [--add-dir …]`(prompt 走 stdin) | | [GitHub Copilot CLI](https://github.com/features/copilot/cli) | `copilot` | `copilot-stream-json`(型別化事件) | `copilot -p --allow-all-tools --output-format json [--model …] [--add-dir …]` | | [Hermes](https://github.com/eqlabs/hermes) | `hermes` | `acp-json-rpc`(Agent Client Protocol) | `hermes acp --accept-hooks` | | Kimi CLI | `kimi` | `acp-json-rpc` | `kimi acp` | | [Pi](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent) | `pi` | `pi-rpc`(stdio JSON-RPC) | `pi --mode rpc [--model …] [--thinking …]`(prompt 走 RPC `prompt` 命令) | | [Kiro CLI](https://kiro.dev) | `kiro-cli` | `acp-json-rpc` | `kiro-cli acp` | | Kilo | `kilo` | `acp-json-rpc` | `kilo acp` | | [Mistral Vibe CLI](https://github.com/mistralai/mistral-vibe) | `vibe-acp` | `acp-json-rpc` | `vibe-acp` | | DeepSeek TUI | `deepseek` | `plain`(原始 stdout chunk) | `deepseek exec --auto [--model …] ` | | **OpenAI 相容 BYOK** | n/a | SSE 透傳 | `POST /api/proxy/stream` → `/v1/chat/completions`;拒絕 loopback / link-local / RFC1918 | 加一個新 CLI = 在 [`apps/daemon/src/agents.ts`](apps/daemon/src/agents.ts) 里加一項。流式格式從 `claude-stream-json` / `qoder-stream-json` / `copilot-stream-json` / `json-event-stream`(搭配每 CLI 的 `eventParser`)/ `acp-json-rpc` / `pi-rpc` / `plain` 中選一個。 ## 引用與師承 每一個被借鑑的開源專案都列在這裡。點連結可以驗證師承。 | 專案 | 在這裡的角色 | |---|---| | [`Claude Design`][cd] | 本倉庫為之提供開源替代的閉源產品。 | | [**`alchaincyf/huashu-design`**(花叔的畫術)](https://github.com/alchaincyf/huashu-design) | 設計哲學的核心。Junior-Designer 工作流、5 步品牌資產協議、anti-AI-slop checklist、五維自評審、以及方向選擇器背後的「5 流派 × 20 種設計哲學」庫 —— 全部蒸餾進 [`apps/daemon/src/prompts/discovery.ts`](apps/daemon/src/prompts/discovery.ts) 與 [`apps/daemon/src/prompts/directions.ts`](apps/daemon/src/prompts/directions.ts)。 | | [**`op7418/guizang-ppt-skill`**(歸藏)][guizang] | Magazine-web-PPT skill 原樣納入在 [`skills/guizang-ppt/`](skills/guizang-ppt/) 下,原 LICENSE 保留。Deck 模式預設。P0/P1/P2 checklist 文化也被借給了所有其他 skill。 | | [**`multica-ai/multica`**](https://github.com/multica-ai/multica) | Daemon + adapter 架構。PATH 掃描式 agent 檢測、本地 daemon 作為唯一特權程序、agent-as-teammate 世界觀。我們採納模型,不 vendor 程式碼。 | | [**`OpenCoworkAI/open-codesign`**][ocod] | 第一個開源的 Claude-Design 替代品,也是我們最接近的同類。已採納的 UX 模式:流式 artifact 迴圈、沙盒 iframe 預覽(自帶 React 18 + Babel)、即時 agent 面板(todos + tool calls + 可中斷)、5 種匯出格式列表(HTML/PDF/PPTX/ZIP/Markdown)、本地優先的 designs hub、`SKILL.md` 品味注入。路線圖上的 UX 模式:評論模式手術刀編輯、AI 自吐 tweaks 面板。**我們刻意不 vendor [`pi-ai`][piai]** —— open-codesign 把它打包成 agent 執行時;我們則委託給使用者已經裝好的 CLI。 | | [`VoltAgent/awesome-claude-design`][acd] / [`awesome-design-md`][acd2] | 9 段式 `DESIGN.md` schema 的來源,69 套產品系統透過 [`scripts/sync-design-systems.ts`](scripts/sync-design-systems.ts) 匯入。 | | [`farion1231/cc-switch`](https://github.com/farion1231/cc-switch) | 跨多個 agent CLI 的 symlink 式 skill 分發靈感來源。 | | [Claude Code skills][skill] | `SKILL.md` 規範原樣採納 —— 任何 Claude Code skill 丟進 `skills/` 都能被 daemon 識別。 | 詳盡的師承說明(每一項我們採納了什麼、刻意沒採納什麼)在 [`docs/references.md`](docs/references.md)。 ## Roadmap - [x] Daemon + agent 檢測(16 套 CLI adapter)+ skill registry + design-system 目錄 - [x] Web 應用 + 對話 + question form + 5 套方向選擇器 + todo progress + 沙盒預覽 - [x] 31 個 skill + 72 套 design system + 5 套視覺方向 + 5 個裝置外殼 - [x] SQLite 後端的 projects · conversations · messages · tabs · templates - [x] OpenAI 相容 BYOK 代理(`/api/proxy/stream`)含 SSRF 防禦 - [x] Claude Design ZIP 匯入(`/api/import/claude-design`) - [x] Sidecar 協議 + Electron 桌面版 + IPC 自動化(STATUS / EVAL / SCREENSHOT / CONSOLE / CLICK / SHUTDOWN) - [x] Artifact lint API + 五維自評審 emit-前 gate - [ ] 評論模式手術刀編輯(點元素 → 指令 → 區域性 patch)—— 模式來自 [`open-codesign`][ocod] - [ ] AI 自吐 tweaks 面板 UX —— 基礎積木([`tweaks` skill](skills/tweaks/))已發,整合到 chat 的面板尚未完成 - [ ] Vercel + 隧道部署食譜(Topology B) - [ ] 一行 `npx od init` 腳手架帶 `DESIGN.md` - [ ] Skill 市場(`od skills install `)和 `od skill add | list | remove | test` CLI 表面(在 [`docs/skills-protocol.md`](docs/skills-protocol.md) 裡有草案,daemon 實現尚未跟上) - [x] `apps/packaged/` 出可分發 Electron 安裝包 —— macOS(Apple Silicon)和 Windows(x64)下載已上線 [open-design.ai](https://open-design.ai/) 和 [GitHub releases 頁面](https://github.com/nexu-io/open-design/releases) 分階段交付計畫在 [`docs/roadmap.md`](docs/roadmap.md)。 ## 專案狀態 這是一個早期實現 —— 閉環(檢測 → 選 skill + design system → 對話 → 解析 `` → 預覽 → 儲存)已經端到端跑通。提示詞堆疊和 skill 庫是價值最重的部分,目前已穩定。元件級 UI 仍在每天迭代。 ## 保持關注 在 X 上追蹤 **[@nexudotio](https://x.com/nexudotio)** 取得 release notes、新 skill、新 design system,以及偶爾的幕後 thread 透露接下來要出什麼。Discord 是聊天用的,X 是發布里程碑用的 —— 兩個連結都在上面的 badge 裡。 ## 給我們點個 Star

給 Open Design 點個 Star —— github.com/nexu-io/open-design

如果這套東西幫你省了半小時,給它一個 ★。Star 不付房租,但它告訴下一個設計師、Agent 和貢獻者:這個實驗值得他們的注意力。一次點選、三秒鐘、真實訊號:[github.com/nexu-io/open-design](https://github.com/nexu-io/open-design)。 ## 貢獻 歡迎 issue、PR、新 skill、新 design system。收益最高的貢獻往往就是一個資料夾、一份 Markdown,或者一個 PR 大小的 adapter: - **加一個 skill** —— 往 [`skills/`](skills/) 丟一個資料夾,遵循 [`SKILL.md`][skill] 規範。 - **加一套 design system** —— 往 [`design-systems//`](design-systems/) 丟一份 `DESIGN.md`,用 9 段式 schema。 - **接入一個新的 coding-agent CLI** —— 在 [`apps/daemon/src/agents.ts`](apps/daemon/src/agents.ts) 里加一項。 完整流程、合併硬線、程式碼風格、我們不接收的 PR 型別 → [`CONTRIBUTING.zh-CN.md`](CONTRIBUTING.zh-CN.md)([English](CONTRIBUTING.md),[Deutsch](CONTRIBUTING.de.md),[Français](CONTRIBUTING.fr.md))。 ## 貢獻者牆 感謝每一位讓 Open Design 變得更好的朋友 —— 無論是寫程式碼、修文檔、提 issue、加 skill 還是加 design system,每一次真實貢獻都會被記住。下面這面牆是最直觀的「Thank you」。 Open Design 貢獻者 第一次提 PR?歡迎從 [`good-first-issue`/`help-wanted`](https://github.com/nexu-io/open-design/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%2C%22help+wanted%22) 標籤起步。 ## 倉庫活躍度 Open Design 倉庫指標 上面的 SVG 由 [`.github/workflows/metrics.yml`](.github/workflows/metrics.yml) 藉助 [`lowlighter/metrics`](https://github.com/lowlighter/metrics) 每天自動重新生成。想要立刻重新整理可以去 **Actions** 選項卡手動觸發;想開啟更豐富的外掛(traffic、follow-up time 等)可在倉庫 secrets 里加一個細粒度 PAT 命名為 `METRICS_TOKEN`。 ## Star History Open Design star history 曲線往上走 —— 那就是我們想看到的訊號。點 ★ 推它一把。 ## 致謝 / Credits [`skills/html-ppt/`](skills/html-ppt/) 主 skill 以及 [`skills/html-ppt-*/`](skills/) 下的逐樣板子 skill —— 含 15 套 full-deck、36 套主題、31 個單頁 layout、27 個 CSS 動畫 + 20 個 canvas FX、鍵盤 runtime 與磁吸卡片演講者模式 —— 整合自開源專案 [`lewislulu/html-ppt-skill`](https://github.com/lewislulu/html-ppt-skill)(MIT)。原始 LICENSE 保留在 [`skills/html-ppt/LICENSE`](skills/html-ppt/LICENSE),原作者歸屬 [@lewislulu](https://github.com/lewislulu)。每張逐樣板的 Examples 卡片(`html-ppt-pitch-deck`、`html-ppt-tech-sharing`、`html-ppt-presenter-mode`、`html-ppt-xhs-post` …)都把 authoring 指南委派給主 skill —— 點 **Use this prompt** 之後,沿用上游同樣的 prompt → 輸出行為。 [`skills/guizang-ppt/`](skills/guizang-ppt/) 雜誌風橫向翻頁 deck 整合自 [`op7418/guizang-ppt-skill`](https://github.com/op7418/guizang-ppt-skill)(MIT),原作者歸屬 [@op7418](https://github.com/op7418)。 ## License Apache-2.0。內建的 [`skills/guizang-ppt/`](skills/guizang-ppt/) 保留它原始的 [LICENSE](skills/guizang-ppt/LICENSE)(MIT)和原作者 [op7418](https://github.com/op7418) 的歸屬。內建的 [`skills/html-ppt/`](skills/html-ppt/) 保留它原始的 [LICENSE](skills/html-ppt/LICENSE)(MIT)和原作者 [lewislulu](https://github.com/lewislulu) 的歸屬。