本文档使用 Claude Code 生成


目录

  1. 什么是 OpenSpec?
  2. 为什么需要 OpenSpec?
  3. 安装 OpenSpec
  4. 初始化项目
  5. 基于 OpenSpec 四步工作流实战案例
  6. 使用技巧
  7. 附录:OpenSpec 目录结构详解
  8. 进一步学习

在这里插入图片描述

1. 什么是 OpenSpec?

OpenSpec 是一个轻量级的规范驱动开发框架(Spec-Driven Development Framework),旨在让开发者和 AI 编码助手(如 Claude Code、Cursor、Cline 等)通过结构化的规范文档对齐需求,从而实现更可靠、可审计的协作开发流程。

核心理念

“在编写任何代码之前,先就要构建什么达成一致”

OpenSpec 通过以下方式实现这一理念:

  • 规范即真相openspec/specs/ 目录记录系统当前行为的权威规范
  • 变更即提案openspec/changes/ 目录存放所有待实施的功能变更提案
  • 审核优先:所有变更在实施代码前必须通过规范审核和验证
  • 增量更新:每个变更以"增量"(delta)形式描述对现有规范的添加、修改或移除

关键特性

特性 说明
无需 API Key 完全本地运行,无需外部服务
AI 友好 通过斜杠命令或自然语言与 AI 助手集成
双文件夹模型 specs/(已实现)+ changes/(待实现)清晰分离
可审计 所有变更历史存档在 changes/archive/
轻量级 仅依赖 Node.js,无复杂框架

2. 为什么需要 OpenSpec?

传统开发流程的痛点

场景 1:AI 助手的不可预测性

开发者: "帮我添加用户登录功能"
AI: (添加了登录功能,顺便加了注册、密码重置、邮箱验证...)
开发者: "我只要登录啊!" 🤦

问题:AI 根据聊天历史推测需求,容易过度实现或偏离意图。

场景 2:需求变更的混乱

Week 1: 开发者 A 实现了功能 X
Week 2: 开发者 B 不知道 X 的设计意图,重构时破坏了关键逻辑
Week 3: Bug 报告:"X 功能不工作了"

问题:缺少结构化的需求文档,功能设计意图随时间流失。

OpenSpec 如何解决这些问题?

问题 OpenSpec 解决方案
需求不明确 强制在 proposal.md 中说明"为什么"和"改什么"
AI 过度实现 通过 tasks.md 限定具体实施范围
规范缺失 specs/ 作为系统行为的单一真相来源
变更难追溯 changes/archive/ 保留所有历史提案和决策
团队协作冲突 变更提案在实施前集中审核,避免重复工作

核心优势

  • 确定性输出:规范明确,AI 生成的代码更可预测
  • 审计友好:每次变更都有完整的提案、任务清单和规范增量
  • 知识沉淀:历史归档记录项目演进的"为什么"
  • 工具无关:兼容 Claude Code、Cursor、Windsurf 等主流 AI 工具

3. 安装 OpenSpec

前置要求

  • Node.js:>= 20.19.0
  • npm:随 Node.js 安装

检查当前版本:

node --version  # 应输出 v20.19.0 或更高
npm --version

全局安装

npm install -g @fission-ai/openspec@latest

验证安装:

openspec --version
# 输出: @fission-ai/openspec/x.x.x

常用命令速览

# 核心命令
openspec init [path]             # 在项目中初始化 OpenSpec
openspec update [path]           # 更新 OpenSpec 指令文件
openspec list                    # 列出条目(默认显示变更)
openspec list --specs            # 列出规范
openspec view                    # 显示规范和变更的交互式仪表板
openspec show [item-name]        # 显示变更或规范
openspec validate [item-name]    # 验证变更和规范
openspec archive [change-name]   # 归档已完成的变更并更新主规范

# 管理命令
openspec change                  # 管理 OpenSpec 变更提案
openspec spec                    # 管理和查看 OpenSpec 规范

