OpenSpec最佳實踐:讓AI按規範寫代碼,不再憑感覺瞎編

作者:AI智聞說
日期:2026年5月13日 上午7:45
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

OpenSpec最佳實踐:用規範對齊AI,避免亂改無謂代碼

整理版摘要

呢篇文章來自Fission-AI團隊,介紹OpenSpec呢個開源SDD(Spec-Driven Development)框架。作者想解決嘅問題係:AI寫代碼時成日「估」開發者意圖,改咗唔應該改嘅檔案,或者做多咗你冇要求嘅功能。核心結論係:喺AI寫代碼之前,先用規範對齊「做乜」同「點做」,就可以大幅減少呢啲問題。OpenSpec嘅流程係:propose(描述變更)→ apply(按規範實現)→ archive(歸檔更新真相源)。中間多咗「對齊」一步,令你可以喺AI寫1000行代碼之前就發現方向錯咗。

文章重點提出咗七條最佳實踐,涵蓋proposal嘅out of scope、delta規範增量修改、用GIVEN/WHEN/THEN寫可測試場景、按變更複雜度揀流程、explore先行討論、verify三維度驗證、同自定義Schema。呢啲實踐嘅核心都係圍繞「控制範圍、保持增量、驗證一致」。OpenSpec同Spec Kit、Kiro嘅比較亦顯示,佢最適合棕地項目同需要並行開發嘅團隊。

最後作者提醒三個最常見嘅坑:小改動都行完整流程、proposal寫得太模糊、唔跑verify就archive。總括嚟講,OpenSpec唔係取代AI工具,而係喺AI前面加一層規範對齊,令AI唔再憑感覺亂編。

  • 結論:規範先行係控制AI行為嘅關鍵,out of scope比in scope更重要,寫清楚「唔做乜」可以有效防止AI亂改。
  • 方法:用delta規範增量修改,只寫變化嘅部分,避免重寫全部規範,同時支援並行開發同歷史追溯。
  • 差異OpenSpec輕量、支援棕地項目、天然並行,同Spec Kit完整流程、Kiro鎖定AWS生態相比,更適合需要靈活度嘅團隊。
  • 啟發:explore先行,討論清楚技術方案先propose,可以大幅提升規範質量,減少後續修改。
  • 可行動點:每次apply之後、archive之前一定要跑verify,從完整性、正確性、一致性三個維度檢查,確保實現同規範一致。
整理重點

問題與OpenSpec核心理念

你有冇試過叫AI加個功能,佢改咗5個檔案,其中3個你根本冇要求改?或者每次新對話,AI忘光之前嘅決策,由零開始估你嘅意圖?呢啲問題唔係AI能力唔夠,而係你冇畀佢規範。

OpenSpecFission-AI開發嘅開源SDD框架,核心好簡單:喺AI寫代碼之前,先對齊「做乜」同「點做」。目前GitHub上好受關注,支援Claude Code、Cursor、Copilot、Codex等25+工具。

整理重點

基礎工作流:propose → apply → archive

OpenSpec有兩個核心概念:specs/係系統當前行為嘅規範,係真相源;changes/</highlight-inline>係進行中嘅變更,每個變更一個文件夾,可以並行推進。

  1. 1 第1步 propose:用 /opsx:propose add-dark-mode 呢類指令,AI會生成四個產物:proposal.md(點解做、範圍)、delta specs(系統行為變化)、design.md(技術方案)、tasks.md(具體步驟)。你審核呢啲文檔,確認「啱,呢個就係我要嘅」。
  2. 2 第2步 apply:/opsx:apply,AI按tasks.md逐項執行,每完成一項打勾。佢唔會跑偏,唔會多做,唔會「好心」幫你重構你冇要求嘅嘢。
  3. 3 第3步 archive:/opsx:archive,將delta specs合併到主規範(更新真相源),將變更文件夾移到 archive/。規範隨項目增長,每次archive都令主規範更完整。

四個產物職責明確:proposal.md回答「點解做、範圍係乜」;delta specs回答「系統行為有咩變化」;design.md講技術點做、架構決策;tasks.md係具體可勾選嘅任務清單。

整理重點

七條最佳實踐:控制AI嘅關鍵

實踐1:proposal.md嘅「唔做乜」比「做乜」更重要

