SDD 規格驅動開發:Superpowers × OpenSpec

這次試著用 Spec-Driven Development(SDD)的方式進行開發,搭配 OpenSpecSuperpowers 兩套工具來實踐,希望兼顧兩件事:

  1. 規格能跟著程式碼長期累積,而不是寫完就被遺忘
  2. 從討論到實作的每一步都有紀律,遵守 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 交接點(兩處):

  1. docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md(Superpowers → OpenSpec)brainstorming 產出的設計討論稿,作為 opsx:propose 的輸入。
  2. openspec/changes/<change-name>/tasks.md(OpenSpec → Superpowers)opsx:propose 產出的粗顆粒任務清單,作為 writing-plans 的輸入,展開成 TDD 細顆粒。

二、流程圖

具體實踐流程如下圖所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
                               [ 想法 / 需求 ]


┌───────────────────────────────────────────────────────────────┐
│ Superpowers · 設計階段 │
│ /superpowers:brainstorming │
│ │ 一次一題、3 方案比較、user review gate │
│ ▼ │
│ 📄 docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md │
└───────────────────────────────────────────────────────────────┘
│ approve

┌───────────────────────────────────────────────────────────────┐
│ OpenSpec · 規格形式化 │
│ /opsx:propose │
│ ▼ │
│ 📄 openspec/changes/<name>/ │
│ ├── proposal.md ── Why / What / Capabilities │
│ ├── design.md ── Decisions / Risks │
│ ├── specs/<cap>/spec.md ── ADDED / MODIFIED / REMOVED │
│ └── tasks.md ── 粗顆粒任務 checkbox │
└───────────────────────────────────────────────────────────────┘
│ @tasks.md 為輸入

┌───────────────────────────────────────────────────────────────┐
│ Superpowers · 執行階段 │
│ /superpowers:writing-plans │
│ ▼ │
│ 📄 docs/superpowers/plans/YYYY-MM-DD-<topic>-plan.md │
│ ▼ │
│ /superpowers:subagent-driven-development │
│ ▼ subagent 實作 / task;自動勾掉 tasks.md │
│ │
└───────────────────────────────────────────────────────────────┘
│ all tasks done

┌───────────────────────────────────────────────────────────────┐
│ OpenSpec · 規格沉澱 │
│ /opsx:archive │
│ │ delta sync → main spec │
│ │ mv → openspec/changes/archive/YYYY-MM-DD-<name>/ │
│ ▼ │
│ 📄 openspec/specs/<cap>/spec.md ── 單一事實來源 │
└───────────────────────────────────────────────────────────────┘


/pr

簡化版:

想法 → superpowers:brainstorming → opsx:propose → superpowers:writing-plans → superpowers:subagent-driven-development → opsx:archive → pr

三、使用流程

整個流程的使用方式:

Step 1:Brainstorming(設計對話)

輸入指令:

1
/superpowers:brainstorming <想法,可參考下方結構化格式,或者自行發揮>

想法(結構化格式):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# <功能名稱>

## 功能背景
<為什麼存在、現況痛點,2-4 句>

## 驗收條件(AC)
- [ ] <可驗證條件>
- [ ] <錯誤情境也要列>

## 明確不做(Out of Scope)
- <避免 scope creep 的明確排除項>

## 技術方向
- <已想過的方向;沒想過就留空讓 brainstorming 探索>

開始對話後,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
2
3
4
5
openspec/changes/<change-name>/
├── proposal.md # Why / What / Capabilities / Impact
├── design.md # Decisions / Risks / Trade-offs
├── specs/<cap>/spec.md # delta:ADDED / MODIFIED / REMOVED
└── tasks.md # 粗顆粒任務 checkbox

結束條件: 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>

結果:

  1. delta spec 同步到主規格 openspec/specs/<cap>/spec.md
  2. 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 實作的每一步都有紀律地執行,最終產出的產品也能更符合最初的需求與設計。