# 帮助命令
openspec help [command]          # 显示命令帮助信息

4. 初始化项目

4.1 运行初始化命令

在项目根目录运行:

cd your-project
openspec init

4.2 交互式配置

初始化向导会询问以下问题:

第一步:选择 AI 工具

? Which AI coding tools do you want to configure?
❯ ◉ Claude Code
  ◉ Cursor
  ◯ Windsurf
  ◯ Cline
  ◯ Other

用空格键选择你使用的工具,回车确认。

第二步:配置斜杠命令(适用于支持的工具)

对于 Claude Code、Cursor 等工具,OpenSpec 会自动配置斜杠命令:

  • /openspec:proposal — 创建变更提案
  • /openspec:apply — 实施任务
  • /openspec:archive — 归档变更

4.3 验证初始化结果

初始化后,项目中会生成以下目录和文件:

your-project/
└── openspec/
    ├── AGENTS.md       # AI 助手工作流指令
    ├── project.md      # 项目上下文和规范
    ├── specs/          # 已实现功能的规范(初始为空)
    └── changes/        # 待实施的变更提案(初始为空)
        └── archive/    # 已完成变更的归档

检查配置:

openspec list
# 输出: No active changes found. (初始状态正常)

4.4 理解核心配置文件

初始化后生成的两个核心文件需要特别关注:

openspec/AGENTS.md — AI 助手工作流指令

作用:为 AI 编码助手提供 OpenSpec 工作流的详细指导,包括如何创建提案、实施任务、归档变更。

