arena
Arena
Dispatch contract. Read provider-dispatch.md before fan-out. Configured values are provider-qualified descriptors, not host-native model slugs. The parent starts native and external lanes directly; children never route themselves. On Codex, resolve the remaining Claude tool names via codex-tools.md.
Open a todolist with one entry per phase (Frame, Fan out, Cross-judge, Pick, Graft, Verify) before launching anything.
Phase A: Frame
Every candidate gets the same prompt, so the prompt is the contract.
- State the artifact each candidate is producing.
- Derive the rubric, 3-6 concrete gradeable criteria for what success looks like on this task. It is the picker's tool in Phase D. Candidates only see the task.
- Pick the runners. Use
arena runnersfrom the current harness's pstack model sheet when present. Otherwise use its role default, one runner per entry. Spawn more runners when the arena covers multiple design directions. Use the same descriptor N times when the work is generation-bound rather than judgment-sensitive. Pick each subagent's effort for the job, per the Subagents section of the poteto-mode skill. - Give each candidate its own output location (a git worktree where possible, otherwise
/tmp/arena-<slug>/candidate-<n>/), per the separate-before-serializing-shared-state principle skill.
Phase B: Fan out
Start all N lanes in one fan-out phase through the provider-dispatch contract. Native lanes are background subagents. External lanes are direct background launcher processes with retained task/session handles, never foreground calls and never subagents supervising subprocesses. Give every lane the task, the path to the shared grounding, its own output path, and instructions to produce the artifact and a short rationale naming the alternatives it considered and what it rejected.