OpenSpec 是一個輕量級的 SDD(Spec-Driven Development)工具,核心理念是:先談好規格,再動手寫 code,讓開發者與 AI 對「什麼叫做完成」有共同認知。
| 特性 | 說明 |
|---|---|
| SDD 工具 | 規格驅動開發 — 先寫規格再寫程式,AI 不再通靈亂做 |
| 零外部依賴 | 不需要 API key、不需要雲端服務,所有產出都是本地 Markdown 檔案 |
| 廣泛支援 | Claude Code、Cursor、GitHub Copilot、Gemini CLI、OpenAI Codex 等主流工具 |
| 適用場景 | 專為既有專案(1→N)設計,也適用全新專案(0→1),漸進式導入成本極低 |
| 工具 | 適用場景 | 複雜度 | 特色 |
|---|---|---|---|
| BMAD | 大公司 / 大團隊 | 高 | 詳盡流程與角色分工,企業級協作 |
| Spec Kit | 全新專案 (0→1) | 中 | GitHub 官方推出,文件結構完整但較冗長 |
| OpenSpec | 既有專案 (1→N) | 低 | 輕量快速,三招搞定:proposal → apply → archive |
npm install -g @fission-ai/openspec@latest
cd your-project && openspec init → 選擇使用的 AI 工具
Please read openspec/config.yaml and help me fill it out
保留歷史紀錄、支援多人協作
OpenSpec v1.0 採用靈活的 action-based 工作流程,不再是線性鎖死的三階段。
| 指令 | 說明 |
|---|---|
/opsx:explore | 自由發想,AI 會反覆提問釐清細節直到雙方有共識 |
/opsx:new <name> | 建立新的變更資料夾,如 /opsx:new add-search |
/opsx:continue | 逐步建立 artifact(proposal → specs → design → tasks),可一一 review |
/opsx:ff | 快轉(fast-forward)— 一次生成所有規劃 artifact |
AI 會在 openspec/changes/ 產出四個核心檔案:
| 指令 | 說明 |
|---|---|
/opsx:apply | AI 讀取 tasks.md,逐步實作並打勾,完成一項勾一項 |
/opsx:verify | 驗證實作是否符合 specs/ 中定義的所有 Scenario |
| 指令 | 說明 |
|---|---|
/opsx:archive | 歸檔變更,將 Delta 合併回 specs/ 並移至 archive/ |
/opsx:sync | 預覽規格合併結果(不實際執行) |
歸檔做兩件事:
changes/add-favorites/
→ archive/2026-04-10-add-favorites/
ADDED / MODIFIED / REMOVED 的差異合併回系統真相
/opsx:ffFast-forward — 一次全部生成
全部一口氣產出,結束後再統一 review
/opsx:continue一次建一個 artifact,逐步推進
每一步都停下來讓你確認再繼續
| 指令 | 適用情境 | 原因 |
|---|---|---|
ff | 需求已經很明確 / 小功能 | 前面做過 explore 或需求單純,一次產出最有效率 |
continue | 需求有不確定性 / 複雜變更 | 影響範圍大,每步都值得仔細檢視 |
| 格式規則 | 說明 |
|---|---|
| Requirement 標題 | 使用 ### Requirement: 名稱,每個至少要有一個 Scenario |
| Scenario 標題 | 必須使用 #### Scenario: 名稱,不是 ### 或 bullet point |
| 需求描述關鍵字 | 使用 SHALL 或 MUST 表達必要性(源自 RFC 2119) |
| Scenario 內容 | 使用 - WHEN / - THEN / - AND 描述條件與結果 |
變更提案的 specs/ 不寫完整規格,而是寫「跟現有規格相比,這次要改什麼」:
| 標記 | 操作 | 注意事項 |
|---|---|---|
## ADDED | 新增 | 寫入完整的新需求內容及所有 Scenario |
## MODIFIED | 修改 | 必須放「修改後的完整內容」,不能只寫差異部分 |
## REMOVED | 移除 | 須附 Reason(原因)與 Migration(替代方案) |
## RENAMED | 更名 | 重新命名需求 |
判斷原則:這次改動會不會讓系統行為跟 specs/ 裡定義的不一樣?
| 情況 | 需要提案? | 理由 |
|---|---|---|
| 修 Bug | 不需要 | 讓程式符合規格,不是改變規格 |
| 修錯字 / 改註解 | 不需要 | 不影響系統行為 |
| 更新套件(非破壞性) | 不需要 | 不是 breaking change |
| 調整設定 | 不需要 | 不改變系統行為規格 |
| 補寫測試 | 不需要 | 驗證現有規格,不是改規格 |
| 新增功能 | 需要 | 系統行為將與 specs/ 不一致 |
| 破壞性變更 | 需要 | 改變既有系統行為 |
| 架構調整 | 需要 | 影響範圍大,需記錄決策脈絡 |
| 指令 | 用途 |
|---|---|
openspec init | 初始化專案,設定 AI 工具 |
openspec list | 列出進行中的變更(加 --specs 列出現有規格) |
openspec show <name> | 顯示變更或規格詳情(加 --json 輸出 JSON) |
openspec validate <name> --strict | 驗證格式(Scenario、SHALL 關鍵字、Delta 格式) |
openspec archive <name> | 歸檔變更(加 --yes 跳過確認) |
openspec view | 互動式 Dashboard,瀏覽所有 specs 與 changes |
/opsx:explore → AI 反覆提問釐清細節(收藏上限?重複行為?)
/opsx:new add-favorites → 建立 openspec/changes/add-favorites/
/opsx:ff → 生成 proposal.md、specs/、design.md、tasks.md
跟 AI 討論:「收藏要有上限 100 個」→ AI 更新 spec 新增 Scenario
/opsx:apply → AI 照 tasks.md 逐步實作,完成一項勾一項
/opsx:verify → 確認程式碼符合所有 Scenario 定義
/opsx:archive → specs/ 更新為最新狀態,歷史保存在 archive/
design.md 是選用的檔案,用來記錄技術決策。以下場景建議使用:
| 場景 | design.md 的作用 |
|---|---|
| 跨系統 / 跨模組變更 | 說明模組間如何互動 |
| 引入新的外部依賴 | 記錄為何選擇它、替代方案有哪些 |
| 安全性 / 效能考量 | 記錄策略與取捨 (trade-offs) |
| 需要 Migration | 說明資料遷移計畫與部署步驟 |
AI 不再通靈亂做,有明確標準驗收產出
每個 Requirement 都有 Scenario,知道何時算「完成」
每次變更保留在 archive/,知道為何這樣設計
不同提案在不同目錄,specs 不重疊就不會踩到
AI 做歪了可以回到修改前狀態,換另一個 Agent 來做
裝 npm、跑 init、填 config,就能開始使用