mcpField
D
dispatch-subprocess

dispatch-subprocess

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

关于 dispatch-subprocess

这项技能在隔离的 Doctrine worktree 中派发 codex 或 pi 工作进程,并将控制权交回 dispatch 路由器。它还规定提交边界记录方式,以及工作进程和 RPC 流程的防护措施。

主要功能

  1. 01创建隔离的工作进程 worktree
  2. 02启动 codex 或 pi 子进程
  3. 03用 FIFO 保持 pi RPC 输入开启
  4. 04记录阶段提交边界
  5. 05执行 dispatch 完成检查

适用场景

  1. 01在独立分支和目录运行工作进程
  2. 02在工作进程运行期间保持 pi RPC 输入开启
  3. 03在知识提交前记录已落地阶段

安装

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

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

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

详细介绍

Dispatch — codex/pi arm

通过 doctrine worktree fork --worker + 子进程生成来启动工作者。 驱动循环位于 /dispatch 路由器。

启动 — codex arm

doctrine worktree fork --base "$B" --branch "$BR" --dir "$D" --worker \
  || { echo "fork failed: $?" >&2; exit 1; }
env -C "$D" DOCTRINE_WORKER=1 codex exec "<pre-distilled prompt>"

在受限环境(bwrap)中运行 fork,检查 $?,然后启动。工作者会继承 当前环境,并在自己的树内 $D/target 中编译(无环境变量约定)。

启动 — pi arm(RPC 模式)

doctrine worktree fork --base "$B" --branch "$BR" --dir "$D" --worker \
  || { echo "fork failed: $?" >&2; exit 1; }
cp AGENTS.md "$D/" \
  || { echo "AGENTS.md copy failed: $?" >&2; exit 1; }
PI_FIFO=$(mktemp -u) && mkfifo "$PI_FIFO"
{ printf '%s\n' \
    '{"type":"set_auto_retry","enabled":false}' \
    '{"type":"prompt","message":"<pre-distilled prompt>"}'
  sleep 300
} > "$PI_FIFO" &
timeout 300 env -C "$D" DOCTRINE_WORKER=1 \
  pi --mode rpc --thinking off --session-dir "$D/.pi-session" \
     --no-extensions --no-skills --no-themes \
     --offline --approve --tools read,bash,edit,write,grep,find,ls \
  < "$PI_FIFO"
rm -f "$PI_FIFO"

与 codex arm 的隔离方式相同;fifo 会保持 stdin 打开(pi RPC 遇到 EOF 时会退出)。 使用 sleep 300 保持连接,agent_end 会提供类型化完成信息。忽略已安装软件包发出的 extension_ui_request 小组件事件。

边界记录

在 conclude 指令(doctrine dispatch next --slice <N>)中,代码提交之后运行:doctrine slice record-delta <SL> PHASE-NN --commit <S> — 安全默认的单提交模式。它会推导 [S^, S],并将每个阶段的边界写入主树合规注册表(F-5 从 coord 树解析;F-6 守卫;upsert)。

在代码提交时固定 S;记录时绝不读取 HEAD。 知识提交会跟在代码提交之后,因此记录时的 HEAD 可能已不再是代码提交。代码提交落地后立即捕获 S=$(git rev-parse HEAD),并在后续知识提交之前记录 --commit "$S"(或者无论顺序如何,都使用固定的 oid)。git diff S^..S 精确对应 S 自身的补丁——后续知识以及任何 refresh-base 合并(位于 S^)都会被自然排除;这正是旧的 --start/--end 范围做不到的。

此 arm 没有 record-boundary,而 codex/pi 对称账本推导已延期(D6/IMP-171),因此此处的 record-delta 就是该 arm 的注册表写入——每个落地阶段都必须保留,并由编排器发起。现在不能再跳过:如果已完成阶段缺少注册表行,dispatch sync --prepare-review 的完整性检查会触发 bail!,因此遗忘写入会使预审计 conclude 节拍停止,而不是悄然通过(ISS-052 故障模式)。同一动词仍兼作手动逃生通道——--start/--end 仍适用于范围或引导操作。其传入的 Manual 会保留溯源信息——绝不会清除现有的 funnel/legacy 阻断(D12)。

危险信号

**绝不:**使用 eval;在 env -C "$D" 之外启动进程;省略 timeout;在 RPC 模式下使用 heredoc(stdin EOF 会终止 pi);凭记忆手动安排 funnel 顺序(询问 doctrine dispatch next --slice <N>)。 **始终:**fork 失败时停止;传递 DOCTRINE_WORKER=1;为 RPC stdin 使用 fifo;退出后运行 rm -f 删除 fifo;返回路由器以遵循 funnel 节奏。

评论

支持 Markdown