主要内容

  • 三阶段工作流程说明(创建、实施、归档)
  • 提案创建的决策树(何时需要创建提案)
  • 规范增量格式规范(ADDED / MODIFIED / REMOVED
  • 验证和调试技巧
  • 常见错误和解决方案

特点

  • 由 OpenSpec CLI 自动管理
  • 包含在 <!-- OPENSPEC:START --><!-- OPENSPEC:END --> 标记之间的内容会自动更新
  • 运行 openspec update 可刷新到最新版本
  • 不要手动编辑托管区域内的内容
openspec/project.md — 项目上下文配置

作用:记录项目特定的上下文信息,帮助 AI 助手理解项目的技术栈、代码规范、架构模式等。

自定义 project.md 建议

  1. 初始化后立即编辑 — 根据项目实际情况填写
  2. 保持简洁但完整 — 包含 AI 需要的关键信息,避免过度细节
  3. 说明项目特有规范 — 代码风格、命名规范、架构模式等
  4. 定期更新 — 技术栈或架构变更时及时同步
  5. 团队协作 — 确保团队成员对内容达成共识

提示project.md 的质量直接影响 AI 助手生成代码的准确性。


5. 基于 OpenSpec 四步工作流实战案例

工作流概览

┌─────────────────────┐
│ 1. 起草变更提案       │  与 AI 分享你的意图
│    Draft Proposal    │  /openspec:proposal
└──────────┬──────────┘
           ▼
┌─────────────────────┐     ┌──────────────┐
│ 2. 审核与对齐        │ ◄── │ 反馈循环       │
│    Review & Align    │     │ 编辑规范/任务   │
│                      │     └──────────────┘
│    计划获批准         │
└──────────┬──────────┘
           ▼
┌─────────────────────┐
│ 3. 实施任务          │  AI 按规范编写代码
│    Implement Tasks   │  /openspec:apply
│                      │
│    发布变更           │
└──────────┬──────────┘
           ▼
┌─────────────────────┐
│ 4. 归档并更新规范     │  更新主规范库
│    Archive & Update  │  /openspec:archive
└─────────────────────┘

案例:色彩一致性覆盖提示弹窗优化

本节通过一个完整的实战案例,演示如何使用 OpenSpec 添加"色彩一致性覆盖提示弹窗优化"功能。

5.1 起草第一个变更提案

在 OpenSpec 工作流中,提案的创建由 AI 助手自动完成。你只需要向 AI 描述想要实现的功能,AI 会根据 openspec/AGENTS.md 的指导自动生成所有必需的文件。

步骤 1:向 AI 助手描述需求

用自然语言清晰地描述你想要实现的功能。例如:

/openspec:proposal
1. PRD: https://tssoft.atlassian.net/browse/EV-xxxx  实现 overwrite 弹窗这部分需求点
2. Figma: https://www.figma.com/design/xxxx/V6.2?node-id=18463-137062&m=dev 严格依据设计稿
3. 设计稿中顶部图片预览区播放图片序列帧,素材来源项目根路径 "video/version/common/ColorConsistency.mp4"
...

提示:想要 AI 能读取需求文档以及设计稿等信息,需要添加对应 MCP 及进行身份认证。

描述要点

  • 需求背景 — 说明为什么需要这个功能,解决什么问题或抓住什么机会
  • 功能描述 — 清晰列出要实现的具体功能点和用户场景
  • 技术要求 — 说明必须遵循的技术约束、使用的框架或组件库
  • 影响范围 — 标注会涉及哪些模块、文件或影响哪些现有功能
  • 参考资料 — 如有需求文档、设计稿、API 文档等,提供链接或位置

执行后,AI 会自动:

  1. 根据你的需求描述创建变更提案
  2. 生成 openspec/changes/<change-name>/ 目录
  3. 创建 proposal.md(提案说明)
  4. 创建 tasks.md(任务清单)
  5. 创建 specs/<capability>/spec.md(规范增量)
  6. 运行 openspec validate --strict 验证格式
步骤 2:审查 AI 生成的提案

AI 会自动生成完整的提案结构。你需要审核以下内容:

检查 proposal.md

AI 生成的提案会包含以下章节:

# Change:

## Why
[AI 根据你的描述总结的背景和原因]

## What Changes
- [AI 列出的具体变更点]
- [如有破坏性变更,AI 会标注 **BREAKING**]

## Impact
- 受影响的规范: [AI 识别的相关能力]
- 受影响的代码: [AI 推断的文件列表]
- [其他影响]

审核要点

  • Why 部分是否清晰说明了问题和解决方案?
  • What Changes 是否完整覆盖了你的需求?
  • Impact 是否准确识别了受影响的模块?
  • 是否遗漏了重要的约束或依赖?

检查 specs/<capability>/spec.md

AI 会生成规范增量,定义新增或修改的需求:

# [Capability] 规范增量

## ADDED Requirements
### Requirement: [需求名称]
[需求描述]

#### Scenario: [场景名称]
- **WHEN** [触发条件]
- **THEN** [预期结果]
- **AND** [附加条件]

## MODIFIED Requirements
### Requirement: [现有需求名称]
[完整的更新后需求]

审核要点

  • 需求描述是否准确?
  • 场景是否覆盖了正常和异常情况?
  • 是否使用了正确的操作标题(ADDED / MODIFIED / REMOVED)?
  • MODIFIED 需求是否包含完整内容?

检查 tasks.md

AI 会将实施工作拆分为可执行的任务:

# 实施任务清单

## 1. [阶段名称]
- [ ] 1.1 [具体任务]
- [ ] 1.2 [具体任务]

## 2. [阶段名称]
- [ ] 2.1 [具体任务]
...

审核要点

  • 任务顺序是否合理?(数据库 → 后端 → 前端 → 测试)
  • 任务粒度是否适中?(每个任务 1-2 小时可完成)
  • 是否包含测试和文档任务?
  • 是否遗漏了关键步骤?
步骤 3:与 AI 迭代调整

如果发现问题,直接告诉 AI 需要调整的地方:

proposal.md 中遗漏了一个重要场景:xxxx。
请在 spec 增量中添加这个场景。
tasks.md 中的测试任务太笼统,请细化为:
1. 单元测试
2. 集成测试
3. xxxxxx
变更名称 `add-color-consistency-overwrite-dialog` 太简略,请改为 `xxx` 更具描述性。

AI 会根据你的反馈更新文件,你可以重复审核和调整,直到满意为止。

提示:提案文件由 AI 生成,但你随时可以手动编辑调整。编辑后记得运行 openspec validate --strict 确保格式仍然正确。

5.2 提案审核与调整

步骤 1:运行严格验证

在提案目录完成后,通常可以让 AI 帮你直接执行验证,也可手动运行验证命令:

openspec validate add-color-consistency-overwrite-dialog --strict

可能的输出:

成功

Change 'add-color-consistency-overwrite-dialog' is valid

失败示例 1 — 缺少场景

Error: Requirement "Two-Factor Authentication" must have at least one scenario
File: openspec/changes/add-color-consistency-overwrite-dialog/specs/color-consistency-dialog/spec.md

解决方案:确保每个 ### Requirement: 下至少有一个 #### Scenario:

失败示例 2 — 场景格式错误

Warning: Scenario header format incorrect
Expected: #### Scenario: <name>
Found: ### Scenario: User login

解决方案:场景标题必须使用 4 个井号(####)。

失败示例 3 — 没有规范增量

Error: Change must have at least one delta
Directory: openspec/changes/add-color-consistency-overwrite-dialog/specs/

解决方案:确保 specs/ 目录下有至少一个能力文件夹和 spec.md

步骤 2:团队审核

验证通过后,将提案提交给团队审核:

  1. 创建 Pull Request 或分享提案链接
  2. 审核要点
    • proposal.md 的 Why 是否清晰?
    • tasks.md 是否遗漏关键步骤?
    • spec 增量是否完整覆盖需求?
    • 是否有破坏性变更需要特别标注?
  3. 迭代调整:根据反馈修改 proposal.mdtasks.md 或 spec 增量
  4. 再次验证:修改后重新运行 openspec validate --strict

重要提醒:提案在进入实施阶段后,规范增量应保持不可变。如果发现需求变更,应创建新的变更提案而非修改原提案。

5.3 实施任务

在 OpenSpec 工作流中,任务实施同样由 AI 助手自动完成。通过 /openspec:apply 命令,AI 会读取提案和任务清单,自动编写代码并逐步完成所有任务。

步骤 1:执行实施命令
/openspec:apply add-color-consistency-overwrite-dialog

AI 会自动执行以下操作:

  1. 读取提案文档

    • 理解 proposal.md 中的变更目标和影响范围
    • 查看 design.md(如果存在)理解技术决策
    • 获取 tasks.md 中的完整任务清单
  2. 按顺序实施任务

    • 从第一个任务开始,逐项完成
    • 根据项目的技术栈和代码规范生成代码
    • 创建必要的文件、修改现有文件
    • 编写单元测试和集成测试
  3. 更新任务状态

    • 完成每个任务后,在 tasks.md 中标���为 [x]
    • 保持任务清单与实际进度同步
步骤 2:人工审核代码

重要:即使 AI 自动生成代码,你也必须人工审核每个变更。

审核要点

  • 功能正确性:代码是否正确实现了需求?逻辑是否符合 spec 中定义的场景?
  • 代码质量:是否遵循项目的代码规范?命名是否清晰、结构是否合理?是否有明显的 bug 或性能问题?
  • 测试覆盖:是否编写了必要的单元测试?测试用例是否覆盖了正常和异常场景?
  • 安全性:是否存在安全漏洞?
步骤 3:本地测试

在提交代码前,务必进行本地自测:

  • 所有开发自测用例通过
  • 新增功能按预期工作
  • 没有破坏现有功能
步骤 4:提交代码

所有任务完成且测试通过后,提交代码。

5.4 归档与更新

步骤 1:运行归档命令

功能部署且验证通过后,运行归档命令:

openspec archive add-color-consistency-overwrite-dialog --yes

参数说明

  • --yes / -y:跳过确认提示(适用于 CI/CD 自动化)
  • --skip-specs:仅归档变更,不更新 specs/(适用于仅工具配置的变更)

归档操作会执行

  1. 应用规范增量:将 changes/<change-name>/specs/ 中的增量应用到 specs/

    • ADDED 需求追加到对应的 spec.md
    • MODIFIED 需求替换原有内容
    • REMOVED 需求从规范中删除
  2. 移动变更到归档:将 changes/<change-name>/ 移动到 changes/archive/YYYY-MM-DD-<change-name>/

步骤 2:提交规范更新

归档操作本身不会自动提交 Git 变更,需要手动提交。


6. 使用技巧

  • 大型需求拆分多个提案进行:避免单个提案过于庞大,降低审核和实施的复杂度。

  • 善用语气关键词

    • MUST — 必须满足(经常用于:功能性、合规性、安全性)
    • SHOULD — 强烈建议,但可以在有合理理由时例外(兼容性、性能优化等)
    • MAY — 可选(非关键特性、增强功能)
    • MAYBE — 不常用且含糊;不要把 MAYBE 当作正式术语。要么决定用 MAY(可选),要么把 “MAYBE” 解释为"条件性(如果 X 则启用)"

7. 附录:OpenSpec 目录结构详解

目录树参考

openspec/
├── AGENTS.md                        # AI 助手工作流指令(自动生成和更新)
├── project.md                       # 项目上下文、技术栈、约定
├── specs/                           # 已实现功能的规范
│   ├── color-consistency-dialog/
│   │   ├── spec.md                  # 需求和场景
│   │   └── design.md               # 技术设计
│   ├── Axxxx/
│   │   └── spec.md
│   └── Bxxxx/
│       ├── spec.md
│       └── design.md
├── changes/                         # 待实施的变更提案
│   ├── add-color-consistency-overwrite-dialog/
│   │   ├── proposal.md              # 提案说明
│   │   ├── tasks.md                 # 任务清单
│   │   ├── design.md               # 技术决策
│   │   └── specs/                   # 规范增量
│   │       ├── color-consistency-dialog/
│   │       │   └── spec.md
│   │       └── Axxxx/
│   │           └── spec.md
│   └── archive/                     # 已完成变更的归档
│       └── 2025-11-14-add-color-consistency-overwrite-dialog/
│           ├── proposal.md
│           ├── tasks.md
│           └── specs/
└── .openspec/                       # OpenSpec 内部配置(自动生成)
    └── config.json

文件和目录说明

文件/目录 作用
openspec/AGENTS.md 为 AI 编码助手提供工作流指令,说明如何创建提案、实施任务、归档变更。由 OpenSpec CLI 管理,不要手动编辑托管区域
openspec/project.md 记录项目特定的上下文信息,供 AI 助手理解项目
openspec/specs/<capability>/ 存放已实现并部署的功能规范,是系统行为的唯一真相来源
openspec/changes/<change-name>/ 存放待实施的变更提案,包含提案说明、任务清单和规范增量
proposal.md 说明变更的背景、内容和影响,供团队审核
tasks.md 提供可执行的任务清单,指导开发者逐步实施变更
design.md(可选) 记录技术决策、架构考量、权衡分析,供团队理解复杂变更的设计思路
specs/<capability>/spec.md 描述对现有规范的增量变更,使用 ADDED / MODIFIED / REMOVED 操作标题
openspec/changes/archive/ 存放已完成并归档的变更,保留历史决策和提案。可用于查看功能的历史提案、理解设计决策、审计变更历史

8. 进一步学习

官方资源


记住核心原则

“在编写任何代码之前,先就要构建什么达成一致”

Happy coding with OpenSpec! 🚀

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