系列文章: Openspec (5/6)

/opsx:propose → apply → archive:跑完一輪完整的 OpenSpec 流程
OpenSpec 的核心工作流就三個指令:/opsx:propose、/opsx:apply、/opsx:archive。聽起來很少,但這三步把「想做 → 說清楚 → 動手 → 歸檔」這條線串起來了。這篇拿「加深色模式」當範例,帶你走完一整輪。
第一步:/opsx:propose — 說清楚要做什麼
/opsx:propose add-dark-mode
這個指令做了什麼:AI 替你建立 openspec/changes/add-dark-mode/ 資料夾,然後生成四個 artifact:
openspec/changes/add-dark-mode/
├── proposal.md ← 為什麼要做、範圍是什麼
├── specs/ui/spec.md ← delta spec:哪些行為在改變
├── design.md ← 技術方案
└── tasks.md ← 實作清單
AI 通常會問你一些問題來幫助生成,例如:
- 這個功能的動機是什麼?
- 要支援 system preference(跟隨系統設定)嗎?
- localStorage 要保存偏好嗎?
這裡是整個流程最重要的一步——你要花時間看 AI 生成的這四份文件,確認跟你想的一致。特別是 proposal.md 和 tasks.md,看到「哦不對」的地方直接說,讓 AI 修正,這時候改比實作完再改便宜太多。
確認沒問題了,繼續往下。
中場確認:看一下 tasks.md
/opsx:apply 之前,先打開 tasks.md 看一眼——這是 AI 等一下要按照執行的清單,你確認一下任務拆得對不對、有沒有漏掉什麼:
# Tasks
## 1. Theme Infrastructure
- [ ] 1.1 建立 ThemeContext 管理 light/dark state
- [ ] 1.2 加入 CSS custom properties
- [ ] 1.3 實作 localStorage 偏好保存
## 2. UI Components
- [ ] 2.1 建立 ThemeToggle 元件
- [ ] 2.2 加入設定頁面
- [ ] 2.3 在 Header 加入快速切換按鈕
## 3. Styling
- [ ] 3.1 定義 dark theme 色盤
- [ ] 3.2 更新元件改用 CSS variables清單沒問題,下一步。
第二步:/opsx:apply — 動手實作
/opsx:apply
AI 按照 tasks.md 的清單一條一條執行,你會看到它打勾:
✓ 1.1 建立 ThemeContext with light/dark state
✓ 1.2 加入 CSS custom properties to globals.css
✓ 1.3 實作 localStorage persistence
✓ 2.1 建立 ThemeToggle 元件
✓ 2.2 加入設定頁面
...
All tasks complete!
實作過程中,如果 AI 發現原本的設計有問題——例如發現你的元件庫已經有 theme 機制,跟 tasks 裡規劃的方向衝突——直接跟它說,更新 design.md 或 tasks.md,然後繼續。OpenSpec 不鎖定你不能回頭改 artifact,這就是「流動而非剛性」的意思。
完成後,驗證一下
實作完,自己跑一下功能確認沒有問題——這不是 OpenSpec 強制要求的步驟,但是個好習慣,特別是功能稍微複雜的時候。
如果你啟用了進階工作流 profile,可以用:
/opsx:verify
讓 AI 比對實作結果跟 artifact 的規格是否一致,把明顯的漏網之魚抓出來。
第三步:/opsx:archive — 收尾歸檔
/opsx:archive
AI 把這個 change 做三件事:
- 合併 delta spec 進主 spec —
changes/add-dark-mode/specs/裡的 ADDED/MODIFIED/REMOVED 規格,合併回openspec/specs/對應的 spec.md - 搬移 change 資料夾 —
changes/add-dark-mode/移到changes/archive/2026-04-01-add-dark-mode/ - 完成 — 主 spec 現在反映了最新狀態,可以開始下一個 change
這時候 openspec/specs/ui/spec.md 裡就多了「用戶可以切換 light/dark 主題」這條規格,未來有人要在這上面繼續修改,就有已有的 spec 可以參考和 delta。
整條流程一眼看清楚
/opsx:propose → 確認 artifacts → /opsx:apply → 驗證 → /opsx:archive
↓ ↓ ↓ ↓
建立 changes 資料夾 proposal/specs/ 按 tasks.md delta spec 合併
生成四份 artifact design/tasks 一條一條做 進主 specs
如果想先探索、再 propose 呢
功能方向還沒想清楚,可以先用 /opsx:explore:
/opsx:explore 怎麼處理行動 App 的登入?
AI 會幫你調查現有的 codebase、比較幾種方案、討論取捨,但不建立任何 artifact。想清楚了再 /opsx:propose,這樣生成的 artifact 品質會更高。
流程跑通了,下一篇看真實場景——新功能、修 bug、舊專案怎麼加入 OpenSpec,各有一套對應的套路。