Community编程与开发github.com

特殊行动管道(负责人-工作器)

运行负责人-工作器工作流,用于代码审计和委托重构。负责人(审查者/编排者)只读扫描代码,编写差距分析,起草包含完成定义的许可规范,将工作器子代理派遣到隔离的 Git 工作树中执行代码,对结果进行把关(范围 + 完成定义),并审查 PR 差异。支持多个任务的并行执行或按依赖顺序分阶段执行。

特殊行动管道(负责人-工作器) 是什么?

特殊行动管道(Spec Ops Pipeline)是一个高级 AI 代理技能,实现负责人-工作器(Lead-Worker)架构,用于复杂的代码审计和自动化重构。该技能允许一个“负责人”代理(通常是 Claude Code、Gemini 或 Codex)只读地扫描现有代码库,生成差距分析报告,然后编写详细的规范(包括完成定义和许可文件列表),并将具体实现任务委托给多个“工作器”子代理。工作器在隔离的 Git 工作树中独立工作,确保它们不会干扰主代码库或其他工作器。负责人随后负责验证工作器的输出(确保不超出范围且满足完成定义),审查生成的代码差异,并管理 PR 的创建和合并。该技能支持两种并行模式:当任务独立时进行全并行执行,当任务存在依赖关系时则按阶段进行依赖排序执行(阶段内并行,阶段间集成)。此技能非常适合需要对整个代码库进行审计并根据发现问题进行修复的大量操作,将复杂的重构工作委托给多个子代理,或运行规范驱动或负责人-工作器模式的实施工作。

兼容平台✓Claude Code✓Codex CLI~Cursor✓Antigravity✓Gemini CLI
npx skills add https://github.com/cosmo-chang-1701/spec-ops-pipeline/tree/HEAD/skills/spec-ops-pipeline

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

特殊行动管道(负责人-工作器) 是做什么的?

SKILL_DIR = 包含此文件的目录。

角色边界(不可协商)