大多數人寫proposal只關注範圍,唔記得寫排除範圍。例如你只係想加深色模式顏色token,但AI可能順手重構成個CSS架構。正確做法係明確寫出out of scope,例如「唔重構現有CSS架構」、「唔改變組件內部結構」。呢個係控制AI行為最有效嘅方式。

實踐2Delta規範用增量唔用重寫

OpenSpec最核心嘅設計係delta規範,只寫變化嘅部分,唔係重寫成個規範。咁樣可以做到並行唔衝突、審核更快、歷史可追溯。每個變更嘅delta都保留住,睇到系統點樣一步步演化。

實踐4:小變更用核心流程,大變更用擴展流程

OpenSpec有兩種profile:核心流程(core)適合大多數場景;擴展流程(workflows)適合需要更多控制嘅情況,例如逐個審核產物、手動控制節奏。關鍵判斷:如果改一行CSS就搞得掂,唔好用OpenSpec。佢嘅價值喺對齊,成本只有喺變更夠複雜時先值得。

實踐5:explore先行,propose在後

好多新手一拎到需求就跑去 /opsx:propose,結果生成嘅規範方向偏咗。正確做法係先用/opsx:explore同AI討論技術方案,分析現有代碼庫、對比唔同方案、討論利弊,討論清楚先propose。咁樣生成嘅規範質量會高好多。

實踐6:verify驗證三維度

/opsx:verify 從完整性、正確性、一致性三個維度檢查。報告分CRITICALWARNINGSUGGESTION三級。唔好淨係睇tasks.md啲勾打曬冇,一定要跑verify,因為AI可能標記任務完成但實際實現同規範唔一致。

實踐7:自定義Schema適配工作流

OpenSpec預設產物流係proposal→specs→design→tasks→implement,但如果團隊需要額外步驟例如「調研階段」,可以自定義SchemaSchema令你可以按需調整,唔使被工具綁死。

整理重點

工具對比與常見陷阱

OpenSpecSpec KitKiro三個主流SDD工具嘅比較:OpenSpec輕量、流暢、迭代優先,天然支援並行開發;Spec Kit完整、有治理、流程嚴格;Kiro強大但鎖定IDE。建議:喺已有項目上加功能用OpenSpec(delta規範適合棕地項目),新項目從零開始可以用Spec Kit,只用AWS生態就用Kiro。

安裝與初始化 bash
# 安裝(需要Node.js 20.19.0+)
npm install -g @fission-ai/openspec@latest

# 在項目中初始化
cd your-project
openspec init

# 選擇你用的AI工具(Claude Code、Cursor等)
# 更新AI指導文件和slash命令
openspec update

# 開始第一個變更
/opsx:propose add-user-profile

# 審核後應用
/opsx:apply

# 驗證
/opsx:verify

# 歸檔
/opsx:archive

三個最常見嘅坑

  • 坑1:小改動都行完整流程。改一行CSS、修一個typo,唔需要propose→apply→archive。如果AI一次對話就準確完成,直接改代碼。
  • 坑2:proposal寫得太模糊。例如「加個用戶管理功能」,AI會生成一個完整用戶系統——註冊、登錄、權限、頭像、設置,遠超你預期。修復方法:明確scope同out of scope,用GIVEN/WHEN/THEN寫具體場景。
  • 坑3:唔跑verify就archive。AI可能標記任務完成但實現同規範不一致。每次apply之後、archive之前,一定要跑一次verify。

用OpenSpec做SDD(規範驅動開發),AI唔會再「估」你想要咩,而係跟你確認咗嘅規範去做。7條實戰經驗,幫你避開90%嘅陷阱

寫喺前面

你有冇遇過咁嘅情況:

叫AI加個功能,佢改咗5個檔案,當中3個你根本冇要求改

每次新對話,AI唔記得之前嘅決定,由零開始估你嘅意圖

改咗深色模式,佢順便重構咗成個CSS架構——你只係想改顏色token咋

問題唔係AI嘅能力,而係你冇俾規範佢。

OpenSpec係Fission-AI開發嘅開源SDD(Spec-Driven Development)框架,核心概念好簡單:喺AI寫程式之前,先對齊「做啲咩」同「點樣做」。

而家GitHub上好多人關注,支援Claude Code、Cursor、Copilot、Codex等超過25款工具。

一、OpenSpec係咩嚟

核心概念:規範行先,程式碼後行

傳統AI編程:你講需求,AI估你意圖,寫程式,你發現唔啱,改,再估,再改

