Signature bake

How the Signature bake is run

What a task is, what counts as solved, where each number comes from, and what I keep private.

The tasks

Each of the 30 tasks is a change somebody really made to a codebase: 20 bug fixes and 10 features, in JavaScript, TypeScript, Python and Rust. The repositories come from a mix of sources: primarily private, with some recent open source as well. The agent gets the code as it stood before the change, and the problem described the way its owner would have put it.

Solved

Tests the agent never sees do the grading. A run is solved when all of them pass and nothing that worked before is broken. Anything else is not solved.

The agents

An agent is a model in the harness its maker ships, or in pi when it has none, at one effort level. Every agent's page shows its harness, version and effort level.

Runs

The standard is 2 runs of every task. An agent with a different number is tagged with its count, and is ranked the same way, by the share of its runs that solved.

Cost per fix

Runs in Claude Code and Codex are priced at list API prices for the tokens each run used. Runs through OpenRouter are priced at what OpenRouter charged. List prices use each model's base rate, so a model that charges more for long prompts costs more than shown. Cost per fix is everything an agent's runs cost, divided by the runs that solved their task, so the failed runs are paid for too.

Time per run

How long the agent worked, as the median over its runs. Several agents ran at once on one machine, so read a small gap as noise.

Lines to review

Lines added plus lines removed in the agent's change, any tests it wrote included, as the median over its runs. It's what a reviewer has to read.

What stays private

The codebases, the prompts and the tests. Once a benchmark's tasks are public they end up in training data, and it starts measuring memory.

Tokens in and tokens out

Each run's detail gives two token counts. Tokens in is everything the run sent to the model. An agent sends its context again on every request, so this is a sum over all of them, and most of it is read from cache. Tokens out is what the model wrote. Each harness reports its own counts.