← 返回主页 v1.3.1 MIT License @fission-ai/openspec

OpenSpec 中文操作手册

最受喜爱的轻量级规范驱动框架——人和 AI 在写代码前先在 spec 上对齐

1. 什么是 OpenSpec

OpenSpec 是 Fission AI 开源的规范驱动开发(Spec-Driven Development)框架。它让人和 AI 在写代码前,先在 markdown 规范文件上达成共识,避免"AI 写出来不是你想要的"。

OpenSpec 的哲学(来自官方 README)
→ 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 编码助手任一支持的 hostClaude 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

这会做几件事:

  1. 创建 openspec/ 目录(specs/、changes/、config.yaml)
  2. 检测你的 AI host(OpenCode / Claude Code / Codex…),自动注册 slash commands
  3. 生成 .opencode/skills/openspec-* 或对应 host 的 skill 文件
  4. 生成 AGENTS.md(如果还没有),告知 AI 工具如何使用 OpenSpec
✅ 验证安装 在 OpenCode 中输入 /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 后你的项目会多出这个结构:

openspec/ ├── specs/ # ⭐ 权威源(描述系统当前行为) │ ├── auth/ │ │ └── spec.md │ ├── payments/ │ │ └── spec.md │ └── workspace/ │ └── spec.md │ ├── changes/ # ⭐ 待处理的变更(每个变更一个文件夹) │ ├── add-dark-mode/ # 进行中 │ │ ├── proposal.md # 为什么改、改什么 │ │ ├── design.md # 怎么改(技术方案) │ │ ├── tasks.md # 实现 checklist │ │ └── specs/ # delta(本次会改 specs/ 的哪部分) │ │ └── ui/ │ │ └── spec.md │ │ │ └── archive/ # 已归档的变更(永久保留) │ └── 2026-05-20-add-2fa/ │ ├── proposal.md │ ├── design.md │ ├── tasks.md │ └── specs/ │ └── config.yaml # 项目配置 + AI 宪法
两个关键目录
  • 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 时发生什么

  1. ADDED 需求被追加到主 spec(specs/auth/spec.md
  2. MODIFIED 需求替换现有的版本
  3. REMOVED 需求从主 spec 删除
  4. change 文件夹移到 changes/archive/YYYY-MM-DD-<name>/
为什么用 Delta 而非整体重写
  • 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 个维度的解释:具体用法为什么这样设计这样用的好处常见错误

/opsx:propose <change-name>

具体用法

# 标准用法:传一个 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 [topic]

具体用法

# 探索模式,不创建任何文件
/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——它专门设计为只对话不落地
/opsx:apply [change-name]

具体用法

# 单 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 合同
/opsx:sync

具体用法

# 把代码现状反向同步到 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 [change-name]

具体用法

# 归档单个变更
/opsx:archive add-dark-mode

# 单 change 项目可省略名字
/opsx:archive

# 强制归档(即使 tasks.md 还没全勾)
/opsx:archive add-dark-mode --force

归档时发生的事:

  1. ADDED 需求被追加到 openspec/specs/<domain>/spec.md
  2. MODIFIED 需求替换主 spec 对应内容
  3. REMOVED 需求从主 spec 删除
  4. 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
/opsx:new <name>

具体用法

# 创建空骨架,每个文件只有 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
/opsx:continue [change-name]

具体用法

# 接手未完成的 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 不知道做到哪
/opsx:ff <sub-task>

具体用法

# "快进"到指定 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 可同时跑
  • 明确范围:只看自己负责那块的代码
/opsx:verify [change-name]

具体用法

# 合并 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 中跑
/opsx:bulk-archive

具体用法

# 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 处理
/opsx:onboard

具体用法

# 给新加入项目的 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. 完整工作流

典型一次变更走完整流程:

1explore
讨论清楚
2propose
4 件套
3review
人工检查
4apply
按 task 实现
5测试 + PR
(其他工具)
6archive
归档

详细步骤

# 步骤 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:

  1. /opsx:explore 让 AI 反向读代码总结当前行为
  2. 人工确认这些总结是否准确
  3. /opsx:propose document-current-X 写当前 spec
  4. /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 双保险才完整

OpenSpec 的局限
  • 没有内置 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 个原则:

  1. Requirement 写 MUST/SHALL/MAY 句式(RFC 2119 风格)
  2. Scenario 用 GIVEN-WHEN-THEN,可被自动转测试用例
  3. 能自动化校验的(如 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. 参考资源

配套阅读