OpenSpec流程:你講需求,AI生成規範文件,你審查確認,AI跟規範做,驗證一致性

分別在於:中間多咗一步「對齊」。 呢一步令你喺AI寫程式之前就發現方向有偏差,唔係寫完1000行程式先發現。

目錄結構

目錄/檔案
用途
openspec/specs/
系統行為嘅真相源(當前狀態)
openspec/specs/auth/spec.md
認證模組嘅規範
openspec/specs/payments/spec.md
支付模組嘅規範
openspec/changes/add-dark-mode/
進行緊嘅變更(每個變更一個資料夾)
openspec/changes/archive/
已完成嘅變更歸檔喺呢度

兩個核心概念:

1
specs/ — 系統當前行為嘅規範,係真相源
2
changes/ — 進行緊嘅變更,每個變更自成一個資料夾

多個變更可以同步進行,互不幹擾。

四個產出

運行/opsx:propose之後,AI會一次生成四個文件:

產物
回答嘅問題
內容
proposal.md
點解要做,範圍係咩
變更嘅動機同邊界
specs/
系統行為有咩變化
Delta規範(新增/修改/刪除)
design.md
技術上點樣做,架構決定
技術方案
tasks.md
具體執行步驟
可以剔嘅任務清單

每個產出職責清晰,唔會撈亂。其中design.md例子:

# 設計方案:添加深色模式

## 技術方案
使用CSS自定義屬性實現主題切換。在:root級別定義亮色/暗色token集合,
通過<html>上的data-theme屬性切換。

## 架構決策
- 主題切換狀態存入localStorage,默認跟隨系統偏好
- 不用CSS-in-JS,純CSS變量,零運行時開銷
- 第三方組件:通過CSS優先級覆蓋,不用包裝器

二、基礎工作流程:propose → apply → archive

第1步:propose — 描述變更

/opsx:propose add-dark-mode

AI生成proposal.md、delta specs、design.md、tasks.md。你審查呢啲文件,確認「係,呢個就係我要嘅」。

第2步:apply — 跟規範執行

/opsx:apply

AI跟住tasks.md逐項做,做完一項就剔一項。唔會走偏,唔會做多,唔會「好心」幫你重構你冇要求嘅嘢。

第3步:archive — 歸檔完成

/opsx:archive

兩件事:將delta specs合併到主規範(更新真相源),將變更資料夾移到archive/。

規範隨住項目增長,每次archive都令主規範更加完整。

三、7條最佳做法

做法1:proposal.md嘅「唔做啲咩」比「做啲咩」更重要

大多數人寫proposal時淨係關注範圍(scope),唔記得寫排除範圍(out of scope)。

反面教材:

## 範圍
- 添加深色模式
- 支持主題切換

AI見到呢個,可能會順便幫你重構CSS變數、改組件結構、加動畫過渡。你只係想改顏色咋。

正確寫法:

## 範圍
- 添加深色模式顏色token
- 添加主題切換按鈕

## 排除範圍
- 不重構現有CSS架構
- 不改變組件內部結構
- 不添加過渡動畫(後續迭代)
- 不修改第三方組件的主題

清楚寫明「唔做啲咩」,係控制AI行為最有效嘅方法。 OpenSpec嘅proposal.md有專屬嘅in scope / out of scope區分,用好佢。

做法2:Delta規範用「增量」而唔用「重寫」

呢個係OpenSpec最核心嘅設計,亦係同Spec Kit最大嘅分別。

唔好重寫成個規範,只係寫有變化嘅部分:

# 認證模塊增量規範

## 新增需求

### 需求:雙因素認證
系統必須支持基於TOTP的雙因素認證。

#### 場景:2FA登錄
- 假設 用戶已啓用2FA
- 當 用戶提交有效憑證
- 則 彈出OTP驗證挑戰

## 修改需求

### 需求:會話過期時間
系統必須在不活動15分鐘後過期會話。
(之前:30分鐘)

## 刪除需求

### 需求:記住我功能
(已被2FA替代,不再需要)

點解增量比重寫好?

1
同步唔衝突 — 兩個人同時改同一個spec嘅唔同需求,各自寫delta,合併時唔會撞
2
審查快啲 — 淨係睇變化,唔使重新睇曬成個文件
3
歷史可以追溯 — archive之後,每個變更嘅delta都keep住,可以睇到系統點樣一步步演變
Delta標記
含義
Archive時嘅動作
ADDED
新增行為
加入主規範
MODIFIED
修改行為
取代原需求
REMOVED
刪除行為
從主規範移除

