如题所见,为什么来这么久只写了100行代码,但是git统计我写了10000行代码呢?这期给大家带来了一个"工具":openspec
openspec是个什么东西?
openspec介绍:lzw.me/docs/OpenSp...
OpenSpec 是 AI-Native 的规范驱动开发系统,为 AI 编码助手提供轻量级规范层。 在第一行代码编写之前,先与 AI 对齐需求,让开发过程更可预测、更高效。
他不是一个模型,也不是一个IDE,可以把他理解为一个框架,他能让ai输出更准确,规范ai的输出,让人与ai直接沟通更规范化,把平时的与ai直接的问答模式进行开发的模式改为使用命令+问答 的模式进行开发,让ai 更加理解人需要做什么,让人更加知道ai在做什么。
安装 Node.js
bash
# 验证 Node.js 版本
node --version

全局安装 OpenSpec
cmd命令执行
perl
# 使用 npm(推荐)
npm install -g @fission-ai/openspec@latest

验证安装
bash
# 检查版本
openspec --version

OpenSpec默认提供4个标准命令:/opsx:propose、/opsx:explore、/opsx:apply、/opsx:archive
如果还想要更多的命令,可以执行下面的配置向导(全局执行)
提示 :配置向导选择
Delivery and workflows可获得更多扩展命令(/opsx:new、/opsx:continue、/opsx:verify等)
bash
# 启动配置向导
openspec config profile
# 交互式选择配置:
# 1. Delivery and workflows - 基础命令
# 2. Both (skills + commands) - 创建技能和命令
# 3. Custom Profile - 自定义配置(全选,使用↑↓+空格进行选择,[x]表示选中)

这个是针对电脑的openspec安装与配置,但是openspec是项目级别的,所以需要进入到项目中执行初始化 OpenSpec脚本
bash
# 进入项目目录
cd your-project
# 初始化 OpenSpec
openspec init

按回车键继续下一步,上下键选择,空格键选定

选择好trae之后按回车键完成选择,这个时候进入到项目里面就会发现多了两个文件夹,一个是.trae\skill 这个文件夹是因为执行了上面的init命令之后让trae拥有的skill能力,里面具体的命令就是上面运行配置向导的时候第三步选择的命令,这些命令即是在trae中能执行的命令。还有一个文件夹叫做openspec,这个就是openspec的主文件夹

初始化后的目录结构
bash
openspec/
├── specs/ # 主规范(当前系统行为的权威基准)
│ └── <domain>/
│ └── spec.md
├── changes/ # 提议中的变更(每个变更独立文件夹)
│ └── <change-name>/
│ ├── proposal.md # 为什么做、做什么
│ ├── design.md # 如何实现
│ ├── tasks.md # 实现任务清单
│ └── specs/ # Delta 规范(正在变化的部分)
│ └── <domain>/
│ └── spec.md
└── config.yaml # 项目配置(可选)
openspec完整的流程图如下:

但是在trae中用到的命令分别是:第一步:openspec-propose,第三步:openspec-apply-change,第四步:openspec-verify-change,第五步:openspec-verify-change
但是如果你想让ai写出来的东西更精确更好,还可以在第一步之前执行:openspec-explore 命令(在提交变更之前,思考想法、调查问题、澄清需求。)这命令会做一些事情:理解需求,和你确认需求,甚至会扫描整个项目的代码等等操作,是比较耗费token的。
实战操作
会从一个需求的提出,到代码的结束完整演示少些代码或者说一行代码不写让ai完成需求的开发
openspec-explore
这个命令可用可不用,如果需求比较模糊,或者需求比较大,甚至说你自己都不理解这个需求,可以在执行第一步:openspec-propose前先执行这个命令,期间如果ai也理解不了你的需求之后,他会问我们和我们确定一些需求的细节,并且我们也可以进行补充(例如和产品经理和同事确认)
这个命令不会产生任何文件,他输出的结果也只会存在ai问答的上下文中,后面执行openspec-propose命令的时候会把确定好的问题代入到下一个命令中,让openspec-propose输出的产物更准确
示例:
markdown
You: /openspec-explore 这是我的需求文档,帮我为移动端应用处理身份验证 (贴上你的需求文档)
AI: 让我来研究你当前的认证设置...
[分析代码库]
我看到你在 Web 端使用了基于 session 的认证。
对于移动端,我们有三种主要选择:
1. JWT 令牌(无状态,支持离线)
2. OAuth2(如需第三方登录)
3. 扩展当前 session(更简单,但需要连接)
你的 API 已经配置了 CORS。你对哪个方向感兴趣?
You: 让我们用 JWT。能开始一个变更吗?
AI: 准备好了。运行 /opsx:propose add-jwt-auth 开始。
实战: 如果在禅道上面有对应的需求并且已经配置好mcp服务之后,就可以直接使用下面的提示词让ai开始理解这个需求:
bash
/openspec-explore mcp获取任务id:2213913,使用getUserTaskList
新增两个接口:diff 和 log ,log用于列表的查询,diff用于详情的查询
如果禅道上面没有对应的需求或者任务,则直接把prd给ai,这里因为禅道上面有任务,我们直接用mcp去获取

