From opsx
以编排模式实现 OpenSpec 变更——主 agent 把任务按范围分组、每组派 subagent 开发、自己只做状态管理与 review。当用户想用 subagent 分组方式开始/继续实现任务时使用。这是 openspec-apply-change 的并存定制版,不覆盖原 skill。
How this skill is triggered — by the user, by Claude, or both
Slash command
/opsx:openspec-apply-change-subagentThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
实现 OpenSpec 变更中的任务。
实现 OpenSpec 变更中的任务。
角色模型(本定制版的核心)
主 agent 是编排者(orchestrator),不亲自写实现代码:
openspec-cn 状态/指令、读上下文文件、把任务按范围分组、派发 subagent、review subagent 产出、报告进度、建议归档。- [x]。输入:可选指定变更名称。如果省略,检查是否可以从对话上下文中推断。如果模糊或不明确,你必须提示获取可用变更。
步骤
选择变更
如果提供了名称,使用它。否则:
openspec-cn list --json 获取可用变更,并使用 AskUserQuestion tool 让用户选择始终宣布:"正在使用变更:"以及如何覆盖(例如,/opsx:apply-subagent <other>)。
检查状态以了解 Schema
openspec-cn status --change "<name>" --json
解析 JSON 以了解:
schemaName:正在使用的工作流 Schema(例如:"spec-driven")获取应用指令
openspec-cn instructions apply --change "<name>" --json
这返回:
contextFiles:产出物 ID -> 具体文件路径数组(因 Schema 而异,可能是 proposal/specs/design/tasks 或 spec/tests/implementation/docs)处理状态:
state: "blocked"(缺少产出物):显示消息,建议使用 openspec-continue-changestate: "all_done":祝贺,建议归档阅读上下文文件
主 agent 必须亲自阅读 apply instructions 输出中 contextFiles 列出的每个文件路径——这是后续分组与 review 的依据。
文件取决于正在使用的 Schema:
按范围对待处理任务分组
分析 state 不为完成的所有任务,按范围把它们分成若干组:
若全部待处理任务本就属于同一范围且无法有意义地切分,则视为单组,直接进入下一步(仍走 subagent 派发)。
派发 subagent 实现(先并行后串行)
按拓扑顺序派发,用 Agent tool、subagent_type: "general-purpose":
每个 subagent 的 prompt 必须包含:
- [ ] 改为 - [x]Review subagent 产出
review 粒度按任务跨度判断:
先解析每个 subagent 返回的 JSON:若任一组 needsAttention: true(incomplete 或 issues 非空),不要直接判 review 通过——按步骤 8 的暂停流程把问题摊给用户。其余组再走文件级 review。
主 agent 亲自做 review:以返回 JSON 的 filesChanged 为线索阅读 subagent 改动过的文件,对照 completed 中逐字引用的任务原文与上下文文件中的规格,检查是否真正满足、有无遗漏、有无越界改动(JSON 是导航,不替代读真实 diff)。
- [x](未标的补标)。完成或暂停时,显示状态
再次运行 openspec-cn instructions apply --change "<name>" --json 核对进度,然后显示:
Subagent 返回契约
每个实现 / 修复 subagent 的最终返回必须是唯一一个 JSON 对象(包在 ```json 代码块里),无前后散文,schema 如下:
{
"group": "组名(范围)",
"schema": "回显本次 Schema 名(如 spec-driven),确认 subagent 读对了上下文",
"completed": [
{ "task": "任务文件中的原文(逐字引用)", "checkboxMarked": true }
],
"incomplete": [
{ "task": "任务原文(逐字)", "reason": "未完成原因" }
],
"filesChanged": [
{ "path": "绝对路径", "summary": "本次改动要点" }
],
"issues": [
{
"kind": "ambiguous-requirement | design-issue | error | out-of-scope | blocker",
"detail": "具体描述",
"relatedTask": "任务原文 或 null"
}
],
"needsAttention": false
}
约定:
needsAttention 为 true 当且仅当 incomplete 或 issues 非空。主 agent 见到 true 必须按步骤 8 暂停流程处理,不得直接判该组 review 通过。completed[].task 必须逐字引用任务文件原文,便于主 agent 比对复选框;checkboxMarked 由 subagent 自报是否已把 - [ ] 改成 - [x],为 false 时主 agent 补标并记一笔。issues 并停下该条任务,由主 agent 决定。分组方案输出(步骤 5 后)
## 任务分组:<change-name>(Schema:<schema-name>)
待处理任务 M 个,按范围分为 K 组:
- **组 A — <范围名>**(N 个任务):任务 1, 2, 5
- **组 B — <范围名>**(N 个任务):任务 3, 4
- **组 C — <范围名>**(N 个任务):任务 6, 7
依赖:组 A、组 B 独立 → 并行;组 C 依赖组 A → 待组 A 完成后执行。
派发与实现期间的输出
## 正在实现:<change-name>(Schema:<schema-name>)
▶ 并行派发:组 A、组 B
✓ 组 A subagent 返回:完成任务 1, 2, 5
✓ 组 B subagent 返回:完成任务 3, 4
▶ 串行派发:组 C(依赖组 A)
✓ 组 C subagent 返回:完成任务 6, 7
▶ Review(跨子项目,分项目 review)
✓ Java 端:通过
✓ React 端:通过
完成时的输出
## 实现完成
**变更:** <change-name>
**Schema:** <schema-name>
**进度:** 7/7 任务已完成 ✓
### 本次会话已完成(按组)
- 组 A:[x] 任务 1、[x] 任务 2、[x] 任务 5
- 组 B:[x] 任务 3、[x] 任务 4
- 组 C:[x] 任务 6、[x] 任务 7
### Review 结论
<分项目 / 统一 review 的结论>
所有任务已完成!准备归档此变更。
暂停时的输出(遇到问题)
## 实现暂停
**变更:** <change-name>
**Schema:** <schema-name>
**进度:** 4/7 任务已完成
### 遇到的问题
<来自某个 subagent 返回的问题 / review 未通过的问题>
**选项:**
1. <选项 1>
2. <选项 2>
3. 其他方法
您想怎么做?
护栏
needsAttention: true 一律先暂停问人,不直接判通过- [x] 由 subagent 自己标记(在返回 JSON 的 checkboxMarked 中自报);主 agent 仅在 subagent 漏标时补标流畅的工作流集成
此技能支持"变更上的操作"模型:
Creates bite-sized, testable implementation plans from specs or requirements, with file structure and task decomposition. Activates before coding multi-step tasks.
npx claudepluginhub herbertgao/claude-skills --plugin opsx