0%

OpenSpec 工作流

OpenSpec 工作流

最近单位在推 OpenSpec 工作流,之前基于AI开展工作当然也会有对应的开发范式。

具体的手段为将技术拆分成对应的技术规范,根据技术规范拆分各个Task。顺序或并行执行各个Task。方法论是框架优先,设计优先,逐步迭代,多次确认,随时调整。

OpenSpec 工作流相较于这种天然朴素的开发范式,手段更加丰富,方法论的实践也更加具体。本质是为了更加清晰,模块化去的区描述一个项目,以达成人机共识,防止执行过程中出现偏差。

当然完事万物不可能没有缺点,为了保证人机共识更加彻底,就会有大量的文档,这些文档需要人工审阅就需要占用人工的生产力(取决于文档的多寡,其实这部分成本还不低),另外就是费Token。

本文以Vibe的一个小型的proxy-switcher为例,简单介绍一下OpenSpec 工作流。

开发背景

公司的网络环境有些复杂,大致分为了内网,内-外网,外网。为了简单理解,可以将这些网络环境当成平行同级的网络环境,这三个网络环境均不相互兼容。

内网:负责代码仓库的维护,代码的提交,合并均需要它,但没有互联网环境,Coding 是没法在内网环境下执行的。
内-外网:可能是为了方便外部用户体Issue以及Issue管理, Issue列表在这里,也有互联网,是我们主力工作的网络环境。
外网: 干净的未设置任何代理的网络环境。

说起来复杂,但其实要开发的就是一个简单的程序,通过修改Windows注册表的Proxy以及Host以实现网络环境的切换即可。

主要工具

这里介绍一下 /opsx 下的各个指令,也就对应的我们可使用的工具。

整体上看,OpenSpec 工作流把一次开发拆成了几个阶段,每个阶段对应一个 /opsx 指令,串起来就是完整的生命周期:

1
2
/opsx:explore → /opsx:propose → /opsx:apply → /opsx:update → /opsx:sync → /opsx:archive
思考探索 规划(只出文档) 实施(只写代码) 修订(只改文档) 同步(合入主规范) 归档(收尾)

注:上面的箭头只是”常规路径”,updateexplore 随时可以插进来——方法论里的”随时调整”就落在它们身上。

步骤 命令 说明
0. 探索思路 /opsx:explore 与新需求或问题对话,通过 AI 澄清思路、梳理方案(不写代码,纯思考)
1. 提出需求 /opsx:propose 描述你想要构建的功能,AI 生成 proposal、specs、design、tasks
2. 实现需求 /opsx:apply AI 按照 tasks 逐步实现代码
3. 同步规格 /opsx:sync 代码变更完成后,将 delta specs 同步回 openspec/specs/
4. 归档变更 /opsx:archive 完成后归档,specs 自动合并到主干

开发流程

这次 proxy-switcher 完整走了一遍 propose → 审阅修订 → apply → sync → archiveexploreupdate 本次没有单独触发:想法够清晰,直接进了 propose;修订也都是对话中提出、AI 直接落文档,没走 update 命令——工具是死的,流程是活的。

propose(提出变更)

  • 做了什么openspec init 初始化项目 → openspec new change 创建变更 → 依序生成 4 份规划文档 → 校验通过。
  • 产物:这 4 份就是人工要审阅的全部内容,合计约 265 行 / 2 万字:
产物 行数 字符 职责
proposal.md 35 ~3k 做什么、为什么(动机与范围)
specs/.../spec.md 91 ~6k 系统必须做什么(增量规格 = 验收标准)
design.md 104 ~7.4k 怎么做(技术决策与取舍)
tasks.md 35 ~4.2k 实施步骤(21 个 Task)
  • 意义:AI 十几分钟就生成整套规划,但 2 万字需要人工逐份审——这就是”人机共识”的成本。

审阅与修订

  • 做了什么:按 proposal → spec → design → tasks 顺序审阅(与文档依赖关系一致)。审阅中用户纠正了 3 处理解偏差:
    1. “内外网”不是”内 + 外兼容的代理”,而是与内网平级的独立模式;
    2. clear 同样改为与 in / in-out 平级的独立配置;
    3. testUrl 从 config 顶层移入各模式内部。
  • 每轮都是用户一句话,AI 同步改 4 份文档并重新校验,直到彼此一致。
  • 意义:这是最费人工的环节——审阅 2 万字 + 多轮澄清。但价值正在于此:文档间的一致性由 AI 保证,方向的正确性由人保证

apply(实施)

  • 做了什么:按 tasks.md 的 21 个 Task 逐条实施,每完成一条勾一条。实际产物(src/):
产物 行数 职责
proxy-switch.ps1 284 共享运行时:代理 / hosts / 提权 / 验证的核心逻辑
3 份 SKILL.md 各 ~12 三个模式的入口,供 Claude / Trae 加载
install.ps1 125 部署到用户全局目录
README.md 149 安装、配置说明
  • 实施中会不断暴露规范没覆盖的问题(如 UAC 提权流程、执行耗时、是否纯脚本化),通过对话”随时调整”,调整完继续实施。值得留意:本次后期实现甚至演化到封装成 exe,但没有同步回 spec/tasks——真实世界文档往往滞后于实现
  • 意义:把规范变成可运行的东西,在实践中校验规范;发现遗漏先回规范再改代码,而不是闷头硬写。

sync(同步主规格)

  • 做了什么:把变更里的 delta spec 合并进主规格 openspec/specs/proxy-switch/spec.md(93 行 / ~6k 字符)。
  • 意义:变更的增量沉淀为主规格,后续变更都以它为基准做 delta,形成知识积累。

archive(归档)

  • 做了什么:确认任务全部完成(21/21)后,把变更移入 openspec/changes/archive/proxy-skill/
  • 意义:一次开发闭环收尾,specs 已并入主干,变更只留档、退出活跃状态。

总结

工具是个好工具,但用起来还是需要一定成本的同样的也更倾向于一些复杂任务场景,如果是需求清晰的简单场景仍可以采用效率优先的原则。 笔者也正在逐步摸索和实践这一整套工作流。