它会扫描我们的项目的代码:

最后他会输出他的思考结果: 
如果ai对我们的需求有疑问,他就会向我们提问,因为这个需求ai没有疑问,所以ai没有问我们,接下来他让我们创建 OpenSpec change proposal ,所以我们进入下一步。
openspec-propose
创建新变更并一步生成所有规划产物。
示例
bash
You: /openspec-propose 自然语言
AI: 已创建 openspec/changes/add-dark-mode/
✓ proposal.md
✓ specs/ui/spec.md
✓ design.md
✓ tasks.md
准备好实现。运行 /opsx:apply。
实战:
我们可以直接执行openspec-propose 命令,也可以和他补充一些东西,正常和他沟通就行了:
bash
/openspec-propose 补充几个点:用户点击日志的时候调用log接口,就会进入到第二个图,点击查看的按钮就会调用diff接口

开始创建四个文件:

任务已完成:

输出已结束:

这个命令它会输出四个文件(proposal.md、specs/细项变更名称/spec.md(这里可以是多个)、design.md 、 tasks.md):

他输出的四个文件叫做变更 (Changes)。变更是对系统的提议修改,打包为一个包含理解和实现所需一切的文件夹:
变更文件夹结构
bash
openspec/changes/cost-config-diff-log/
├── proposal.md # 为什么做、做什么
├── design.md # 如何实现(技术方案)
├── tasks.md # 实现任务清单(带复选框)
├── .openspec.yaml # 变更元数据(可选)
└── specs/ # Delta 规范
└── cost-config-xxx/
└── spec.md # cost-config-xxx/spec.md 中正在变化的内容
这个文档输出来主要是给我们看的,而看的顺序为:

如果我们看完之后对他的变更产物有疑问,我们可以和他补充:
变更的产物加几个补充点:
1.编码的风格要按照现有的代码进行编码
2.与数据库相关的操作都写在Repository类
3.我问了产品经理,他说外面列表数据可能会有很多条变更记录
这里面可以使用自然语言描述,最终的目的是我们可以更加地去规范ai做什么以及怎么做,以及补充一些细节点,让下一步openspec-apply-change命令写出来的代码更加规范与精准
会改ai产生的变更文件,补充细节

还会根据我们之前提供的ui,生成我们自己都漏掉的细节:

最后输出修改文件结果,让我们进行下一步: 
这里注意,创建变更的时候不要一次性创建一个很大的变更(即一次把一整个大功能让他创建一个变更)原因有以下几个点:
-
运行时间长,结果不可控
-
如果功能比较复杂会消耗巨量的token
-
后期维护,修改bug困难
-
......
所以每次只提一个小变更,把大需求人工分成a,b,c...几个小需求,让他颗粒度更小,例如一个小功能或者一个接口执行一个openspec-propose命令:

openspec-apply-change
实现变更中的任务。逐步处理任务列表,编写代码并勾选完成项。
示例:
ini
You: /openspec-apply-change
AI: 实现 add-dark-mode...
读取 tasks.md:
- [ ] 1.1 创建 ThemeContext
- [ ] 1.2 添加 CSS 自定义属性
- [ ] 1.3 实现 localStorage 持久化
处理 1.1: 创建 ThemeContext...
[创建 src/context/ThemeContext.tsx]
✓ 1.1 完成
处理 1.2: 添加 CSS 自定义属性...
[更新 src/styles/globals.css]
✓ 1.2 完成
...
实战:
直接执行命令,如果还有补充的话,也可以在命令后面用自然语言告诉ai

