Superpowers+Openspec兩個AI編程框架一起用,我踩了7個坑

作者:AI智聞說
日期:2026年5月14日 下午9:22
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

OpenSpec管方向,Superpowers管執行:實戰結合兩個AI編程框架嘅完整流程同7個坑

整理版摘要

呢篇文章係一個開發者分享佢點樣同時用OpenSpec同Superpowers兩個AI編程框架,喺一個真實項目(為Go微服務加JWT認證)入面行完整流程,仲踩咗7個坑。作者發現兩個框架各自有優勢:OpenSpec管「做啲乜」,Superpowers管「點樣做」,但佢哋唔會自動配合,中間需要一個銜接層。

作者先解釋兩個框架嘅定位差異OpenSpecFission-AI開發嘅SDD框架,用規範做source of truth;Superpowers係Jesse Vincent嘅工作流框架,用可組合嘅Skill嚟執行。佢哋唔係競爭關係,而係互補——一個確保方向啱,一個確保執行好。

然後作者用一個已有session認證嘅Go微服務,完整行咗8步:OpenSpec explore、propose、人工審核、銜接餵規範畀Superpowers、Superpowers TDD實現、OpenSpec verify、archive、Superpowers收尾。每一步都標咗踩咗邊個坑同點樣解決。整體結論係:兩個框架一齊用,可以消除「方向啱但做錯」同「做啱但方向錯」呢兩個最常見嘅失敗模式,返工次數最少。

  • OpenSpec管「做啲乜」,Superpowers管「點樣做」,兩者互補,需要一個銜接層嚟配合
  • 實戰流程:先explore再propose,人工審核規範,將OpenSpec嘅design.md同specs餵畀Superpowers做planning,跳過OpenSpec嘅apply直接用Superpowers嘅TDD
  • 關鍵銜接:用自定義Skill(openspec-superpowers-bridge)自動加載規範上下文,跳過重複嘅brainstorming,將場景轉為測試用例
  • 7個坑包括跳過explore、排除範圍唔細、tasks同plan粒度唔匹配、實現同design唔一致、審查冇規範上下文、verify同代碼審查二選一、archive前冇跑全量測試
  • 效果對比:兩個框架一齊用,需求對齊最好、冇多做功能、0次返工,仲有主規範累積同紀律一致
值得記低
Skill

spec-compliance-check

自定義Superpowers Skill,用喺代碼審查之前檢查實現係咪符合OpenSpec規範。佢會讀取openspec/specs/主規範同openspec/changes/下嘅delta規範,逐個檢查「假設/當/則」場景係咪有對應實現,仲會檢查design.md嘅架構決策同proposal.md嘅排除範圍。

Skill

openspec-superpowers-bridge

自定義Superpowers Skill,用嚟銜接兩個框架。佢會喺開始實現OpenSpec tasks之前自動加載規範文檔,跳過重複嘅brainstorming,將design.md畀Superpowers planning,將specs場景轉成TDD測試用例,仲會喺完成後自動行verify同verification。

結構示例

結構示例

結構示例 text
# 提案:添加JWT認證## 動機移動端無法使用session認證,需要無狀態token方案。## 範圍- 添加JWT簽發和驗證- 添加刷新token機制- 添加token黑名單(Redis)- 修改登錄接口返回token## 排除範圍- 不修改現有session認證邏輯- 不修改前端Web端代碼- 不添加OAuth2第三方登錄- 不修改數據庫用戶表結構
整理重點

兩個框架嘅分工:方向 vs 執行

OpenSpec同Superpowers成日俾人搞亂,以為係競爭關係。實際上佢哋解決嘅係完全唔同嘅問題:OpenSpec管「做啲乜」同「點解要做」,核心產物係規範文檔;Superpowers管「點樣做」同「按咩標準做」,核心產物係代碼同測試。

OpenSpec解決「做啲乜」,Superpowers解決「點樣做

如果冇OpenSpecSuperpowers可能做出嚟嘅方向錯;如果冇SuperpowersOpenSpec嘅規範寫得幾好,AI實現時都可能會跳測試、一次性提交500行。兩個都冇就係最差組合。

整理重點

實戰:由explore到propose,逐個步驟踩坑

作者用一個已有session認證嘅Go微服務,要加JWT認證支援流動端。佢先做OpenSpec explore,同AI討論技術方案,揀咗JWT+黑名單。然後行propose生成4份文件:proposal、specs、design、tasks。

explore花5分鐘,慳返30分鐘返工

  • 坑1:跳過explore直接propose,結果AI揀咗純JWT方案冇黑名單,同需求對唔上,改咗3次。
  • 坑2:proposal嘅排除範圍寫得唔夠細,AI順手改埋Web端登錄。加返「唔改前端Web端代碼」之後,AI就似有咗圍欄。
  • 坑3:tasks.md粒度同Superpowers嘅plan唔匹配——OpenSpec嘅task係需求視角,Superpowers嘅plan係實現視角。

審核規範文檔嘅時候,作者發現specs冇覆蓋「併發刷新同一條refresh token」嘅場景,呢個係安全漏洞,佢補充咗。

排除範圍寫得唔夠細,AI會「好心」幫你多做功能

整理重點

關鍵銜接:點樣令兩個框架聽同一個指揮

呢一步係成篇文章最關鍵嘅位。OpenSpec嘅tasks.md話你知「做啲乜」,Superpowers嘅writing-plans話你知「點樣做」,中間係斷層。作者嘅做法:跳過OpenSpec嘅apply,直接用Superpowers嘅TDD流程嚟執行。

跳過OpenSpec嘅apply,用SuperpowersTDD流程替代

  1. 1 餵上下文:將OpenSpec嘅design.md同specs畀Superpowers,叫佢基於tasks.md用planning流程拆成可執行計劃。
  2. 2 粒度轉換:例如OpenSpec個task「實現JWT簽發函數」,Superpowers會拆成:寫失敗測試、運行測試、寫最小實現、運行測試、重構、提交。
  3. 3 跳過重複:如果OpenSpec已經做咗explore,就跳過Superpowers嘅brainstorming,直接入planning階段。

作者仲寫咗一個自定義Skill(openspec-superpowers-bridge)嚟自動化呢個過程,佢會自動加載規範、跳過重複、轉換測試用例、雙重驗證。

整理重點

7個坑嘅完整清單同解法

作者總結咗7個踩過嘅坑,每個都有根因同對應解法。以下係完整清單:

  1. 1 跳過explore -> AI生成嘅方案同需求對唔上 -> 先explore再propose
  2. 2 排除範圍寫得唔夠細 -> AI多做咗功能 -> 寫清楚「唔做啲乜
  3. 3 tasks同plan粒度唔匹配 -> 用銜接層轉換粒度,OpenSpec講做乜,Superpowers講點做
  4. 4 實現方式同design.md唔一致 -> Superpowers冇規範上下文 -> 將design.md餵畀brainstorming
  5. 5 代碼審查唔檢查規範合規 -> 審查代理淨係睇代碼質量 -> 自定義spec-compliance-check Skill
  6. 6 淨係做verify或淨係做代碼審查 -> 以為兩者等價 -> 兩個都要做,互補唔替代
  7. 7 archive前冇跑全量測試 -> verify唔跑測試 -> archive前加Superpowers嘅verification

7個坑入面有5個可以透過自定義Skill自動解決

當中坑4、5、6、7都可以用銜接Skill自動處理,得返坑1同坑2需要開發者自己喺流程主動把關。

整理重點

自定義Skill與效果對比:真正嘅「對嘅事,用啱嘅方式做出嚟」

作者寫咗兩個自定義Skill放喺Claude Code嘅Skills目錄:spec-compliance-check同openspec-superpowers-bridge。呢兩個Skill解決咗大部分自動化問題,令兩個框架可以自動配合。

open spec嘅產物係Superpowers嘅輸入,Superpowers嘅輸出係OpenSpec驗證嘅對象

