4. Polly 编程模型架构
一个"只动脑不写码"的编排大脑,把任务拆解、分派给独立 worktree 中自治跑到 green 的编码子 Agent,人只做目标确认与 PR 合并
一句话定位:Polly 是一个 Orchestrator / Worker 形态的多 Agent 编程模型。 中央的 Polly Brain 负责拆解、分派、验证、集成,但自己从不写业务代码; 真正的实现由多个编码子 Agent(Workers)完成,每个 worker 在独立的 git worktree 里自治运行, 跑到测试全绿后各自开出 PR。所有派发都要穿过 runner 侧的 Guardrails / tool gate, 而人类只在两端出现:下达目标 / 确认 plan gate 与 审阅并合并 PR——Polly 永远不自己 merge。
图 1 · Polly 编程模型全景:人 → Brain → Guardrails → Workers → PR → 人,构成一个事件驱动的闭环
1Polly 大脑(Orchestrator)
只动脑、不落地——负责思考与协调,把动手的事全部外包出去。
🧠 Polly Brain
跑在 claude-sdk harness 上,拥有 1M context,承担四件事:拆解、分派、验证、集成。
它可以直接写文档和 skill,但刻意不写业务代码——业务代码一律交给 worker,避免大脑既当裁判又当选手。
大脑手里握着三类能力:
- 编排工具:
sys_session_send(派发)、sys_read_inbox(收结果)、sys_cancel_task(撤销)、sys_os_*与ghCLI。 - 可组合 Skills:
investigate(深挖)、fanout(扇出并行)、cross-review(跨厂商评审)。 - 状态注册表:
.polly/registry.json持久化记录每个任务、worktree 与 PR 的状态,大脑与 skills 双向读写它作为唯一事实源。
2Dispatch 协议 — 怎么派活
所有分派收敛到一个调用,四个语义化 purpose 覆盖全部工作类型。
sys_session_send(
title = 任务名,
args.purpose = implement | review | explore | search,
args.model = <选定模型>
)
implement 实现 review 评审 explore 探索 search 检索
把"派什么活"约束成一组封闭的 purpose,既让大脑的意图显式化,也让下游的 Guardrails 能按 purpose 做策略判断(见下)。
3Guardrails / Policies — runner 侧闸门
每一次 tool_call 都要穿过 runner 侧的 tool gate(nessie),越权即拦。
| 策略 | 作用 | 效果 |
|---|---|---|
blast_radius | 限制破坏半径 | gate_pushes:false;DENY force-push / rm -rf / / hard-reset |
spawn_bounds | 限制并发扩散 | max_dispatches_per_turn: 5,防止一轮炸出过多 worker |
purpose_guard | 限制任务类型 | 仅允许 implement / review / explore / search |
ask_timeout | 审批窗口 | 86400s(1 天),超时即失效 |
4编码子 Agent(Workers)
每个 worker 一个独立 git worktree(.worktrees/<id> · 分支 polly/<id>),自治跑到 green,各开各的 PR、互不干扰。
claude_code — 主力实现
harness: claude-native · bypassPermissions。承担多文件改动、重构、写测试等重活。
codex — 窄改动
harness: codex-native。适合范围窄、边界明确的改动。
pi (headless) — 评审 / 探索专家
harness: pi,可接任意 gateway 模型,以 read-mostly 方式做评审与探索。
5跨厂商评审(cross-review)
让不同厂商的 agent 互相审查,靠异构性发现单一模型的盲区。
评审关系是交叉的:Claude → codex / pi、codex → claude / pi、pi → claude / codex。给 reviewer 的只有 diff + 验收契约,不告诉它 worktree 在哪;而且 reviewer 只报问题、绝不改码——实现与评审彻底分离。
6端到端闭环
- 人 → 大脑:下达目标,确认 plan gate。
- 大脑 → 闸门:
sys_session_send(purpose, model)派发,每个tool_call过 gate。 - 闸门 → Worker:放行后,每个 worker 分到一个独立 worktree,自治实现直到测试全绿。
- Worker → 大脑:通过
inbox异步唤醒大脑(事件驱动、不轮询),sys_read_inbox收结构化结果。 - Worker → PR:implementer 自己
gh pr create;gates 绿 + 零 blocking → ready。 - PR → 人:人审阅并 merge——Polly 永不自己 merge。