debate
Orchestrate multiple AI agents to argue a question across rounds, detect convergence or stall, and return the full transcript with a closing summary.
Instructions
Have several ACP agents argue a question across rounds and return the full transcript.
targets is a list of {cli, model} objects or cli / cli:model strings; a debate needs at least
two. Or name a saved panel (with optional panel_overrides) for a stored roster instead of targets;
they are mutually exclusive (rounds / judge stay call args). Each voice keeps ONE persistent ACP
session across all rounds: round one is each voice's
independent answer, and each later round shows a voice the others' latest positions and asks it to
revise -- the agent remembers its own prior reasoning in-session, so only the delta is sent.
carry_forward=true instead re-sends the FULL prior transcript verbatim each round (for a weaker session
memory; bounded by time_budget_s). track_convergence=true asks each voice for a one-word verdict each
round and stops early when the panel CONVERGES (a unanimous verdict) or STALLS (the decision holds for the
configured tolerance); the outcome field reports the termination reason (converged / stalled /
unresolved / budget / quorum_lost) and the final decision.
synthesize=true (default) adds a closing summary; judge names a target to write it. A debate is
read-only deliberation: a safety_mode beyond read_only (propose / write / yolo) is refused --
the voices run on persistent sessions in the working directory with no per-turn sandbox -- so route write /
propose work through delegate (a single agent isolated in a worktree sandbox). role names a
persona (see list_roles) prepended to the opening prompt every voice argues from. effort (low |
medium | high | xhigh) asks every voice to spend more reasoning where it has a knob. time_budget_s is a
wall-clock deadline for the WHOLE debate enforced at round boundaries: a round still in flight at the
deadline is cut and the transcript so far is finalized (stop_reason="budget", with a rollup);
on_budget is harvest | continue | resume (default default_on_budget; continue runs every round to
completion). persist keeps the debate as a durable job (F2): a parent state.json plus the full
transcript.md; None follows default_persistence, true / false force it. mode="async" runs the
debate as a background job and returns a job_id (poll with job_status / job_result); mode="sync"
awaits it.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | sync | |
| role | No | ||
| judge | No | ||
| panel | No | ||
| effort | No | ||
| prompt | Yes | ||
| rounds | No | ||
| persist | No | ||
| targets | No | ||
| on_budget | No | ||
| timeout_s | No | ||
| synthesize | No | ||
| safety_mode | No | ||
| working_dir | No | ||
| carry_forward | No | ||
| time_budget_s | No | ||
| panel_overrides | No | ||
| external_tracking | No | ||
| track_convergence | No | ||
| require_independent_judge | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |