SDD 規格驅動開發:Superpowers × OpenSpec
這次試著用 Spec-Driven Development(SDD)的方式進行開發,搭配 OpenSpec 與 Superpowers 兩套工具來實踐,希望兼顧兩件事:
- 規格能跟著程式碼長期累積,而不是寫完就被遺忘
- 從討論到實作的每一步都有紀律,遵守 TDD 確保規格與實作品質
因此,參考網路上討論的作法,將兩套工具組合起來互補,OpenSpec 負責規格的長期管理,Superpowers 負責工程實踐。
一、工具職責
首先了解兩套工具在這個 SDD 流程中各自負責什麼:
| 工具 | 技能 | 職責 |
|---|---|---|
| Superpowers | brainstorming |
討論需求,設計對話結構(一次一題、3 方案比較、user review gate) |
| OpenSpec | propose |
把設計形式化為 4 個 artifact(proposal / design / specs delta / tasks),建立規格 |
| Superpowers | writing-plans |
把粗顆粒任務 tasks.md 展開成 遵守 TDD 的細顆粒任務(每步 2-5 分鐘) |
| Superpowers | subagent-driven-development |
遵守紀律,開始實作 (含 spec review 及 code review) |
| OpenSpec | archive |
把 delta spec sync 到主規格 openspec/specs/<cap>/spec.md,並把 change 歸檔;維持單一事實來源不漂移 |
OpenSpec ↔ Superpowers 交接點(兩處):
docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md(Superpowers → OpenSpec) —brainstorming產出的設計討論稿,作為opsx:propose的輸入。openspec/changes/<change-name>/tasks.md(OpenSpec → Superpowers) —opsx:propose產出的粗顆粒任務清單,作為writing-plans的輸入,展開成 TDD 細顆粒。
二、流程圖
具體實踐流程如下圖所示:
1 | [ 想法 / 需求 ] |
簡化版:
想法 → superpowers:brainstorming → opsx:propose → superpowers:writing-plans → superpowers:subagent-driven-development → opsx:archive → pr
三、使用流程
整個流程的使用方式:
Step 1:Brainstorming(設計對話)
輸入指令:
1 | /superpowers:brainstorming <想法,可參考下方結構化格式,或者自行發揮> |
想法(結構化格式):
1 | # <功能名稱> |
開始對話後,Superpowers 會與你逐一討論並提供方案比較,每個部分討論完都會有 review gate,確保你對內容滿意才進下一步。
結果: 產出 docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md
結束條件: review approve 後才進下一步。
Step 2:產 OpenSpec change
輸入指令:
1 | /opsx:propose <change-name> 參考 @docs/superpowers/specs/<design-doc>.md |
結果: 產出(4 個 artifact)
1 | openspec/changes/<change-name>/ |
結束條件: review approve 後才進下一步。
Step 3:寫 TDD 實作計劃
輸入指令:
1 | /superpowers:writing-plans 依文件開始寫實作計劃 @openspec/changes/<change-name>/tasks.md ,每個項目完成後需回來標記,直至所有項目完成 |
為什麼這樣寫:
@<tasks.md>— 明確輸入來源文件,讓 AI 把 tasks.md 的每個 checkbox 展開成 plan 的步驟- 「每個項目完成後需回來標記」— 強制 plan 加上勾掉 tasks.md 的步驟
- 「直至所有項目完成」— 確保 plan 涵蓋全部 task
結果: 產出 docs/superpowers/plans/YYYY-MM-DD-<topic>-plan.md,每個 task 含 TDD bite-sized 步驟(失敗測試 → 實作 → 測試通過 → commit)。
結束條件: review approve 後才進下一步。
Step 4:執行 subagent-driven development
要求 AI 使用 superpowers:subagent-driven-development,開始執行先前寫好的 docs/superpowers/plans/YYYY-MM-DD-<topic>-plan.md,AI 會根據 plan 的步驟逐一執行,每完成一個步驟就回來標記,直到整個 plan 完成。
結果: 實作完的程式碼 + openspec/changes/<change-name>/tasks.md 同步勾選
結束條件: review approve,所有測試通過。
Step 5:歸檔(規格 sync)
輸入指令:
1 | /opsx:archive <change-name> |
結果:
- delta spec 同步到主規格
openspec/specs/<cap>/spec.md; - change 移動到
openspec/changes/archive/YYYY-MM-DD-<name>/
Step 6:開 PR(自訂 skill 或團隊既有 PR 流程)
確保所有規格文件都 commit 後,最後一步就是開 PR,讓團隊 review code
1 | /pr |
四、指令總覽
| 階段 | 指令 |
|---|---|
| 開始想 | /superpowers:brainstorming <想法> |
| 產規格 | /opsx:propose <change-name> @<superpowers-design>.md |
| 寫 plan | /superpowers:writing-plans @<openspec-tasks.md> |
| 執行 | /superpowers:subagent-driven-development @<superpowers-plan>.md |
| 歸檔 | /opsx:archive <change-name> |
| PR | /pr |
五、文件總覽
| 文件 | 路徑 | 屬性 |
|---|---|---|
| 設計討論稿 | docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md |
brainstorming 產出,是否 commit 看個人選擇 |
| 實作計劃 | docs/superpowers/plans/YYYY-MM-DD-<topic>-plan.md |
writing-plans 產出,是否 commit 看個人選擇 |
| OpenSpec 提案 / 設計 / delta spec / 任務 | openspec/changes/<name>/{proposal,design,specs/<cap>/spec,tasks}.md |
必須 commit,archive 後保留 |
| 主規格(單一事實來源) | openspec/specs/<cap>/spec.md |
必須 commit,永久存在,archive 時自動 sync |
| 已歸檔 change | openspec/changes/archive/YYYY-MM-DD-<name>/ |
必須 commit,歷史紀錄 |
六、結語
透過這樣結合兩個工具的 SDD 流程,確保每個功能的設計都有清晰的規格作為基礎,讓 AI 實作的每一步都有紀律地執行,最終產出的產品也能更符合最初的需求與設計。