OpenSpec 1.0 迁移指南

本指南帮助你从旧版 OpenSpec 工作流平滑迁移到 OPSX。迁移过程设计为无缝衔接——你现有的工作会被保留,新系统提供更大的灵活性。

核心变化概览

OPSX 用流畅的、基于动作的方式取代了旧的阶段锁定工作流:

方面旧版OPSX
命令/openspec:proposal, /openspec:apply, /openspec:archive/opsx:new, /opsx:continue, /opsx:apply
工作流一次性创建所有产物增量创建或一次性创建——由你选择
回退笨拙的阶段门控自然流畅——随时更新任何产物
定制化固定结构基于 Schema,完全可定制
配置CLAUDE.md 标记 + project.md简洁的 openspec/config.yaml

核心理念变化: 工作不是线性的,OPSX 不再假装它是。


迁移前须知

现有工作完全安全

迁移过程以保留为原则设计:

  • openspec/changes/ 中的活跃变更 — 完全保留,可用 OPSX 命令继续
  • 已归档的变更 — 不受影响,历史记录完整保留
  • openspec/specs/ 中的主规格 — 不受影响,这是你的真实来源
  • CLAUDE.mdAGENTS.md 等文件中的内容 — 保留,只移除 OpenSpec 标记块,你写的内容都会保留

会被移除的内容

只有被替换的 OpenSpec 管理文件会被移除:

内容原因
旧版斜杠命令目录/文件被新的 skills 系统替代
openspec/AGENTS.md已废弃的工作流触发器
CLAUDE.mdAGENTS.md 等文件中的 OpenSpec 标记不再需要

各工具的旧版命令位置(示例):

  • Claude Code: .claude/commands/openspec/
  • Cursor: .cursor/commands/openspec-*.md
  • Windsurf: .windsurf/workflows/openspec-*.md
  • Cline: .clinerules/workflows/openspec-*.md
  • Roo: .roo/commands/openspec-*.md
  • GitHub Copilot: .github/prompts/openspec-*.prompt.md
  • 其他工具(Augment、Continue、Amazon Q 等)

迁移会检测你配置的工具并清理其旧版文件。这些都是 OpenSpec 原本创建的文件,你自己的内容永远不会被删除。

需要手动处理的内容

有一个文件需要手动迁移:

openspec/project.md — 此文件不会自动删除,因为可能包含你编写的项目上下文。你需要:

  1. 检查其内容
  2. 将有用的上下文移至 openspec/config.yaml(见下文指导)
  3. 准备好后删除该文件

为什么做此改变:

旧的 project.md 是被动的——AI 可能读取它,可能不读,可能忘记读过的内容。我们发现可靠性不一致。

新的 config.yaml 上下文会主动注入到每个 OpenSpec 规划请求中。这意味着你的项目约定、技术栈和规则在 AI 创建产物时始终存在。可靠性更高。

权衡:

因为上下文会注入到每个请求中,你需要保持简洁。专注于真正重要的内容:

  • 技术栈和关键约定
  • AI 需要知道的非显而易见的约束
  • 之前经常被忽略的规则

不用担心做到完美。我们仍在探索什么最有效,会随着实验改进上下文注入的工作方式。


执行迁移

openspec initopenspec update 都会检测旧版文件并引导你完成相同的清理过程。根据你的情况选择:

使用 openspec init

如果你想添加新工具或重新配置已设置的工具,运行此命令:

openspec init

init 命令会检测旧版文件并引导你完成清理:

升级到新版 OpenSpec

OpenSpec 现在使用 agent skills,这是编码 AI 的新兴标准。
这简化了你的设置,同时保持一切正常工作。

要移除的文件
无需保留用户内容:
  • .claude/commands/openspec/
  • openspec/AGENTS.md

要更新的文件
OpenSpec 标记将被移除,你的内容会保留:
  • CLAUDE.md
  • AGENTS.md

需要你注意
  • openspec/project.md
    我们不会删除此文件。它可能包含有用的项目上下文。

    新的 openspec/config.yaml 有一个 "context:" 部分用于规划上下文。
    这会包含在每个 OpenSpec 请求中,比旧的 project.md 方式更可靠。

    检查 project.md,将有用内容移至 config.yaml 的 context 部分,
    然后在准备好时删除该文件。

? 升级并清理旧版文件?(Y/n)

确认后会发生什么:

  1. 旧版斜杠命令目录被移除
  2. CLAUDE.mdAGENTS.md 等文件中的 OpenSpec 标记被剥离(你的内容保留)
  3. openspec/AGENTS.md 被删除
  4. 新的 skills 安装到 .claude/skills/
  5. 创建 openspec/config.yaml 并设置默认 schema

使用 openspec update

如果你只想迁移并将现有工具刷新到最新版本,运行此命令:

openspec update

update 命令也会检测并清理旧版产物,然后将你的 skills 刷新到最新版本。

非交互式 / CI 环境

用于脚本化迁移:

openspec init --force --tools claude

