OpenSpec 中文操作手册
最受喜爱的轻量级规范驱动框架——人和 AI 在写代码前先在 spec 上对齐
1. 什么是 OpenSpec
OpenSpec 是 Fission AI 开源的规范驱动开发(Spec-Driven Development)框架。它让人和 AI 在写代码前,先在 markdown 规范文件上达成共识,避免"AI 写出来不是你想要的"。
→ fluid not rigid 流动而非刚性 → iterative not waterfall 迭代而非瀑布 → easy not complex 简单而非复杂 → built for brownfield 为遗留项目设计 → scalable 个人到企业全适用
核心价值主张
- Agree before you build — 人和 AI 在 spec 上对齐后再开始编码
- Stay organized — 每个变更独立文件夹,包含 proposal/specs/design/tasks
- Work fluidly — 任何 artifact 随时可改,没有刚性阶段闸门
- Use your tools — 通过 slash command 工作于 25+ 种 AI 助手
它解决什么问题?
| 痛点 | OpenSpec 怎么解决 |
|---|---|
| 需求只在聊天历史里,过两天忘了 | 每个变更落地到 openspec/changes/ 文件夹 |
| AI 改代码改飞了,没法对齐 | 先 propose → 人 review → 再 apply |
| 项目长时间没人维护,新人无从下手 | specs/ 是项目当前行为的"权威记录" |
| 合规审计要追溯"谁在何时改了什么" | archive 完整保留每次变更的 4 件套 |
| 多人协作改同一个功能 | spec commit 进 git,所有人看到的版本一致 |
OpenSpec 适合谁?
- 2-5 人小团队:用 spec 文件代替会议纪要
- Brownfield 项目维护者:接手老代码先反向写 spec
- 合规要求高的行业(金融、医疗、政府):每个变更可审计
- 独立开发者:当项目从 PoC 变为长期维护时引入
2. 安装与初始化
2.1 前置要求
| 组件 | 版本 | 用途 |
|---|---|---|
| Node.js | ≥ 20.19.0 | 运行 OpenSpec CLI(必需) |
| npm / pnpm / yarn / bun | 任一 | 包管理器 |
| AI 编码助手 | 任一支持的 host | Claude Code / OpenCode / Codex / Cursor 等 25+ |
2.2 全局安装 CLI
npm(推荐):
npm install -g @fission-ai/openspec@latest
# 验证
openspec --version
# 输出:1.3.1(或更新版本)
其他包管理器:
# pnpm
pnpm add -g @fission-ai/openspec@latest
# yarn
yarn global add @fission-ai/openspec@latest
# bun
bun add -g @fission-ai/openspec@latest
2.3 在项目中初始化
cd your-project
openspec init
这会做几件事:
- 创建
openspec/目录(specs/、changes/、config.yaml) - 检测你的 AI host(OpenCode / Claude Code / Codex…),自动注册 slash commands
- 生成
.opencode/skills/openspec-*或对应 host 的 skill 文件 - 生成
AGENTS.md(如果还没有),告知 AI 工具如何使用 OpenSpec
/opsx:,应该能看到 propose / apply / archive / explore 4 个命令补全。
2.4 配置 config.yaml(强烈推荐)
这是 OpenSpec 最被低估的功能:把项目的"AI 宪法"写进 config.yaml,每次生成 proposal 都会自动遵守。
# openspec/config.yaml
schema: spec-driven
# 项目上下文:每次 AI 生成 artifact 都会看到这段
context: |
Tech stack: TypeScript + Next.js 14 + Prisma + PostgreSQL
Frontend: React Server Components + Tailwind CSS
We use conventional commits (feat:, fix:, chore:, ...)
Domain: B2B SaaS for IT 管理员
约定:
- 强制 default export 禁用,统一 named export
- API 路由必须返回 { data, pagination } 或 { error } 二选一
- 所有 DB 查询必须通过 Prisma,禁止 raw SQL(除非显式标注)
# 自定义规则(每个 artifact 类型可单独约束)
rules:
proposal:
- Keep proposals under 500 words
- Always include "Non-goals" section
- List affected stakeholders
design:
- Include at least one ASCII architecture diagram
- Document failure modes
tasks:
- Each task max 2 hours
- Test file path required for every code change
- Use checkboxes (- [ ]) for trackability
修改后立即生效,下一次 /opsx:propose 自动套用。
3. 核心概念
3.1 目录结构
openspec init 后你的项目会多出这个结构:
specs/— 你的系统现在是怎样的(当前事实)。按 domain 分(auth、payments...)。changes/— 你想要改成什么(进行中的提案)。完成后并入specs/。
3.2 4 件套 Artifacts
每个 change 文件夹都包含 4 个 markdown 文件,称为 4 件套:
| 文件 | 回答 | 典型长度 |
|---|---|---|
proposal.md | 为什么做?做什么?不做什么? | 200-500 字 |
specs/ | 本次新增/修改/删除哪些需求 | 1-3 个 spec.md |
design.md | 技术方案怎么做(架构、数据模型、决策依据) | 500-1500 字 |
tasks.md | 实现 checklist(- [ ] 项) | 10-50 个 task |
4 件套相互依赖:
proposal ──► specs ──► design ──► tasks ──► implement
▲ ▲ ▲ │
└───────────┴──────────┴────────────────────┘
在实现过程中可随时回头精炼
3.3 Delta Spec(最关键概念)
OpenSpec 的灵魂在 Delta Spec——它不重写整个 spec,只描述"相对于现有的 spec,本次要变什么"。
Delta 格式
# Delta for Auth
## ADDED Requirements
### Requirement: Two-Factor Authentication
The system MUST require a second factor during login.
#### Scenario: OTP required
- GIVEN a user with 2FA enabled
- WHEN the user submits valid credentials
- THEN an OTP challenge is presented
## MODIFIED Requirements
### Requirement: Session Timeout
The system SHALL expire sessions after 30 minutes of inactivity.
(Previously: 60 minutes)
#### Scenario: Idle timeout
- GIVEN an authenticated session
- WHEN 30 minutes pass without activity
- THEN the session is invalidated
## REMOVED Requirements
### Requirement: Remember Me
(Deprecated in favor of 2FA)
archive 时发生什么
- ADDED 需求被追加到主 spec(
specs/auth/spec.md) - MODIFIED 需求替换现有的版本
- REMOVED 需求从主 spec 删除
- change 文件夹移到
changes/archive/YYYY-MM-DD-<name>/
- diff 清晰:review 时一眼看到本次改动
- 多人并行不冲突:A 改 ADDED、B 改 MODIFIED 不打架
- 可回滚:archive 之前删除文件夹即可放弃
- 形成项目历史:
archive/= 设计决策史
4. 命令详解
OpenSpec 提供两种 profile(命令集):
| Profile | 命令 | 适合场景 |
|---|---|---|
| core(默认) | propose / explore / apply / sync / archive | 个人 / 小团队 / 多数项目 |
| expanded | + new / continue / ff / verify / bulk-archive / onboard | 多人协作 / 复杂变更 / 长期项目 |
# 切换 profile
openspec config profile expanded
openspec update # 重新生成 host 的 slash commands
4.1 Core Profile(默认 5 命令)
每个命令包含 4 个维度的解释:具体用法、为什么这样设计、这样用的好处、常见错误。
具体用法:
# 标准用法:传一个 kebab-case 的变更名
/opsx:propose add-dark-mode
# 也可以加描述帮助 AI 理解
/opsx:propose add-dark-mode "支持系统跟随 + 用户偏好"
# 多个相关变更建议加前缀分组
/opsx:propose payment-v2-stripe-integration
/opsx:propose payment-v2-refund-flow
# AI 自动在 openspec/changes/add-dark-mode/ 下创建:
# ✓ proposal.md — 为什么 + 改什么 + 不改什么
# ✓ specs/ui/spec.md — delta(ADDED/MODIFIED/REMOVED)
# ✓ design.md — 技术方案 + 架构图
# ✓ tasks.md — 可勾选的实现 checklist
为什么这样设计:
"先 propose 再 apply" 的流程把 AI 编码切成两个阶段——对齐阶段(写 spec)和执行阶段(写代码)。两阶段分离的好处是:spec 阶段成本极低(几分钟)但能拦下 80% 方向性错误。
kebab-case 变更名不是审美——而是因为它会被用作文件夹名、git branch 建议名、PR 标题。统一格式后跨工具可联动。
这样用的好处:
- ✅ 4 件套一次性生成:不用手写模板
- ✅ 每个 artifact 互相引用:design.md 引用 specs/,tasks.md 引用 design.md,形成闭环
- ✅ 可 commit 进 git:团队 review 不再靠群聊截图
- ✅ PR 描述不用写:直接贴 proposal.md 链接即可
常见错误:
- ❌ 直接 propose 后立即 apply——必须人工 review design.md
- ❌ 变更名写得太宽("refactor")——AI 不知道范围
- ❌ 没配
config.yaml——产出的 design 不符合项目风格
具体用法:
# 探索模式,不创建任何文件
/opsx:explore 鉴权模块当前怎么工作?
# 让 AI 反向读现有代码总结 spec(brownfield 必备)
/opsx:explore 我们的 payment 流程
# 探讨方案对比
/opsx:explore 用 BullMQ 还是 Kafka 做异步任务
# 与 propose 的最大区别:explore 不写文件,propose 写
# explore = 头脑风暴,propose = 落地
为什么这样设计:
很多想法在你脑子里只有 30% 形态——直接 propose 会生成一份"看起来对实则胡来"的 spec。explore 提供一个无文件副作用的对话空间,等想清楚再 propose。
Brownfield 项目尤其有价值:让 AI 先读代码反推 spec,避免在错误假设上做提案。
这样用的好处:
- ✅ 没文件副作用:可以放心讨论各种 wild ideas
- ✅ 反向工程现有代码:5 年老项目第一步必做
- ✅ 方案对比:A/B/C 的 trade-off 显式化
- ✅ 不污染 git history:失败的 explore 不留痕迹
常见错误:
- ❌ 想到一半说"那就 propose 吧"——应该退出 explore 后用新命令
- ❌ 用 explore 写 spec——它专门设计为只对话不落地
具体用法:
# 单 change 项目可省略名字
/opsx:apply
# 多 change 并行时显式指定
/opsx:apply add-dark-mode
# 只做特定 task(适合断点续做)
/opsx:apply add-dark-mode --tasks 1.1,1.2
# dry-run 模式(看 AI 会做什么但不真改)
/opsx:apply add-dark-mode --dry-run
为什么这样设计:
实现阶段的核心是"按 spec 执行"而不是"再创造"。/opsx:apply 强制 AI 严格按 tasks.md 逐项跑,每完成一项打勾——这意味着任何偏离 spec 的代码都是 bug,review 时一眼能看出来。
这样用的好处:
- ✅ spec 即合同:实现阶段没有"创造性发挥"
- ✅ 进度可见:tasks.md 实时勾选,不用你猜
- ✅ 可断点续做:今天没做完,明天
/opsx:apply接着做 - ✅ dry-run 模式:高风险变更前先看 AI 计划
常见错误:
- ❌ 没 review 直接 apply——AI 错的方向你来背锅
- ❌ apply 中途让 AI 加新功能——破坏 spec 合同
具体用法:
# 把代码现状反向同步到 spec
/opsx:sync
# 只同步特定 domain
/opsx:sync --domain auth
# 检查 drift 但不改文件
/opsx:sync --check
为什么这样设计:
spec 漂移是规范驱动开发的头号敌人——同事在紧急修复时跳过 OpenSpec 直接改代码,半年后 spec 和代码已经完全不一致。/opsx:sync 是消除漂移的工具:扫代码 vs spec,把不一致同步回 spec。
这样用的好处:
- ✅ 承认现实:紧急情况下跳过流程是必然的,sync 让你"事后补票"
- ✅ spec 始终是事实:而不是"理想中的事实"
- ✅ --check 模式适合 CI:检测到 drift 就告警
常见错误:
- ❌ 把 sync 当成"自动写 spec 的便利工具"——它是修复用的,不是日常用的
具体用法:
# 归档单个变更
/opsx:archive add-dark-mode
# 单 change 项目可省略名字
/opsx:archive
# 强制归档(即使 tasks.md 还没全勾)
/opsx:archive add-dark-mode --force
归档时发生的事:
- ADDED 需求被追加到
openspec/specs/<domain>/spec.md - MODIFIED 需求替换主 spec 对应内容
- REMOVED 需求从主 spec 删除
- change 文件夹移到
changes/archive/YYYY-MM-DD-<name>/
为什么这样设计:
archive 是 OpenSpec 哲学的核心环节——它把临时变更(changes/)转化为永久记忆(specs/ + archive/)。半年后回看:
specs/告诉你系统当前是什么样archive/告诉你系统怎么演化到这样的(含每次的 why)
这样用的好处:
- ✅ 项目设计史自动形成:比 git log 有意义 10 倍
- ✅ 合规审计可追溯:金融/医疗审计员问起一目了然
- ✅ 新人 onboarding 加速:读 archive/ 比读源码快
常见错误:
- ❌ 实现完不 archive——specs/ 永远不更新,等于白用 OpenSpec
- ❌ 用 --force 强归档未完成 change——archive 应表示"完工",半成品归档会污染历史
- ❌ archive 之前没合并到 main——本地 specs/ 和远端不一致
4.2 Expanded Profile(多 6 个命令)
切换 profile:
openspec config profile expanded
openspec update # 重新生成 host slash commands
具体用法:
# 创建空骨架,每个文件只有 heading
/opsx:new payment-v2
# 然后人工或多个 AI 协作填充内容
# Lead 写 proposal.md
# 工程师 A 写 specs/payment/spec.md
# 工程师 B 写 design.md
# 大家协作写 tasks.md
为什么这样设计:
大型变更(比如重构整个支付系统)一次 propose 生成的内容质量低——AI 没法一次性写好几千字的设计。/opsx:new 创建空骨架,让团队多人多次填充。
对比 /opsx:propose:propose 是"AI 写完你 review",new 是"骨架在那儿大家协作填"。
这样用的好处:
- ✅ 大变更可控:避免 AI 一次写太多但质量低
- ✅ 多人协作友好:每人负责自己擅长的章节
- ✅ 渐进推进:今天写 proposal、明天写 design
具体用法:
# 接手未完成的 change,AI 自动找下一个未完成 task
/opsx:continue payment-v2
# 单 change 项目可省略
/opsx:continue
# 接手时让 AI 总结当前进度
/opsx:continue payment-v2 --summary
为什么这样设计:
真实开发场景:今天没做完,明天 /clear 或换电脑,AI 失忆。/opsx:continue 通过读 tasks.md 的勾选状态自动恢复上下文——不用你重新解释做到哪了。
多人接力时尤其值钱:A 下班,B 上班,B 直接 /opsx:continue 接着做。
这样用的好处:
- ✅ 无缝接力:A→B→C 三人接力一个 change 也不用同步会议
- ✅ 抗断片:context 清零后能精确恢复
- ✅ tasks.md 即真理:进度记录在文件里而非 chat 里
常见错误:
- ❌ 没在 tasks.md 上勾选完成的 task——continue 不知道做到哪
具体用法:
# "快进"到指定 task,跳过前置
/opsx:ff payment-v2 sub-task-3-refunds
# 适合大变更分块场景:
# 工程师 A 做 sub-task-1
# 工程师 B 做 sub-task-2(依赖 A)
# 工程师 C 直接做 sub-task-3(与 1/2 独立)→ 用 ff
为什么这样设计:
/continue 是"接着上一个未完成 task"。/ff 是"我知道我要做哪个,直接跳过去"。两者用于不同协作模式:
/continue= 串行接力(A→B→C)/ff= 并行分工(每人自己挑一块)
这样用的好处:
- ✅ 明确所有权:每人 ff 到自己的 sub-task
- ✅ 不互相阻塞:独立 task 可同时跑
- ✅ 明确范围:只看自己负责那块的代码
具体用法:
# 合并 PR 前最后关卡
/opsx:verify payment-v2
# 严格模式(更多检查)
/opsx:verify payment-v2 --strict
# 只看 spec 一致性
/opsx:verify payment-v2 --only spec
会校验:
- 所有 tasks.md 项是否勾选完成
- 代码 vs spec 的一致性(drift 检测)
- 测试覆盖率达标
- 跨 sub-task 的 contract 一致(A 的输出 = B 的输入吗?)
为什么这样设计:
多人协作大变更最怕"大家都说做完了",但拼起来不能跑——因为 A 的接口和 B 的期望不一致。/opsx:verify 跨 sub-task 校验,把集成问题前置。
这样用的好处:
- ✅ 合并前发现集成问题:而不是合并后
- ✅ 客观判断"做完了":不再靠每个人的主观说"差不多"
- ✅ CI 友好:可在 GitHub Action 中跑
具体用法:
# sprint 末期一次性归档所有完成的 changes
/opsx:bulk-archive
# 只归档过去 7 天完成的
/opsx:bulk-archive --since 7d
# 只归档特定前缀
/opsx:bulk-archive --prefix payment-v2-
为什么这样设计:
sprint 末期可能有 5-10 个 change 同时完工。一个个 archive 太累,bulk-archive 一次搞定。也常用在追溯归档场景:之前忘了 archive,现在补一波。
这样用的好处:
- ✅ 批量操作:节省 sprint 末期收尾时间
- ✅ --prefix 分组归档:把 payment-v2-* 当成一个 release 处理
具体用法:
# 给新加入项目的 AI 或人类生成 onboarding 文档
/opsx:onboard
# 针对特定模块
/opsx:onboard --domain payment
# 输出到指定文件
/opsx:onboard --output docs/ONBOARDING.md
为什么这样设计:
新人(人或 AI)加入项目最大成本是建立心智模型。读源码慢,问同事打扰人。/opsx:onboard 让 AI 综合 specs/ + archive/ + 代码,生成"项目地图 + 关键决策史 + 当前 work-in-progress"——30 分钟读完上手。
这样用的好处:
- ✅ 新人 onboarding 加速 5 倍:30 分钟 vs 一周
- ✅ AI 长 session 重启友好:context 清零后跑一遍快速恢复
- ✅ 是 specs/ 和 archive/ 的"读取应用":spec-driven 投资的复利
5. 完整工作流
典型一次变更走完整流程:
讨论清楚
4 件套
人工检查
按 task 实现
(其他工具)
归档
详细步骤
# 步骤 1:探索(可选但强推)
/opsx:explore 给 SaaS 加 workspace 协作功能
# AI 会问:当前是怎么实现"项目"的?
# 是要做用户级权限还是只共享?
# (讨论 5-10 分钟)
# 步骤 2:生成 proposal
/opsx:propose workspace-v1
# 现在 openspec/changes/workspace-v1/ 下有了 4 件套
# 步骤 3:人工 review
# 用编辑器打开 4 个文件检查
# 在 chat 里直接说 "把 design.md 里的 Kafka 换成 BullMQ"
# AI 会修改文件
# commit 提案让团队 review
git add openspec/changes/workspace-v1
git commit -m "spec: propose workspace-v1"
git push
# 团队成员 +1 后
# 步骤 4:实现
/opsx:apply
# AI 会一项一项跑 tasks.md,每完成一项打勾
# 你在 chat 里看到进度
# 步骤 5:测试 + 推 PR
# (这一步 OpenSpec 不管,用 gstack 或手工)
npm test
git push
gh pr create
# 步骤 6:合并后归档
/opsx:archive workspace-v1
# 现在:
# - workspace-v1 文件夹移到 archive/2026-05-20-workspace-v1/
# - delta spec 内容并入 openspec/specs/workspace/spec.md
6. 实战示例
6.1 第一次使用:加暗黑模式
# 进入项目
cd my-saas-app
openspec init
# 编辑 openspec/config.yaml 加项目上下文(5 分钟)
# 让 AI 提案
> /opsx:propose add-dark-mode
# AI 输出:
✓ openspec/changes/add-dark-mode/proposal.md
✓ openspec/changes/add-dark-mode/specs/ui/spec.md
✓ openspec/changes/add-dark-mode/design.md
✓ openspec/changes/add-dark-mode/tasks.md
Ready for implementation!
# 你打开 design.md,看到 AI 选了 next-themes 库 + CSS 变量
# OK,你同意
> /opsx:apply
# AI 一项一项做:
✓ 1.1 安装 next-themes
✓ 1.2 添加 ThemeProvider
✓ 1.3 创建 ThemeToggle 组件
✓ 2.1 添加 CSS 变量
✓ 2.2 接入 localStorage
All tasks complete!
# 测试通过、推 PR、合并后
> /opsx:archive add-dark-mode
# OK,spec 已合并入 specs/ui/spec.md
6.2 Brownfield:重构遗留鉴权
# 你刚接手 5 年老项目,要重构鉴权
# 先 explore(不动文件)
> /opsx:explore 当前鉴权模块怎么工作?
# AI 读 src/auth/,输出:
- Cookie 名 'sid',HMAC 签名
- session 永不主动失效,靠 30d ttl
- src/legacy/admin.ts 直接绕过 middleware ⚠️
- 邮箱大小写敏感(可能是 bug)
# 你确认这些发现,让 AI 写当前 spec
> /opsx:propose document-current-auth
# AI 在 specs/auth/spec.md 写下当前真实行为
# 这就是反向工程的成果——你现在拥有了一份"老代码的真实规格"
# 然后做重构提案
> /opsx:propose refactor-auth-v2
# delta 清晰列出哪些是要改的(比如修复邮箱大小写 bug)
> /opsx:apply
# 测试通过,PR 合并
> /opsx:archive refactor-auth-v2
6.3 多人协作:3 人做支付重构
# Lead 切换到 expanded profile
openspec config profile expanded
openspec update
# Lead 起头
> /opsx:propose payment-v2
# 把 4 件套 commit + push 让团队 review
git add openspec/changes/payment-v2
git commit -m "spec: payment-v2 proposal"
git push
# 团队 +1 之后:
# 工程师 A 拉取,做第一块
git pull
> /opsx:new payment-v2-stripe-integration
> /opsx:apply
# 完工后 commit
git add openspec/changes/payment-v2-stripe-integration src/
git commit -m "feat: stripe integration (payment-v2)"
git push
# 工程师 B 接手第二块
git pull
> /opsx:continue payment-v2
# AI 检查 tasks.md 进度,从未完成项继续
> /opsx:apply
# 工程师 C 跳到第三块
> /opsx:ff payment-v2-refunds
# 周末 lead 验收
> /opsx:verify payment-v2
# 一致性 OK,归档
> /opsx:bulk-archive
7. 实战经验总结
1config.yaml 是金矿,每个项目都要写
把"项目宪法"写进去:技术栈、命名约定、API 风格、禁忌。每次 /opsx:propose 都自动套用。5 分钟投资,每次都受益。
2提案生成后必读 design.md,不要直接 apply
AI 经常做"看似合理实则不符"的技术选型,比如给 5 人项目引入 Kafka。流程:
/opsx:propose ...
# 人工读 design.md 和 tasks.md
# 在 chat 修正:"把 Kafka 换成 BullMQ"
# AI 更新文件
/opsx:apply
3archive 是宝藏,不要跳过
archive/ 半年后回看 = 项目设计决策史。比 git log 有意义 10 倍。审计员问起也有据可查。
4用高推理模型,开干净 context
OpenSpec 对模型推理深度敏感。官方建议:Opus 4.5 或 GPT-5.2。每次 propose 前 /clear 一下 context。弱模型生成的 spec 看似对、实则有逻辑漏洞。
5Brownfield 项目先 explore 再 propose
接手老代码的 SOP:
/opsx:explore让 AI 反向读代码总结当前行为- 人工确认这些总结是否准确
/opsx:propose document-current-X写当前 spec- 再
/opsx:propose refactor-X写重构 spec
6把 spec commit,让 git history 有意义
每次 propose 后立即 commit:git commit -m "spec: propose <change-name>"。这样 git history = 设计史 + 代码史。
7多人协作切到 expanded profile
2 人以上做同一个 change 时切到 expanded:
openspec config profile expanded
openspec update
多了 /continue 和 /ff,让接手者无需读 chat 就能精确定位进度。
8delta 的 ADDED/MODIFIED/REMOVED 不要混用
很多人写 delta 时把 ADDED 当 MODIFIED 用。区分:
- ADDED:现有 spec 没有这个 requirement
- MODIFIED:spec 有但内容要改
- REMOVED:spec 有但要废弃
9定期升级 OpenSpec
# 每月或每个 sprint 跑一次
npm install -g @fission-ai/openspec@latest
cd your-project
openspec update # 同步最新 host 模板
10OpenSpec 不替代代码 review
spec 对齐后还是要 PR review。OpenSpec 让 spec 不漂移,但不保证实现质量。spec review + code review 双保险才完整。
- 没有内置 QA / 浏览器测试
- 没有 PR 自动化(不会帮你跑测试、推 PR)
- 对"快速试 demo"反而拖累
- 需要团队都买账才有完整价值(一个人写 spec、其他人不读,等于白写)
这些短板可以通过组合 gstack(QA + 部署)和 Superpowers(实现纪律)来弥补。
8. 常见问题
Q1:openspec init 后 AI 没有识别 /opsx 命令?
检查项:
- 确认 host 被检测到:
openspec config show - OpenCode 用户:检查
.opencode/commands/下是否有 opsx-*.md - Claude Code 用户:检查
.claude/commands/ - 如果路径不对:
openspec update重新生成
Q2:propose 生成的 design.md 太空泛 / 不符合我的项目风格?
原因:config.yaml 的 context 不够详细。补充:
context: |
Tech stack: ...
Domain: ...
Conventions:
- 我们用 Tailwind CSS(不用 styled-components)
- 后端用 NestJS(不用 Express)
- 数据库强制软删除
Existing patterns:
- API 路由统一返回 { data } 或 { error }
Q3:archive 时 delta 没有正确合并到主 spec?
常见原因:
- delta 用错了关键词:必须是
# Delta for <domain>然后## ADDED Requirements - 主 spec 文件不存在:先确保
specs/<domain>/spec.md存在(可空文件) - 用
openspec validate检查格式
Q4:能否在已有 spec-kit / Kiro 项目里用 OpenSpec?
可以并存但不建议——它们的核心思路冲突:
- spec-kit:刚性阶段闸门,每步必须完成才能下一步
- OpenSpec:流动迭代,artifact 随时可改
建议二选一。
Q5:spec 写多详细才合适?
3 个原则:
- Requirement 写 MUST/SHALL/MAY 句式(RFC 2119 风格)
- Scenario 用 GIVEN-WHEN-THEN,可被自动转测试用例
- 能自动化校验的(如 API contract)写详细,纯描述性的简短即可
Q6:team 模式怎么配?
OpenSpec 不需要特殊 team 模式——把 openspec/ 文件夹 commit 进 git,所有人 pull 即可。这是它的设计优势:spec 直接走 git 流程。
Q7:和 gstack / Superpowers 冲突吗?
不冲突。三者命令空间隔离:
- OpenSpec:
/opsx:* - gstack:
/<skill-name>(如 /office-hours) - Superpowers:自动触发(system prompt 注入)
详见三剑客对比文档。
9. 参考资源
- GitHub 仓库:Fission-AI/OpenSpec
- npm 包:@fission-ai/openspec
- Discord:OpenSpec Discord(求助和讨论)
- 支持的 25+ AI 工具:supported-tools.md
- 作者 Twitter:@0xTab
- 对比 GitHub Spec Kit:spec-kit(重量级、刚性)
- 对比 AWS Kiro:Kiro(绑定 Claude + IDE)