作者用同一項目做咗個對比,結果好清楚:只用OpenSpec嘅話,AI可能多做功能(1-2次),返工1-2次;只用Superpowers嘅話,需求對齊只係口頭講,冇辦法驗證規範合規;兩個一齊用嘅話,0次多做功能,0-1次返工,仲有主規範累積同紀律一致。

  • 只用OpenSpec:方向啱但代碼質量爛,AI可能跳測試、一次性提交500行
  • 只用Superpowers:代碼質量好但方向錯,做出嚟嘅嘢同需求對唔上
  • 兩個都用:需求對齊、規範合規、測試覆蓋、小步提交,返工最少

OpenSpec負責管「做乜」,Superpowers負責管「點樣做」。裝咗但唔曉配合?我用一個真實項目行曬成個流程,踩過嘅坑你唔使再踩

寫喺前面

你可能已經讀過呢兩篇文章:

一篇講Superpowers——14個工作流Skill令AI編程助手守規矩。

一篇講OpenSpec——規範驅動開發,令AI唔再靠感覺寫代碼。

但你裝咗兩個框架之後,好大機會遇到呢啲問題:

OpenSpec生成了規範文檔,Superpowers嘅brainstorming又開始問需求,兩個重複做緊同一樣嘢。

Superpowers嘅TDD話「先寫測試」,OpenSpec嘅tasks.md已經列好咗實現步驟,AI應該聽邊個?

用咗一段時間發現:OpenSpec管好咗「做乜」,但AI實現嘅時候仍然亂寫代碼;Superpowers管好咗「點樣做」,但做出嚟嘅嘢同需求對唔上。

呢兩個框架唔係替代關係,係互補關係。 OpenSpec解決「做乜」,Superpowers解決「點樣做」。但佢哋唔會自動配合——你需要一個銜接層。

OpenSpec係Fission-AI開發嘅開源SDD框架,核心概念係「規範係source of truth,代碼係規範嘅派生產物」——喺AI寫代碼之前,先對齊「做乜」同「技術方案選型」。佢專門為已有代碼庫嘅項目設計,透過增量規範(delta spec)描述變更而唔係重寫成個規範。Superpowers係Jesse Vincent開發嘅工作流框架,140,000+ GitHub星標,核心概念係「畀AI可組合嘅Skill工作流,而唔係模糊嘅建議」。一個管方向,一個管執行。

呢篇文章,我用一個真實項目行一次完整流程:幫一個現有嘅Go微服務加JWT認證。唔係由零開始,而係喺現有嘅代碼同規範上加新功能——呢個係最常見嘅開發場景。我會將每一步嘅輸入輸出、踩坑同調整都寫出嚟。

一、先搞清楚分工:邊個負責乜

好多人搞亂OpenSpec同Superpowers,以為佢哋係競爭關係。實際上佢哋解決嘅係完全唔同嘅問題:

維度
OpenSpec
Superpowers
回答嘅問題
做乜、點解做
點樣做、跟咩標準做
核心產物
proposal.md、specs、design.md、tasks.md
代碼、測試、審查報告
控制嘅對象
需求同規範
行為同紀律
失敗模式
做咗唔需要嘅嘢
需要嘅嘢做錯咗
類比
建築藍圖
施工規範

一句講曬:OpenSpec確保方向啱,Superpowers確保執行啱。

冇咗任何一個會點?

得OpenSpec:規範寫得好好哋,AI實現時跳測試、唔做審查、一次過提交500行——規範啱但代碼質素爛
得Superpowers:TDD做得好、審查做得好,但做出嚟嘅嘢同需求對唔上——代碼質素好但方向錯咗
兩個都冇:方向錯 + 代碼爛,最差組合

二、完整實戰:幫Go微服務加JWT認證

場景設定

項目背景:

一個Go微服務,已經有session認證
需要加JWT認證,支援流動裝置
現有代碼有基本測試,但覆蓋率唔高

第1步:OpenSpec explore — 先搞清楚方向

唔好一嚟就propose。先explore,同AI討論技術方案。

/opsx:explore

你同AI嘅對話:

:我哋需要幫流動裝置加JWT認證

AI:等我睇嚇現有嘅認證方案……你而家用緊session認證,存在伺服器記憶體入面。JWT認證有三個方案:

1
純JWT(無狀態,支援離線驗證)
2
JWT + 黑名單(支援主動失效)
3
擴展現有session(改動最少,但流動裝置體驗差)

:用JWT + 黑名單啦,需要可以主動踢人

AI:好。另外幾個問題:token過期時間?刷新token要唔要?黑名單放喺邊?

:30分鐘過期,要刷新token,黑名單用Redis

AI:清楚曬。執行 /opsx:propose add-jwt-auth 開始

踩坑1:直接propose唔explore。 我第一次用嘅時候跳過咗explore,結果AI生成嘅proposal揀咗純JWT方案,冇黑名單,同需求對唔上。來回改咗3次。explore用5分鐘,慳返30分鐘嘅返工。(explore嘅詳細用法同適用場景,之前講OpenSpec嘅文章已經詳細講過,呢度唔重複。)

第2步:OpenSpec propose — 生成規範文檔

/opsx:propose add-jwt-auth

AI生成4個文檔:

proposal.md — 點解要做,範圍係乜:

# 提案:添加JWT認證

## 動機
移動端無法使用session認證,需要無狀態token方案。

## 範圍
- 添加JWT簽發和驗證
- 添加刷新token機制
- 添加token黑名單(Redis)
- 修改登錄接口返回token

## 排除範圍
- 不修改現有session認證邏輯
- 不修改前端Web端代碼
- 不添加OAuth2第三方登錄
- 不修改數據庫用戶表結構

踩坑2:proposal嘅「排除範圍」寫得唔夠細。 我第一次寫嘅時候冇寫「唔修改前端Web端代碼」,AI喺實現嘅時候順手將Web端嘅登入都改埋。加上排除範圍之後,AI就好似有咗圍欄,唔會「好心」幫你做多咗。(「唔做乜比做乜更重要」呢個原則之前講OpenSpec時詳細講過,呢度強調嘅係:同Superpowers組合使用時,排除範圍仲會被spec-compliance-check Skill引用,寫唔寫直接影響審查能否抓到違規。)

specs/ — 增量規範:

# 新增需求

## 需求:JWT簽發

系統MUST在用戶登錄成功後簽發access token和refresh token。

### 場景:有效憑證登錄

- 假設 用戶持有有效的用戶名和密碼
- 當 用戶提交登錄請求
- 則 返回access token(30分鐘過期)和refresh token(7天過期)
- 且 返回格式包含三個字段:
  - access_token:訪問令牌
  - refresh_token:刷新令牌
  - expires_in:過期時間(秒)

### 場景:無效憑證登錄

- 假設 用戶持有無效憑證
- 當 用戶提交登錄請求
- 則 返回401狀態碼
- 且 不簽發任何token

## 修改需求

## 刪除需求

design.md — 技術方案:

# 設計方案:添加JWT認證

## 技術方案

使用golang-jwt庫簽發和驗證token。中間件模式攔截請求,
驗證Authorization頭。黑名單使用Redis SET存儲已失效的token。

## 架構決策

- access token 30分鐘過期,refresh token 7天過期
- 黑名單用Redis SET,key為jti(JWT ID),TTL等於token剩餘有效期
- 中間件模式,不修改現有路由註冊邏輯
- 刷新token時輪換(refresh token用一次就失效,簽發新的)

tasks.md — 實現步驟:

# 任務清單

- [ ] 1.1 添加JWT依賴(golang-jwt)
- [ ] 1.2 定義token結構和常量
- [ ] 2.1 實現JWT簽發函數
- [ ] 2.2 實現JWT驗證函數
- [ ] 3.1 實現Redis黑名單
- [ ] 3.2 實現token失效邏輯
- [ ] 4.1 實現認證中間件
- [ ] 4.2 修改登錄接口返回token
- [ ] 5.1 實現刷新token接口
- [ ] 5.2 實現刷新token輪換

踩坑3:tasks.md嘅粒度同Superpowers嘅plan唔匹配。 OpenSpec嘅tasks係需求角度嘅拆分,Superpowers嘅plan係實現角度嘅拆分:

1
OpenSpec嘅task: 「實現JWT簽發函數」——講做乜
2
Superpowers嘅plan: 「1.寫失敗測試 2.執行測試 3.寫最少實現 4.執行測試 5.提交」——點樣做

呢兩個唔矛盾,但需要正確銜接——後面第4步會講。

第3步:審核規範文檔

呢一步冇框架幫你,必須你自己做。

審核清單:

1
proposal嘅範圍同排除範圍是否完整
2
specs嘅場景有無覆蓋邊界情況(token過期、token被黑名單、並發刷新)
3
design.md嘅技術決策是否合理
4
tasks.md有冇漏步驟(安全測試、效能測試)

我發現嘅問題: specs裏面冇覆蓋「並發刷新同一個refresh token」嘅場景。呢個係安全漏洞——如果攻擊者拎到refresh token,可以喺原用戶刷新嘅同時都刷新,攞到多個有效token。我補充咗呢個場景:

### 場景:併發刷新

- 假設 同一個refresh token被同時使用兩次
- 當 第二次使用該refresh token
- 則 返回401狀態碼
- 且 原refresh token被加入黑名單

第4步:關鍵銜接——令兩個框架聽同一個指揮

呢個係成篇文章最關鍵嘅一步,亦係兩個框架嘅「斷層」所在。

問題喺邊? OpenSpec嘅tasks.md話畀你知「做乜」,但唔講「點樣做」。Superpowers嘅writing-plans話畀你知「點樣做」,但唔知「做乜」。兩個框架各自管一段,中間缺咗銜接。

仲有一個容易忽略嘅問題:OpenSpec嘅apply去咗邊? OpenSpec自己嘅流程係explore、propose、apply、sync、archive,apply係叫AI跟tasks.md實現代碼。但如果你用Superpowers嚟執行,apply呢一步就會俾Superpowers嘅TDD流程取代——Superpowers做得更好,因為佢有測試紀律、代碼審查、驗證機制。

所以聯合工作流中,跳過OpenSpec嘅apply,用Superpowers嘅執行流程代替。 跳過apply之後,tasks.md嘅勾選狀態需要手動更新(每完成一個task,喺tasks.md中將[ ]變做[x]),或者透過openspec-superpowers-bridge Skill自動更新。- [ ]改為- [x]

點樣銜接? 將OpenSpec嘅產物餵畀Superpowers:

1
將OpenSpec生成嘅design.md同specs/做為上下文
2
話畀AI聽:「根據OpenSpec嘅tasks.md,用Superpowers嘅planning流程拆成可執行嘅計劃」
3
Superpowers會將每個task拆成TDD步驟

具體操作: 如果你用Claude Code,喺對話入面輸入:

請閲讀以下OpenSpec規範文檔,然後基於這些規範使用Superpowers的
writing-plans流程拆分實現計劃:

1. 讀取 openspec/changes/add-jwt-auth/design.md 作為技術方案
2. 讀取 openspec/changes/add-jwt-auth/specs/ 下的所有場景作為測試依據
3. 讀取 openspec/changes/add-jwt-auth/tasks.md 作為任務列表
4. 讀取 openspec/changes/add-jwt-auth/proposal.md 的排除範圍作為審查依據

每個task拆成Superpowers plan的粒度:
1. 寫失敗測試
2. 運行測試
3. 寫最小實現
4. 運行測試
5. 重構
6. 提交

如果你用Cursor或其他工具,打開呢啲文件畀AI讀取之後,再執行/superpowers:writing-plans

粒度轉換示例: AI會將OpenSpec嘅task 2.1「實現JWT簽發函數」拆成:

1
寫失敗測試:TestJWTSign_ValidCredentials_ReturnsToken
2
執行測試,確認失敗(RED)undefined: SignToken
3
寫最少實現:func SignToken(userID string, expiry time.Duration) (string, error)
4
執行測試,確認通過(GREEN)
5
重構:抽常數、改善命名(REFACTOR)
6
提交

踩坑4:直接叫Superpowers開始實現,唔餵OpenSpec嘅規範。 如果唔將specs同design.md畀Superpowers,AI會按自己嘅理解實現,可能同OpenSpec對齊嘅方案不一致。例如design.md決定用Redis SET存黑名單,AI可能自己揀咗內存map。銜接嘅關鍵:將OpenSpec嘅design.md做為Superpowers brainstorming嘅輸入。

另一個容易踩嘅坑:brainstorming同explore重複勞動。 OpenSpec嘅explore已經討論過需求同技術方案,Superpowers嘅brainstorming又會重新問一次。解法:如果OpenSpec嘅explore同propose已經完成,跳過Superpowers嘅brainstorming階段,直接入planning階段。將proposal.md同design.md做為brainstorming嘅等效輸出。

如果你已經行咗apply點算? apply會叫AI直接按tasks.md實現代碼,但實現過程冇TDD、冇代碼審查、冇驗證機制。兩種處理方式:

1
如果apply生成嘅代碼可以用,保留代碼,但之後每個task補返Superpowers嘅代碼審查同verify
2
如果apply生成嘅代碼質素唔得,用git reset --hard回退,重新用Superpowers嘅TDD流程實現git reset

第5步:Superpowers執行 — TDD實現每個task

呢一步完全交畀Superpowers嘅紀律流程。每個task行:

1
派新代理實現(subagent-driven-development)
2
代理內部行TDD(test-driven-development)
3
獨立代理審查規格合規性
4
獨立代理審查代碼質素

踩坑5:審查代理冇OpenSpec嘅規範上下文。 Superpowers嘅代碼審查默認只睇代碼質素(由requesting-code-review Skill觸發,自動派一個全新代理審查),唔檢查實現係咪同OpenSpec嘅規範一致。我寫咗一個自定義Skill嚟解決呢個問題:

---
name: spec-compliance-check
description: Use when 完成代碼實現後,在代碼審查之前,檢查實現是否符合OpenSpec規範
---

# 規範合規審查

## 鐵律
任何實現必須與openspec/specs/中的規範一致。不一致就是bug。

## 審查步驟

1. 讀取 openspec/specs/ 下的主規範(檢查本次實現是否違反了已有需求)
2. 讀取本次變更對應的openspec/changes/下的delta規範
3. 逐條檢查每個"假設/當/則"場景是否有對應實現
4. 檢查design.md中提到的架構決策是否被遵守
5. 檢查proposal.md的排除範圍是否被違反

## 常見問題

- "AI順手多改了代碼":檢查排除範圍
- "實現方式和design.md不一致":這是bug,不是優化
- "場景沒有覆蓋":測試不完整

呢個Skill嘅關鍵在於:佢將OpenSpec嘅規範文檔變成咗Superpowers審查流程嘅一部分。 冇呢個Skill,審查代理只睇代碼質素,唔睇規範合規。

第6步:OpenSpec verify — 驗證實現同規範嘅一致性

每個task完成之後,Superpowers會做代碼審查。但代碼審查通過唔等於規範合規。

/opsx:verify

(註:verify屬於OpenSpec嘅擴展工作流,需要透過/opsx:config extend切換到擴展配置先用得。)openspec config profile

verify從三個維度檢查:

維度
檢查啲乜
同Superpowers審查嘅分別
完整性
每個需求有無對應實現應實現
Superpowers審查看代碼,verify睇規範
正確性
實現是否符合規範意圖
Superpowers審查看質素,verify睇語義
一致性
實現係咪同design.md一致
Superpowers審查唔讀design.md

實測發現嘅問題: verify發現task 4.1「實現認證中間件」嘅實現用咗內存map存黑名單,同design.md嘅Redis方案唔一致。代碼審查冇發現呢個問題,因為代碼本身質素冇問題——只係同規範唔一致。spec-compliance-check Skill都冇抓到,因為呢個task係安裝Skill之前實現嘅。

踩坑6:verify同代碼審查二揀一。 兩個都要做。代碼審查看質素,verify睇合規。佢哋檢查嘅嘢唔一樣,互補唔代替。代碼審查關注「代碼寫得好唔好」(命名、結構、錯誤處理),verify關注「代碼做咗應該做嘅嘢未」(規範合規、場景覆蓋、架構一致)。一個代碼質素滿分但同規範唔一致嘅實現,代碼審查會通過,verify唔會。正確順序:

1
代碼質素審查(Superpowers嘅requesting-code-review Skill自動派一個全新代理審查)
2
規範合規審查(spec-compliance-check Skill)
3
OpenSpec verify(從規範維度全面驗證)

先確保代碼寫得啱,再確保代碼同規範一致,最後從規範維度全面驗證。

第7步:OpenSpec archive — 歸檔並更新主規範

所有task完成,verify通過之後:

/opsx:archive

兩件事:

1
將delta specs合併到主規範(/opsx:sync 更新咗JWT認證嘅需求)openspec/specs/auth/spec.md
2
將變更文件夾移到archive/

歸檔嘅意義: 下次加功能時,AI讀到嘅主規範已經包含咗JWT認證嘅資訊。唔會出現「AI唔知項目已經有JWT認證,又實現咗一套session認證」嘅問題。

踩坑7:歸檔前冇跑全量測試。 我有一次verify通過之後直接archive,結果後來發現verify只檢查咗規範合規,冇跑測試套件。Superpowers嘅verification-before-completion要求「跑過命令先可以話搞掂」,但OpenSpec嘅archive冇呢個檢查。我嘅做法:喺archive之前,加一步Superpowers嘅verification。 具體嚟講,按項目類型跑全量測試:Go項目用go test ./...,Node.js項目用npm test,Python項目用pytest。或者直接觸發Superpowers嘅verification-before-completion Skill,佢會叫你提供當前對話中執行嘅測試結果。go test ./...npm testpytest

第8步:Superpowers收尾

驗證通過之後,finishing-a-development-branch畀你4個選項:

1
本地合併到主分支
2
推送並創建PR
3
保留分支
4
丟棄更改

測試唔過唔可以合併——呢條鐵律保底。

三、完整流程一覽

將8步串埋,完整嘅聯合工作流:

需求階段(OpenSpec主導):

1
explore — 同AI討論技術方案(5-10分鐘)
2
propose — 生成proposal、specs、design、tasks(10-15分鐘)
3
人工審核 — 檢查規範文檔嘅完整性(5-10分鐘)

銜接階段(你主導):

1
餵上下文 — 將OpenSpec嘅design.md同specs畀Superpowers,令planning根據規範拆分(跳過OpenSpec嘅apply,用Superpowers代替)

實現階段(Superpowers主導):

1
TDD實現 — 每個task行RED-GREEN-REFACTOR循環
2
雙重審查 — 代碼質素審查 + 規範合規審查

驗證階段(兩者配合):

1
OpenSpec verify + Superpowers verification — 先跑測試確保代碼能運作,再跑verify確保實現同規範一致
2
OpenSpec archive + Superpowers收尾 — 歸檔更新主規範,合併或者創建PR

核心原則:OpenSpec嘅產物係Superpowers嘅輸入,Superpowers嘅輸出係OpenSpec驗證嘅對象。

當流程出問題時點算?

1
verify唔通過 — 返去對應嘅task,用Superpowers嘅systematic-debugging揾根因,整返之後重新跑verify
2
spec-compliance-check發現唔合規 — 先判斷係代碼錯定係規範過時:代碼錯就改代碼,規範過時就修改design.md並重新跑propose
3
design.md嘅決策唔合理 — 返去第3步人工審核,修改design.md,然後重新行銜接層叫Superpowers按新方案規劃
4
tasks.md粒度太粗或者太細 — 粗粒度task會被Superpowers嘅planning自動拆細,細粒度task可以喺銜接時合併(相鄰嘅task 1.1同1.2合併成一個plan task)
5
實現過程中需要改規範 — 先暫停Superpowers嘅執行,返去OpenSpec修改design.md(必要時重跑propose),修改後嘅delta specs要重新審核,然後重新行銜接層叫Superpowers按新方案規劃。已完成嘅task如果唔受影響就保留,受影響嘅task要用Superpowers嘅systematic-debugging評估影響範圍並修改。如果只係微調而唔需要重新propose,可以用/opsx:sync sync將變更中嘅delta specs同步到主規範,無需歸檔/opsx:sync
6
多個變更並行推進 — 每個變改用獨立嘅git worktree開發,每個worktree入面只有一個OpenSpec變更喺推進。Superpowers嘅dispatching-parallel-agents可以喺唔同worktree上並行工作,但唔好喺同一個worktree上同時推進多個OpenSpec變更,否則spec-compliance-check會混淆唔同變更嘅規範邊界

四、7個坑嘅完整清單

現象
根因
解法
1
propose生成嘅方案同需求對唔上
跳過咗explore
先explore再propose
2
AI多咗做你冇要求嘅功能
proposal嘅排除範圍冇寫
寫清楚「唔做乜」
3
tasks同plan粒度唔匹配
OpenSpec講「做乜」,Superpowers講「點樣做」
銜接層轉換粒度
4
實現方式同design.md唔一致
Superpowers冇規範上下文
將design.md餵畀brainstorming
5
代碼審查唔檢查規範合規
審查代理只睇代碼質素
自定義spec-compliance-check Skill
6
只做verify或只做代碼審查
以為兩者等價
兩個都做,互補唔代替
7
archive前冇跑全量測試
verify唔跑測試
archive前加Superpowers嘅verification

五、自定義Skill:令兩個框架自動配合

上面7個坑,有5個可以透過自定義Skill自動解決。我寫咗一個銜接Skill:

將呢兩個Skill擺喺Claude Code嘅Skills目錄下:

~/.claude/skills/spec-compliance-check/SKILL.md
~/.claude/skills/openspec-superpowers-bridge/SKILL.md

如果你用Cursor,擺喺.cursor/rules/目錄下。.cursor/rules/

---
name: openspec-superpowers-bridge
description: Use when 開始實現OpenSpec的tasks,在brainstorming和planning之前自動加載。當用戶說"開始實現"、"apply tasks"或提到OpenSpec變更時觸發
---

# OpenSpec-Superpowers銜接規範

## 鐵律
實現任何OpenSpec task之前,必須先加載對應的規範文檔。沒有規範上下文的實現就是盲寫代碼。

## 執行步驟

1. 讀取 openspec/specs/ 下的主規範(瞭解已有約束)和 openspec/changes/ 下最新的未歸檔變更目錄中的所有文檔(如果不確定當前變更目錄,運行 `ls openspec/changes/` 查看未歸檔的變更文件夾。如果只有一個,那就是當前變更。如果有多個,詢問用戶確認)
2. 如果OpenSpec的explore和propose已經完成,跳過Superpowers的brainstorming階段,直接進入planning階段
3. 把 design.md 作為 Superpowers planning 的輸入
4. 把 specs/ 中的場景轉換為 TDD 測試用例
5. 把 tasks.md 中的每個任務拆成 Superpowers plan 的粒度
6. 每個任務完成後,用 spec-compliance-check 審查規範合規
7. 全部任務完成後,運行 /opsx:verify
8. verify 通過後,運行 Superpowers verification(跑測試命令)
9. 兩個驗證都通過,才能 /opsx:archive

## 場景到測試的轉換規則

OpenSpec的"假設/當/則"場景映射為測試用例,每個場景至少需要兩個測試:

1. 正常路徑測試:假設對應setup,當對應action,則對應assertion
2. 錯誤路徑測試:假設對應異常條件,當對應action,則對應錯誤assertion
3. 邊界值測試:如果場景涉及數值、時間等邊界,額外添加

## 審查的雙重檢查

每次代碼審查必須包含兩個維度:
1. 代碼質量(Superpowers默認審查)
2. 規範合規(spec-compliance-check Skill)

## 常見問題

- "AI沒讀design.md就實現了":檢查銜接Skill是否觸發
- "tasks粒度太粗":自動拆成TDD步驟
- "verify通過了但測試沒跑":archive前強制跑測試

呢個Skill直接解決咗7個坑中嘅5個:

1
自動加載規範上下文 — 解決坑4(實現方式同design.md唔一致)
2
跳過brainstorming避免重複 — 解決explore同brainstorming重複勞動嘅問題
3
場景轉測試用例 — 解決坑3(tasks同plan粒度唔匹配),令OpenSpec嘅規範直接變成Superpowers TDD嘅輸入
4
雙重驗證 — 解決坑6(verify同代碼審查二揀一)同坑7(archive前冇跑測試)
5
spec-compliance-check — 解決坑5(審查唔檢查規範合規)

未自動解決嘅:坑1(需要人先explore)同坑2(需要人寫排除範圍),呢兩個需要人喺流程中主動把關。

六、幾時應該用邊個

唔係所有項目都需要兩個框架一齊上。

只用OpenSpec就夠:

改掣顏色、改typo等細微改動
需求好明確,AI唔會做多餘嘅嘢
你只需要對齊「做乜」,實現質素你自己控制

只用Superpowers就夠:

一次性腳本(寫完就掉)
需求明確但唔需要長期規範嘅小功能(例如寫個數據遷移腳本)
你自己好清楚需求,唔需要規範對齊

兩個都用:

團隊協作嘅項目(規範確保方向一致,紀律確保質素一致)
長期維護嘅項目(規範隨項目增長,紀律確保代碼質素唔退化)
複雜功能開發(設計階段防止方向錯,TDD防止實現錯)
已有代碼庫嘅項目(現有代碼 + 新功能,規範防止AI「好心」改多咗,紀律防止AI偷懶跳步)

判斷標準:代碼要生存幾耐 + 有幾多人掂代碼。 生存1日得1個人掂,兩個都唔用。生存1個月3個人掂,兩個都用。

從單框架過渡到雙框架:

如果你已經用緊OpenSpec:喺下一個新功能中加入Superpowers嘅TDD同代碼審查,唔需要一次用曬全部14個Skill,先加3條鐵律(冇設計唔寫代碼、冇測試唔寫代碼、冇驗證唔話完成)
如果你已經用緊Superpowers:喺下一個複雜功能前先用OpenSpec嘅explore同propose生成規範文檔,唔需要一次用曬完整流程,先加規範對齊呢一步

七、效果對比:4種組合嘅數據一覽

用同一個項目(Go微服務加JWT認證)做對比(以下數據嚟自作者個人經驗,僅供參考):

維度
只用OpenSpec
只用Superpowers
兩個都用
需求對齊
proposal+specs確認
口頭話事
proposal+specs確認
AI多做功能
排除範圍控制
偶爾(1-2次)
排除範圍控制(0次)
測試覆蓋
0個測試
10個測試
10個測試
提交粒度
1次大提交
8次細提交
8次細提交
規範合規
verify檢查
無法驗證
verify+合規審查
長期維護
主規範累積
新對話忘清光
主規範累積+紀律一致
返工次數
1-2次
2-3次
0-1次

兩個框架組合嘅最大價值唔係各自嘅價值相加,係消除「方向啱但做錯咗」同「做啱咗但方向錯咗」呢兩個最常見嘅失敗模式。

數據說明: 「AI多做功能」呢行,Superpowers比「兩個都唔用」好,係因為brainstorming階段會問清楚需求邊界;但Superpowers冇排除範圍機制,所以AI仲有可能「好心」做多咗。加咗OpenSpec嘅排除範圍之後,spec-compliance-check可以自動檢測違規,所以可以到0次。返工次數係指因為方向錯誤或質素唔達標而要返工嘅次數,唔包正常嘅細微調整。

寫喺最後

OpenSpec同Superpowers嘅組合,本質上係畀AI編程加咗兩個維度嘅約束:

1
橫向約束(OpenSpec):AI做嘅嘢同你嘅需求一致
2
縱向約束(Superpowers):AI做嘢嘅方式符合工程標準

冇橫向約束,AI可能做出一個完美但唔需要嘅功能。冇縱向約束,AI可能做出一個需要但質素唔合格嘅功能。

兩個約束都有,先係真正嘅「啱嘅事,用啱嘅方式做出嚟」。

圖片

3條起步規則:

1
先explore再propose——唔好叫AI估需求
2
將design.md餵畀Superpowers——唔好叫AI估方案
3
雙審查——唔好叫AI自己幫自己打分

3分鐘上手

兩個框架都裝好之後,跟呢個順序行你嘅第一個聯合任務:

1
/opsx:explore 討論方案
2
/opsx:propose 功能名 生成規範
3
審核四份文檔(proposal、specs、design、tasks)
4
對AI講:「讀取 openspec/changes/ 目錄下嘅規範,用Superpowers嘅writing-plans拆計劃」
5
Superpowers逐個task行TDD
6
每個task完成後:代碼審查、spec-compliance-check、/opsx:verify
7
跑全量測試(go test ./... 或項目對應命令)go test ./...
8
/opsx:archive Superpowers收尾合併

第4步係關鍵——如果你淨係記得一件事,記住呢個:將OpenSpec嘅規範文檔餵畀Superpowers,唔好叫Superpowers空手上陣。

掃碼關注「AI智聞說」,每日3分鐘掌握AI新知識

圖片

OpenSpec管"做什麼",Superpowers管"怎麼做"。裝了不會配合?我用一個真實項目走完流程,踩過的坑你不用再踩

寫在前面

你可能已經讀過這兩篇文章:

一篇講Superpowers——14個工作流Skill讓AI編程助手守規矩。

一篇講OpenSpec——規範驅動開發,讓AI不再憑感覺寫代碼。

但你裝了兩個框架之後,大概率會遇到這些問題:

OpenSpec生成了規範文檔,Superpowers的brainstorming又開始問需求,兩個在重複勞動。

Superpowers的TDD說"先寫測試",OpenSpec的tasks.md裏已經列好了實現步驟,AI該聽誰的。

用了一段時間發現:OpenSpec管好了"做什麼",但AI實現的時候還是亂寫代碼;Superpowers管好了"怎麼做",但做出來的東西和需求對不上。

這兩個框架不是替代關係,是互補關係。 OpenSpec解決"做什麼",Superpowers解決"怎麼做"。但它們不會自動配合——你需要一個銜接層。

OpenSpec是Fission-AI開發的開源SDD框架,核心理念是"規範是source of truth,代碼是規範的派生產物"——在AI寫代碼之前,先對齊"做什麼"和"技術方案選型"。它專門為已有代碼庫的項目設計,通過增量規範(delta spec)描述變更而非重寫整個規範。Superpowers是Jesse Vincent開發的工作流框架,140,000+ GitHub星標,核心理念是"給AI可組合的Skill工作流,而不是模糊的建議"。一個管方向,一個管執行。

這篇文章,我用一個真實項目走一遍完整流程:給一個已有的Go微服務添加JWT認證。不是從零開始,而是在已有的代碼和規範上疊加新功能——這是最常見的開發場景。我會把每一步的輸入輸出、踩坑和調整都寫出來。

一、先搞清楚分工:誰管什麼

很多人把OpenSpec和Superpowers搞混,以為它們是競爭關係。實際上它們解決的是完全不同的問題:

維度
OpenSpec
Superpowers
回答的問題
做什麼、為什麼做
怎麼做、按什麼標準做
核心產物
proposal.md、specs、design.md、tasks.md
代碼、測試、審查報告
控制的對象
需求和規範
行為和紀律
失敗模式
做了不需要的東西
需要的東西做錯了
類比
建築藍圖
施工規範

一句話總結:OpenSpec確保方向對,Superpowers確保執行對。

缺少任何一個會怎樣?

只有OpenSpec:規範寫得好好的,AI實現時跳測試、不做審查、一次性提交500行——規範對了但代碼質量爛
只有Superpowers:TDD做得好、審查做得好,但做出來的東西和需求對不上——代碼質量好了但方向錯了
兩個都沒有:方向錯+代碼爛,最差組合

二、完整實戰:給Go微服務添加JWT認證

場景設定

項目背景:

一個Go微服務,已有session認證
需要添加JWT認證,支持移動端
現有代碼有基本測試,但覆蓋率不高

