mcpField
D
dispatch-spawn

dispatch-spawn

github.com/davidleeAgent 工作流255 次安装1 天前更新
代码仓库

关于 dispatch-spawn

dispatch-spawn 是用于启动受隔离约束的工作进程并接收其工作树的技能,供协调 Agent 调度开发任务。它拒绝在无法建立隔离时降级运行,并通过导入门禁与验证流程处理结果。

主要功能

  1. 01探测隔离能力并失败关闭
  2. 02派生未绑定的工作分支
  3. 03在隔离环境中运行工作进程
  4. 04导入工作树差异并执行范围检查
  5. 05验证后记录阶段并清理分支

适用场景

  1. 01在隔离工作树中委派开发任务
  2. 02检查并导入工作进程产生的代码差异
  3. 03在协调分支上验证已导入的更改

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davidlee/doctrine --skill dispatch-spawn

安装后在 Claude Code 中输入/dispatch-spawn确认已加载。

详细介绍

Dispatch — 启动受限工作进程

适用于所有执行框架的一种启动形式。驱动节奏由 /dispatch 路由器定义;本技能涵盖启动调用和 落地机制。

参见 lib:reference/dispatch-mechanics.md § 工作进程返回的是工作树, 而非提交。

启动

scripts/spawn-confined.sh <harness> <B> <BRANCH> <DIR> <PROMPT_FILE> [BACKSTOP_SECS]

<harness> 为 pi 或 claude。脚本会自行完成整个启动前流程——无需 单独派生分支:

  1. 能力探测。 Linux 会断言存在 bwrap,并在派生分支之前拒绝 bwrap-unavailable;macOS 则通过 doctrine worktree jail-prefix 给出 明确的拒绝结果,该命令会以失败关闭,并且不写入前缀。 绝不回退到不受限模式——无法解析隔离环境时会中止启动,而非降级 (空前缀会被自身的守卫捕获)。
  2. 派生分支。 doctrine worktree fork --base <B> --branch <BRANCH> --dir <DIR> --worker,按编排器类别运行,并在任何隔离之前从项目根目录执行。此派生分支 刻意保持未绑定——不使用 --slice/--phase(见下文 漏斗)。
  3. 隔离并执行。 timeout <BACKSTOP> <jail prefix> <harness exec>, 将 <PROMPT_FILE> 交给工作进程(claude 使用标准输入;pi 使用一行精简 RPC), 并捕获交互记录。隔离环境会以读写方式绑定派生目录和执行框架配置目录,以只读方式绑定 其余内容,并在命名空间内设置 DOCTRINE_WORKER=1。
  4. 交还。 claude -p 会在轮次结束时退出——进程退出就是完成信号。 pi --mode rpc 不会自行退出,因此只有该配置会通过 fifo 保持标准输入开启, 并轮询其带类型的结束事件。除此之外,两个执行框架唯一的差异是配置目录和执行 命令行。

关于提示词围栏规则(干净检出、禁止使用特定动词、红色证明时须编辑而非丢弃), 参见 lib:reference/dispatch-mechanics.md § 工作进程可能会悄悄丢弃自己的 工作。

切勿相信工作进程自述的成功结果。工作树才是事实依据。

落地

差异是一棵未提交的工作树,进程退出后仍会保留——不会自动回收。

  1. 导入。 doctrine worktree import --base <B> --from-worktree <DIR> --slice <N>——收集已跟踪和未跟踪的差异,按照 lib:reference/dispatch-mechanics.md 执行 classify_import 作用域检查和拒绝并停止的证明门槛——若差异未通过检查, 会暂存并停止,不会自动修复(要么落地,要么拒绝,绝不重写)。任何拒绝都必须 报告并停止——绝不可绕过它继续导入。
  2. 在协调分支上只提交一次——这是编排器自身的操作,也是导入不提交的原因。
  3. 记录边界。 doctrine slice record-delta <N> PHASE-NN --commit <S>,其中 S 必须固定为代码提交,不能在记录时从 HEAD 读取。 知识提交会晚于代码提交,因此 HEAD 可能已经移动; --commit 会精确记录 S 自身的补丁,按设计排除后续知识和任何刷新基线合并。 这项写入不可跳过——若已完成的阶段没有登记表行,dispatch sync --prepare-review 的完整性检查会停止。
  4. 验证并结束。 在协调工作树上运行该阶段的验证(工作进程自己的报告仅供参考), 然后更新状态表: doctrine slice phase --status completed <N> PHASE-NN。
  5. 回收已用完的派生分支:doctrine worktree gc --fork <BRANCH>——其补丁 ID 判定器专门针对未纳入漏斗的派生分支情形,并且可幂等执行。 绝不可对尚未导入的工作树运行 git worktree remove --force:这会删除差异的唯一副本。 --dry-run 只输出判定结果,不会销毁任何内容。

漏斗:绑定派生分支的机制,不适用于此路径

参见 lib:reference/dispatch-mechanics.md § 漏斗记录;了解它何时作为驱动器使用—— 此路径会派生未绑定的分支,因此不会写入任何记录行,next 会停留在 spawn。

危险信号

绝不要: 指示或期望工作进程提交更改(其 .git 为只读,无法自行提交);在脚本外启动工作进程(手动编写的 exec 会导致工作进程不受约束);省略兜底超时;对提示词使用 eval;对 pi 配置文件的 RPC 标准输入使用 here-doc(EOF 会将其终止);绕过范围限制或 prove-gate 拒绝继续导入(拒绝意味着存在缺陷或必须停止,绝不能绕道);将红色差异自动修复后再导入;在分支的差异尚未落地前强制删除分支;相信工作进程自己标记的成功或失败;把 dispatch next 给出的 spawn 指令当成卡住的流程。

始终: 遇到非零 spawn 结果时停止(默认拒绝是整个流程的原则——无法确立隔离就不启动工作进程);传入预先提炼且独立完整的提示词;使用 --slice 导入,以便范围保护机制检查选择器;在记录边界前,将 S 固定在代码提交上;返回路由器,按既定节奏推进。

评论

支持 Markdown