--force 标志跳过提示并自动接受清理。


将 project.md 迁移到 config.yaml

旧的 openspec/project.md 是一个自由格式的 markdown 文件,用于项目上下文。新的 openspec/config.yaml 是结构化的,关键是——会注入到每个规划请求中,所以你的约定在 AI 工作时始终存在。

迁移前 (project.md)

# 项目上下文

这是一个使用 React 和 Node.js 的 TypeScript monorepo。
我们使用 Jest 进行测试,遵循严格的 ESLint 规则。
我们的 API 是 RESTful 的,文档在 docs/api.md。

## 约定

- 所有公共 API 必须保持向后兼容
- 新功能应包含测试
- 规格使用 Given/When/Then 格式

迁移后 (config.yaml)

schema: spec-driven

context: |
  技术栈:TypeScript、React、Node.js
  测试:Jest + React Testing Library
  API:RESTful,文档在 docs/api.md
  我们为所有公共 API 保持向后兼容

rules:
  proposal:
    - 为风险变更包含回滚计划
  specs:
    - 场景使用 Given/When/Then 格式
    - 在发明新模式前参考现有模式
  design:
    - 为复杂流程包含序列图

关键区别

project.mdconfig.yaml
自由格式 markdown结构化 YAML
一大块文本分离的上下文和按产物的规则
不清楚何时使用上下文出现在所有产物中;规则只出现在匹配的产物中
无 schema 选择显式 schema: 字段设置默认工作流

保留什么,丢弃什么

迁移时要有选择性。问自己:"AI 在每个规划请求中都需要这个吗?"

适合放入 context: 的内容

  • 技术栈(语言、框架、数据库)
  • 关键架构模式(monorepo、微服务等)
  • 非显而易见的约束("我们不能使用库 X 因为...")
  • 经常被忽略的关键约定

应移至 rules: 的内容

  • 产物特定的格式("在 specs 中使用 Given/When/Then")
  • 审查标准("proposal 必须包含回滚计划")
  • 这些只出现在匹配的产物中,保持其他请求更轻量

完全省略的内容

  • AI 已经知道的通用最佳实践
  • 可以总结的冗长解释
  • 不影响当前工作的历史上下文

迁移步骤

  1. 创建 config.yaml(如果 init 尚未创建):

    schema: spec-driven
    
  2. 添加你的上下文(保持简洁——这会进入每个请求):

    context: |
      你的项目背景放在这里。
      专注于 AI 真正需要知道的内容。
    
  3. 添加按产物的规则(可选):

    rules:
      proposal:
        - 你的 proposal 特定指导
      specs:
        - 你的规格编写规则
    
  4. 删除 project.md,一旦你移动了所有有用内容。

不要想太多。 从基本要素开始,然后迭代。如果你注意到 AI 遗漏了重要内容,添加它。如果上下文感觉臃肿,精简它。这是一个活文档。

需要帮助?使用这个提示词

如果你不确定如何提炼你的 project.md,问你的 AI 助手:

我正在从 OpenSpec 的旧 project.md 迁移到新的 config.yaml 格式。

这是我当前的 project.md:
[粘贴你的 project.md 内容]

请帮我创建一个 config.yaml,包含:
1. 简洁的 `context:` 部分(这会注入到每个规划请求中,所以保持紧凑——专注于技术栈、关键约束和经常被忽略的约定)
2. 如果有产物特定的内容,为特定产物添加 `rules:`(例如,"使用 Given/When/Then" 属于 specs 规则,不是全局上下文)

省略 AI 模型已经知道的通用内容。对简洁性要无情。

AI 会帮你识别什么是必要的,什么可以精简。


新命令体系

迁移后,你有 9 个 OPSX 命令而不是 3 个:

命令用途
/opsx:explore无结构地思考想法
/opsx:new开始一个新变更
/opsx:continue创建下一个产物(一次一个)
/opsx:ff快进——一次创建所有规划产物
/opsx:apply从 tasks.md 实现任务
/opsx:verify验证实现是否匹配规格
/opsx:sync预览规格合并(可选——如需要会提示归档)
/opsx:archive完成并归档变更
/opsx:bulk-archive批量归档多个变更

从旧版命令的映射

旧版OPSX 等效
/openspec:proposal/opsx:new 然后 /opsx:ff
/openspec:apply/opsx:apply
/openspec:archive/opsx:archive

新功能

细粒度产物创建:

/opsx:continue

基于依赖关系一次创建一个产物。当你想审查每一步时使用。

探索模式:

/opsx:explore

在提交变更前与伙伴一起思考想法。


理解新架构

从阶段锁定到流畅

旧版工作流强制线性进展:

┌──────────────┐      ┌──────────────┐      ┌──────────────┐
│   规划阶段    │ ───► │   实现阶段    │ ───► │   归档阶段    │
└──────────────┘      └──────────────┘      └──────────────┘

如果你在实现阶段发现设计有问题?
太糟糕了。阶段门控不让你轻松回退。

