大数跨境

OpenCode Day22:OpenSpec 与 OPSX 完整教程:从入门到实战

OpenCode Day22:OpenSpec 与 OPSX 完整教程:从入门到实战 创见AI实验室
2026-03-30
4
导读:跟AI聊了5轮,它还在跑偏?不是它不够聪明,是你没给它画好图纸。OpenSpec就是来解决这个问题的。它不是让AI更聪明,而是给AI画好施工图纸,让它照着干。
飞书文档 - 图片
跟AI聊了5轮,它还在跑偏?不是它不够聪明,是你没给它画好图纸。

用过AI编程助手的,一定经历过这个场景:

你说“加个用户登录功能”,它写出来了,但没加密码加密。你补充“要加密”,它加了,但忘了加登录失败次数限制。你又说“加限制”,它加了,但把之前确认好的邮箱验证搞没了……

来回折腾五六轮,代码终于勉强能用,但谁也说不出最终到底实现了什么。

这就是典型的“vibe coding”——凭感觉编程。AI像个充满热情但缺乏方向的新手,想到哪写到哪。

OpenSpec就是来解决这个问题的。它不是让AI更聪明,而是给AI画好施工图纸,让它照着干。

核心概念:三者关系一目了然
OpenCode 是什么?

OpenCode(GitHub仓库:anomalyco/opencode)是一个完全开源的 AI 编程代理,拥有 132K+ GitHub Stars,每月活跃开发者超过 500 万。

核心特点

  • ✅ 100% 开源(MIT License)
  • ✅ 不绑定任何模型提供商(支持 Claude、GPT、Gemini 或本地模型,共 75+ 提供商)
  • ✅ TUI(终端用户界面)优先,开箱即用
  • ✅ 支持Slash Commands(斜杠命令)和Skills(技能)系统

安装方式

Code

# 一键安装(推荐)
curl -fsSL https://opencode.ai/install | bash

# 或使用 npm
npm i -g opencode-ai@latest
OpenSpec 是什么?

OpenSpec(GitHub仓库:Fission-AI/OpenSpec,35K+ Stars)是一个规范驱动开发(Spec-Driven Development,SDD)框架,专为 AI 编程助手设计。

核心思想

  • 在写代码之前,先写清楚"要构建什么"
  • 规格说明书(Spec)是真相来源,代码是衍生产品
  • 适用于现有项目(Brownfield),而非仅新项目

解决的问题

  • “Vibe Coding”(随意编码):描述需求 → AI 生成代码 → 运行有问题 → 修改提示 → AI 修复一个 bug 又引入另一个 bug
  • 上下文丢失:多轮对话后,AI 忘记架构决策
  • 安全漏洞:约 45% 的 AI 生成代码包含安全漏洞(在支付/订单系统中是合规问题)
OPSX 是什么?

OPSX是 OpenSpec 的标准工作流(v1.0 版本引入)。

关键革新:从刚性阶段弹性动作

特性
旧版(Legacy)
新版 OPSX
命令数量
3 个
10 个
工作流
刚性阶段(无法回头)
弹性动作(随时可更新)
模板
硬编码在 TypeScript 中
可编辑的 YAML + Markdown
定制化
需修改源码
创建 schema.yaml 即可

依赖关系图

三者关系

简单说

  • OpenCode
    是 AI 助手运行的平台
  • OpenSpec
    是规范开发框架(通过CLI和 slash commands 工作)
  • OPSX
    是 OpenSpec 的工作流(10 个命令)
环境准备与安装
前置条件
  • Node.js 20.19.0 或更高版本

Code

node --version  # 检查版本
  • 任意
    包管理器
  • npm、pnpm、yarn、bun 均可
  • AI 编程助手
    (推荐以下任一)
  • OpenCode
  • Claude Code
  • GitHubCopilot
  • Windsurf
  • 或其他支持 slash commands 的工具
安装 OpenSpecCLI

