Openspec

OpenSpec 详解
1. OpenSpec 说明
OpenSpec 是一个轻量级的规范驱动(spec-driven development)框架,专为 AI 编码助手设计。
核心理念:先写规范,再写代码。让 AI 在明确的"契约"下工作,避免模糊提示导致的需求偏移。
2. 安装与初始化
2.1 安装
OpenSpec 是一个 npm 包,支持全局安装。你需要先确保系统已安装 Node.js 20.19 或更高版本。
使用 npm 安装:
# 全局安装
npm install -g @fission-ai/openspec@latest
# 验证安装
openspec --version
使用 pnpm 安装:
pnpm add -g @fission-ai/openspec@latest
使用 yarn 安装:
yarn global add @fission-ai/openspec@latest
免安装直接使用(npx):
npx @fission-ai/openspec@latest init
升级提示: 升级 CLI 后,记得在项目目录中运行
openspec update来重新生成 AI 指导文件。
2.2 初始化
cd your-project
openspec-cn init
其他指令:
# 指定特定工具
openspec init --tools claude,cursor
# 支持所有工具
openspec init --tools all
# 跳过工具配置
openspec init --tools none
# 覆盖 profile
openspec init --profile core
# 自动清理旧配置
openspec init --force
3. 目录结构

核心目录说明
specs/(规格)
系统行为的真实来源,按领域组织(如 auth/、payments/)。描述系统「现在」的行为。
changes/(变更)
每个变更提案独立一个文件夹,包含完整的规划产物。归档后增量规格会合并到 specs/。
4. 核心工作流
OpenSpec 采用四阶段工作流,通过斜杠命令在 AI 助手的聊天面板中操作:

OpenSpec 提供两种工作流模式:快速路径(默认 core profile)和扩展路径(自定义工作流)。
快速路径(Core Profile)
适合大多数场景,四步完成一个功能:
/opsx:propose(创建提案) → /opsx:apply(实施任务) → /opsx:sync(同步规格) → /opsx:archive(归档变更)

完整演练:添加暗色模式
第 1 步:创建提案
在你的 AI 助手聊天界面中输入:
/opsx:propose 添加暗色模式支持
AI 会自动创建 openspec/changes/add-dark-mode/ 目录,并生成提案、规格、设计和任务文件。
第 2 步:审查提案
检查 AI 生成的文件,确认方向正确:
openspec show add-dark-mode
openspec status --change add-dark-mode
第 3 步:实施任务
让 AI 按任务清单逐项执行:
/opsx:apply
AI 会读取 tasks.md 中的任务,逐个完成并勾选。
第 4 步:同步并归档
实施完成后,同步规格并归档:
# 可选:先将增量规格合并到主规格
/opsx:sync
# 归档变更
/opsx:archive
归档会将增量规格合并到 openspec/specs/,并将变更移动到归档目录。
产物依赖关系
OpenSpec 的核心引擎是产物依赖图(Artifact Graph),定义了各产物之间的依赖关系:

