Data · Tooling
The runner, the models, and the faults that mattered.
The runner
A purpose-built runner drives Claude Code headless (claude -p with stream-json output) against frozen task banks. For each run it builds an isolated configuration directory from the arm's definition, provisions a workspace from the task's fixture, records the full transcript, hook events and session log, scores the final workspace on a fresh copy, and checkpoints so that an interrupted campaign resumes where it stopped. It pins the CLI binary, refuses to resume a campaign whose configuration changed, and stops itself at a share of the usage window. It has 356 automated tests.
Models outside the agent
Labels, grades and drafted tasks came from models of other families than the agent under test; harvested tasks come from real commits. Claude appears only as the agent, in the recall probe that checks it has not memorised a task, inside one review metric, and as the difficulty classifier in one probe. The table shows the final assignment: each model called through its own maker's API, every non-GPT model at its highest reasoning setting. Earlier, GPT-6.1-sol and Gemini 3.1 Pro labelled review findings, and GPT-6.1-sol wrote the first build slices and the activation prompts.
| Role | Models |
|---|---|
| write | gpt-6.1-sol |
| grade | openai/gpt-6-astra |
| agree | z-ai/glm-5.3, mistralai/mistral-large-4-0, meta/muse-spark-1.3 |
| bulk | z-ai/glm-5.3-flash, deepseek/deepseek-v4.1-flash, gemini-flash |
Measurement faults found during the study
The faults in our own instrument that mattered most, found while the study ran, with how each surfaced. About half would have changed a reported number had they gone unnoticed. Anyone running a similar comparison is likely to meet the same kinds of fault.
| Date | Fault | How it was caught |
|---|---|---|
| 5 Oct | Every run of a trial executed on an empty configuration: a relative config path was resolved in the wrong directory. | The trial's hook never fired; the trial was voided. |
| 8 Oct | An oracle test that looped forever outlived its time limit. | Process-group kill on timeout. |
| 10 Oct | In a trial, a scoring crash on one bank's file manifest recorded every agent as failing. | The trial stopped the run; re-scoring the stored workspaces showed all 15 had passed. |
| 10 Oct | A provider's mid-response server error was scored as the agent's failure. | Read in the error text; such runs are now excluded, not scored. |
| 11 Oct | A task prompt that began with a hyphen was read by the CLI as an option. | Every run of one task failed identically. |
| 11 Oct | Model calls through the CLI could never return a structured answer: a flag blocked the structured-output tool. | A classifier run in which 57 of 57 calls returned nothing. |
| 12 Oct | Sessions re-woken by a background task were recorded as one turn and a few cents. | A run with 26 turns of real work recorded as 1. |
| 12 Oct | A verifier that timed out under parallel load scored a whole suite 0. | Re-scoring all 148 stored workspaces; serial scoring gave 0.83 three times. Corrected by a registered rule. |
| 12 Oct | A run stopped by a session limit was marked complete; an interrupted run left its agents running. | Resume attempts; worked around by hand. |