OPSX 使用动作,而不是阶段:

         ┌────────────────────────────────────────┐
         │           动作(不是阶段)              │
         │                                        │
         │     new ◄──► continue ◄──► apply ◄──► archive │
         │      │          │           │           │   │
         │      └──────────┴───────────┴───────────┘   │
         │              任意顺序                       │
         └────────────────────────────────────────┘

依赖图

产物形成有向图。依赖是启用器,不是门控:

                        proposal
                       (根节点)
                            │
              ┌─────────────┴─────────────┐
              │                           │
              ▼                           ▼
           specs                       design
        (需要:                       (需要:
         proposal)                   proposal)
              │                           │
              └─────────────┬─────────────┘
                            │
                            ▼
                         tasks
                     (需要:
                     specs, design)

当你运行 /opsx:continue 时,它检查什么已准备好并提供下一个产物。你也可以按任意顺序创建多个已准备好的产物。

Skills vs Commands

旧系统使用工具特定的命令文件:

.claude/commands/openspec/
├── proposal.md
├── apply.md
└── archive.md

OPSX 使用新兴的 skills 标准:

.claude/skills/
├── openspec-explore/SKILL.md
├── openspec-new-change/SKILL.md
├── openspec-continue-change/SKILL.md
├── openspec-apply-change/SKILL.md
└── ...

Skills 被多个 AI 编码工具识别,并提供更丰富的元数据。


继续现有变更

你正在进行的变更可以无缝使用 OPSX 命令。

有来自旧版工作流的活跃变更?

/opsx:apply add-my-feature

OPSX 读取现有产物并从你离开的地方继续。

想为现有变更添加更多产物?

/opsx:continue add-my-feature

显示基于已存在内容可以创建什么。

需要查看状态?

openspec status --change add-my-feature

新配置系统

config.yaml 结构

# 必需:新变更的默认 schema
schema: spec-driven

# 可选:项目上下文(最大 50KB)
# 注入到所有产物指令中
context: |
  你的项目背景、技术栈、
  约定和约束。

# 可选:按产物的规则
# 只注入到匹配的产物中
rules:
  proposal:
    - 包含回滚计划
  specs:
    - 使用 Given/When/Then 格式
  design:
    - 记录回退策略
  tasks:
    - 分解为最多 2 小时的块

Schema 解析顺序

确定使用哪个 schema 时,OPSX 按顺序检查:

  1. CLI 标志--schema <name>(最高优先级)
  2. 变更元数据:变更目录中的 .openspec.yaml
  3. 项目配置openspec/config.yaml
  4. 默认值spec-driven

可用 Schema

Schema产物最适合
spec-drivenproposal → specs → design → tasks大多数项目

列出所有可用 schema:

openspec schemas

自定义 Schema

创建你自己的工作流:

openspec schema init my-workflow

或 fork 现有的:

openspec schema fork spec-driven my-workflow

故障排除

"在非交互模式下检测到旧版文件"

你在 CI 或非交互环境中运行。使用:

openspec init --force

迁移后命令不出现

重启你的 IDE。Skills 在启动时检测。

"rules 中的未知产物 ID"

检查你的 rules: 键是否匹配你的 schema 的产物 ID:

  • spec-drivenproposalspecsdesigntasks

运行此命令查看有效的产物 ID:

openspec schemas --json

配置未被应用

  1. 确保文件在 openspec/config.yaml(不是 .yml
  2. 验证 YAML 语法
  3. 配置更改立即生效——无需重启

project.md 未迁移

系统故意保留 project.md,因为它可能包含你的自定义内容。手动检查它,将有用部分移至 config.yaml,然后删除它。

想查看会被清理什么?

运行 init 并拒绝清理提示——你会看到完整的检测摘要而不做任何更改。


快速参考

迁移后的文件结构

project/
├── openspec/
│   ├── specs/                    # 不变
│   ├── changes/                  # 不变
│   │   └── archive/              # 不变
│   └── config.yaml               # 新增:项目配置
├── .claude/
│   └── skills/                   # 新增:OPSX skills
│       ├── openspec-explore/
│       ├── openspec-new-change/
│       └── ...
├── CLAUDE.md                     # OpenSpec 标记已移除,你的内容保留
└── AGENTS.md                     # OpenSpec 标记已移除,你的内容保留

已移除的内容

  • .claude/commands/openspec/ — 被 .claude/skills/ 替代
  • openspec/AGENTS.md — 已废弃
  • openspec/project.md — 迁移到 config.yaml,然后删除
  • CLAUDE.mdAGENTS.md 等文件中的 OpenSpec 标记块

命令速查表

/opsx:new          开始一个变更
/opsx:continue     创建下一个产物
/opsx:ff           创建所有规划产物
/opsx:apply        实现任务
/opsx:archive      完成并归档

获取帮助

  • Discord:discord.gg/YctCnvvshC
  • GitHub Issues:github.com/Fission-AI/…
本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:alixiixcom@163.com