做法3:用GIVEN/WHEN/THEN寫場景,令規範可以測試

OpenSpec嘅規範用GIVEN/WHEN/THEN格式寫場景,每個場景都可以測試:

### 需求:用戶認證
系統必須在登錄成功後簽發JWT令牌。

#### 場景:有效憑證
- 假設 用戶持有有效憑證
- 當 用戶提交登錄表單
- 則 返回JWT令牌
- 且 用戶被重定向到儀表盤

#### 場景:無效憑證
- 假設 用戶持有無效憑證
- 當 用戶提交登錄表單
- 則 顯示錯誤提示
- 且 不簽發任何令牌

用RFC 2119關鍵詞表達需求強度:

關鍵詞
含義
幾時用
MUST / SHALL
必須
安全、合規、核心邏輯
SHOULD
建議
最佳做法、效能最佳化
MAY
可選
MAY

錦上添花嘅功能唔好寫「系統應該支援2FA」呢啲含糊嘢,要寫「系統MUST支援基於TOTP嘅雙因素認證」。

做法4:細變改用核心流程,大變改用擴展流程

OpenSpec有兩種profile:

核心流程(core) — 適合大多數情況:

1
/opsx:propose — 描述變更
2
/opsx:apply — 跟規範執行
3
/opsx:archive — 歸檔完成

擴展流程(workflows) — 適合需要更多控制嘅情況:

# 切換到擴展模式
openspec config profile  # 選擇workflows
openspec update

擴展模式多咗呢啲指令:

命令
用途
/opsx:new
只係建立資料夾,唔生成產出(手動控制節奏)
/opsx:continue
一次生成一個產出,逐步審查
/opsx:ff
快速模式,一次生成所有產出
/opsx:verify
驗證執行係咪同規範一致
/opsx:sync
手動合併delta規範(唔歸檔)
/opsx:bulk-archive
批量歸檔多個變更(包括衝突檢測)
/opsx:onboard
引導式入門教學(大約15分鐘)

選擇建議:

場景
推薦流程
改一粒掣嘅顏色
直接改程式碼,唔需要用OpenSpec
加一個新功能
核心流程(propose / apply / archive)
重構一個模組
擴展流程 continue(逐個審查產出)
大型功能開發
擴展流程 + verify

關鍵判斷: 如果改一行CSS就搞得掂,唔好用OpenSpec。OpenSpec嘅價值在於「對齊」,對齊嘅成本只有當變更夠複雜嗰陣先值得。

做法5:explore先行,propose在後

好多新手收到需求就即刻開/opsx:propose,結果生成嘅規範方向錯咗,來回改。

注意:/opsx:explore係核心profile嘅指令,如果唔用得,都可以直接喺對話中同AI討論技術方案,傾清楚之後先propose。

正確做法:先用explore,再用propose。

/opsx:explore

explore模式唔會生成任何產出,只係同AI討論:

1
AI分析現有程式碼庫
2
比較唔同技術方案
3
畫出架構圖
4
討論利弊

傾清楚之後再執行/opsx:propose,生成嘅規範質量會高好多。典型對話:

你: /opsx:explore
AI: 你想探索啲咩?
你: 流動端應該點樣處理用戶認證?
AI: 等我睇下你現有嘅認證方案...
我發現你喺Web端用緊session認證。
流動端有三個方案:
1
JWT令牌(無狀態,支援離線)
2
OAuth2(第三方登入)
3
擴展現有session(比較簡單)
你: 用JWT啦。
AI: 好,執行 /opsx:propose add-jwt-auth 開始。

explore適合呢啲情況:

唔肯定技術方案揀邊個
需求模糊,需要同AI一齊搞清楚
對現有程式碼庫唔熟

做法6:verify驗證三個層面,唔好淨係睇「任務做完未」

/opsx:verify

verify從三個層面檢查:

維度
檢查啲咩
完整性
所有tasks做曬未?每個需求都有對應嘅實現嗎?
正確性
實現符唔符合規範嘅意圖?邊界情況處理咗未?
一致性
程式碼同design.md嘅決定一致嗎?命名規範統一嗎?

報告分三級:CRITICAL(一定要修)、WARNING(建議修)、SUGGESTION(可以揀嘅最佳化)

