菜单

Administrator
发布于 2026-09-22 / 0 阅读
0

OpenSpec 实战指南:从需求探索到规格归档

引言

在 AI Coding 场景中,直接从需求描述进入代码实现,容易出现范围失控、设计偏移、上下文丢失和任务状态难以追踪等问题。OpenSpec 通过规格驱动开发(Spec-Driven Development)方式,将需求探索、方案设计、任务实施和最终归档拆分为独立阶段,使开发过程具备更清晰的边界和可追踪性。

在 OpenCode 中,OpenSpec 常见核心命令包括:

/opsx-explore
/opsx-propose
/opsx-apply
/opsx-update
/opsx-sync
/opsx-archive

日常开发最常用的主流程可以概括为:

Explore
   ↓
Propose
   ↓
Review
   ↓
Apply
   ↓
Archive

UpdateSync 主要用于开发过程中的方案调整和规格同步。


一、整体工作流

OpenSpec 的核心思路并不是增加更多流程,而是将“需求、设计、实现”拆开处理。

需求尚未明确
      ↓
Explore
      ↓
需求和方案逐步收敛
      ↓
Propose
      ↓
生成正式规格与任务
      ↓
Review
      ↓
确认范围、设计和任务
      ↓
Apply
      ↓
实现代码并更新任务进度
      ↓
Archive
      ↓
正式规格进入 openspec/specs/

这种方式适合中大型功能、长期维护项目、多人协作项目,以及需要 Agent 持续执行复杂开发任务的场景。


二、/opsx-explore:需求探索

Explore 用于需求尚未完全明确的阶段。

主要职责包括:

  • 调查现有代码结构

  • 分析需求目标

  • 识别约束条件

  • 比较技术方案

  • 梳理边界场景

  • 发现潜在风险

  • 补充缺失信息

    典型场景:

新增用户认证模块

认证方式、会话机制、安全策略、权限边界等内容尚未确定时,可以先执行:

/opsx-explore

Explore 阶段重点解决的问题通常包括:

认证方式
├── Session
├── JWT
└── OAuth

会话存储
├── PostgreSQL
├── Redis
└── 其他存储

安全策略
├── 密码规则
├── 登录失败限制
├── Session 过期
└── 多设备登录

Explore 的主要价值在于降低错误方案直接进入实现阶段的概率。

适用场景

需求边界不明确
技术方案存在多个选择
涉及重要架构决策
现有代码结构尚未调查
需要先分析潜在风险

对于修改文案、增加简单字段、修复明确错误等小型任务,通常不需要完整 Explore 流程。


三、/opsx-propose:生成正式变更方案

Propose 用于将已经相对明确的需求转化为正式 OpenSpec Change。

示例:

/opsx-propose add-authentication

生成结构通常类似:

openspec/
└── changes/
    └── add-authentication/
        ├── proposal.md
        ├── specs/
        ├── design.md
        └── tasks.md

proposal.md

用于记录变更背景、目标和范围。

重点内容包括:

为什么需要变更
需要解决什么问题
变更范围包含哪些内容
变更范围不包含哪些内容

specs/

用于记录行为级需求和验收场景。

示例:

### Requirement: Account Lockout

系统 SHALL 在连续五次认证失败后锁定账号。

#### Scenario: Fifth failed login

- GIVEN 已发生四次连续认证失败
- WHEN 第五次认证失败
- THEN 账号进入锁定状态
- AND 十分钟内拒绝新的认证请求

design.md

用于记录技术方案,例如:

模块划分
数据结构
接口设计
依赖关系
技术选型
兼容策略
风险与权衡

tasks.md

用于记录可执行任务和实施进度:

- [ ] 创建数据库结构
- [ ] 实现认证服务
- [ ] 实现登录接口
- [ ] 实现 Session 管理
- [ ] 增加集成测试

四、Review:正式实现前的审查

Propose 完成后,不建议立即进入 Apply。

正式实现前应重点检查以下内容:

proposal.md
├── 目标是否正确
├── 范围是否合理
└── 是否包含不必要功能

specs/
├── 行为是否明确
├── 边界场景是否完整
└── 验收条件是否可测试

design.md
├── 架构是否合理
├── 技术选型是否必要
└── 是否存在过度设计

tasks.md
├── 任务粒度是否合理
├── 是否存在遗漏
└── 是否包含测试与验证

规格驱动开发的重要价值之一,就是将需求错误和设计错误尽可能暴露在代码实现之前。


五、/opsx-apply:开始实施

Apply 用于按照已经确认的规格和任务真正修改代码。

示例:

/opsx-apply add-authentication

执行过程可以概括为:

读取 proposal
      ↓
读取 specs
      ↓
读取 design
      ↓
读取 tasks
      ↓
逐项实现
      ↓
执行验证
      ↓
更新 tasks 状态

任务进度通常直接记录在 tasks.md 中:

- [x] 创建数据库结构
- [x] 实现认证服务
- [x] 实现登录接口
- [ ] 实现 Session 管理
- [ ] 增加集成测试

这种方式使任务进度不依赖单次聊天上下文。


六、任务中断后的恢复

长时间任务可能因为上下文耗尽、终端关闭、网络异常、API 失败或主动暂停而中断。

恢复时通常无需重新执行 Explore 或 Propose。

重新进入项目后执行:

/opsx-apply <change-name>

例如:

/opsx-apply add-authentication

恢复执行前,建议先检查:

tasks.md
git diff
当前代码状态
测试结果

原因在于任务可能已经完成部分代码,但对应 checkbox 尚未更新。

推荐恢复流程:

读取未完成任务
      ↓
检查已有实现
      ↓
确认当前完成度
      ↓
补齐剩余部分
      ↓
运行测试或验证
      ↓
更新任务状态

七、/opsx-update:修改已有方案

Update 用于修改已经存在的规划文件。

典型场景:

原方案:
JWT Authentication

调整后:
Server-side Session

此时可以执行:

/opsx-update add-authentication

Update 会围绕已有的:

proposal.md
specs/
design.md
tasks.md

进行修改,并处理多个规划文件之间的关联影响。

例如:

design.md
JWT → Session

可能同时影响:

specs/
tasks.md
proposal.md

Update 的重点是“修改已经明确的方案”。

Update 与 Explore 的区别

Explore
= 修改方向尚未确定
= 重点在调查、比较、分析和澄清

Update
= 修改方向已经明确
= 重点在修订现有规划并保持一致

可以使用以下判断原则:

尚未确定应该如何修改
→ Explore

已经明确需要修改什么
→ Update

重大方向变化适合先 Explore,再 Update。


八、/opsx-sync:提前同步正式规格

正式规格通常位于:

openspec/specs/

正在进行的 Change 可能包含增量规格:

openspec/changes/add-authentication/specs/

执行:

/opsx-sync add-authentication

可以将当前 Change 的增量规格同步到正式规格,但不会归档当前 Change。

流程如下:

Change Delta Specs
        ↓
       Sync
        ↓
openspec/specs/
        ↓
Change 继续保持 Active

Sync 常用于以下场景:

Change 开发周期较长
其他并行 Change 需要依赖当前规格
需要提前查看合并后的正式规格

普通开发流程通常不需要频繁手动执行 Sync。


九、/opsx-archive:完成归档

功能实现并完成验证后,可以执行:

/opsx-archive add-authentication

Archive 主要完成两项工作:

增量规格
   ↓
合并到正式 specs

Active Change
   ↓
移动到 archive

归档后的结构可能类似:

openspec/
├── specs/
│   └── authentication/
│       └── spec.md
│
└── changes/
    └── archive/
        └── add-authentication/

openspec/specs/ 应逐渐成为系统当前能力的正式描述,而不是一次性生成的未来蓝图。


十、日常推荐流程

大多数功能开发只需要记住以下主线:

Explore
   ↓
Propose
   ↓
Review
   ↓
Apply
   ↓
Archive

对应命令:

/opsx-explore
/opsx-propose
/opsx-apply
/opsx-archive

当方案需要调整时,可以插入 Update:

Explore
   ↓
Propose
   ↓
Review
   ↓
Update
   ↓
Apply
   ↓
Archive

当正式规格需要提前同步时,可以使用 Sync。


十一、全新项目的启动方式

全新项目不适合一次创建覆盖整个系统的巨大 Change。

推荐方式:

产品方向探索
      ↓
确定 MVP
      ↓
拆分多个 Change
      ↓
逐个实施和归档

例如 SaaS 项目可以拆分为:

01 bootstrap-project-foundation
02 add-authentication
03 add-organizations
04 add-project-management
05 add-task-management
06 add-comments
07 add-notifications

每个 Change 独立执行:

Explore
→ Propose
→ Review
→ Apply
→ Archive

第一个 Change:Foundation

第一个 Change 通常只处理基础设施:

项目目录结构
TypeScript 配置
数据库连接
ORM
Migration
Logging
Error Handling
Lint
Formatting
Test Infrastructure
CI

业务功能建议拆分到后续 Change。

不推荐:

create-entire-saas-platform

更推荐:

bootstrap-foundation
add-authentication
add-organizations
add-projects
add-task-management

一个 Change 最好对应一个能够独立描述、实现、测试和验收的能力增量。


十二、OpenSpec 与 OMO-Slim 的协作关系

OpenSpec 与 OMO-Slim 解决的是不同层级的问题。

推荐职责划分:

OpenSpec
负责 WHAT
├── 需求
├── Spec
├── Design
├── Tasks
└── 验收边界

OMO-Slim
负责 HOW
├── Agent 调度
├── 代码调查
├── 并行任务
├── 具体实现
└── Review

组合后的执行结构:

OpenSpec Change
      ↓
   tasks.md
      ↓