Code

# 使用 npm(推荐)
npm install -g @fission-ai/openspec@latest

# 使用 pnpm
pnpm install -g @fission-ai/openspec@latest

# 使用 yarn
yarn global add @fission-ai/openspec@latest

# 使用 bun
bun install -g @fission-ai/openspec@latest

飞书文档 - 图片
飞书文档 - 图片

验证安装

Code

openspec --version
安装 OpenCode(可选,如果你使用 OpenCode 作为 AI 助手)

Code

# 一键安装(推荐)
curl -fsSL https://opencode.ai/install | bash

# 或使用 npm
npm i -g opencode-ai@latest
初始化项目:第一次接触 OpenSpec
步骤 1:进入项目目录

假设我们有一个早餐小程序项目:

Code

cd D:\zxpPWork\softlv\softlv-breakfast
步骤 2:初始化 OpenSpec

Code

openspec init

这个命令会做

  • 创建openspec/目录
  • 生成配置文件(openspec/config.yaml
  • 创建AGENTS.md文件(AI 助手的说明文档)
  • 设置变更管理文件夹结构
飞书文档 - 图片
步骤 3:查看项目结构

初始化后,你的项目结构如下:

Code

softlv-breakfast/
├── openspec/
│   ├── changes/              # 变更文件夹(每个功能一个)
│   │   └── (新功能会在这里创建)
│   ├── archive/              # 已归档的变更
│   ├── specs/                # 主规格说明(系统的"真相来源")
│   │   └── (领域规格说明)
│   ├── schemas/              # 自定义工作流 schema(可选)
│   └── config.yaml           # 项目配置(可选但推荐)
├── AGENTS.md                 # AI 助手说明
└── (你的项目文件)
飞书文档 - 图片
步骤 4:配置项目(可选但推荐)

编辑openspec/config.yaml

Code

# openspec/config.yaml
schema:spec-default# 默认工作流 schema

context:|
  技术栈:TypeScript, React, Node.js, PostgreSQL
  API 规范:RESTful, JSON 响应
  测试:Vitest 单元测试,Playwright e2e
  代码风格:ESLint + Prettier,严格 TypeScript
  数据库:Prisma ORM
  部署:小程序云开发

rules:
    proposal:
        -必须包含回滚计划
        -识别受影响的团队
    specs:
        -使用Given/When/Then格式编写场景
        -每个需求至少有一个场景
    design:
        -对复杂流程包含序列图
        -识别所有外部依赖
    tasks:
        -每个任务必须可估算
        -包含验收标准

作用

  • context
    :自动注入到所有 artifact 的指令中
  • rules
    :确保团队一致性
OPSX工作流详解:10 个核心命令
命令总览
命令
功能
使用场景
/opsx:explore
探索想法、调查问题、澄清需求
需求不明确时
/opsx:new
创建新的变更文件夹
开始任何功能开发
/opsx:continue
逐步创建 artifact(每次一个)
需要分阶段审查
/opsx:ff
快速生成所有规划文档
需求明确时
/opsx:apply
实施任务
开始编码
/opsx:verify
验证实现是否符合规格
完成编码后
/opsx:sync
预览规格合并
归档前预览
/opsx:archive
归档已完成的变更
功能完成后
/opsx:bulk-archive
批量归档多个变更
累积多个完成后
/opsx:onboard
新手引导教程
第一次使用
4.1/opsx:explore— 探索模式

用途:需求不明确、需要调查问题、比较技术方案时使用。

示例(内容太长,只截取部分)

Code

你:/opsx:explore
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片

关键点:探索模式不会创建变更文件夹,纯思考阶段。准备好后再用/opsx:new

4.2/opsx:new— 创建变更

用途:开始任何新功能或修改。

示例

Code

你:/opsx:new 增加生成微信分享海报功能
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片

注意:这个命令只创建文件夹,不会生成任何文档。后续配合/opsx:ff/opsx:continue

4.3/opsx:apply— 实施任务

用途:开始编码实现。

示例

Code

你:/opsx-apply add-wechat-share-poster
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
4.4/opsx:verify— 验证实现

用途:检查实现是否符合规格。

示例

Code

你:/opsx:verify

推荐:每次完成编码后运行一次,确保没有遗漏需求。

飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
4.5/opsx:sync— 预览规格合并

用途:归档前预览 delta specs 如何合并到主 specs。

示例

Code

你:/opsx:sync

可选命令/opsx:archive需要时也会提示。

飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
飞书文档 - 图片
4.6/opsx:archive— 归档变更

用途:完成功能开发后归档。

示例

Code

你:/opsx:archive

会做

  • 将 delta specs 合并到主 specs(openspec/specs/
  • 将变更文件夹移到归档目录
  • 保留完整变更历史
飞书文档 - 图片
飞书文档 - 图片
4.7/opsx:bulk-archive— 批量归档

用途:累积多个已完成的变更时批量归档。

示例

Code

你:/opsx:bulk-archive

AI 会自动检测并解决spec冲突

4.8/opsx:onboard— 新手引导

用途:第一次使用 OpenSpec,或带团队成员入门。

示例

Code

你:/opsx:onboard

使用真实代码库练习,约 15 分钟完成整个流程。

4.9 最终项目结构
飞书文档 - 图片
进阶技巧与最佳实践
5.1 何时更新现有变更 vs. 创建新变更?

使用现有变更(更新 proposal/specs)当:

  • ✅ 相同的意图(“还是那个功能,只是细节调整”)
  • ✅ >50% 范围重叠
  • ✅ 原变更无法"完成"而不包含这些修改

创建新变更当:

  • ✅ 意图根本改变(“Add auth” → “Add completeRBACsystem”)
  • ✅ <50% 范围重叠
  • ✅ 原变更可以单独标记为"完成"

决策树:

Code

这是相同的工作吗?
   │
   ├── 相同的意图?相同的问题?
   │    │
   │    ├── 是 → 更新现有变更
   │    └── 否 → 创建新变更
   │
   ├── >50% 重叠?
   │    │
   │    ├── 是 → 更新现有变更
   │    └── 否 → 创建新变更
   │
   └── 原变更可单独完成?
        │
        ├── 否 → 更新现有变更
        └── 是 → 创建新变更

5.2 多个变更同时进行

Code

# 变更 1
/opsx:new add-dark-mode
/opsx:ff

# 变更 2(不完成变更 1)
/opsx:new optimize-images
/opsx:ff

# 实施特定变更
/opsx:apply add-dark-mode

# 切换到另一个
/opsx:apply optimize-images

# 全部完成后批量归档
/opsx:bulk-archive

5.3 在实施过程中调整设计

OPSX 的核心优势:可以随时更新任何 artifact。

Code

# 正在实施中...
/opsx:apply

# AI:"我发现数据库查询性能很差,建议添加 Redis 缓存。"# 你可以停下来,更新设计# 1. 编辑 design.md,添加缓存策略# 2. 更新 tasks.md,添加缓存相关任务# 3. 继续实施
/opsx:apply

# AI 会根据新设计继续
5.4 使用 Delta Specs 格式

Delta Specs 规则

  • 每个 requirement 使用## Requirement:
  • 每个 scenario 使用### Scenario:
  • MODIFIEDrequirements 必须包含完整内容(不是 diff)
  • REMOVED requirements 必须包含原因迁移计划

示例

Code

# ADDED Requirements## Requirement: 用户必须提供有效的电子邮件
系统 MUST 验证电子邮件格式并确保唯一性。

### Scenario: 成功注册**GIVEN** 访问注册页面
**WHEN** 用户输入有效电子邮件和密码
**THEN** 创建账户并发送验证邮件

# MODIFIED Requirements## Requirement: 密码复杂度
系统 MUST 要求密码至少 8 个字符,包含大小写字母和数字。

## Requirement: (之前版本)
系统 MUST 要求密码至少 6 个字符。

**Reason**: 太弱,不符合安全最佳实践
**Migration**: 现有用户下次登录时提示升级密码

# REMOVED Requirements## Requirement: 密码必须包含特殊字符**Reason**: 太严格,影响用户体验
**Migration**: 无需迁移(未实现)

5.5 项目配置注入上下文

openspec/config.yaml

Code

context: |
  技术栈:TypeScript, React, Node.js, PostgreSQL
  API 规范:RESTful, JSON 响应
  测试:Vitest 单元测试,Playwright e2e
  代码风格:ESLint + Prettier,严格 TypeScript
rules:design:- 对复杂流程包含序列图- 识别所有外部依赖- 包含性能考虑

作用

  • context
    自动注入到所有 artifact 的<context>标签
  • rules
    只注入到匹配的 artifact(如design.md)的<rules>标签
5.6 版本控制与协作

推荐 Git 分支策略

Code

main
├── feature/add-preorder
│   └── openspec/changes/add-preorder-feature/
└── feature/add-dark-mode
    └── openspec/changes/add-dark-mode/

协作最佳实践:

  • 每个功能一个变更文件夹
    :避免多个功能混在一起
  • PR中包含 spec:proposal、specs、design 作为 PR 描述
  • 更新规格时审查
    PR:增量规格像代码一样审查
常见问题与解决方案
Q1: 什么时候用/opsx:ffvs./opsx:continue
命令
用途
使用场景
/opsx:ff
一次性生成所有规划文档
需求明确、快速开发
/opsx:continue
逐步创建 artifact
需要审查、需求不明确

示例

Code

# 快速路径(你知道要做什么)
/opsx:new add-dark-mode
/opsx:ff
/opsx:apply

# 保守路径(你想在每个步骤思考)
/opsx:new add-dark-mode
/opsx:continue  # 创建 proposal,审查
/opsx:continue  # 创建 specs,审查
/opsx:continue  # 创建 design,审查
/opsx:apply
Q2: 如何回滚变更?

归档前

Code

# 只需删除变更文件夹rm -rf openspec/changes/your-change/

归档后

Code

# 从归档恢复cp -r openspec/changes/archive/YYYY-MM-DD-your-change/ openspec/changes/your-change/

# 然后手动恢复主 specs(从归档的 delta specs 中提取)

更好的方法:使用 Git!

Code

# 归档会创建提交
git revert <commit-hash>
Q3: AI 生成的代码质量差怎么办?

调整模板

  • 编辑模板文件:

Code

# 编辑设计模板
vi openspec/schemas/spec-driven/templates/design.md
  • 添加更具体的指令:

Code

## Design Guidelines- 使用 TypeScript 严格模式
- 遵循 SOLID 原则
- 错误处理必须明确
- 添加 JSDoc 注释
  • 在项目配置中添加规则:

Code

rules:design:- 包含序列图表示复杂流程- 确定所有外部依赖- 包含性能考虑
  • 重新生成:

Code

rm openspec/changes/your-change/design.md
/opsx:continue
Q4: 如何追踪进度?

使用tasks.md的复选框

Code

# Tasks## Phase 1: 数据库- [x] 设计数据库 schema
- [x] 创建迁移脚本
- [ ] 迁移生产数据

## Phase 2: 后端- [ ] 实现 API 端点
- [ ] 添加认证
- [ ] 编写单元测试

在实施期间检查

Code

/opsx:show your-change
Q5: 如何处理紧急修复?

快速路径

Code

# 使用简单 schema
/opsx:hotfix fix-critical-bug --schema simple

# 立即实施
/opsx:apply

# 快速归档
/opsx:archive

创建simpleschema

Code

# openspec/schemas/simple/schema.yaml
name:simple
version:1
artifacts:
    -id:fix-description
        generates:fix-description.md
        description:简要描述修复
        template:fix-description.md
        instruction:|
          描述问题、根本原因和解决方案。
        requires: []
总结
核心价值
  • 灵活性
    :随时创建、实施、更新、归档
  • 透明度:所有决策记录在 artifact 中
  • 迭代性
    :边学边改,无需一次性完美
  • 可定制性
    :自定义 schema 适应团队工作流
关键原则
  • 从小开始:先用简单功能理解流程
  • 审查规格:在实施前审查 proposal 和 specs
  • 自由迭代:随时更新任何 artifact
  • 保持上下文卫生:实施前清除上下文
附录:快速参考
OPSX 命令速查表
命令
功能
示例
/opsx:explore
探索想法
/opsx:explore
/opsx:new
开始新变更
/opsx:new add-feature
/opsx:continue
创建下一个 artifact
/opsx:continue
/opsx:ff
快速生成所有规划
/opsx:ff
/opsx:apply
实施任务
/opsx:apply
/opsx:verify
验证实现
/opsx:verify
/opsx:sync
预览规格合并
/opsx:sync
/opsx:archive
归档变更
/opsx:archive
/opsx:bulk-archive
批量归档
/opsx:bulk-archive
/opsx:onboard
新手引导
/opsx:onboard
Artifact 依赖关系

Code

proposal(无依赖)
  ↓
specs(需要 proposal)
  ↓
design(需要 specs)
  ↓
tasks(需要 design)
  ↓
implementation(需要 tasks)
文件位置
文件
位置
项目配置
openspec/config.yaml
项目 schemas
openspec/schemas/
变更
openspec/changes/<name>/
主规格
openspec/specs/
归档的变更
openspec/changes/archive/

你用过OpenSpec吗?或者还在用vibe coding硬扛?评论区聊聊。

记住:完美的实践是通过迭代实现的,不是一次性做对所有事情。
OpenCode系列精选
Opencode Day21:OpenCode+Playwright,让AI做测试
Opencode Day20:干货必看!我用这套组合拳零手写代码上线小程序(附全流程)
Opencode Day19:有了Superpowers,我的OpenCode终于不“乱写”了
Opencode Day18:MiniMax出Skills了:前端、后端、安卓、iOS,一套技能全搞定
同一套Skill,要在OpenCode、Claude Code、Codex、Cursor里各配一遍?这个工具治好了我的精神内耗
OpenCode Day16:效率翻倍!我用两个月总结的实战小技巧
OpenCode Day15:实战必看!3小时给娃做了个“早餐小铺”,再也不愁明天吃啥
OpenCode Day14:干货!让AI走流程,不瞎干,效率翻倍
Impeccable实战:OpenCode+自然语言,你只要会说话就能写出专业界面
OpenCode Day12:手把手教你开发第一个自定义插件(从0到发布)
OpenCode Day11:5个让OpenCode记住一切的Memory插件
OpenCode Day10:Skills才是真正的效率核弹,让AI学会替你干活
开发者必看!这7个OpenCode插件,让你的编码效率原地起飞(附完整配置)
Shift+Enter不能换行?OpenCode终端的坑,这一篇全填了(附快捷键大全)
独家拆解:OpenCode真正值钱的,是这3个架构设计
OpenCode vs Trae:AI编程工具终极对决,你选哪一把刷子?
OpenCode Day5:这些让同事直呼“真香”的插件,你装了几个?
OpenCode Day4:2026年如果只学一个功能的话,那就是Skills!

【声明】内容源于网络
0
0
创见AI实验室
创见AI实验室,我们不只是介绍工具,我们共同创造工作方式的未来。
内容 147
粉丝 0
创见AI实验室 创见AI实验室,我们不只是介绍工具,我们共同创造工作方式的未来。
总阅读20
粉丝0
内容147