角色可以禁止
负责人(您)读取/搜索代码,运行测试/linter/构建,编写规范、审查和运行状态(在运行目录中),通过 worktree.sh 管理工作树;在用户明确同意后,运行 migrate_to_bare.sh --apply;一旦检查点获得批准,在 sop/* 分支上提交已批准的工作(分阶段:在阶段之间也进行提交)并运行 pr.sh open / pr.sh merge(根据 auto_merge_risk 进行合并);根据 auto_cleanup(或经用户同意)在 PR 合并后进行清理编辑、创建、删除或移动任何应用程序文件 — 无论是在主检出目录 还是 在工作器工作树中(唯一例外:migrate_to_bare.sh --apply 和 worktree.sh sync 的快进);手动解决合并冲突;合并未被批准的的任务,使用 --admin,或绕过分支保护
工作器(子代理)编辑其工作树中的许可文件,直到通过完成定义触碰非许可文件,提交/推送,在其工作树外工作

想“直接修复”?请先编写规范。

模型分配

预检(Preflight)runtime 按角色提供模型(lead = 阶段1,lead_phase2,worker,worker_light,scout);审查者在 lead 模型上运行。角色、默认值、覆盖、层级:参考 models.md。如果您当前不是当前阶段的负责人模型,请告知用户如何切换(在 Claude Code 中使用 /model,/effort);不要静默继续 — 除非是 single 运行,它保留阶段1的负责人模型。

会话与上下文

  • 阶段 1:在阶段1的负责人模型上执行步骤 0-2。
  • 阶段 2:步骤 3-6。split:在 新会话 中从恢复开始,使用阶段2的负责人模型,仅读取计划、状态和当前阶段的规范(自包含)。single:在同一个会话中继续。

session_split(环境变量 SOP_SESSION_SPLIT):auto(默认)对于任何高风险任务、三个或更多任务或 staged 模式使用 split,否则使用 single;always → split;never → single。

检查点会显示此设置;用户可以覆盖。

运行状态保存在 运行目录 中(run.run_dir,<git common dir>/sop-run/):位于每个工作树之外,由所有工作树共享,跨会话保留。切勿使用会话暂存区。

命令输出 — 通过 bash SKILL_DIR/scripts/run_logged.sh <run dir>/logs/<slug>-<step>-<n>.log '<command>' 运行每个 lint/测试/构建/完成定义命令(打印exit=<rc> lines=<n> log=<path> + 失败时的最后40行)。仅在尾部输出无法解释失败原因时阅读更多日志。切勿将完整测试输出放入聊天中。

工作流

0. 预检

bash SKILL_DIR/scripts/preflight.sh --agent <claude|gemini|codex> --fetch(您自己的运行时;--fetch 先更新远程的 default_base)打印一行 JSON:runtime(注意 worker,session_split),config(注意 source_worktree,default_base,provision,max_parallel,auto_merge_risk,merge_method,auto_cleanup;布局),leftovers,run,pr,baseline,base_check,docker_pool。在裸布局中,在 source_worktree 内运行负责人的 git/测试命令。根据以下情况进行操作:

  1. run.has_state: true(运行进行中):询问用户是否要恢复它、清理它(如果其所有任务都已创建等待用户处理的 PR),或者存档它(worktree.sh rundir --archive)并重新开始。
  2. leftovers(更早运行的任务):提及它们。
  3. config.offer_bare_migration: true:运行 bash SKILL_DIR/scripts/migrate_to_bare.sh(干运行),询问用户是否要转换为裸仓库工作树布局,格式参考 bare-layout.md。仅在明确同意后才执行:migrate_to_bare.sh --apply,重新运行 preflight.sh,从新的 source_worktree 重新读取代理文档。被阻止或拒绝 → 使用标准布局。
  4. pr.ok: false:该运行仅在本地提交;检查点会说明这一点。注意 pr.into。合并规则:参考 execution-plan.md。
  5. base_check.match: false、fetch_error 或 error:首先与用户商定基础。
  6. docker_pool.error:告知用户容量未知;否则 docker: false → 跳过;否则 free < config.max_parallel:发出警告(步骤3会重新检查)。
  7. baseline = git status --porcelain=v1 && git diff HEAD | sha256sum 的输出,已在 source_worktree 中运行。为 state.json 保留它。

1. 审计(只读)

  • 与用户确定范围(路径;安全/性能/债务/规范缺口)。
  • 进行静态扫描;对于大范围,首先使用并行只读侦察兵进行初步扫描(参考 scout.md)并验证他们的线索。通过 run_logged.sh(记录到 audit-<n>.log)运行项目现有的 lint/测试/类型检查命令以获得真实情况;不要安装工具或更改配置。
  • 生成差距报告:带编号的发现,包含 文件:行号、严重性、证据和建议修复。将它们分组为工作器大小的任务,并带有小的不重叠的许可列表。
  • 对于多个任务,根据 execution-plan.md 起草执行计划:无依赖关系 → independent(全并行);相关 → staged(依赖排序的阶段,阶段内并行,每个阶段构建在前一个阶段的集成结果之上)。

2. 规范(检查点)

  1. 为每个任务填写 worker-spec-template.md 并选择其工作器层级(models.md)。从代理文档(AGENTS.md、CLAUDE.md,以及许可列表触及的目录)填写仓库规则:测试/lint 命令、标志、语言规则;根据您的记忆和任何 worker_notes 添加仓库陷阱。工作器无法看到您的上下文。按照这些规则编写完成定义命令。
  2. 保存到运行目录,切勿保存到工作树:gap-report.md、plan.md、spec-<slug>.md、<slug>.wl。
  3. 每个阶段的重叠检查:bash SKILL_DIR/scripts/check_scope.sh --overlap <source_worktree> <slug>.wl...;OVERLAP → 重新拆分或重新分阶段;手动检查每个 POSSIBLE 的重叠。
  4. 完成定义干运行:通过 run_logged.sh(记录到 <slug>-dry-<n>.log)在 source_worktree 中运行 independent / 阶段1任务的每个完成定义命令,在规范中记下其类别,修复 BROKEN 的(详情);阶段2及以后在步骤3中进行。
  5. 计划审查者:对于2个及以上的任务、staged 模式、高风险任务或按需运行:一个只读审查者(如果任务是高风险则使用 lead 模型,否则使用 lead_phase2);根据 plan-critic.md 对每个发现做出决定。进行一轮。
  6. 显示检查点报告并等待批准,然后才能进入步骤3,格式参考 execution-plan.md §3。批准必须明确覆盖:在 staged 模式下的阶段间本地提交和合并;始终要覆盖自动提交、推送、PR 以及 — 根据合并列 — 批准后的合并;使用 auto_cleanup 时每次合并后的清理;以及当 Docker 池行显示 prune: ask 时,worktree.sh pool --prune。措辞参考 §3。
  7. 阶段边界:批准后,将 <run dir>/state.json(§7)写入 phase: 2 和已商定的 session,然后:
    • split,告知用户:

      计划已批准并保存到 <run dir>。运行 /clear,切换到阶段2的负责人模型(/model <lead_phase2.model>,/effort <lead_phase2.effort>),然后使用 resume 调用此技能。

      (Codex / Antigravity:在 lead_phase2 上启动一个新会话。)

    • single:告知用户计划已保存到 <run dir> 并且运行在此处继续;转到步骤3而不切换模型(resume 仍然有效)。

恢复(阶段2)

在 resume 时:参考 entrypoints.md。

清理(用户合并后)

在 cleanup 时:参考 entrypoints.md。

步骤3-5 每个阶段运行一次(independent = 单个阶段),按计划顺序进行。保持 state.json 为最新:在派遣、每次审查轮次、批准或推迟时以及阶段集成时更新任务的状态。

3. 工作树 + 派遣

  1. 在创建阶段的工作树之前:bash SKILL_DIR/scripts/worktree.sh pool。docker: false → 跳过;error → 告知用户,先询问。否则,如果 free < 阶段的任务数,仅在批准覆盖时才运行 worktree.sh pool --prune(它会删除所有项目未使用的 Compose 网络;它们会被重新创建),否则询问用户。
  2. 对于每个任务:bash SKILL_DIR/scripts/worktree.sh create <slug> [--base <ref>](阶段1:省略 --base;阶段2+:--base sop-stage/<n-1>;worktree.sh path <slug> 预览输出)。检查输出中的 provisioned;如果预期的条目缺失则停止。阶段2+:在派遣之前,通过 run_logged.sh 在每个新工作树中干运行该任务的完成定义(仅修复路径/标志;否则需询问)。
  3. 将工作树路径和基础插入每个规范,然后根据 dispatch.md 并行派遣该阶段的所有工作器,每个工作器使用其 worker_tier 对应的模型(worker / worker_light;上限为 max_parallel)。

4. 把关(每个任务)

  1. bash SKILL_DIR/scripts/check_scope.sh <worktree> <whitelist-file> 必须退出码为0;如有违规,工作器需回退(计为一轮审查)。
  2. 亲自在工作树中通过 run_logged.sh(记录到 <slug>-gate-r<round>-<n>.log)重新运行每个完成定义命令;所有命令必须退出码为0。

5. 审查(每个任务)+ 阶段屏障

遵循 review-checklist.md:差异在 lead 模型上进行审查(split:只读审查者子代理,您验证其发现;single:您直接审查),对照记录的基础。发出 APPROVE 或 REQUEST_CHANGES,带有编号的 文件:行号 发现;与工作器最多循环 3 轮,然后升级给用户。任务独立循环。一个 light 任务如果在第1轮失败,则使用 worker 模型重新派遣(models.md)。

  • independent:批准后,提交、推送、使用 pr.sh 打开 PR,并在自动合并规则允许时合并,无需询问(§4a)。
  • staged:当阶段中的每个任务都被批准后,在本地提交每个任务,运行 worktree.sh integrate <n> --base <stage base> sop/<slug>...,并在进入下一个阶段之前通过集成把关(所有该阶段的完成定义在阶段工作树中执行通过);冲突、集成失败和升级:参考 execution-plan.md。如果还有更多阶段,将 state.json 中的 current_stage 设置为下一个阶段,并在同一会话中继续。仅在上下文变得很大时(运行了两个阶段,或很多审查轮次)才提供新会话(/clear,然后 resume);在此处进行操作是安全的。

6. 收尾

  1. 重新运行步骤0的基线命令;必须匹配,否则准确报告主检出目录中更改了什么 — 不要自己“修复”。
  2. PR:independent 模式的 PR 已经存在(§5);列出每个 PR 的状态为 merged、open(附原因)或仅本地存在。staged:使用 pr.sh 从最后一个 sop-stage/<n> 打开单个 PR(根据 auto_merge_risk 进行合并,§6)。
  3. 清理已合并 PR 的工作树和分支,worktree.sh sync,并且 — 一旦所有任务都被清理 — worktree.sh rundir --archive。仅在批准中有 auto_cleanup 时才不询问,否则先询问。切勿使用 --force。
  4. 最终摘要:已处理的发现、已推迟的(以及被阻止的依赖项)、分支/PR 及其状态、清理了什么以及剩余什么。如果 PR 正在等待用户处理,则最后说明:合并它们后,使用 cleanup 调用此技能。

脚本与布局

用法、退出码、工作树路径、配置、配置覆盖:参考 scripts-and-layout.md。

相关技能