产物状态: 每个产物有三种状态:
- BLOCKED — 缺少依赖,不可创建
- READY — 依赖已满足,可以创建
- DONE — 输出文件已存在于文件系统中
状态通过检查文件系统自动检测。
5. 命令参考
AI 斜杠命令(在 AI 助手中使用)
这些命令在 AI 编程助手的聊天界面中输入,不是终端命令。
| 命令 | 用途 | 模式 |
|---|---|---|
/opsx:propose | 一步创建变更 + 所有规划产物 | Core |
/opsx:explore | 探索想法、调查问题、澄清需求 | Core |
/opsx:apply | 按 tasks.md 实施任务 | Core |
/opsx:sync | 将增量规格合并到主规格 | Core |
/opsx:archive | 归档变更,合并规格 | Core |
/opsx:new | 创建新的变更脚手架 | 扩展 |
/opsx:continue | 增量创建下一个就绪产物 | 扩展 |
/opsx:ff | 快速创建所有规划产物 | 扩展 |
/opsx:verify | 验证实施是否与产物一致 | 扩展 |
/opsx:bulk-archive | 批量归档已完成的变更 | 扩展 |
/opsx:onboard | 引导式交互教程 | 扩展 |
注意: 不同 AI 工具的命令语法可能不同。例如 Claude Code 使用
/opsx:propose,而 Cursor 使用/opsx-propose(用短横线替代冒号)。
终端 CLI 命令
这些命令在终端中运行。
| 类别 | 命令 | 用途 |
|---|---|---|
| 设置 | openspec init | 在项目中初始化 OpenSpec |
openspec update | 重新生成 AI 指导文件 | |
| 浏览 | openspec list | 列出变更或规格 |
openspec view | 交互式终端仪表盘 | |
openspec show [item] | 显示变更或规格详情 | |
| 验证 | openspec validate | 验证变更/规格 |
openspec status | 查看产物完成状态 | |
| 生命周期 | openspec archive | 归档已完成的变更 |
openspec new change | 创建新的变更目录 | |
| 配置 | openspec config list | 列出配置项 |
openspec config set | 设置配置值 | |
openspec config profile | 切换工作流 Profile | |
| Schema | openspec schema init | 创建新的 Schema |
openspec schema fork | 复制现有 Schema | |
openspec schema validate | 验证 Schema 结构 |
6. 支持的 AI 工具

