OpenSpec

Spec-driven Development (SDD) for AI Coding Assistants

@fission-ai/openspec MIT License Node.js 20.19+

🎯 项目定位

AI 编程助手虽然强大,但当需求只存在于聊天记录中时,它们往往变得不可预测。OpenSpec 在代码编写之前添加了一个轻量级的规范层,让人与 AI 在开始构建之前先达成一致。

🤝

先议后建

人与 AI 在写代码前先对齐规范

📁

组织有序

每个变更独立文件夹,包含完整上下文

🔄

流畅迭代

随时更新任意产物,无刚性阶段门

🔧

工具兼容

支持 20+ AI 助手,通过斜杠命令集成

💡 设计理念

"Fluid not rigid · Iterative not waterfall · Easy not complex · Brownfield-first"

核心理念

  • 流畅不僵化 — 无阶段门,按需工作
  • 迭代不瀑布 — 边做边学,随需调整
  • 简单不复杂 — 秒级初始化,轻量无负担
  • 存量优先 — 兼容现有代码库,非只新建项目

解决的问题

  • 需求只存在于聊天历史,AI 执行时丢失
  • AI 编程助手强大但结果不可预测
  • 无规范导致提示词模糊、结果飘忽
  • 代码库变更缺少结构化记录

⚙️ 实现原理

整体架构

┌──────────────────────────────────────────────────────┐ │ openspec/ │ │ ┌──────────────────┐ ┌────────────────────────┐ │ │ │ specs/ │◄───│ changes/ │ │ │ │ (source of truth)│ │ (proposed changes) │ │ │ │ 系统当前行为 │ merge │ 每个变更=一个文件夹 │ │ │ └──────────────────┘ └────────────────────────┘ │ └──────────────────────────────────────────────────────┘

核心数据结构

Specs(规范) — 系统的行为描述,描述"是什么",包含需求(Requirements)和场景(Scenarios),采用 GIVEN/WHEN/THEN 格式。

Changes(变更) — 提议的修改,封装为独立文件夹,包含 proposal、design、tasks、delta specs。

Delta Specs(增量规范) — 描述相对于当前规范的变化(新增/修改/删除),而非重写整个规范,这是 brownfield 开发的关键。

Artifact 流程

proposal ──► specs ──► design ──► tasks ──► implement │ │ │ │ why what how steps
proposal.md
为什么做,做什么,范围边界
specs/
行为需求与场景
design.md
技术方案与架构决策
tasks.md
实施检查清单

⚡ 工作流与命令

快速路径(默认 core profile)

/opsx:propose ──► /opsx:apply ──► /opsx:archive

完整路径(扩展模式)

/opsx:explore ──► /opsx:new ──► /opsx:continue ──► /opsx:ff ──► /opsx:apply ──► /opsx:verify ──► /opsx:archive

/opsx:propose

创建变更并生成所有规划产物

/opsx:apply

执行 tasks.md 中的任务,动手写代码

/opsx:verify

验证实现是否与规范一致

/opsx:archive

完成变更,将 delta specs 合并到主规范

📖 Workflows 工作流详解(中英对照)

以下为 OpenSpec 官方 workflows.md 的中文翻译,保持技术术语原文。

核心理念:动作而非阶段

传统工作流强制你按阶段推进:先规划,再实现,然后完成。但实际工作并不按这种僵硬的盒子运转。OPSX 采用不同方式:
传统方式(阶段锁定): PLANNING ────────► IMPLEMENTING ────────► DONE │ │ │ "无法回退" │ └────────────────────┘ OPSX 方式(流畅动作): proposal ──► specs ──► design ──► tasks ──► implement

核心原则:

  • 动作而非阶段 — 命令是你能做的事,而非被困住的阶段
  • 依赖是使能器 — 它们展示可能的事,而非下一步必需的事

两种模式

默认快速路径(core profile)

新安装默认为 core,提供:/opsx:propose/opsx:explore/opsx:apply/opsx:archive

/opsx:propose ──► /opsx:apply ──► /opsx:archive

完整工作流(扩展模式)

启用所有命令:/opsx:new/opsx:continue/opsx:ff/opsx:verify/opsx:sync/opsx:bulk-archive

openspec config profile → openspec update

工作流模式(扩展模式)

快速功能(Quick Feature)

当你明确知道要构建什么,只需执行时使用:

/opsx:new ──► /opsx:ff ──► /opsx:apply ──► /opsx:verify ──► /opsx:archive

示例对话:

你: /opsx:new add-logout-button AI: 已创建 openspec/changes/add-logout-button/ 准备创建:proposal 你: /opsx:ff AI: 正在创建所有规划 artifacts... ✓ proposal.md ✓ specs/ ✓ design.md ✓ tasks.md 准备开始实现! 你: /opsx:apply AI: 正在执行 tasks... ✓ 已添加 logout 按钮到 header ✓ 已实现 session 清理 ✓ 已添加确认对话框 所有 tasks 完成! 你: /opsx:archive AI: ✓ 已合并 specs ✓ 已归档变更

最佳适用场景:中小型功能、Bug 修复、直接了当的变更

探索模式(Exploratory)

当需求不明确或需要先调研时使用:

/opsx:explore ──► /opsx:new ──► /opsx:continue ──► ... ──► /opsx:apply

示例对话:

你: /opsx:explore AI: 你想探索什么? 你: 我想改善页面加载性能,但不确定瓶颈在哪里。 AI: 让我帮你调研... [分析 bundle sizes,识别 slow queries, 审查 component render patterns] 我发现三个主要瓶颈: 1. 大尺寸未优化图片 2. ProductList 中同步数据获取 3. Context 变化导致的 re-renders 你想先解决哪个? 你: 我们先处理数据获取问题吧。 你: /opsx:new optimize-product-list-fetching AI: 已创建变更。准备创建:proposal 你: /opsx:continue AI: 基于调研结果创建 proposal... [整合调研洞察撰写 proposal] 准备创建:specs, design 你想先做哪个? 你: /opsx:continue AI: 正在创建 specs...

最佳适用场景:性能优化、调试、架构决策、需求不明确的场景

并行变更(Parallel Changes)

同时处理多个变更:

变更 A: /opsx:new ──► /opsx:ff ──► /opsx:apply (进行中) │ context switch │ 变更 B: /opsx:new ──► /opsx:ff ─────────► /opsx:apply

示例对话:

你: 我正在做 add-dark-mode,但被拉去修一个 bug 你: /opsx:new fix-login-redirect AI: 已创建 openspec/changes/fix-login-redirect/ 你: /opsx:ff AI: ✓ 已创建规划 artifacts 你: /opsx:apply AI: 正在处理 fix-login-redirect... [实现修复] 所有 tasks 完成! 你: /opsx:archive AI: ✓ 已归档 fix-login-redirect 你: 继续做 dark mode 你: /opsx:apply add-dark-mode AI: 恢复 add-dark-mode... 从 task 2.3: Update Header... 继续

多个变更完成时,使用 /opsx:bulk-archive 批量归档,自动检测 spec 冲突并按时间顺序合并。

最佳适用场景:并行工作流、紧急中断、团队协作

变更完成流程

/opsx:apply ──► /opsx:verify ──► /opsx:archive │ │ 验证实现 提示 sync 是否符合规范 如需要

/opsx:verify — 验证检查

/opsx:verify 从三个维度验证实现与规范的一致性:

你: /opsx:verify AI: 正在验证 add-auth... COMPLETENESS(完整性) ✓ tasks.md 中的 12 个 tasks 已全部检查 ✓ specs 中的所有 requirements 都有对应代码 ⚠ Scenario "Session timeout after inactivity" 未测试 CORRECTNESS(正确性) ✓ 实现符合规范意图 ✓ 场景中的 edge cases 都有处理 ✓ 错误状态与 spec 定义一致 COHERENCE(一致性) ✓ 设计决策反映在代码结构中 ✓ 命名规范与 design.md 一致 ⚠ design 中提到 "event-driven" 但实现用的是 polling SUMMARY(摘要) ───────────────────────────── 关键问题:0 警告:2 可以归档:是(含警告) 建议: 1. 添加 session timeout 场景的测试 2. 考虑按 design 重构为 event-driven,或更新 design.md
维度验证内容
Completeness所有 tasks 是否完成,所有 requirements 是否有对应代码,scenarios 是否覆盖
Correctness实现是否符合规范意图,edge cases 是否处理,错误状态是否匹配
Coherence设计决策是否反映在代码结构中,模式是否一致

/opsx:archive — 归档完成

完成变更并将其移至 archive:

你: /opsx:archive AI: 正在归档 add-auth... Artifact 状态: ✓ proposal.md 存在 ✓ specs/ 存在 ✓ design.md 存在 ✓ tasks.md 存在(12/12 tasks 完成) Delta specs:尚未 sync 到主规范 → 是否现在 sync? 你: 是 AI: ✓ 已 sync specs 到 openspec/specs/auth/spec.md ✓ 已移动到 openspec/changes/archive/2025-01-24-add-auth/ 变更归档成功。

何时用哪个命令

场景命令
需求明确,准备好了/opsx:ff
探索中,想逐步审查/opsx:continue
想在 specs 前迭代 proposal/opsx:continue
时间紧迫,需要快速推进/opsx:ff
复杂变更,想要控制/opsx:continue

更新现有变更 vs 发起新变更

更新现有变更当:

  • 意图相同,执行方式细化
  • 范围收窄(先 MVP,其余后续)
  • 基于学习的修正(codebase 不是你预期的)
  • 基于实现发现的设计调整

发起新变更当:

  • 意图从根本上改变
  • 范围爆炸到完全不同的工作
  • 原始变更可以独立"完成"
  • 补丁会造成更多混淆

最佳实践

🎯 适用场景

🏗️

功能开发

新功能先规范再实现,AI 执行不偏离

🐛

Bug 修复

记录问题根因和修复策略,而非盲目试错

🔧

代码重构

在保护现有行为的前提下安全重构

📈

性能优化

用 explore 命令先调研瓶颈再动手

🏢

团队协作

变更历史完整,可追可溯,AI 不会丢上下文

📦

存量项目

增量规范专为修改现有代码库设计

⚖️ 与同类方案对比

vs. Spec Kit (GitHub)

更全面但重量级,有刚性阶段门,大量 Markdown,Python 环境要求。OpenSpec 更轻量,迭代自由。

vs. Kiro (AWS)

功能强大但锁定在自家 IDE,仅限 Claude 模型。OpenSpec 兼容你已有的工具和模型。

vs. 不用任何规范

纯 AI 编程 = 模糊提示 + 不可预测结果。OpenSpec 带来确定性,但去除了传统规范的繁文缛节。

🚀 快速上手

# 1. 安装(需要 Node.js 20.19.0+) npm install -g @fission-ai/openspec@latest # 2. 在项目目录初始化 cd your-project openspec init # 3. 告诉你的 AI 助手 /opsx:propose add-dark-mode

推荐使用高推理能力模型:Claude Opus 4.5GPT 5.2