
在上一篇文章中,我们介绍了 OpenSpec 的基本使用方法和最佳实践。很多读者反馈:OpenSpec 的"规范驱动"理念很好理解,但它的底层原理是什么?设计亮点在哪里?为什么它能解决 AI 编程的痛点?
今天,我们从技术架构和设计哲学的角度,深度剖析 OpenSpec 的底层原理。
要理解 OpenSpec 的底层原理,首先要理解它要解决的核心问题:
问题描述: AI 编程助手(Claude Code、Cursor、Copilot)每次对话都是"新鲜"的,无法记住之前讨论的需求、设计决策、代码变更。
传统做法:
开发者: "实现用户登录功能"
AI: "好的,这是代码..."
开发者: "加上 remember me 功能"
AI: "好的,这是新代码..."(但忘记了之前的设计决策)结果: AI 生成的代码前后不一致,设计决策丢失。
问题描述: 开发者提的需求太模糊,AI 只能"猜"。猜对了皆大欢喜,猜错了就是返工。
传统做法:
开发者: "做个电商系统"
AI: "好的,这是电商系统代码..."(但开发者想要的是"支持微信支付的生鲜电商")结果: AI 生成的代码不符合实际需求,返工 3 次是常态。
问题描述: AI 生成代码后,开发者不知道为什么这样设计、改了什么、谁改的。
传统做法:
AI 生成代码 → 直接合并到主分支 → 3 个月后看代码,完全忘记为什么这样写结果: 代码变成"黑盒",维护成本极高。
OpenSpec 通过三大核心机制解决上述痛点:
设计理念: 将"真理源规范"和"变更提案"分离,通过文件系统的物理隔离,实现关注点分离。
目录结构:
your-project/
openspec/
specs/ # 真理源规范(Source of Truth)
auth/
spec.md # 认证模块的最终规范
payment/
spec.md # 支付模块的最终规范
changes/ # 变更提案(Change Proposals)
add-2fa/
proposal.md # 变更提案(需求、设计、任务)
tasks.md # 实施任务(AI 按此实现)
design.md # 技术设计(可选)
optimize-payment/
proposal.md
tasks.md底层原理:
specs/:真理源specs/ 存放项目当前唯一有效的最终规范,相当于项目的“宪法”。
changes/:变更流changes/ 用来管理所有规范变更提案,是规范演进的工作区。
draft → review → approved → done → archivedchanges/archive/,保留完整历史记录
OpenSpec 会在 AI 助手启动时,自动把 specs/ 和 changes/ 的内容注入上下文,让助手始终基于最新规范工作。
CLAUDE.md 和 .claude/commands/openspec/ 注入.cursor/commands/openspec/ 注入AGENTS.md 注入为什么这样设计?
设计理念: 通过强制性的工作流,让开发者和 AI 在编码前先"对齐",避免需求模糊。
工作流闭环:

底层原理:
OpenSpec 通过结构化工作流,强制开发过程先“对齐”,再“实现”。
/openspec:proposal
/openspec:review
/openspec:implement“审查与对齐”阶段支持 AI 与开发者反复协作迭代。
OpenSpec 将规范视为“可版本化资产”,而不是静态文档。
为什么这样设计?
设计理念: 不同 AI 编程助手有不同的上下文注入机制,OpenSpec 通过"适配层"实现统一规范分发。
实现原理:
1. 初始化时检测 AI 工具类型
:
openspec init
# 会询问:Which AI tool are you using?
# - Claude Code
# - Cursor
# - Copilot
# - Other2. 生成工具特定的配置文件
.claude/commands/openspec/ 目录和斜杠命令.cursor/commands/openspec/ 目录和斜杠命令AGENTS.md,通过上下文规则注入规范底层架构图:

为什么这样设计?
问题:
OpenSpec 需要更新 AI 工具的配置文件(如 CLAUDE.md、.cursor/commands/),但开发者可能在这些文件中自定义了内容。如何避免覆盖用户自定义内容?
解决方案:
使用 <!-- OPENSPEC:START --> 和 <!-- OPENSPEC:END --> 标记,保护用户自定义内容。
实现原理:
<!-- OPENSPEC:START -->
这是 OpenSpec 自动生成的内容,会被后续 openspec update 命令覆盖。
<!-- OPENSPEC:END -->
这是用户自定义的内容,OpenSpec 不会修改。openspec update 命令只会更新标记之间的内容,不会触及标记之外的内容。
技术亮点:
问题: 变更提案有不同的状态(草稿、审查中、已批准、已完成、已归档),如何管理这些状态?
解决方案: OpenSpec 通过文件夹结构和元数据文件管理生命周期。
实现原理:

状态转换:
draft → review(开发者标记"准备审查")
↓
review → approved(AI 和开发者审查通过)
↓
approved → done(AI 按 tasks.md 实现完成)
↓
done → archived(归档到 changes/archive/,更新 specs/)技术亮点:
问题: 规范文件需要版本控制,但如何与 Git 无缝集成?
解决方案: 所有规范文件都是 Markdown 格式,支持 Git 的所有功能(diff、blame、历史追溯)。
技术亮点:
git diff 查看规范变更git blame 查看每行的修改者和时间问题: 很多 AI 工具需要联网才能使用,但开发者可能在飞机上、火车上编程,如何支持离线使用?
解决方案: OpenSpec 是纯文件驱动,无需 API 密钥,无需联网。
技术亮点:
问题: 很多开发工具只适合"从零开始"的绿色领域项目,但现实中断多数项目是"已有代码"的棕地项目。如何让 AI 辅助棕地项目的增量开发?
解决方案:
OpenSpec 只在项目根目录创建一个 openspec/ 文件夹,不破坏原有项目结构。
技术亮点:
openspec/ 文件夹,不影响项目问题: 很多开发流程工具(如传统瀑布模型)太刚性,不适应敏捷开发。如何让规范驱动开发既有序又灵活?
解决方案: OpenSpec 的四大设计原则之一:Fluid not rigid(流动而非刚性)。
实现原理:
技术亮点:
OpenSpec 的技术架构可以总结为:

工具 | 定位 | 适用场景 | OpenSpec 的优势 |
|---|---|---|---|
OpenSpec | 棕地项目增量开发 | 1 → n(现有项目功能迭代) | 完整变更跟踪、无需 API 密钥、跨工具兼容 |
Spec Kit | 绿地项目从零开发 | 0 → 1(新项目) | OpenSpec 支持棕地项目,Spec Kit 不支持 |
Kiro | 绿地项目从零开发 | 0 → 1(新项目) | OpenSpec 支持跨规范更新,Kiro 不支持 |
OpenSpec 不是让 AI 变得更聪明,而是让 AI 更"规范"。
它通过双文件夹模型、规范驱动工作流、跨工具兼容层三大核心机制,解决 AI 编程的上下文丢失、需求模糊、变更不可追溯的三大痛点。
适合使用的场景:
暂时不适合的场景:
OpenSpec 的终极愿景: 让 AI 能力像水和电一样,通过标准化的管道,在整个网络中自由流动、被任意 Agent 即插即用,从而构建一个真正协作的 AI 价值网络。
— 完 —