如何工作:
OpenSpec 在每个 AI 工具的配置目录中安装 SKILL.md 文件和 opsx-<id>.md 命令文件。例如对 Claude Code,文件安装在 .claude/ 目录下;对 Cursor,安装在 .cursor/ 下。
7. 进阶用法
项目配置(config.yaml)
通过 openspec/config.yaml 可以自定义项目级行为:
# openspec/config.yaml
schema: spec-driven # 默认 Schema
context: | # 注入到所有产物指令中
技术栈: TypeScript, React
测试框架: Vitest
rules: # 按产物 ID 设置规则
proposal:
- 包含回滚计划
specs:
- 使用 Given/When/Then 格式
增量规格(Delta Specs)
增量规格描述相对于当前规格的变化,支持三种操作:
| 章节 | 含义 | 归档时行为 |
|---|---|---|
## ADDED Requirements | 新增行为 | 追加到主规格 |
## MODIFIED Requirements | 修改行为 | 替换现有需求 |
## REMOVED Requirements | 移除行为 | 从主规格中删除 |
自定义 Schema
你可以创建自己的工作流 Schema 来定义不同的产物和依赖关系:
# 创建新 Schema
openspec schema init my-workflow
# 基于现有 Schema 创建
openspec schema fork spec-driven my-custom
# 切换到自定义 Schema
openspec config profile
Schema 解析优先级
- CLI 参数(最高) —
--schema <name>命令行参数直接指定 - 变更元数据 — 变更目录下的
.openspec.yaml文件 - 项目配置 —
openspec/config.yaml中的设置 - 默认值(最低) — 使用内置的
spec-drivenSchema
环境变量
| 变量 | 用途 |
|---|---|
OPENSPEC_TELEMETRY=0 | 禁用匿名遥测 |
DO_NOT_TRACK=1 | 禁用遥测(标准 DNT 信号) |
NO_COLOR=1 | 禁用彩色输出 |
OPENSPEC_CONCURRENCY | 最大并行验证数(默认: 6) |
8. 常见问题
OpenSpec 和传统的需求文档有什么区别?
OpenSpec 专为 AI 协作设计,不是给人看的需求文档。它结构化的 Markdown 格式让 AI 能精确理解上下文,并通过增量规格机制管理变化,而非维护庞大且容易过时的文档。
我需要重写现有代码吗?
不需要。OpenSpec 是棕地友好的,可以在任何现有项目中使用。你只需描述现有系统的行为(specs/),然后按需提出变更。
我必须按顺序完成所有产物吗?
使用快速路径(Core Profile)时,/opsx:propose 会一步生成所有产物。你只需要审查、实施和归档。如果想更精细地控制,可以切换到扩展路径。
增量规格合并时发生冲突怎么办?
/opsx:sync 命令会提示你处理冲突。你也可以使用 /opsx:bulk-archive 批量处理已完成的变更,系统会自动处理规格冲突。
如何禁用遥测?
设置环境变量 OPENSPEC_TELEMETRY=0 或 DO_NOT_TRACK=1。遥测只收集命令名称和版本号,不包含任何参数、路径、内容或个人信息。
在哪里获取帮助?
GitHub 仓库:https://github.com/Fission-AI/OpenSpec
一、先搞清楚:OpenSpec Skill 是什么
OpenSpec 是一套**规范驱动开发(Spec-Driven)**的 AI 工作流,靠 4 个核心 Skill(能力)完成功能迭代:
/opsx:explore探索:理解现状、分析影响/opsx:propose提案:写需求、设计、任务/opsx:apply实施:按规范生成/修改代码/opsx:archive归档:把变更合并进主规格
工作流(迭代闭环):
explore → propose → apply →(不满意→改 design →再 apply)→ archive
二、环境准备(1 分钟)
1. 安装(全局)
npm install -g openspec
验证:
opsx --version
2. 项目初始化(已有项目也能跑)
在项目根目录执行:
/opsx:init
会生成:
openspec/
├── specs/ # 系统当前规格(唯一可信源)
└── changes/ # 每次迭代的临时变更
三、第一次功能迭代(标准流程)
Step 1:探索现状(explore)
目的:让 AI 读懂现有代码 + 规格,避免重复/冲突。
/opsx:explore
- AI 会扫描
openspec/specs/和项目代码 - 输出:系统能力、模块依赖、可扩展点
Step 2:发起变更提案(propose)
目的:把"想法"变成可评审的需求 + 设计 + 任务。
/opsx:propose 新增暗黑模式切换
生成目录:
openspec/changes/add-dark-mode/
├── proposal.md # 为什么改、改什么、影响范围
├── design.md # 技术方案、架构、逻辑
├── tasks.md # 拆分好的可执行任务
└── specs/ # 本次增量规格(delta spec)
Step 3:评审 & 修改(关键迭代点)
- 打开
design.md:觉得方案不对 → 直接改 - 打开
tasks.md:任务不合理 → 直接调 - 不需要重新走流程,改完直接下一步
Step 4:实施代码(apply)
目的:AI 按最终 design + tasks 生成代码。
/opsx:apply
- AI 逐任务执行:改配置、加组件、写逻辑
- 全程对齐
design.md,不瞎发挥
Step 5:验证 & 回退(迭代核心)
- 运行项目:功能正常 → 继续;有问题 → 回到 Step 3 改 design.md
- 再执行
/opsx:apply→ AI 会增量更新代码,不是重写 - 可反复"改 design → apply",直到满意
Step 6:归档(archive)
确认功能稳定、测试通过:
/opsx:archive
- 把本次
changes/xxx/specs合并到主openspec/specs/ - 归档变更记录到
changes/xxx/,留痕追溯 - 主规格更新为系统当前真实行为,下次迭代以此为基准
四、第二轮迭代(在已有功能上叠加)
例子:已有"暗黑模式",再加"跟随系统"选项。
/opsx:explore→ AI 读取已归档的暗黑模式规格/opsx:propose 暗黑模式增加跟随系统选项- 评审
design.md→ 调整触发逻辑 /opsx:apply→ 增量修改代码(不破坏旧功能)- 验证 → 没问题
/opsx:archive
每次迭代都基于上一次归档后的主规格,形成稳定叠加闭环。
五、常用命令速查表(直接复制用)
# 初始化项目
/opsx:init
# 探索现状
/opsx:explore
# 发起功能提案
/opsx:propose 你的需求描述
# 实施代码
/opsx:apply
# 归档完成变更
/opsx:archive
# 查看所有变更
/opsx:list
六、关键注意点(避坑)
- 所有迭代都从
explore开始:确保 AI 基于最新规格,不是旧记忆。 - 改方案只改
design.md:不要直接改代码,否则规格和代码不一致。 apply是增量的:反复执行只会更新差异,不会覆盖已正确的代码。archive不可逆:归档后规格合并,不能回退本次变更,归档前务必验证。
JavaWeb
Spring
MyBatis
linux
消息队列
JavaSE
工具
片段
AI
搜索
dy