Figure 1 · Epoch-4

Context tokens per run

Context tokens are the tokens the model read to answer a whole run: the uncached input plus every cache read, summed over every API call in the run, all threads included.

protocols
battery
model
columns

Pooled models shows one column per arm, its models averaged with equal weight — the readable overview. Per model shows one column per model for every arm, grouped by arm, for how one arm moves across tiers. By model is the transpose: one group per model with every arm inside it, Corograph first, for the like-for-like read at each tier at a glance; the line under each group is Corograph against that ecosystem's bare harness. This choice applies to every figure on the site and is remembered.

Context tokens per runlower is betterZeroShot + MultiTurn · both batteries
05.0M10.0M15.0MCC Bare 8.59MCodex Bare 4.55M★8.75MHaiku 4.5★3.37MSonnet 5★2.63MOpus 4.6★2.86MOpus 4.8★3.24MOpus 5★1.90MFable 5★4.35MLuna★2.85MTerra2.58MSolCorographCorograph8.59M6 modelsCC Bare4.55M3 modelsCodex Bare13.83MHaiku 4.59.22MSonnet 58.27MOpus 56.18MLuna3.30MTerra★2.47MSol★6.58MGrok 4.6★9.38MComp 2.5Cursor Barebare harness8.96M6 modelsGraphify9.28M6 modelsGitNexus6.92M6 modelsCodeGraph9.11M6 modelsCodebaseMemory9.64M6 modelsSerena

Raw token counts are never pooled across vendors (tokenizers differ), so arms whose selected models span vendors are shown one column per model; ★ marks the best value at each model.

Data behind this figure — ZeroShot + MultiTurn · both batteries
armrolecolumncontext tokens per run
(input + tool results + cache read)
runscellsminmaxsdrank
(at this model)
runs in the repository
CorographCorographHaiku 4.5 ★8.75M3942.33M20.85M6.00M1st of 2Haiku 4.5
Sonnet 5 ★3.37M4041.54M7.77M1.87M1st of 2Sonnet 5
Opus 4.6 ★2.63M404786k7.38M1.96M1st of 1Opus 4.6
Opus 4.8 ★2.86M404884k7.66M2.13M1st of 1Opus 4.8
Opus 5 ★3.24M4041.34M5.90M1.52M1st of 2Opus 5
Fable 5 ★1.90M112793k3.17M1.01M1st of 1Fable 5
GPT 5.6 Luna ★4.35M404774k14.24M3.95M1st of 2GPT 5.6 Luna
GPT 5.6 Terra ★2.85M404603k8.14M2.44M1st of 2GPT 5.6 Terra
GPT 5.6 Sol2.58M404664k7.91M2.10M2nd of 2GPT 5.6 Sol
CC Barebare harness6 models8.59M201223.36M29.61M4.69M3rd of 7Haiku 4.5 · Sonnet 5 · Opus 4.6 · Opus 4.8 · Opus 5 · Fable 5
Codex Barebare harness3 models4.55M120122.15M10.61M2.03M1st of 7GPT 5.6 Luna · GPT 5.6 Terra · GPT 5.6 Sol
Cursor Barebare harnessHaiku 4.513.83M4042.32M23.84M5.11M2nd of 2Haiku 4.5
Sonnet 59.22M4045.15M16.79M3.26M2nd of 2Sonnet 5
Opus 58.27M4046.57M16.43M2.11M2nd of 2Opus 5
GPT 5.6 Luna6.18M4044.18M10.70M1.46M2nd of 2GPT 5.6 Luna
GPT 5.6 Terra3.30M4041.23M5.89M1.26M2nd of 2GPT 5.6 Terra
GPT 5.6 Sol ★2.47M404985k5.16M1.28M1st of 2GPT 5.6 Sol
Grok 4.6 ★6.58M4044.29M9.61M1.85M1st of 1Grok 4.6
Composer 2.5 ★9.38M4045.02M14.81M3.53M1st of 1Composer 2.5
Graphifyindexing tool on Claude Code6 models8.96M201223.58M27.70M4.57M4th of 7Haiku 4.5 · Sonnet 5 · Opus 4.6 · Opus 4.8 · Opus 5 · Fable 5
GitNexusindexing tool on Claude Code6 models9.28M201224.74M31.16M4.74M6th of 7Haiku 4.5 · Sonnet 5 · Opus 4.6 · Opus 4.8 · Opus 5 · Fable 5
CodeGraphindexing tool on Claude Code6 models6.92M203222.75M29.62M4.32M2nd of 7Haiku 4.5 · Sonnet 5 · Opus 4.6 · Opus 4.8 · Opus 5 · Fable 5
CodebaseMemoryindexing tool on Claude Code6 models9.11M201224.07M25.47M4.84M5th of 7Haiku 4.5 · Sonnet 5 · Opus 4.6 · Opus 4.8 · Opus 5 · Fable 5
Serenaindexing tool on Claude Code6 models9.64M207234.13M30.98M5.29M7th of 7Haiku 4.5 · Sonnet 5 · Opus 4.6 · Opus 4.8 · Opus 5 · Fable 5

Figure 1. Context tokens are the tokens the model read to answer a whole run: the uncached input plus every cache read, summed over every API call in the run, all threads included. Each column is the mean over the valid, scored runs of one arm at one model, every arm split by model because token counts are model facts; the dashed lines mark Corograph's and each bare harness's pooled value wherever pooling is licensed. At every model the Corograph column sits well below the same model running bare, and the indexing tools cluster at or above bare Claude Code: the index replaces reading.

How this figure is computed

Definition. For run r, context(r) = tokens_input(r) + tokens_cache_read(r), where tokens_input is the uncached tail of every request and tokens_cache_read the cached prefix re-read on each call. Both are summed over all API calls of the run, including sub-agent threads, from the per-call record named by token_source in the run record (a gateway ledger for Corograph; the harness session logs or the harness's own per-call usage for the comparison group). Cache writes and output tokens are excluded here and reported in the run records.

Aggregation. A column is the arithmetic mean of context(r) over the valid, scored runs of one arm at one model, for the selected exam and battery. When both batteries are selected, each battery forms its own cell and the column is the mean of the two cell means, so the longer battery does not dominate.

Why per model. Token counts are tokenizer facts: a Sonnet token and a GPT token are not the same unit. The site therefore never pools raw token counts across vendors. The pooled-models view (the default) pools an arm over its roster only where the roster is a single vendor; an arm spanning two vendors stays split into one column per model whatever the columns choice, which the table discloses.

Reading it. Lower is better. The like-for-like comparison is column to column at the same model: Corograph at Sonnet 5 against bare Claude Code at Sonnet 5, Corograph at GPT 5.6 Sol against Codex at GPT 5.6 Sol. The dashed reference lines are Corograph's and the bare harnesses' pooled means, drawn only where a pooled value is licensed (a single-vendor roster), so the indexing tools have both Corograph and their baseline in the same picture.

Disclosures

Exam protocols have different token denominators (a MultiTurn question replays its history; ZeroShot pays the fixed prefix per question). Switch protocols with the control above; the site never pools across them.

A run whose token facts were not captured is excluded from its column, never counted as zero; the table's n is the number of runs behind each column.

Provenance

Computed at build time from epochs/E004/summary/runs.json of the proof package (export tool tabench export public 0.1.29, scorer era tabench-1.1). Each row of the table above links to the run directories in the repository, where run.json, the answers, the verdicts and the transcript of every run can be read.