然后他就开始自动执行这17个任务,这个时候尽量不要操作代码,等他自动完成
17个任务完成之后,openspec会自动进行编译并且修复: 
最终会把tasks.md文件修改为每个任务都完成了:

这个时候可以看到代码已经改变了: 
这个时候如果我们的代码有什么bug,或者要改什么东西,我们也可以通过自然语言和他讲: 

openspec-verify-change
验证实现是否与变更产物匹配。从完整性、正确性和一致性三个维度检查。
示例
makefile
You: /openspec-verify-change
AI: 验证 add-dark-mode...
完整性
✓ tasks.md 中的所有 8 个任务都已完成
✓ 规范中的所有需求都有对应代码
⚠ 场景"系统偏好检测"没有测试覆盖
正确性
✓ 实现与规范意图匹配
✓ 场景中的边缘情况已处理
一致性
✓ 设计决策在代码结构中有体现
⚠ 设计提到"CSS 变量"但实现使用了 Tailwind 类
总结
关键问题: 0 | 警告: 2 | 可以归档: 是(有警告)
这个命令可用可不用,如果想检查一下代码与产物是否一致可以直接执行该命令,使用的时候建议再把prd再次丢给ai
openspec-archive-change
归档已完成的变更。完成变更并将其移至归档文件夹。
示例:
makefile
You: /openspec-archive-change
AI: 归档 add-dark-mode...
产物状态:
✓ proposal.md 存在
✓ specs/ 存在
✓ design.md 存在
✓ tasks.md 存在 (8/8 任务完成)
Delta 规范: 尚未同步
→ 现在同步?(推荐)
You: 是
AI: ✓ 已将规范同步到 openspec/specs/ui/spec.md
✓ 已移至 openspec/changes/archive/2026-03-10-add-dark-mode/
变更归档成功。
实战:
lua
/openspec-archive-change openspec\changes\cost-config-diff-log

当我们确定这个需求已经完成的时候可以使用这个命令,如果想让openspec的产物更规范化的话,可以改了bug之后在对话框让ai改一下openspec的产物,然后再运行这个命令。这个命令会把openspec\changes\cost-config-diff-log 文件夹移动到 openspec\changes\archive\2026-07-13-cost-config-diff-log 说明这个需求已经完成了,这个时候就可以推送到git上面或者push到远程仓库让团队小伙伴一起使用变更(可选)
其实也可以手动移动到openspec\changes\archive文件夹下面,和这个命令的效果是一样的,如果后期我们要改bug,直接和ai说:
lua
openspec\changes\archive\2026-07-13-cost-config-diff-log 有个bug:前端传入超长文本,后端报错
这个时候ai就会直接找到对应的变更产物,修改对应的bug: 

至此,我们一行代码都没有写,完成了这个需求的代码层面的开发
拓展
mcp
文中用到的mcp服务,如果大家的公司有的话就这样配置:
可以把他理解为自然语言去获取第三方系统的数据的服务,如果没有也没关系,直接把产品文档丢给openspec就行了,如果大家感兴趣,后期作者可以教大家开发mcp服务,欢迎关注
rule
我们可以使用工具级别的rules和skills,一般在放在 C:\Users\用户名\.trae-cn 文件夹下,他就会根据使用的工具去生效对应的rules和skills
智能体
我们可以自己创建智能体,让ai输出跟专业化 
其他编程软件
可以使用其他编程软件吗?
前面我们也说了,openspec只是一个ai流程框架而已,市面上主流的IDE基本都支持。 但是命令会不同,例如在trae中叫做 /openspec-apply-change 但是在其他软件中叫做 /opsx:apply ,具体就看初始化 openspec init 的时候选择的ide是啥,然后去对应ide项目文件中的skills文件夹下面的skill文件的名称
最后,博主在深度使用openspec两个月以来,写过的代码不超过100行,这数据真的很夸张,现在已经完全改变了作者的开发模式,相信ai也会慢慢地改变大家的开发模式,如果没有openspec的话,可能还有openspring
总会出现类似的工具或者框架,ai在慢慢的改变世界,学起来吧,少年。。
注:本篇文章非广告,很久没写博客了,只是想分享一些东西,感谢你观看,下次再见 