常見錯誤: 淨係睇tasks.md嘅剔號打曬未,唔行verify。AI可能標記任務完成但實際實現同規範唔一致。verify就係專捉呢啲問題。

做法7:自訂Schema去適應你嘅工作流程

OpenSpec預設嘅產出流程係:

1
proposal
2
specs
3
design
4
tasks
5
implement

如果你嘅團隊需要額外步驟,例如「調研階段」,可以自訂Schema:

# openspec/schemas/research-first/schema.yaml
name: research-first
artifacts:
  - id: research
    generates: research.md
    requires: []
  - id: proposal
    generates: proposal.md
    requires: [research]
  - id: tasks
    generates: tasks.md
    requires: [proposal]

然後初始化:

openspec schema init research-first

自訂Schema嘅價值: 唔係每個項目都需要design.md,亦唔係每個項目都適合預設流程。Schema令你可以按需要調整,而唔係被工具綁死。

四、OpenSpec vs Spec Kit vs Kiro

三個主流SDD工具嘅對比:

維度
OpenSpec
Spec Kit (GitHub)
Kiro (AWS)
哲學
輕量、流暢、迭代優先
完整、有治理、流程嚴謹
強大但綁死IDE
流程控制
無相位門,靈活
嚴格相位門
鎖定特定模型
棕地項目(現有項目)
原生支援(delta規範)
需要完整重寫
有限
工具鎖定
25+工具通用
GitHub生態
Kiro IDE
格式
Markdown + Git
Markdown + Python
內置格式
並行開發
天然支援(每個變更獨立資料夾)
支持
不支持
定製性
Schema可自訂
Presets + Extensions
有限

我嘅建議:

喺現有項目上加功能 → OpenSpec(delta規範天然適合棕地項目)
新項目由零開始 → 都可以,Spec Kit嘅完整流程更嚴謹
只用AWS生態 → Kiro
團隊需要強治理 → Spec Kit

五、安裝同5分鐘上手

# 安裝(需要Node.js 20.19.0+)
npm install -g @fission-ai/openspec@latest

# 在項目中初始化
cd your-project
openspec init
# 選擇你用的AI工具(Claude Code、Cursor等)

# 更新AI指導文件和slash命令(安裝後和升級後都要運行)
openspec update

# 開始第一個變更
/opsx:propose add-user-profile
# 審核生成的文檔...

# 按規範實現
/opsx:apply

# 驗證實現
/opsx:verify

# 完成後歸檔
/opsx:archive

支援嘅AI工具(部分):

工具
指令格式
Claude Code
/opsx:propose
/opsx:apply
Cursor
/opsx-propose
/opsx-apply
Windsurf
/opsx-propose
/opsx-apply
GitHub Copilot
/opsx-propose
/opsx-apply
Codex / Gemini CLI
各有整合方式

六、3個最常見嘅陷阱

陷阱1:細改動都行曬成個流程

改一行CSS、修一個typo,唔需要propose → apply → archive。OpenSpec嘅價值在於對齊,對齊嘅成本只有當變更夠複雜嗰陣先值得。

判斷標準:如果AI一次對話就準確完成,直接改程式碼。如果需要多輪對話先對齊到,用OpenSpec。

陷阱2:proposal寫得太模糊

「加個用戶管理功能」呢種proposal,AI會生成一個完整嘅用戶系統——註冊、登入、權限、頭像、設定,遠遠超出你嘅預期。

修復方法: 清楚標明scope同out of scope,用GIVEN/WHEN/THEN寫具體場景。

陷阱3:唔行verify就archive

AI可能標記任務完成但實現同規範唔一致。verify就係專捉呢啲問題。每次apply之後、archive之前,行一次verify。

寫喺最後

OpenSpec唔係取代AI編程工具,佢喺AI前面加咗一層規範對齊。

核心公式:

1
清楚嘅out of scope — 寫清楚「唔做啲咩」
2
增量式嘅delta規範 — 只寫變化,唔重寫全部
3
可以測試嘅場景 — 用「假定/當/則」寫每個場景
4
適時嘅verify — apply之後、archive之前一定要驗證

最重要嘅做法:proposal嘅「唔做啲咩」比「做啲咩」更重要。 寫清楚邊界,AI就唔會「好心」幫你做多。

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

圖片

用OpenSpec做SDD(規範驅動開發),AI不再"猜"你要什麼,而是按你確認的規範實現。7條實戰經驗,幫你避開90%的坑

寫在前面

