Your agent got worse last Tuesday. Nobody noticed.
Every leaderboard measures the model. Nobody measures your agent engine: the harness, the prompts, the tools, the loop you actually ship. Arena runs coding agents head-to-head on the same model, same budget, same timeout, grades them with held-out tests they can never see, and reports each metric separately with real statistics and full receipts.
Report format shown with example data. Every real report carries its own intervals, p-values, and raw run directory.
The problem
Model benchmarks answer a question you are not asking
When your coding agent gets better or worse, the model is usually not what changed. You changed a system prompt, added a tool, reworked the planning loop, or bumped a dependency. Model leaderboards cannot see any of that. They hold the harness fixed and vary the model. Your job is the opposite: the model is a config value, and the engine is the product.
Arena isolates the engine. Two or more agents, one model, one budget, one timeout, the same tasks. If the numbers differ, the harness is the reason. That is the comparison that tells you whether your last sprint helped, and the one no public leaderboard runs for you.
Trust
Built to survive skeptical reading
matchedModels: false and the report leads with a warning banner.agent-error and is removed from every comparison. It never counts as the agent losing.Measurement
Four metrics, never blended
A single blended score hides the tradeoff you care about. Arena reports each metric separately, with its own interval, and refuses to average them.
CI integration
The regression gate: a tripwire for agent quality
Benchmarks are not only for bragging. Snapshot a good run as a baseline, commit it,
and fail CI the day a change makes your agent less accurate, slower, or more
expensive. With --require-significant, a drop only fails once it clears
95% interval noise, so small samples do not cry wolf.
# establish a baseline once, commit it pnpm arena run --agents mine --model anthropic/claude-sonnet-5 --trials 5 pnpm arena baseline save results/run-… # writes arena-baseline.json # in CI: rerun and gate. non-zero exit = regression pnpm arena run --agents mine --model anthropic/claude-sonnet-5 --trials 5 pnpm arena gate results/run-… --require-significant
Go deeper