第1步:OpenSpec explore — 先搞清楚方向

不要上來就propose。先explore,和AI討論技術方案。

/opsx:explore

你和AI的對話:

:我們需要給移動端加JWT認證

AI:讓我看看現有的認證方案……你目前用的是session認證,存在服務端內存裏。JWT認證有三種方案:

1
純JWT(無狀態,支持離線驗證)
2
JWT + 黑名單(支持主動失效)
3
擴展現有session(改最小,但移動端體驗差)

:用JWT + 黑名單吧,需要能主動踢人

AI:好。另外幾個問題:token過期時間?刷新token要不要?黑名單存哪?

:30分鐘過期,要刷新token,黑名單用Redis

AI:明確了。運行 /opsx:propose add-jwt-auth 開始

踩坑1:直接propose不explore。 我第一次用時跳過了explore,結果AI生成的proposal選了純JWT方案,沒有黑名單,和需求對不上。來回改了3次。explore花5分鐘,省了30分鐘的返工。(explore的詳細用法和適用場景,之前講OpenSpec的文章已經展開過,這裏不重複。)

第2步:OpenSpec propose — 生成規範文檔

/opsx:propose add-jwt-auth

AI生成4個文檔:

proposal.md — 為什麼要做,範圍是什麼:

# 提案:添加JWT認證

## 動機
移動端無法使用session認證,需要無狀態token方案。

## 範圍
- 添加JWT簽發和驗證
- 添加刷新token機制
- 添加token黑名單(Redis)
- 修改登錄接口返回token

## 排除範圍
- 不修改現有session認證邏輯
- 不修改前端Web端代碼
- 不添加OAuth2第三方登錄
- 不修改數據庫用戶表結構

踩坑2:proposal的"排除範圍"寫得不夠細。 我第一次寫的時候沒寫"不修改前端Web端代碼",AI在實現的時候順手把Web端的登錄也改了。加上排除範圍後,AI就像有了圍欄,不會"好心"幫你多做。("不做什麼比做什麼更重要"這個原則之前講OpenSpec時詳細說過,這裏強調的是:和Superpowers組合使用時,排除範圍還會被spec-compliance-check Skill引用,寫不寫直接影響審查能不能抓到違規。)

specs/ — 增量規範:

# 新增需求

## 需求:JWT簽發

系統MUST在用戶登錄成功後簽發access token和refresh token。

### 場景:有效憑證登錄

- 假設 用戶持有有效的用戶名和密碼
- 當 用戶提交登錄請求
- 則 返回access token(30分鐘過期)和refresh token(7天過期)
- 且 返回格式包含三個字段:
  - access_token:訪問令牌
  - refresh_token:刷新令牌
  - expires_in:過期時間(秒)

### 場景:無效憑證登錄

- 假設 用戶持有無效憑證
- 當 用戶提交登錄請求
- 則 返回401狀態碼
- 且 不簽發任何token

## 修改需求

## 刪除需求

design.md — 技術方案:

# 設計方案:添加JWT認證

## 技術方案

使用golang-jwt庫簽發和驗證token。中間件模式攔截請求,
驗證Authorization頭。黑名單使用Redis SET存儲已失效的token。

## 架構決策

- access token 30分鐘過期,refresh token 7天過期
- 黑名單用Redis SET,key為jti(JWT ID),TTL等於token剩餘有效期
- 中間件模式,不修改現有路由註冊邏輯
- 刷新token時輪換(refresh token用一次就失效,簽發新的)

tasks.md — 實現步驟:

# 任務清單

- [ ] 1.1 添加JWT依賴(golang-jwt)
- [ ] 1.2 定義token結構和常量
- [ ] 2.1 實現JWT簽發函數
- [ ] 2.2 實現JWT驗證函數
- [ ] 3.1 實現Redis黑名單
- [ ] 3.2 實現token失效邏輯
- [ ] 4.1 實現認證中間件
- [ ] 4.2 修改登錄接口返回token
- [ ] 5.1 實現刷新token接口
- [ ] 5.2 實現刷新token輪換

踩坑3:tasks.md的粒度和Superpowers的plan不匹配。 OpenSpec的tasks是需求視角的拆分,Superpowers的plan是實現視角的拆分:

1
OpenSpec的task: "實現JWT簽發函數"——說什麼
2
Superpowers的plan: "1.寫失敗測試 2.運行測試 3.寫最小實現 4.運行測試 5.提交"——怎麼做

這兩個不矛盾,但需要正確銜接——後面第4步會講。

第3步:審核規範文檔

這一步沒有框架幫你,必須你自己做。

審核清單:

1
proposal的範圍和排除範圍是否完整
2
specs的場景是否覆蓋了邊界情況(token過期、token被黑名單、併發刷新)
3
design.md的技術決策是否合理
4
tasks.md是否遺漏了步驟(安全測試、性能測試)

我發現的問題: specs裏沒有覆蓋"併發刷新同一個refresh token"的場景。這是一個安全漏洞——如果攻擊者拿到refresh token,可以在原用戶刷新的同時也刷新,獲得多個有效token。我補充了這個場景:

### 場景:併發刷新

- 假設 同一個refresh token被同時使用兩次
- 當 第二次使用該refresh token
- 則 返回401狀態碼
- 且 原refresh token被加入黑名單

第4步:關鍵銜接——讓兩個框架聽同一個指揮

這是整篇文章最關鍵的一步,也是兩個框架的"斷層"所在。

問題在哪? OpenSpec的tasks.md告訴你"做什麼",但不說"怎麼做"。Superpowers的writing-plans告訴你"怎麼做",但不知道"做什麼"。兩個框架各管一段,中間缺了銜接。

還有一個容易忽略的問題:OpenSpec的apply去哪了? OpenSpec自己的流程是explore、propose、apply、sync、archive,apply是讓AI按照tasks.md實現代碼。但如果你用Superpowers來執行,apply這一步就被Superpowers的TDD流程替代了——Superpowers做得更好,因為它有測試紀律、代碼審查、驗證機制。

所以聯合工作流中,跳過OpenSpec的apply,用Superpowers的執行流程替代。 跳過apply後,tasks.md中的勾選狀態需要手動更新(每完成一個task,在tasks.md中把- [ ]改為- [x]),或者通過openspec-superpowers-bridge Skill自動更新。

怎麼銜接? 把OpenSpec的產物餵給Superpowers:

1
把OpenSpec生成的design.md和specs/作為上下文
2
告訴AI:"基於OpenSpec的tasks.md,用Superpowers的planning流程拆成可執行的計劃"
3
Superpowers會把每個task拆成TDD步驟

具體操作: 如果你用Claude Code,在對話中輸入:

請閲讀以下OpenSpec規範文檔,然後基於這些規範使用Superpowers的
writing-plans流程拆分實現計劃:

1. 讀取 openspec/changes/add-jwt-auth/design.md 作為技術方案
2. 讀取 openspec/changes/add-jwt-auth/specs/ 下的所有場景作為測試依據
3. 讀取 openspec/changes/add-jwt-auth/tasks.md 作為任務列表
4. 讀取 openspec/changes/add-jwt-auth/proposal.md 的排除範圍作為審查依據

每個task拆成Superpowers plan的粒度:
1. 寫失敗測試
2. 運行測試
3. 寫最小實現
4. 運行測試
5. 重構
6. 提交

如果你用Cursor或其他工具,打開這些文件讓AI讀取後,再執行/superpowers:writing-plans

粒度轉換示例: AI會把OpenSpec的task 2.1"實現JWT簽發函數"拆成:

1
寫失敗測試:TestJWTSign_ValidCredentials_ReturnsToken
2
運行測試,確認失敗(undefined: SignToken
3
寫最小實現:func SignToken(userID string, expiry time.Duration) (string, error)
4
運行測試,確認通過
5
重構:提取常量、改進命名
6
提交

踩坑4:直接讓Superpowers開始實現,不喂OpenSpec的規範。 如果不把specs和design.md給Superpowers,AI會按自己的理解實現,可能和OpenSpec對齊的方案不一致。比如design.md決定用Redis SET存黑名單,AI可能自己選了內存map。銜接的關鍵:把OpenSpec的design.md作為Superpowers brainstorming的輸入。

另一個容易踩的坑:brainstorming和explore重複勞動。 OpenSpec的explore已經討論過需求和技術方案了,Superpowers的brainstorming又會重新問一遍。解法:如果OpenSpec的explore和propose已經完成,跳過Superpowers的brainstorming階段,直接進入planning階段。把proposal.md和design.md作為brainstorming的等效輸出。

如果你已經跑了apply怎麼辦? apply會讓AI直接按tasks.md實現代碼,但實現過程沒有TDD、沒有代碼審查、沒有驗證機制。兩種處理方式:

1
如果apply生成的代碼可以用,保留代碼,但後續每個task補上Superpowers的代碼審查和verify
2
如果apply生成的代碼質量不行,用git reset回退,重新用Superpowers的TDD流程實現

第5步:Superpowers執行 — TDD實現每個task

這一步完全交給Superpowers的紀律流程。每個task走:

1
派新代理實現(subagent-driven-development)
2
代理內部走TDD(test-driven-development)
3
獨立代理審查規格合規性
4
獨立代理審查代碼質量

踩坑5:審查代理沒有OpenSpec的規範上下文。 Superpowers的代碼審查默認只看代碼質量(由requesting-code-review Skill觸發,自動派一個全新代理審查),不檢查實現是否和OpenSpec的規範一致。我寫了一個自定義Skill來解決這個問題:

---
name: spec-compliance-check
description: Use when 完成代碼實現後,在代碼審查之前,檢查實現是否符合OpenSpec規範
---

# 規範合規審查

## 鐵律
任何實現必須與openspec/specs/中的規範一致。不一致就是bug。

## 審查步驟

1. 讀取 openspec/specs/ 下的主規範(檢查本次實現是否違反了已有需求)
2. 讀取本次變更對應的openspec/changes/下的delta規範
3. 逐條檢查每個"假設/當/則"場景是否有對應實現
4. 檢查design.md中提到的架構決策是否被遵守
5. 檢查proposal.md的排除範圍是否被違反

## 常見問題

- "AI順手多改了代碼":檢查排除範圍
- "實現方式和design.md不一致":這是bug,不是優化
- "場景沒有覆蓋":測試不完整

這個Skill的關鍵在於:它把OpenSpec的規範文檔變成了Superpowers審查流程的一部分。 沒有這個Skill,審查代理只看代碼質量,不看規範合規。

第6步:OpenSpec verify — 驗證實現和規範的一致性

每個task完成後,Superpowers會做代碼審查。但代碼審查通過不等於規範合規。

/opsx:verify

(注:verify屬於OpenSpec的擴展工作流,需要通過openspec config profile切換到擴展配置才能使用。)

verify從三個維度檢查:

維度
檢查什麼
和Superpowers審查的區別
完整性
每個需求是否有對應實現
Superpowers審查看代碼,verify看規範
正確性
實現是否符合規範意圖
Superpowers審查看質量,verify看語義
一致性
實現是否和design.md一致
Superpowers審查不讀design.md

實測發現的問題: verify發現task 4.1"實現認證中間件"的實現用了內存map存黑名單,和design.md的Redis方案不一致。代碼審查沒發現這個問題,因為代碼本身質量沒問題——只是和規範不一致。spec-compliance-check Skill也沒抓到,因為這個task是在安裝Skill之前實現的。

踩坑6:verify和代碼審查二選一。 兩個都要做。代碼審查看質量,verify看合規。它們檢查的東西不一樣,互補不替代。代碼審查關注"代碼寫得好不好"(命名、結構、錯誤處理),verify關注"代碼做了該做的事嗎"(規範合規、場景覆蓋、架構一致)。一個代碼質量滿分但和規範不一致的實現,代碼審查會通過,verify不會。正確順序:

1
代碼質量審查(Superpowers的requesting-code-review Skill自動派一個全新代理審查)
2
規範合規審查(spec-compliance-check Skill)
3
OpenSpec verify(從規範維度全面驗證)

先確保代碼寫得對,再確保代碼和規範一致,最後從規範維度全面驗證。

第7步:OpenSpec archive — 歸檔並更新主規範

所有task完成,verify通過後:

/opsx:archive

兩件事:

1
把delta specs合併到主規範(openspec/specs/auth/spec.md更新了JWT認證的需求)
2
把變更文件夾移到archive/

歸檔的意義: 下次加功能時,AI讀到的主規範已經包含了JWT認證的信息。不會出現"AI不知道項目已經有JWT認證,又實現了一套session認證"的問題。

踩坑7:歸檔前沒跑全量測試。 我有一次在verify通過後直接archive,結果後來發現verify只檢查了規範合規,沒跑測試套件。Superpowers的verification-before-completion要求"跑過命令才能說搞定了",但OpenSpec的archive沒有這個檢查。我的做法:在archive之前,加一步Superpowers的verification。 具體來說,按項目類型跑全量測試:Go項目用go test ./...,Node.js項目用npm test,Python項目用pytest。或者直接觸發Superpowers的verification-before-completion Skill,它會要求你提供當前對話中運行的測試結果。

第8步:Superpowers收尾

驗證通過後,finishing-a-development-branch給你4個選項:

1
本地合併到主分支
2
推送並創建PR
3
保留分支
4
丟棄更改

測試不過不能合併——這條鐵律保底。

三、完整流程一覽

把8步串起來,完整的聯合工作流:

需求階段(OpenSpec主導):

1
explore — 和AI討論技術方案(5-10分鐘)
2
propose — 生成proposal、specs、design、tasks(10-15分鐘)
3
人工審核 — 檢查規範文檔的完整性(5-10分鐘)

銜接階段(你主導):

1
喂上下文 — 把OpenSpec的design.md和specs給Superpowers,讓planning基於規範拆分(跳過OpenSpec的apply,用Superpowers替代)

實現階段(Superpowers主導):

1
TDD實現 — 每個task走RED-GREEN-REFACTOR循環
2
雙重審查 — 代碼質量審查 + 規範合規審查

驗證階段(兩者配合):

1
OpenSpec verify + Superpowers verification — 先跑測試確保代碼能工作,再跑verify確保實現和規範一致
2
OpenSpec archive + Superpowers收尾 — 歸檔更新主規範,合併或創建PR

核心原則:OpenSpec的產物是Superpowers的輸入,Superpowers的輸出是OpenSpec驗證的對象。

當流程出問題時怎麼辦?

1
verify不通過 — 回到對應的task,用Superpowers的systematic-debugging找根因,修復後重新跑verify
2
spec-compliance-check發現不合規 — 先判斷是代碼錯了還是規範過時了:代碼錯了就修代碼,規範過時了就修改design.md並重新跑propose
3
design.md的決策不合理 — 回到第3步人工審核,修改design.md,然後重新走銜接層讓Superpowers基於新方案規劃
4
tasks.md粒度太粗或太細 — 粗粒度task會被Superpowers的planning自動拆細,細粒度task可以在銜接時合併(相鄰的task 1.1和1.2合併為一個plan task)
5
實現過程中需要修改規範 — 先暫停Superpowers的執行,回到OpenSpec修改design.md(必要時重跑propose),修改後的delta specs需要重新審核,然後重新走銜接層讓Superpowers基於新方案規劃。已完成的task如果不受影響則保留,受影響的task需要用Superpowers的systematic-debugging評估影響範圍並修改。如果只是微調而不需要重新propose,可以用/opsx:sync把變更中的delta specs同步到主規範,無需歸檔
6
多個變更並行推進 — 每個變更用獨立的git worktree開發,每個worktree裏只有一個OpenSpec變更在推進。Superpowers的dispatching-parallel-agents可以在不同worktree上並行工作,但不要在同一個worktree上同時推進多個OpenSpec變更,否則spec-compliance-check會混淆不同變更的規範邊界

四、7個坑的完整清單

現象
根因
解法
1
propose生成的方案和需求對不上
跳過了explore
先explore再propose
2
AI多做了你沒要求的功能
proposal的排除範圍沒寫
寫清楚"不做什麼"
3
tasks和plan粒度不匹配
OpenSpec說"做什麼",Superpowers說"怎麼做"
銜接層轉換粒度
4
實現方式和design.md不一致
Superpowers沒有規範上下文
把design.md餵給brainstorming
5
代碼審查不檢查規範合規
審查代理只看代碼質量
自定義spec-compliance-check Skill
6
只做verify或只做代碼審查
以為兩者等價
兩個都做,互補不替代
7
archive前沒跑全量測試
verify不跑測試
archive前加Superpowers的verification

五、自定義Skill:讓兩個框架自動配合

上面7個坑,有5個可以通過自定義Skill自動解決。我寫了一個銜接Skill:

把這兩個Skill放在Claude Code的Skills目錄下:

~/.claude/skills/spec-compliance-check/SKILL.md
~/.claude/skills/openspec-superpowers-bridge/SKILL.md

如果你用Cursor,放在.cursor/rules/目錄下。

---
name: openspec-superpowers-bridge
description: Use when 開始實現OpenSpec的tasks,在brainstorming和planning之前自動加載。當用戶說"開始實現"、"apply tasks"或提到OpenSpec變更時觸發
---

# OpenSpec-Superpowers銜接規範

## 鐵律
實現任何OpenSpec task之前,必須先加載對應的規範文檔。沒有規範上下文的實現就是盲寫代碼。

## 執行步驟

1. 讀取 openspec/specs/ 下的主規範(瞭解已有約束)和 openspec/changes/ 下最新的未歸檔變更目錄中的所有文檔(如果不確定當前變更目錄,運行 `ls openspec/changes/` 查看未歸檔的變更文件夾。如果只有一個,那就是當前變更。如果有多個,詢問用戶確認)
2. 如果OpenSpec的explore和propose已經完成,跳過Superpowers的brainstorming階段,直接進入planning階段
3. 把 design.md 作為 Superpowers planning 的輸入
4. 把 specs/ 中的場景轉換為 TDD 測試用例
5. 把 tasks.md 中的每個任務拆成 Superpowers plan 的粒度
6. 每個任務完成後,用 spec-compliance-check 審查規範合規
7. 全部任務完成後,運行 /opsx:verify
8. verify 通過後,運行 Superpowers verification(跑測試命令)
9. 兩個驗證都通過,才能 /opsx:archive

## 場景到測試的轉換規則

OpenSpec的"假設/當/則"場景映射為測試用例,每個場景至少需要兩個測試:

1. 正常路徑測試:假設對應setup,當對應action,則對應assertion
2. 錯誤路徑測試:假設對應異常條件,當對應action,則對應錯誤assertion
3. 邊界值測試:如果場景涉及數值、時間等邊界,額外添加

## 審查的雙重檢查

每次代碼審查必須包含兩個維度:
1. 代碼質量(Superpowers默認審查)
2. 規範合規(spec-compliance-check Skill)

## 常見問題

- "AI沒讀design.md就實現了":檢查銜接Skill是否觸發
- "tasks粒度太粗":自動拆成TDD步驟
- "verify通過了但測試沒跑":archive前強制跑測試

這個Skill直接解決了7個坑中的5個:

1
自動加載規範上下文 — 解決坑4(實現方式和design.md不一致)
2
跳過brainstorming避免重複 — 解決explore和brainstorming重複勞動的問題
3
場景轉測試用例 — 解決坑3(tasks和plan粒度不匹配),讓OpenSpec的規範直接變成Superpowers TDD的輸入
4
雙重驗證 — 解決坑6(verify和代碼審查二選一)和坑7(archive前沒跑測試)
5
spec-compliance-check — 解決坑5(審查不檢查規範合規)

未自動解決的:坑1(需要人先explore)和坑2(需要人寫排除範圍),這兩個需要人在流程中主動把關。

六、什麼時候該用哪個

不是所有項目都需要兩個框架一起上。

只用OpenSpec就夠了:

改按鈕顏色、修typo等小改動
需求很明確,AI不會做多餘的事
你只需要對齊"做什麼",實現質量你自己把控

只用Superpowers就夠了:

一次性腳本(寫完就扔)
需求明確但不需要長期規範的小功能(比如寫個數據遷移腳本)
你自己很清楚需求,不需要規範對齊

兩個都用:

團隊協作的項目(規範保證方向一致,紀律保證質量一致)
長期維護的項目(規範隨項目增長,紀律保證代碼質量不退化)
複雜功能開發(設計階段防止方向錯,TDD防止實現錯)
已有代碼庫的項目(現有代碼+新功能,規範防止AI"好心"多改,紀律防止AI偷懶跳步)

判斷標準:代碼要活多久 + 有多少人碰代碼。 活1天1個人碰,兩個都不用。活1個月3個人碰,兩個都用。

從單框架過渡到雙框架:

如果你已經在用OpenSpec:在下一個新功能中加入Superpowers的TDD和代碼審查,不需要一次用上全部14個Skill,先加3條鐵律(沒設計不寫代碼、沒測試不寫代碼、沒驗證不說完成)
如果你已經在用Superpowers:在下一個複雜功能前先用OpenSpec的explore和propose生成規範文檔,不需要一次用上完整流程,先加規範對齊這一步

七、效果對比:4種組合的數據一覽

用同一個項目(Go微服務添加JWT認證)做對比(以下數據來自作者個人經驗,僅供參考):

維度
只用OpenSpec
只Superpowers
兩個都用
需求對齊
proposal+specs確認
口頭說了算
proposal+specs確認
AI多做功能
排除範圍控制
偶爾(1-2次)
排除範圍控制(0次)
測試覆蓋
0個測試
10個測試
10個測試
提交粒度
1次大提交
8次小提交
8次小提交
規範合規
verify檢查
無法驗證
verify+合規審查
長期維護
主規範累積
新對話忘光
主規範累積+紀律一致
返工次數
1-2次
2-3次
0-1次

兩個框架組合的最大價值不是各自的價值相加,是消除"方向對了但做錯了"和"做對了但方向錯了"這兩個最常見的失敗模式。

數據說明: "AI多做功能"這行,Superpowers比"兩個都不用"好,是因為brainstorming階段會問清楚需求邊界;但Superpowers沒有排除範圍機制,所以AI還是可能"好心"多做。加了OpenSpec的排除範圍後,spec-compliance-check能自動檢測違規,所以能到0次。返工次數指因方向錯誤或質量不達標需要返工的次數,不含正常的小調整。

寫在最後

OpenSpec和Superpowers的組合,本質上是給AI編程加了兩個維度的約束:

1
橫向約束(OpenSpec):AI做的事情和你的需求一致
2
縱向約束(Superpowers):AI做事情的方式符合工程標準

沒有橫向約束,AI可能做出一個完美但不需要的功能。沒有縱向約束,AI可能做出一個需要但質量不合格的功能。

兩個約束都有,才是真正的"對的事情,用對的方式做出來"。

圖片

3條起步規則:

1
先explore再propose——別讓AI猜需求
2
把design.md餵給Superpowers——別讓AI猜方案
3
雙審查——別讓AI自己給自己打分

3分鐘上手

兩個框架都裝好後,按這個順序走你的第一個聯合任務:

1
/opsx:explore 討論方案
2
/opsx:propose 功能名 生成規範
3
審核四份文檔(proposal、specs、design、tasks)
4
對AI說:"讀取 openspec/changes/ 目錄下的規範,用Superpowers的writing-plans拆計劃"
5
Superpowers逐個task走TDD
6
每個task完成後:代碼審查、spec-compliance-check、/opsx:verify
7
跑全量測試(go test ./... 或項目對應命令)
8
/opsx:archive Superpowers收尾合併

第4步是關鍵——如果你只記住一件事,記住這個:把OpenSpec的規範文檔餵給Superpowers,不要讓Superpowers空手上陣。

掃碼關注「AI智聞說」,每天3分鐘掌握AI新知識

圖片