你有沒有遇到過這種情況:

讓AI加個功能,它改了5個文件,其中3個你根本沒要求改

每次新對話,AI忘光之前的決策,從零開始猜你的意圖

改了深色模式,它順手重構了整個CSS架構——你只想要顏色token變一下

問題不在AI的能力,在於你沒有給它規範。

OpenSpec是Fission-AI開發的開源SDD(Spec-Driven Development)框架,核心理念很簡單:在AI寫代碼之前,先對齊"做什麼"和"怎麼做"。

目前GitHub上廣受關注,支持Claude Code、Cursor、Copilot、Codex等25+工具。

一、OpenSpec是什麼

核心理念:規範先行,代碼後行

傳統AI編程:你說需求,AI猜意圖,寫代碼,你發現不對,改,再猜,再改

OpenSpec流程:你說需求,AI生成規範文檔,你審核確認,AI按規範實現,驗證一致性

區別在於:中間多了一步"對齊"。 這一步讓你在AI寫代碼之前就能發現方向偏了,而不是寫完1000行代碼之後才發現。

目錄結構

目錄/文件
用途
openspec/specs/
系統行為的真相源(當前狀態)
openspec/specs/auth/spec.md
認證模塊的規範
openspec/specs/payments/spec.md
支付模塊的規範
openspec/changes/add-dark-mode/
進行中的變更(每個變更一個文件夾)
openspec/changes/archive/
已完成的變更歸檔在這裏

兩個核心概念:

1
specs/ — 系統當前行為的規範,是真相源
2
changes/ — 正在進行的變更,每個變更自成一個文件夾

多個變更可以並行推進,互不干擾。

四個產物

運行/opsx:propose後,AI會一次生成四個文檔:

產物
回答的問題
內容
proposal.md
為什麼要做,範圍是什麼
變更的動機和邊界
specs/
系統行為有什麼變化
Delta規範(新增/修改/刪除)
design.md
技術上怎麼做,架構決策
技術方案
tasks.md
具體實現步驟
可勾選的任務清單

每個產物職責明確,不會混在一起。其中design.md示例:

# 設計方案:添加深色模式

## 技術方案
使用CSS自定義屬性實現主題切換。在:root級別定義亮色/暗色token集合,
通過<html>上的data-theme屬性切換。

## 架構決策
- 主題切換狀態存入localStorage,默認跟隨系統偏好
- 不用CSS-in-JS,純CSS變量,零運行時開銷
- 第三方組件:通過CSS優先級覆蓋,不用包裝器

二、基礎工作流:propose → apply → archive

第1步:propose — 描述變更

/opsx:propose add-dark-mode

AI生成proposal.md、delta specs、design.md、tasks.md。你審核這些文檔,確認"對,這就是我要的"。

第2步:apply — 按規範實現

/opsx:apply

AI按tasks.md逐項執行,每完成一項打勾。不會跑偏,不會多做,不會"好心"幫你重構你沒要求的東西。

第3步:archive — 歸檔完成

/opsx:archive

兩件事:把delta specs合併到主規範(更新真相源),把變更文件夾移到archive/。

規範隨項目增長,每次archive都讓主規範更完整。

三、7條最佳實踐

實踐1:proposal.md的"不做什麼"比"做什麼"更重要

大多數人在寫proposal時只關注範圍(scope),忘了寫排除範圍(out of scope)。

反面教材:

## 範圍
- 添加深色模式
- 支持主題切換

AI看到這個,可能順手幫你重構CSS變量、改組件結構、加動畫過渡。你只想要顏色變一下。

正確寫法:

## 範圍
- 添加深色模式顏色token
- 添加主題切換按鈕

## 排除範圍
- 不重構現有CSS架構
- 不改變組件內部結構
- 不添加過渡動畫(後續迭代)
- 不修改第三方組件的主題

明確寫出"不做什麼",是控制AI行為最有效的方式。 OpenSpec的proposal.md專門有in scope / out of scope的區分,用好它。

實踐2:Delta規範用"增量"不用"重寫"

這是OpenSpec最核心的設計,也是和Spec Kit最大的區別。

不要重寫整個規範,只寫變化的部分:

# 認證模塊增量規範

## 新增需求

### 需求:雙因素認證
系統必須支持基於TOTP的雙因素認證。

#### 場景:2FA登錄
- 假設 用戶已啓用2FA
- 當 用戶提交有效憑證
- 則 彈出OTP驗證挑戰

