用途:当用户明确要求把有限范围的编码任务交给独立实现者(Pi 编码代理 CLI)时使用。编排者负责写简报、做判断、审查结果并落地提交;实现者在自己的会话中修改代码。该循环只需 shell 命令和文件访问,其他同类编排器也可驱动。
不适用:任务小到可内联完成、委派开销不值得;pi 未安装或未认证;需要沙箱实现者——Pi 没有沙箱和权限模式,--read-only 只限制工具面,可写运行会无提示执行。
前置检查:用 npm install -g @earendil-works/pi-coding-agent 安装 pi;在 pi 内用 /login 认证订阅服务商,或为 API-key 服务商配置环境变量/认证文件;确认 pi --version 成功;在目标 git 仓库内工作或用 --cd 指向它。
模型选择(可选):省略 --model 用 pi 默认模型;可先 pi --list-models,再传显式 id 或形如 <provider>/<model-id>、sonnet:high 的模式。relay 只接受字母、数字及 . _ : / -(该值在 Windows 会进 shell),不支持 * 通配。
循环五步:1. 写简报(pi 只看到你发送的文本和工作区可见内容,无聊天历史;写明目标、现状、改什么、不动什么、真实门禁和报告约定,要求 pi 不要提交,一个简报一个任务;pi 会自动加载工作区及其父目录的 AGENTS.md/CLAUDE.md)。2. 派发:使用内置 relay,把简报经 stdin 传给 pi --mode json,捕获 JSON 事件流并写出 result.json,例如 node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo,可选 --model、--provider、--read-only、--approve、--resume-last、--session <id>、--timeout 2h(默认 30m)。3. 等待完成:relay 阻塞至 pi 结束;用后台命令运行或后台化后轮询 result.json;预运行用法错误退出码 2 且不写结果,缺少 pi 退出码 127 并写 status: "pi_unavailable";以进程状态和工作树为准,最终报告在 result.json 的 finalMessage 字段。4. 审查:不要相信自述,自行重跑项目门禁,依据 touchedFiles 读 diff,运行已安装的守卫技能,做迁移与残留引用检查。5. 落地:实现者改工作树,编排者提交;门禁通过且 diff 成立后才提交;需返工时用 --resume-last 或 --session <id> 发增量简报再审查。
自主性与权限:Pi 无沙箱、无权限模式,默认无头运行会读写、编辑并执行 shell 命令且无提示;--read-only 把可调用工具限制为 read、grep、find、ls;relay 默认传 --no-approve,项目 .pi 设置、扩展与技能不被信任,--approve 是对信任仓库的显式加入;每次运行后检查 touchedFiles 与 diff。
授权模型:委派需用户主动同意;一旦同意(如“运行这个队列”“继续”),提交已验证且门禁通过的工作是约定契约。两条边界:如实呈报而非吸收(报告 pi 的设计决策、可辩护但未被要求的转向、非阻塞小问题),范围变化时停下询问而非扩大授权。
参考文件:references/writing-the-brief.md、references/dispatch-and-poll.md、references/review-and-land.md、references/multi-task-queues.md。
限制:运行时辅助脚本 scripts/relay.mjs 按 UPSTREAM-NOTICE.md 记录的版本内置,需对应已安装并认证的 CLI、Node 18+ 和 git;relay 从不提交,只返回结构化结果 JSON;改编自 amElnagdy/delegate-skills(MIT),仅文档,未内置运行时。具体价格、平台支持范围等资料未提供。