OMO Orchestrator
      │
      ├── Explorer
      ├── Librarian
      ├── Oracle
      ├── Fixer
      └── Designer
      ↓
实现与验证
      ↓
OpenSpec Archive

执行 /opsx-apply 后,OMO-Slim Orchestrator 仍可继续运行。

更合理的关系是:

OpenSpec
定义顶层任务与边界
        ↓
OMO Orchestrator
根据任务选择执行 Agent
        ↓
专业 Agent 完成实现

十三、Deepwork 的使用位置

OMO-Slim 的 Deepwork 更适合以下任务:

大型重构
跨大量文件的功能开发
多阶段实施
高风险架构修改
长期复杂任务

在 OpenSpec 场景中,推荐关系如下:

OpenSpec
定义需求、规格和顶层 Tasks
        ↓
Apply
        ↓
OMO Deepwork
拆解复杂实施过程
        ↓
Subagents
        ↓
验证

不建议让 Deepwork 重新生成一套与 OpenSpec Tasks 冲突的顶层计划。

合理原则:

OpenSpec 决定做什么
OMO-Slim 决定如何完成
Deepwork 管理复杂实施过程

十四、模型资源分配建议

不同阶段对模型能力的要求不同。

阶段 模型能力建议 主要原因
Explore 需求分析、架构判断、方案比较
Propose 规格与设计质量直接影响后续实现
Review 需要发现遗漏、冲突与风险
Apply 中高 已有 Spec、Design、Tasks 作为约束
Explorer Agent 中低或快速模型 主要负责检索与定位
Librarian Agent 中低或快速模型 主要负责文档检索
Oracle Agent 复杂架构分析与审查
Fixer Agent 中高 主要负责具体编码实现

高能力模型更适合优先投入需求、设计与审查阶段。

错误需求进入实现阶段后,即使代码质量较高,也可能产生较大的返工成本。


十五、常见工作流示例

场景一:新增普通功能

/opsx-explore
      ↓
需求澄清
      ↓
/opsx-propose
      ↓
Review
      ↓
/opsx-apply
      ↓
测试
      ↓
/opsx-archive

场景二:方案已经明确

/opsx-propose
      ↓
Review
      ↓
/opsx-apply
      ↓
/opsx-archive

Explore 并非所有任务的强制步骤。

场景三:开发过程中发现设计需要修改

Apply
  ↓
暂停实现
  ↓
/opsx-update
  ↓
修订 Spec / Design / Tasks
  ↓
Review
  ↓
/opsx-apply

场景四:修改方向尚未确定

Apply
  ↓
发现原方案存在问题
  ↓
/opsx-explore
  ↓
比较新方案
  ↓
确定方向
  ↓
/opsx-update
  ↓
/opsx-apply

场景五:任务执行过程中断

任务中断
   ↓
重新进入项目
   ↓
读取 tasks.md
   ↓
检查 git diff
   ↓
/opsx-apply <change>
   ↓
继续未完成任务

十六、核心命令速查表

命令 作用 是否改业务代码 常见使用阶段
/opsx-explore 探索需求、调查代码、比较方案 需求尚不明确
/opsx-propose 创建 Change 并生成规划产物 方案基本明确
/opsx-apply 按 Tasks 实现代码 实施阶段
/opsx-update 修订已有规划产物 方案发生调整
/opsx-sync 将增量规格同步到正式 Specs 提前同步规格
/opsx-archive 同步规格并归档 Change 开发完成

最常见主线:

Explore → Propose → Review → Apply → Archive

十七、实践原则

1. 避免一次创建过大的 Change

一个 Change 最好对应一个独立、可测试、可验收的能力增量。

2. Apply 前审查 Design 与 Tasks

重点检查:

边界
依赖
数据模型
兼容性
错误处理
安全
测试
迁移方案

3. 中断恢复时先检查实际代码状态

tasks.md 是重要进度来源,但 checkbox 更新可能晚于代码实际修改。

恢复执行前应先确认:

Git Diff
已有实现
测试状态
未完成任务

4. 规格错误时暂停实现

发现需求或设计错误后,应先修正规格,再继续编码。

5. 正式 Specs 记录已实现事实

未来规划和尚未完成的功能更适合保留在 Active Change 中。


结语

OpenSpec 的核心价值并不在于增加命令数量,而在于建立清晰的规格驱动闭环:

需求探索
   ↓
方案固化
   ↓
人工审查
   ↓
任务实施
   ↓
验证
   ↓
归档

对应 OpenSpec:

Explore
   ↓
Propose
   ↓
Review
   ↓
Apply
   ↓
Archive

配合 OMO-Slim 后,可以形成更加清晰的分层结构:

OpenSpec
= 需求、规格、设计、任务边界

OMO-Slim
= 多 Agent 调度与实施

Deepwork
= 大型复杂任务的阶段化执行

这种模式特别适合中大型项目、长期维护项目,以及需要多个 Agent 协同完成复杂开发任务的工程场景。


参考资料