對比列表

SpecScore vs OpenSpec

兩者都將規範以 Markdown 形式放在程式碼旁邊,可供 AI 代理讀取。它們解決的問題不同:OpenSpec 組織規範並產生代理指令;SpecScore 對規範內容進行 linting、強制執行生命週期,並將程式碼追溯到需求。

兩者的共同點

  • 規範以 Markdown 檔案形式存放在儲存庫中 — 版本控制、可在 PR 中審查。
  • 兩者均基於 MIT 授權條款開源。
  • 兩者都使用 Given/When/Then 驗收標準。
  • 兩者都將 AI 編碼代理作為規範的一等消費者。

OpenSpec 的優勢

最廣泛的代理支援

OpenSpec 透過產生技能檔案支援 29 個 AI 編碼代理 — Claude、Cursor、Copilot、Gemini、Windsurf、Cline 等。如果你的代理在支援列表中,OpenSpec 無需任何設定即可整合。

極低的上手門檻

npm install -g @fission-ai/openspec && openspec init 即可開始編寫規範。無需學習 schema,無需必填的 frontmatter。設計上追求零摩擦 — 尤其適合現有專案。

清晰的變更增量模型

OpenSpec 的 ADDED / MODIFIED / REMOVED 規範演進格式設計精良。每個變更是包含提案、增量規範和任務的資料夾 — 一種結構化的修改提案方式。

功能對比

能力OpenSpecSpecScore
規範格式Markdown(無 frontmatter)Markdown + YAML frontmatter
規範 linting僅檔案結構內容品質 — 模糊動詞、缺失驗收標準、懸空引用
需求 ID無(透過標題引用)基於 slug(REQ: slug-format)
驗收標準 ID無機器可定址的 ID
生命週期狀態隱式(基於檔案位置)強制執行 — Draft → Under Review → Approved → Implementing → Stable → Deprecated
程式碼到規範的可追溯性無specscore: 註解 + Verifies: 提交尾註
子功能否支援(嵌套目錄)
交叉引用無正式機制相依關係、源 Idea、計畫引用
CI 整合基礎(openspec validate)specscore lint 可設定嚴重層級,支援 pre-commit 鉤子
代理支援29 個代理以 Claude Code 為主 + CLI 支援任何代理
Schema 自訂支援(schema.yaml、fork/init)固定 schema(設計上保持一致性)
變更提案增量模型(ADDED/MODIFIED/REMOVED)變更請求 Idea + 提案
執行階段相依性Node.js 20.19+無 — 單一 Go 二進位檔案
授權條款MITMIT

SpecScore 更進一步之處

校驗不止於檔案結構

OpenSpec 的 validate 檢查檔案結構 — 檔案是否存在、是否包含正確的章節。SpecScore 檢查得更多,分為兩層:lint 確定性地校驗內容關係 — 每個需求都有驗收標準、交叉引用可解析、狀態轉換合法 — 而 AI 審查器(/review、/score)則捕捉任何 linter 都無法發現的問題:含糊的驗收標準和模糊的動詞。

$ specscore lint checkout/apply-discount.md
  ✗ R3  no acceptance criteria
  ✗ link  "Related Feature: discount-tiers" not found

每個需求都有機器可讀的 ID

OpenSpec 透過標題引用需求 — 重新命名時容易出錯。SpecScore 分配基於 slug 的 ID(REQ: slug-format)和驗收標準 ID,在重新命名、重構和代理交接時保持穩定。

生命週期是強制的,而非隱含的

在 OpenSpec 中,規範的生命週期由檔案位置決定:specs/(當前)、changes/(提議中)、archive/(已完成)。在 SpecScore 中,生命週期是一個強制執行的狀態欄位 — Draft → Under Review → Approved → Implementing → Stable → Deprecated — 由 lint 驗證,透過 git 鉤子或 CI 中的 specscore change-status 進行狀態轉換。

程式碼可追溯到規範

OpenSpec 沒有可追溯性機制。SpecScore 在程式碼註解中使用 specscore: 源註解和 Verifies: 提交尾註。執行 specscore code refs 即可確定性地回答「哪些程式碼實現了這個需求?」

無執行階段相依性

OpenSpec 需要 Node.js 20.19+。SpecScore 是單一 Go 二進位檔案 — 無執行階段相依性、無 node_modules。可直接用於 Go、Rust、Python、Java 專案,無需在工具鏈中引入 Node。

可組合的產物階層

OpenSpec 的規範按領域平鋪。SpecScore 具有具型別階層結構:Idea 晉升為 Feature,Feature 包含需求和驗收標準,Plan 引用驗收標準,Task 引用 Plan。所有關係均可透過 CLI 進行機器導覽。

何時使用哪一個

以下場景適合從 OpenSpec 開始……

  • 你使用 Cursor、Copilot 或非 Claude 代理,需要開箱即用的整合。
  • 你首次為現有程式碼庫新增規範,希望零摩擦上手。
  • 你的團隊更看重 schema 靈活性而非強制約束。

以下場景適合使用 SpecScore……

  • 你需要規範品質保障 — lint 在代理浪費 token 之前就能捕捉歧義。
  • 你需要程式碼到規範的可追溯性 — 「哪些程式碼實現了這個需求?」能得到確定性答案。
  • 你正在構建具有大量功能、子功能和生命週期轉換的大型系統。
  • 你需要零執行階段相依性 — 單一二進位檔案,無需 Node.js。
  • 你需要在 CI 中設定規範品質門檻 — specscore lint 在檢查失敗時返回非零結束代碼,與 ESLint 或 go vet 一致。

兩者並不互斥

SpecScore 可以對 OpenSpec 的 spec.md 檔案進行 lint。從 OpenSpec 起步的團隊可以在不遷移的情況下新增 SpecScore 的品質層 — 對現有規範進行 lint,在需要時新增可追溯性,在團隊擴大時強制執行生命週期。

OpenSpec 是一個優秀的入門通道。SpecScore 是品質護欄。

其他對比。

同一套格式,與其他規格驅動開發工具並列:

放在同一頁:2026 年最佳規範驅動開發工具。

回饋

通過檢查的規範

Have an idea how to improve this page?