## 修改需求

### 需求:會話過期時間
系統必須在不活動15分鐘後過期會話。
(之前:30分鐘)

## 刪除需求

### 需求:記住我功能
(已被2FA替代,不再需要)

為什麼增量比重寫好?

1
並行不衝突 — 兩個人同時改同一個spec的不同需求,各自寫delta,合併時不衝突
2
審核更快 — 只看變化,不用通讀整個文檔
3
歷史可追溯 — archive後,每個變更的delta都保留着,能看到系統怎麼一步步演化
Delta標記
含義
Archive時動作
ADDED
新增行為
加入主規範
MODIFIED
修改行為
替換原需求
REMOVED
刪除行為
從主規範刪除

實踐3:用GIVEN/WHEN/THEN寫場景,讓規範可測試

OpenSpec的規範用GIVEN/WHEN/THEN格式寫場景,每個場景都是可測試的:

### 需求:用戶認證
系統必須在登錄成功後簽發JWT令牌。

#### 場景:有效憑證
- 假設 用戶持有有效憑證
- 當 用戶提交登錄表單
- 則 返回JWT令牌
- 且 用戶被重定向到儀表盤

#### 場景:無效憑證
- 假設 用戶持有無效憑證
- 當 用戶提交登錄表單
- 則 顯示錯誤提示
- 且 不簽發任何令牌

用RFC 2119關鍵詞表達需求強度:

關鍵詞
含義
什麼時候用
MUST / SHALL
必須
安全、合規、核心邏輯
SHOULD
建議
最佳實踐、性能優化
MAY
可選
錦上添花的功能

別寫"系統應該支持2FA"這種模糊話,寫"系統MUST支持基於TOTP的雙因素認證"。

實踐4:小變更用核心流程,大變更用擴展流程

OpenSpec有兩種profile:

核心流程(core) — 適合大多數場景:

1
/opsx:propose — 描述變更
2
/opsx:apply — 按規範實現
3
/opsx:archive — 歸檔完成

擴展流程(workflows) — 適合需要更多控制的場景:

# 切換到擴展模式
openspec config profile  # 選擇workflows
openspec update

擴展模式多了這些命令:

命令
用途
/opsx:new
只創建文件夾,不生成產物(手動控制節奏)
/opsx:continue
一次生成一個產物,逐步審核
/opsx:ff
快速模式,一次生成所有產物
/opsx:verify
驗證實現是否和規範一致
/opsx:sync
手動合併delta規範(不歸檔)
/opsx:bulk-archive
批量歸檔多個變更(含衝突檢測)
/opsx:onboard
引導式入門教程(約15分鐘)

選擇建議:

場景
推薦流程
改個按鈕顏色
直接改代碼,不需要OpenSpec
加一個新功能
核心流程(propose / apply / archive)
重構一個模塊
擴展流程 continue(逐個審核產物)
大型特性開發
擴展流程 + verify

關鍵判斷: 如果改一行CSS就能搞定,別用OpenSpec。OpenSpec的價值在於"對齊",對齊的成本只有在變更足夠複雜時才值得。

實踐5:explore先行,propose在後

很多新手拿到需求就直奔/opsx:propose,結果生成的規範方向偏了,來回改。

注意:/opsx:explore是核心profile的命令,如果不可用,也可以直接在對話中和AI討論技術方案,討論清楚後再propose。

正確做法:先explore,再propose。

/opsx:explore

explore模式不生成任何產物,只是和AI討論:

1
AI分析現有代碼庫
2
對比不同技術方案
3
畫出架構圖
4
討論利弊

討論清楚後再運行/opsx:propose,生成的規範質量會高很多。典型對話:

你: /opsx:explore
AI: 你想探索什麼?
你: 移動端應該怎麼處理用戶認證?
AI: 讓我看看你現有的認證方案...
我發現你在Web端用的是session認證。
移動端有三種方案:
1
JWT令牌(無狀態,支持離線)
2
OAuth2(第三方登錄)
3
擴展現有session(更簡單)
你: 用JWT吧。
AI: 好的,運行 /opsx:propose add-jwt-auth 開始。

explore適合這些場景:

不確定技術方案選哪個
需求模糊,需要和AI一起理清
對現有代碼庫不熟悉

實踐6:verify驗證三維度,別隻看"任務完成了"

/opsx:verify

verify從三個維度檢查:

