Claude Code 配 OpenSpec:AI 编程从此告别需求偏差

0 阅读5分钟

在之前的实战经验文章Claude Code 实战:八条心得经验我提到过一个关键原则:动手写代码前,先确认意图和方案。这个原则在 AI 编程时代变得更加重要。规格驱动开发(Specification-Driven Development,SDD)的思路:把需求、设计、任务清单都写下来,让 AI 按照明确的规格来工作。

OpenSpec 就是一个实现 SDD 的轻量级框架。

OpenSpec 是什么

OpenSpec 类似传统软件开发流程的简化版,核心思想很简单:写代码之前,先让人和 AI 在规格上达成一致。把需求、设计、任务清单都持久化为 Markdown 文件,存放在代码库的 openspec/ 目录下。AI 不会忘记你的需求,团队成员能看到完整的变更历史,每次修改都有清晰的意图记录。

OpenSpec 支持 30+ 种 AI 编程工具,包括 Claude Code、Cursor、GitHub Copilot、Gemini CLI 等。你不会被锁定在某个特定的 IDE 或模型上。

快速上手

安装

OpenSpec 需要 Node.js 20.19.0 或更高版本。全局安装:

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

在项目目录中初始化:

cd your-project
openspec init

初始化后,项目中会生成 openspec/ 目录结构:

openspec/
├── specs/              # 当前系统的规格(真相源)
├── changes/            # 进行中的变更
└── config.yaml         # 项目配置(可选)

第一个变更:添加用户登录接口

通过一个实际例子来理解 OpenSpec 的工作流程。假设你正在开发一个 Spring Boot Web 项目,需要添加用户登录接口。

步骤 1:提出变更

告诉你的 AI 助手:

/opsx:propose add-user-login-api

AI 会自动创建变更目录并生成四个文件:

openspec/changes/add-user-login-api/
├── proposal.md         # 为什么做、做什么
├── specs/              # 增量规格(新增/修改/删除的需求)
├── design.md           # 技术方案
└── tasks.md            # 实施清单

步骤 2:实施变更

/opsx:apply

AI 会按照 tasks.md 中的清单逐项实施,每完成一项就打勾。你可以随时查看进度,也可以在实施过程中调整设计文档。

步骤 3:归档

/opsx:archive

归档时,OpenSpec 会把增量规格合并到主规格目录 openspec/specs/,并将变更文件夹移到 openspec/changes/archive/。代码库就有了完整的变更历史。

核心概念:增量规格

OpenSpec 最巧妙的设计是"增量规格"(Delta Specs)。它不重写整个规格文档,只描述变化的部分。

增量规格使用三个标记来表示变更类型:

# Delta for Auth

## ADDED Requirements

### Requirement: 双因素认证
系统必须在登录时要求第二因素验证。

## MODIFIED Requirements

### Requirement: 会话超时
系统应在 30 分钟无活动后使会话过期。
(之前:60 分钟)

## REMOVED Requirements

### Requirement: 记住我功能
(已弃用,改用双因素认证)

归档时的合并逻辑:

  • ADDED 的需求追加到主规格
  • MODIFIED 的需求替换现有版本
  • REMOVED 的需求从主规格删除

这种方式类似 Git 的 diff,变更清晰可追溯。

工作流模式

OpenSpec 提供两种工作流模式:

默认快速路径(core 配置)

新安装默认使用 core 配置,提供最精简的命令集:

/opsx:propose → /opsx:apply → /opsx:archive

适合快速迭代和小型项目。

扩展工作流

如果需要更细粒度的控制,可以启用扩展命令,扩展工作流提供更多命令:

命令用途
/opsx:new创建变更脚手架
/opsx:continue逐步创建下一个制品
/opsx:ff快进创建所有规划制品
/opsx:verify验证实施是否符合规范
/opsx:explore探索需求和技术方案

典型的扩展工作流:

graph TD
    A[/opsx:new 创建变更/] --> B{需求清晰?}
    B -->|是| C[/opsx:ff 快进/]
    B -->|否| D[/opsx:explore 探索/]
    D --> E[/opsx:continue 逐步推进/]
    C --> F[/opsx:apply 实施/]
    E --> F
    F --> G[/opsx:verify 验证/]
    G --> H{通过?}
    H -->|是| I[/opsx:archive 归档/]
    H -->|否| J[修复问题]
    J --> F

    classDef primary fill:#1A9090,stroke:#156b6b,color:#fff
    classDef secondary fill:#2d4a4a,stroke:#1A9090,color:#fff
    classDef decision fill:#3d5a5a,stroke:#1A9090,color:#fff

    class C,F,I primary
    class A,D,E,G,J secondary
    class B,H decision

实用技巧

何时使用 /opsx:ff vs /opsx:continue

需求明确、准备开工时用 /opsx:ff。边探索边推进、想逐步审查时用 /opsx:continue。时间紧迫时用 /opsx:ff。复杂变更、需要精细控制时用 /opsx:continue

何时更新现有变更 vs 创建新变更

更新现有变更:意图相同,只是执行方式调整;缩小范围(先做 MVP,其余后续);实施中发现代码库结构与预期不符。

创建新变更:意图根本改变;范围扩大到完全不同的工作;原变更可以独立标记为完成。

保持变更聚焦

一个变更对应一个逻辑单元。如果你在做"添加功能 X 并重构 Y",考虑拆成两个独立变更。好处是更易审查和理解,归档历史更清晰,可以独立发布,回滚更简单。

使用 CLI 命令查看状态

# 列出活跃变更
openspec list

# 查看变更详情
openspec show add-dark-mode

# 验证规格格式
openspec validate add-user-login-api

# 交互式仪表板
openspec view

OpenSpec vs Spec Kit

对比项OpenSpecSpec Kit (GitHub)
轻量级✗ 较重
工具兼容性30+ AI 工具通用
IDE 限制无限制无限制 E
阶段门控灵活迭代严格门控
环境要求Node.jsPython
需求持久化
可预测性
学习成本

最佳实践建议

模型选择

OpenSpec 在高推理能力的模型上表现最佳,所以推荐使用各模型厂商高级模型版本,比如Claude Code选OPUS。

上下文管理

OpenSpec 受益于干净的上下文窗口。在开始实施前清理上下文,并在整个会话中保持良好的上下文卫生。

验证后再归档

使用 /opsx:verify 检查实施是否符合制品要求:

/opsx:verify

验证会检查三个维度:完整性(所有任务完成,所有需求已实施)、正确性(实施符合规格意图,边界情况已处理)、一致性(设计决策体现在代码中,命名约定一致)。

小结

OpenSpec 解决了 AI 编程助手的两个痛点:需求易失和输出不可预测。它的轻量设计和广泛兼容性,让你可以在不改变现有工具链的前提下,获得更可控的 AI 协作体验。

从安装到第一个变更,整个流程不超过 5 分钟。如果你正在使用 AI 编程助手,不妨试试 OpenSpec。

搜索联合传播样式-白色版.png