Open Design BYOK 與多 CLI 自動偵測:把你既有 agent 變成設計引擎

Open Design BYOK 與多 CLI 自動偵測:把你既有 agent 變成設計引擎

6 min read

上一篇講到 Open Design 的第一條核心理念是「不自己出 agent」,這篇直接拆解這條理念在實作層怎麼運作——七個支援的 CLI、自動偵測的邏輯、BYOK fallback 的接法。看完這篇你會知道為什麼這個設計對使用者很划算。

Open Design 支援哪些 CLI

七個 first-party 支援、加 Anthropic API BYOK fallback:

Agent Bin 名稱 Streaming 備註
Claude Code claude typed events 一級公民、fidelity 最高
Codex CLI codex line-buffered codex exec
Cursor Agent cursor-agent line-buffered cursor-agent -p
Gemini CLI gemini line-buffered gemini -p
OpenCode opencode line-buffered opencode run
Qwen Code qwen line-buffered qwen -p
GitHub Copilot CLI copilot typed events copilot -p --allow-all-tools --output-format json
Anthropic API · BYOK n/a SSE 直連 上述都沒裝時的 fallback

七個 agent 不是並列「亂選一個」——Claude Code 跟 Copilot 走的是 typed event streaming,其他五個是 line-buffered 純文字。差別在 UI 體驗。

Typed events vs. line-buffered 差在哪

這個技術細節值得知道,因為它決定你看到的 todo card 多即時。

typed events(Claude Code、Copilot CLI):CLI 本身吐 JSON 事件——tool_use_started、tool_use_completed、text_block、thinking,daemon 可以精確知道現在 agent 在做什麼。UI 上你會看到:

  • 即時的 TodoWrite 狀態變化(pending → in_progress → completed)
  • 每個 tool call 的進度
  • thinking 區塊獨立呈現

line-buffered(其他五個):CLI 吐純文字,daemon 只能 buffer 整行、做啟發式 parse。UI 上你會看到完整輸出,但沒辦法做到那麼即時的細顆粒度狀態。

不影響輸出品質,只影響「看 agent 工作的爽度」。

Daemon 怎麼自動偵測

啟動瞬間 daemon 做的事其實很單純:

// 概念上的偽代碼,實際在 apps/daemon/src/agents.ts
const candidates = ['claude', 'codex', 'cursor-agent', 'gemini', 'opencode', 'qwen', 'copilot']
const found = candidates.filter(bin => which(bin))
const primary = found[0] ?? 'byok'

PATH 上有什麼就用什麼,沒設定檔、沒環境變數、沒 wizard。同時裝多個 CLI 也行——daemon 會把全部能用的 agent 列出來,UI 上提供切換。

要新加一個 CLI?就是在 apps/daemon/src/agents.ts 加一個 entry:

{
  name: 'kimi',
  bin: 'kimi',
  argv: (prompt) => ['-p', prompt],
  streaming: 'plain',  // 或 'claude-stream-json'
}

一個 PR、十幾行程式碼。

BYOK fallback 模式

如果你機器上一個 CLI 都沒裝(公司鎖很死、或剛換新筆電還沒裝完),歡迎對話框會問你貼一把 Anthropic API key。貼上去之後:

  • daemon 不再 spawn CLI
  • 改走 Anthropic SDK 直接從瀏覽器發 SSE
  • prompt stack 跟 skill / design system 注入完全一樣
  • 唯一差別是 agent 沒有「真檔案系統」可以 read/write

可以用,但體驗有差——尤其是 brand-spec extraction 那條協議要 grep CSS 檔,沒檔案系統就只能用記憶體裡的內容做。建議是:有 CLI 就用 CLI,BYOK 是備胎不是主力。

為什麼這個設計對你很划算

換個角度看這六個理念裡最關鍵的「不出 agent」這條,使用者的帳這樣算:

  1. 你已經付過錢 — Claude Pro / Cursor Pro / Copilot Pro 月費已經在繳,再付一份「設計用的訂閱」是重複付費
  2. 你已經習慣那個 CLI — Claude Code 的指令、Cursor 的快捷鍵、Codex 的對話風格——學新工具的成本省下來
  3. 你的 model 升級不用等 — Anthropic 出新 model、OpenAI 出新 model,CLI 升級你就升級。不必等 Open Design 跟進
  4. 你的 enterprise 設定可以複用 — 公司的 proxy、SSO、key management 早就在 CLI 上設好,Open Design 直接吃這份配置

對比 Claude Design 綁 Anthropic 雲端、綁 Opus 4.7、綁訂閱方案——這個分歧很顯著。

換 CLI 時要注意什麼

如果你打算同時測幾個 CLI(很常見),記住兩件事:

Token / quota 各自獨立:每個 CLI 用各自的 key 跟額度,daemon 不管這層。Cursor 用完了,切去 Claude Code 繼續。

輸出風格會差:同一個 prompt 給 Claude Code 跟給 Codex,出來的 HTML 不會一模一樣——model 不同、tool calling 風格不同。Open Design 的 prompt stack 已經把差異收得很窄,但還是會有。建議是:找一個你最熟的當主力,其他當備案。

下一站:Skills 系統

CLI 偵測搞懂了,但 agent 拿到 prompt 之後實際在讀什麼?答案是 skill 目錄裡那些檔案。

下一篇我們把 19 個內建 skill 拆開來看,包括 SKILL.md 的 od: 額外 frontmatter、assets/template.html 怎麼被 read 進去、references/checklist.md 的 P0/P1/P2 是什麼意思。讀完你能寫自己的 skill,把這套機制變成你工作流的一部分。