維度
檢查什麼
完整性
所有tasks都完成了嗎?每個需求都有對應實現嗎?
正確性
實現符合規範意圖嗎?邊界情況處理了嗎?
一致性
代碼和design.md的決策一致嗎?命名規範統一嗎?

報告分三級:CRITICAL(必須修)、WARNING(建議修)、SUGGESTION(可選優化)

常見錯誤: 只看tasks.md的勾打完了沒有,不跑verify。AI可能標記任務完成但實際實現和規範不一致。verify就是專門抓這種問題的。

實踐7:自定義Schema適配你的工作流

OpenSpec默認的產物流是:

1
proposal
2
specs
3
design
4
tasks
5
implement

如果你的團隊需要額外的步驟,比如"調研階段",可以自定義Schema:

# openspec/schemas/research-first/schema.yaml
name: research-first
artifacts:
  - id: research
    generates: research.md
    requires: []
  - id: proposal
    generates: proposal.md
    requires: [research]
  - id: tasks
    generates: tasks.md
    requires: [proposal]

然後初始化:

openspec schema init research-first

自定義Schema的價值: 不是每個項目都需要design.md,也不是每個項目都適合默認流程。Schema讓你按需調整,而不是被工具綁架。

四、OpenSpec vs Spec Kit vs Kiro

三個主流SDD工具的對比:

維度
OpenSpec
Spec Kit (GitHub)
Kiro (AWS)
哲學
輕量、流暢、迭代優先
完整、有治理、流程嚴格
強大但鎖IDE
流程控制
無相位門,靈活
嚴格相位門
鎖定特定模型
棕地項目
原生支持(delta規範)
需要完整重寫
有限
工具鎖定
25+工具通用
GitHub生態
Kiro IDE
格式
Markdown + Git
Markdown + Python
內置格式
並行開發
天然支持(每個變更獨立文件夾)
支持
不支持
定製性
Schema可定製
Presets + Extensions
有限

我的建議:

在已有項目上加功能 → OpenSpec(delta規範天然適合棕地項目)
新項目從零開始 → 都可以,Spec Kit的完整流程更嚴謹
只用AWS生態 → Kiro
團隊需要強治理 → Spec Kit

五、安裝和5分鐘上手

# 安裝(需要Node.js 20.19.0+)
npm install -g @fission-ai/openspec@latest

# 在項目中初始化
cd your-project
openspec init
# 選擇你用的AI工具(Claude Code、Cursor等)

# 更新AI指導文件和slash命令(安裝後和升級後都要運行)
openspec update

# 開始第一個變更
/opsx:propose add-user-profile
# 審核生成的文檔...

# 按規範實現
/opsx:apply

# 驗證實現
/opsx:verify

# 完成後歸檔
/opsx:archive

支持的AI工具(部分):

工具
命令格式
Claude Code
/opsx:propose
/opsx:apply
Cursor
/opsx-propose
/opsx-apply
Windsurf
/opsx-propose
/opsx-apply
GitHub Copilot
/opsx-propose
/opsx-apply
Codex / Gemini CLI
各有集成方式

六、3個最常見的坑

坑1:小改動也走完整流程

改一行CSS、修一個typo,不需要propose → apply → archive。OpenSpec的價值在於對齊,對齊的成本只有在變更足夠複雜時才值得。

判斷標準:如果AI一次對話就能準確完成,直接改代碼。如果需要多輪對話才能對齊,用OpenSpec。

坑2:proposal寫得太模糊

"加個用戶管理功能"這種proposal,AI會生成一個完整的用戶系統——註冊、登錄、權限、頭像、設置,遠超你的預期。

修復方法: 明確scope和out of scope,用GIVEN/WHEN/THEN寫具體場景。

坑3:不跑verify就archive

AI可能標記任務完成但實現和規範不一致。verify就是專門抓這種問題的。每次apply之後、archive之前,跑一次verify。

寫在最後

OpenSpec不替代AI編程工具,它在AI前面加了一層規範對齊。

核心公式:

1
明確的out of scope — 寫清楚"不做什麼"
2
增量式的delta規範 — 只寫變化,不重寫全部
3
可測試的場景 — 用"假設/當/則"寫每個場景
4
適時的verify — apply後、archive前必須驗證

最重要的實踐:proposal的"不做什麼"比"做什麼"更重要。 寫清楚了邊界,AI就不會"好心"幫你做多。

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

圖片