Skip to content

Arena

Arena is the during-turn, operator-initiated comparison surface in the conversation quality lifecycle. You run the same prompt against multiple configured models, inspect bounded metadata, then accept, dismiss, stitch, or merge a winner into the session.

Shadow Evals measure change across sessions; arena compares models inside a session before you commit to one answer. That makes Arena a decision-forum concept, adjacent to the Sessions continuity family rather than a session restore/checkpoint primitive.

Only after you accept (or auto-select accepts for you). Until then, status surfaces are metadata-only — no candidate bodies in /arena or bmo arena status.

You want two or more model voices on the same prompt — for example before merging a docs paragraph, recipe tweak, or verified worktree change — without guessing which model answered best.

Arena comparison round
Live BMO TUI: `/arena` after a text-mode comparison round — shared status shows enablement, eligibility, `candidate_summary`, and a metadata-only `latest_round` with per-model keys (no candidate bodies).
JobRouteWhat it shows
Maintainer posturebmo arena status [--session-id] [--json]Detached/live posture, enablement, eligibility, candidate totals, latest round summary
TUI round launcher/arenaSame snapshot plus create-round form
Remote / agentGET /v1/sessions/{id}/arena/status, get_arena_statusParity read surface (mutations stay on create/accept tools)

The snapshot never includes raw prompt text, candidate bodies, validation stdout, diffs, or worktree paths.

You are refactoring this feature page and want two model voices on the opening copy before merge.

StepActionQuestion answered
1Enable [options.arena] with mode = "text" and two modelsIs arena armed for this workspace?
2Open /arena in an active sessionWhat is eligibility and session-bound posture?
3Enter a prompt and create a roundHow many candidates ran and in what state?
4Review metadata in /arena or chat; accept one candidateWhich answer becomes the next assistant message?

Optional: pair with Shadow Evals when auto_select_policy = "eval_shadow" — a separate, opt-in policy that picks a winner from shadow scorecards for the same session and user message.

  • TUI: /arena — inspect status, enter a prompt, optionally override models.
  • Agent / MCP: create_arena, arena_accept, arena_dismiss, stitch, merge.
  • HTTP: session/message arena routes for remote clients.

Set options.arena.mode = "verified" for worktree-backed candidates with an optional validation_command. Arena status reports whether the current working directory is eligible (valid Git checkout with at least one commit).