OPSX 工作流程
歡迎在 Discord 提供回饋。
什麼是 OPSX?
OPSX 現在是 OpenSpec 的標準工作流程。
它是一套針對 OpenSpec 變更的流動式、迭代式工作流程。不再有僵化的階段——只有你可以隨時執行的動作。
為什麼需要它?
舊版 OpenSpec 工作流程雖然可用,但限制太多:
- 指令寫死在程式碼裡 — 埋在 TypeScript 中,你無法修改
- 全有或全無 — 一個大型指令建立所有東西,無法單獨測試各個部分
- 固定結構 — 所有人用同一套工作流程,無法自訂
- 黑盒子 — AI 輸出不好時,你無法調整 prompt
OPSX 打開了這個限制。 現在任何人都能:
- 實驗指令 — 編輯範本,看看 AI 是否表現更好
- 細粒度測試 — 獨立驗證每個 artifact 的指令
- 自訂工作流程 — 定義你自己的 artifacts 和依賴關係
- 快速迭代 — 修改範本,立即測試,無需重新建置
Legacy workflow: OPSX:
┌────────────────────────┐ ┌────────────────────────┐
│ Hardcoded in package │ │ schema.yaml │◄── You edit this
│ (can't change) │ │ templates/*.md │◄── Or this
│ ↓ │ │ ↓ │
│ Wait for new release │ │ Instant effect │
│ ↓ │ │ ↓ │
│ Hope it's better │ │ Test it yourself │
└────────────────────────┘ └────────────────────────┘
這適合所有人:
- 團隊 — 建立真正符合你工作方式的工作流程
- 進階使用者 — 調整 prompt 以針對你的程式庫獲得更好的 AI 輸出
- OpenSpec 貢獻者 — 不需要發布新版本即可實驗新方法
我們都還在學習什麼方法最有效。OPSX 讓我們一起學習。
使用者體驗
線性工作流程的問題: 你處於「規劃階段」,然後進入「實作階段」,然後「完成」。但實際工作不是這樣進行的。你實作某個功能,發現設計有誤,需要更新規格,再繼續實作。線性階段與實際工作方式相悖。
OPSX 的做法:
- 動作,而非階段 — 建立、實作、更新、封存——隨時都可以做
- 依賴關係是推進器 — 它們顯示什麼是可能的,而不是規定下一步必須做什麼
proposal ──→ specs ──→ design ──→ tasks ──→ implement
安裝設定
# 確保已安裝 openspec — skills 會自動產生
openspec init
這會在 .claude/skills/(或對應路徑)建立 skills,AI 程式助手會自動偵測。
預設情況下,OpenSpec 使用 core workflow profile(propose、explore、apply、archive)。如果你想要擴充工作流程指令(new、continue、ff、verify、sync、bulk-archive、onboard),請使用 openspec config profile 設定,並以 openspec update 套用。
安裝過程中,你會被提示建立一個專案設定檔(openspec/config.yaml)。這是選用的,但建議建立。
專案設定
專案設定讓你可以設定預設值,並將專案特定的 context 注入所有 artifacts。
建立設定檔
設定檔可在 openspec init 時建立,或手動建立:
# openspec/config.yaml
schema: spec-driven
context: |
Tech stack: TypeScript, React, Node.js
API conventions: RESTful, JSON responses
Testing: Vitest for unit tests, Playwright for e2e
Style: ESLint with Prettier, strict TypeScript
rules:
proposal:
- Include rollback plan
- Identify affected teams
specs:
- Use Given/When/Then format for scenarios
design:
- Include sequence diagrams for complex flows
設定欄位
| Field | Type | 說明 |
|---|---|---|
schema | string | 新變更的預設 schema(例如 spec-driven) |
context | string | 注入所有 artifact 指令的專案 context |
rules | object | 以 artifact ID 為鍵的各 artifact 規則 |
運作方式
Schema 優先順序(由高到低):
- CLI 旗標(
--schema <name>) - 變更 metadata(變更目錄下的
.openspec.yaml) - 專案設定(
openspec/config.yaml) - 預設值(
spec-driven)
Context 注入:
- Context 會加在每個 artifact 指令的前面
- 以
<context>...</context>標籤包覆 - 幫助 AI 理解你專案的慣例
Rules 注入:
- Rules 只注入到對應的 artifacts
- 以
<rules>...</rules>標籤包覆 - 出現在 context 之後、範本之前
各 Schema 的 Artifact ID
spec-driven(預設):
proposal— 變更提案specs— 規格說明design— 技術設計tasks— 實作任務
設定驗證
rules中未知的 artifact ID 會產生警告- Schema 名稱會與可用的 schemas 進行驗證
- Context 有 50KB 的大小限制
- 無效的 YAML 會附帶行號回報
疑難排解
「Unknown artifact ID in rules: X」
- 確認 artifact ID 符合你的 schema(見上方清單)
- 執行
openspec schemas --json查看各 schema 的 artifact ID
設定未套用:
- 確認檔案位於
openspec/config.yaml(不是.yml) - 用驗證工具檢查 YAML 語法
- 設定變更立即生效(不需要重新啟動)
Context 過大:
- Context 限制為 50KB
- 改為摘要或連結到外部文件
指令
| 指令 | 說明 |
|---|---|
/opsx:propose | 一步建立變更並產生規劃 artifacts(預設快速路徑) |
/opsx:explore | 思考構想、調查問題、釐清需求 |
/opsx:new | 建立新的變更架構(擴充工作流程) |
/opsx:continue | 建立下一個 artifact(擴充工作流程) |
/opsx:ff | 快進產生規劃 artifacts(擴充工作流程) |
/opsx:apply | 實作任務,視需要更新 artifacts |
/opsx:verify | 驗證實作是否符合 artifacts(擴充工作流程) |
/opsx:sync | 將 delta specs 同步到 main(擴充工作流程,選用) |
/opsx:archive | 完成後封存 |
/opsx:bulk-archive | 一次封存多個已完成的變更(擴充工作流程) |
/opsx:onboard | 端到端變更的引導式教學(擴充工作流程) |
使用方式
探索一個構想
/opsx:explore
思考構想、調查問題、比較選項。不需要任何結構——只是一個思考夥伴。當洞察成形後,轉移到 /opsx:propose(預設)或 /opsx:new//opsx:ff(擴充)。