Report No. 01

How Claude Fable 5.2 thinks

2026-11-12 · Morgan Linton · VulcanBench Frontier v4, 115 runs, Low to Max effort · trace analysis

Claude Fable 5.2 solved all 115 of its VulcanBench Frontier v4 runs: 23 tasks at each of five effort levels. This report is about how. Its traces show a model that goes straight to the machine code, reads it, thinks once at length and writes a rewrite, then checks that rewrite against the original program. Turning up the effort setting barely changes what it ships. It changes how hard Fable 5.2 works to prove the rewrite is right.

115/115runs that inspected the reference binary before the first edit
8.7xmore output from Low to Max (16k to 142k tokens a task); thinking rises from 48% to 67% of it
1 filechanged in every run: the module under repair, median 97 to 113 added lines at every level
0 → 21runs of 23 that mutation-tested their own checks, Low against Max

The task in one paragraph

Each Frontier v4 task hands the model a small repository: a module that is supposed to reproduce a retired program, a written specification, and the retired program itself as compiled binaries for macOS and Linux. The module is wrong in ways the issue only hints at, and the specification may have drifted from what the program really does. Hidden tests compare the repaired module with the binary, byte for byte, on inputs the model never sees. The binary is the ground truth; everything else is a claim about it. (Methodology has the full design.)

What this report does not show. Fable 5.2's runs recorded summaries of its thinking. Those summaries are full of what it learned about each program, which would hand future models the answers, so this report shows only their structure: counts, lengths, timing and the actions they lead to. It never quotes them. Public traces keep thinking as lengths for the same reason.

Anatomy of a solve

Every Fable 5.2 run follows the same arc. The phases stretch or shrink with effort, but they come in this order at every level:

  1. SurveyOne or a few commands that list the repository and print the specification, the module and the file types.
  2. Read the machine codeStrings, symbols, then a full disassembly of the reference, read end to end. Median: its 2nd tool call at Low, its 7th at Max.
  3. ThinkA long burst of reasoning that turns the disassembly into a model of the program. At Low this one burst holds 62% of a run's thinking.
  4. RewriteThe module is rewritten from that model: by a script run in the shell at Low and Medium, with the Edit and Write tools at Max.
  5. Check against the referenceGenerated inputs go to both the binary and the rewrite, and the outputs are compared byte for byte. Mismatches are shrunk and fixed.
  6. Clean upScratch files stay outside the repository; the final diff is the module alone in all 115 runs.

The chart below lays one task, blendcore, end to end at each level. At Max, blendcore took Fable 5.2 40.2 minutes, close to its median Max solve time of 39.0. Each tick is a tool call, coloured by what it did; each bar above the line is the thinking that came before it.

Reading code and binaryProbing the binaryEditing the moduleTestingWrap-up
One task, blendcore, solved at each effort level: each tick is a tool call, each bar the thinking before it0%25%50%75%100%share of the run, start to finishLow4.3 min, 9 calls4.3 minutes on the wall clock0.0 min: reading code and binary0.1 min: reading code and binary, about 257 thinking tokens before it0.1 min: reading code and binary0.2 min: reading code and binary, about 295 thinking tokens before it0.2 min: reading code and binary0.2 min: reading code and binary, about 256 thinking tokens before it0.2 min: reading code and binary0.5 min: reading code and binary, about 1,274 thinking tokens before it0.5 min: reading code and binary1.8 min: editing the module, about 4,049 thinking tokens before it1.8 min: editing the module2.1 min: testing, about 376 thinking tokens before it2.1 min: testing2.4 min: testing, about 638 thinking tokens before it2.4 min: testing4.0 min: editing the module, about 588 thinking tokens before it4.0 min: editing the moduleMedium3.6 min, 10 calls3.6 minutes on the wall clock0.1 min: reading code and binary0.1 min: reading code and binary, about 224 thinking tokens before it0.1 min: reading code and binary0.2 min: reading code and binary, about 297 thinking tokens before it0.2 min: reading code and binary0.3 min: reading code and binary0.3 min: reading code and binary0.3 min: reading code and binary, about 249 thinking tokens before it0.3 min: reading code and binary1.7 min: editing the module, about 4,573 thinking tokens before it1.7 min: editing the module2.0 min: editing the module, about 373 thinking tokens before it2.0 min: editing the module3.1 min: editing the module, about 553 thinking tokens before it3.1 min: editing the module3.3 min: testing, about 272 thinking tokens before it3.3 min: testingHigh5.2 min, 13 calls5.2 minutes on the wall clock0.1 min: reading code and binary, about 246 thinking tokens before it0.1 min: reading code and binary0.1 min: reading code and binary0.1 min: reading code and binary0.1 min: reading code and binary0.2 min: reading code and binary, about 409 thinking tokens before it0.2 min: reading code and binary0.3 min: reading code and binary, about 246 thinking tokens before it0.3 min: reading code and binary0.3 min: reading code and binary, about 243 thinking tokens before it0.3 min: reading code and binary0.4 min: reading code and binary, about 248 thinking tokens before it0.4 min: reading code and binary2.9 min: testing, about 12,497 thinking tokens before it2.9 min: testing3.4 min: editing the module, about 582 thinking tokens before it3.4 min: editing the module4.5 min: editing the module, about 438 thinking tokens before it4.5 min: editing the module4.8 min: testing, about 369 thinking tokens before it4.8 min: testing4.9 min: wrap-up, about 335 thinking tokens before it4.9 min: wrap-upExtra-high10.7 min, 22 calls10.7 minutes on the wall clock0.1 min: reading code and binary, about 240 thinking tokens before it0.1 min: reading code and binary0.1 min: reading code and binary0.2 min: probing the binary, about 457 thinking tokens before it0.2 min: probing the binary0.3 min: reading code and binary, about 267 thinking tokens before it0.3 min: reading code and binary0.3 min: reading code and binary, about 254 thinking tokens before it0.3 min: reading code and binary0.4 min: reading code and binary, about 257 thinking tokens before it0.4 min: reading code and binary0.4 min: reading code and binary0.4 min: reading code and binary4.3 min: probing the binary, about 19,873 thinking tokens before it4.3 min: probing the binary4.9 min: editing the module, about 799 thinking tokens before it4.9 min: editing the module5.5 min: editing the module, about 637 thinking tokens before it5.5 min: editing the module5.9 min: testing, about 416 thinking tokens before it5.9 min: testing6.4 min: testing, about 841 thinking tokens before it6.4 min: testing6.9 min: editing the module, about 786 thinking tokens before it6.9 min: editing the module7.1 min: testing, about 488 thinking tokens before it7.1 min: testing7.2 min: reading code and binary, about 961 thinking tokens before it7.2 min: reading code and binary7.4 min: probing the binary, about 534 thinking tokens before it7.4 min: probing the binary7.9 min: wrap-up, about 503 thinking tokens before it7.9 min: wrap-up8.6 min: testing9.0 min: editing the module, about 1,194 thinking tokens before it9.0 min: editing the module10.2 min: testing, about 648 thinking tokens before it10.2 min: testing10.3 min: wrap-upMax40.2 min, 56 calls40.2 minutes on the wall clock0.1 min: reading code and binary, about 250 thinking tokens before it0.1 min: reading code and binary0.1 min: reading code and binary0.1 min: reading code and binary0.1 min: reading code and binary0.2 min: reading code and binary0.2 min: reading code and binary0.2 min: reading code and binary0.4 min: reading code and binary, about 984 thinking tokens before it0.4 min: reading code and binary0.5 min: probing the binary, about 520 thinking tokens before it0.5 min: probing the binary0.6 min: reading code and binary, about 538 thinking tokens before it0.6 min: reading code and binary0.7 min: reading code and binary, about 579 thinking tokens before it0.7 min: reading code and binary0.8 min: reading code and binary, about 478 thinking tokens before it0.8 min: reading code and binary0.8 min: reading code and binary0.9 min: reading code and binary, about 252 thinking tokens before it0.9 min: reading code and binary0.9 min: reading code and binary7.0 min: probing the binary, about 31,044 thinking tokens before it7.0 min: probing the binary9.5 min: probing the binary, about 13,452 thinking tokens before it9.5 min: probing the binary9.7 min: reading code and binary, about 801 thinking tokens before it9.7 min: reading code and binary9.9 min: testing, about 997 thinking tokens before it9.9 min: testing10.4 min: editing the module, about 726 thinking tokens before it10.4 min: editing the module11.6 min: testing, about 1,408 thinking tokens before it11.6 min: testing11.8 min: testing, about 526 thinking tokens before it11.8 min: testing12.1 min: testing, about 248 thinking tokens before it12.1 min: testing13.1 min: testing, about 2,401 thinking tokens before it13.1 min: testing13.8 min: testing15.0 min: editing the module, about 5,950 thinking tokens before it15.0 min: editing the module15.5 min: testing, about 2,586 thinking tokens before it15.5 min: testing16.0 min: testing16.1 min: testing16.2 min: testing, about 621 thinking tokens before it16.2 min: testing16.7 min: testing, about 1,460 thinking tokens before it16.7 min: testing18.2 min: testing21.2 min: editing the module, about 980 thinking tokens before it21.2 min: editing the module23.9 min: testing, about 371 thinking tokens before it23.9 min: testing24.1 min: reading code and binary, about 898 thinking tokens before it24.1 min: reading code and binary24.2 min: reading code and binary, about 498 thinking tokens before it24.2 min: reading code and binary24.6 min: testing, about 1,947 thinking tokens before it24.6 min: testing24.9 min: testing, about 1,296 thinking tokens before it24.9 min: testing25.4 min: wrap-up27.6 min: editing the module, about 996 thinking tokens before it27.6 min: editing the module28.1 min: reading code and binary, about 2,752 thinking tokens before it28.1 min: reading code and binary28.4 min: wrap-up, about 1,871 thinking tokens before it28.4 min: wrap-up28.9 min: editing the module, about 2,293 thinking tokens before it28.9 min: editing the module29.4 min: testing, about 424 thinking tokens before it29.4 min: testing29.5 min: testing30.3 min: editing the module, about 4,525 thinking tokens before it30.3 min: editing the module30.3 min: reading code and binary, about 298 thinking tokens before it30.3 min: reading code and binary30.4 min: reading code and binary, about 357 thinking tokens before it30.4 min: reading code and binary34.7 min: testing, about 375 thinking tokens before it34.7 min: testing37.2 min: testing37.4 min: wrap-up, about 1,326 thinking tokens before it37.4 min: wrap-up37.5 min: wrap-up38.2 min: testing, about 2,360 thinking tokens before it38.2 min: testing38.5 min: testing, about 580 thinking tokens before it38.5 min: testing38.8 min: testing, about 1,242 thinking tokens before it38.8 min: testing39.4 min: testing, about 2,282 thinking tokens before it39.4 min: testingOpus 5.5, Low4.7 min, 20 calls4.7 minutes on the wall clock0.1 min: reading code and binary0.2 min: reading code and binary, about 182 thinking tokens before it0.2 min: reading code and binary0.2 min: reading code and binary0.3 min: reading code and binary0.4 min: reading code and binary0.6 min: reading code and binary, about 585 thinking tokens before it0.6 min: reading code and binary0.7 min: reading code and binary, about 253 thinking tokens before it0.7 min: reading code and binary0.7 min: reading code and binary, about 248 thinking tokens before it0.7 min: reading code and binary1.6 min: reading code and binary, about 3,317 thinking tokens before it1.6 min: reading code and binary1.7 min: reading code and binary, about 368 thinking tokens before it1.7 min: reading code and binary1.9 min: reading code and binary, about 275 thinking tokens before it1.9 min: reading code and binary2.0 min: testing2.1 min: reading code and binary, about 412 thinking tokens before it2.1 min: reading code and binary2.2 min: reading code and binary2.2 min: reading code and binary2.4 min: probing the binary, about 537 thinking tokens before it2.4 min: probing the binary2.6 min: probing the binary, about 927 thinking tokens before it2.6 min: probing the binary2.8 min: probing the binary, about 375 thinking tokens before it2.8 min: probing the binary3.9 min: editing the module, about 927 thinking tokens before it3.9 min: editing the module4.0 min: testing, about 222 thinking tokens before it4.0 min: testing

Ticks: tool calls, coloured by activity. Bars above the line: thinking tokens spent before that call (height is the square root, so small bursts stay visible). The short bar under each label is the run's wall-clock length, on one scale for all six runs.

At Low and Medium the whole run is a handful of calls with one tall bar in the middle: read, think, write, check. High adds a little probing and checking; from Extra-high the right half of each run fills with testing, and at Max the thinking breaks into dozens of smaller bursts spread across the checking work. The last row is Claude Opus 5.5 on the same task at Low, for contrast; more on that below.

Walkthrough: four minutes at Low

Blendcore at Low took Fable 5.2 4.3 minutes, 9 tool calls and about 7,700 thinking tokens. The run, step by step, with times from the start:

This is Fable 5.2's Low pattern across all 23 tasks: a mean of 10.7 tool calls, about 2 edits and 3 test runs, with the first edit at a median of 2.2 minutes, 60% of the way through the run. The single biggest burst of thinking follows a binary inspection in 21 of 23 runs and comes right before the rewrite in 17.

Walkthrough: forty minutes at Max

The same task at Max took 40.2 minutes, 56 tool calls, 62 thinking summaries and about 96,000 thinking tokens, twelve times the Low run. The rewrite it shipped is about the same size. Here is where the extra work went:

Most of the forty minutes went into checking a rewrite it had finished at minute ten. That is the Max pattern across all 23 tasks: the first edit lands a median 30% of the way in, against 60% at Low, and nearly half of all thinking comes before test runs.

Where the extra thinking goes

Fable 5.2's output per task grows 8.7 times from Low to Max and its time 8 times, while thinking grows from 48% of output to 67%. To see what that thinking is for, each burst is credited to the action that followed it: reading, probing the binary by hand, editing the module, testing, or wrapping up.

Reading code and binaryProbing the binaryEditing the moduleTestingWrap-up
Share of thinking tokens by the activity they preceded, by effort levelClaude Fable 5.2Lown=23Claude Fable 5.2, Low: 35% of thinking before reading code and binary35%Claude Fable 5.2, Low: 1% of thinking before probing the binaryClaude Fable 5.2, Low: 44% of thinking before editing the module44%Claude Fable 5.2, Low: 19% of thinking before testing19%Claude Fable 5.2, Low: 1% of thinking before wrap-upMediumn=23Claude Fable 5.2, Medium: 47% of thinking before reading code and binary47%Claude Fable 5.2, Medium: 1% of thinking before probing the binaryClaude Fable 5.2, Medium: 44% of thinking before editing the module44%Claude Fable 5.2, Medium: 6% of thinking before testingClaude Fable 5.2, Medium: 2% of thinking before wrap-upHighn=23Claude Fable 5.2, High: 40% of thinking before reading code and binary40%Claude Fable 5.2, High: 12% of thinking before probing the binary12%Claude Fable 5.2, High: 26% of thinking before editing the module26%Claude Fable 5.2, High: 20% of thinking before testing20%Claude Fable 5.2, High: 3% of thinking before wrap-upExtra-highn=23Claude Fable 5.2, Extra-high: 30% of thinking before reading code and binary30%Claude Fable 5.2, Extra-high: 27% of thinking before probing the binary27%Claude Fable 5.2, Extra-high: 19% of thinking before editing the module19%Claude Fable 5.2, Extra-high: 20% of thinking before testing20%Claude Fable 5.2, Extra-high: 3% of thinking before wrap-upMaxn=23Claude Fable 5.2, Max: 22% of thinking before reading code and binary22%Claude Fable 5.2, Max: 8% of thinking before probing the binary8%Claude Fable 5.2, Max: 19% of thinking before editing the module19%Claude Fable 5.2, Max: 46% of thinking before testing46%Claude Fable 5.2, Max: 4% of thinking before wrap-upClaude Opus 5.5Lown=23Claude Opus 5.5, Low: 44% of thinking before reading code and binary44%Claude Opus 5.5, Low: 18% of thinking before probing the binary18%Claude Opus 5.5, Low: 18% of thinking before editing the module18%Claude Opus 5.5, Low: 18% of thinking before testing18%Claude Opus 5.5, Low: 1% of thinking before wrap-upMediumn=20Claude Opus 5.5, Medium: 41% of thinking before reading code and binary41%Claude Opus 5.5, Medium: 9% of thinking before probing the binary9%Claude Opus 5.5, Medium: 13% of thinking before editing the module13%Claude Opus 5.5, Medium: 36% of thinking before testing36%Claude Opus 5.5, Medium: 1% of thinking before wrap-upHighn=15Claude Opus 5.5, High: 29% of thinking before reading code and binary29%Claude Opus 5.5, High: 11% of thinking before probing the binary11%Claude Opus 5.5, High: 11% of thinking before editing the module11%Claude Opus 5.5, High: 46% of thinking before testing46%Claude Opus 5.5, High: 2% of thinking before wrap-upExtra-highn=15Claude Opus 5.5, Extra-high: 38% of thinking before reading code and binary38%Claude Opus 5.5, Extra-high: 13% of thinking before probing the binary13%Claude Opus 5.5, Extra-high: 12% of thinking before editing the module12%Claude Opus 5.5, Extra-high: 34% of thinking before testing34%Claude Opus 5.5, Extra-high: 2% of thinking before wrap-upMaxn=11Claude Opus 5.5, Max: 37% of thinking before reading code and binary37%Claude Opus 5.5, Max: 10% of thinking before probing the binary10%Claude Opus 5.5, Max: 14% of thinking before editing the module14%Claude Opus 5.5, Max: 35% of thinking before testing35%Claude Opus 5.5, Max: 3% of thinking before wrap-up

At Low and Medium, 44% of Fable 5.2's thinking leads straight into an edit: it reasons its way to the whole rewrite before writing any of it. At Max that share falls to 19% and testing takes 46%. The total also grows twelvefold, so Max still spends about 18,000 thinking tokens a task on edits, more than an entire Low run, but the new effort goes overwhelmingly to verification. Extra-high is a halfway house where probing the binary by hand peaks at 27%.

The thinking also changes shape. A Low run has a mean of 9 thinking summaries and its single biggest burst holds 62% of the run's thinking. A Max run has 58, and the biggest burst holds 25%. Over the wall clock, Max front-loads: 40% of its thinking falls in the 10 to 30% slice of the run, where it reads the disassembly and builds its model, and the rest is spread thinly across the checking.

Claude Fable 5.2: share of each level's thinking in each tenth of the run
Claude Fable 5.2: share of a level's thinking in each tenth of the run0-10%10-20%20-30%30-40%40-50%50-60%60-70%70-80%80-90%90-100%LowLow: 12% of thinking in the 0 to 10% slice of the run12%Low: 11% of thinking in the 10 to 20% slice of the run11%Low: 11% of thinking in the 20 to 30% slice of the run11%Low: 10% of thinking in the 30 to 40% slice of the run10%Low: 10% of thinking in the 40 to 50% slice of the run10%Low: 12% of thinking in the 50 to 60% slice of the run12%Low: 14% of thinking in the 60 to 70% slice of the run14%Low: 8% of thinking in the 70 to 80% slice of the run8%Low: 9% of thinking in the 80 to 90% slice of the run9%Low: 4% of thinking in the 90 to 100% slice of the run4%MediumMedium: 13% of thinking in the 0 to 10% slice of the run13%Medium: 12% of thinking in the 10 to 20% slice of the run12%Medium: 12% of thinking in the 20 to 30% slice of the run12%Medium: 10% of thinking in the 30 to 40% slice of the run10%Medium: 10% of thinking in the 40 to 50% slice of the run10%Medium: 14% of thinking in the 50 to 60% slice of the run14%Medium: 12% of thinking in the 60 to 70% slice of the run12%Medium: 7% of thinking in the 70 to 80% slice of the run7%Medium: 6% of thinking in the 80 to 90% slice of the run6%Medium: 5% of thinking in the 90 to 100% slice of the run5%HighHigh: 10% of thinking in the 0 to 10% slice of the run10%High: 9% of thinking in the 10 to 20% slice of the run9%High: 4% of thinking in the 20 to 30% slice of the run4%High: 14% of thinking in the 30 to 40% slice of the run14%High: 27% of thinking in the 40 to 50% slice of the run27%High: 14% of thinking in the 50 to 60% slice of the run14%High: 2% of thinking in the 60 to 70% slice of the run2%High: 11% of thinking in the 70 to 80% slice of the run11%High: 4% of thinking in the 80 to 90% slice of the run4%High: 5% of thinking in the 90 to 100% slice of the run5%Extra-highExtra-high: 7% of thinking in the 0 to 10% slice of the run7%Extra-high: 3% of thinking in the 10 to 20% slice of the run3%Extra-high: 18% of thinking in the 20 to 30% slice of the run18%Extra-high: 15% of thinking in the 30 to 40% slice of the run15%Extra-high: 25% of thinking in the 40 to 50% slice of the run25%Extra-high: 7% of thinking in the 50 to 60% slice of the run7%Extra-high: 7% of thinking in the 60 to 70% slice of the run7%Extra-high: 5% of thinking in the 70 to 80% slice of the run5%Extra-high: 7% of thinking in the 80 to 90% slice of the run7%Extra-high: 5% of thinking in the 90 to 100% slice of the run5%MaxMax: 8% of thinking in the 0 to 10% slice of the run8%Max: 20% of thinking in the 10 to 20% slice of the run20%Max: 20% of thinking in the 20 to 30% slice of the run20%Max: 10% of thinking in the 30 to 40% slice of the run10%Max: 8% of thinking in the 40 to 50% slice of the run8%Max: 8% of thinking in the 50 to 60% slice of the run8%Max: 8% of thinking in the 60 to 70% slice of the run8%Max: 7% of thinking in the 70 to 80% slice of the run7%Max: 6% of thinking in the 80 to 90% slice of the run6%Max: 5% of thinking in the 90 to 100% slice of the run5%tenth of the run, by wall-clock time

The checking itself gets more sophisticated, not just longer. Counted from the commands each run actually executed: mutation testing plants deliberate bugs in copies of the module to see whether its checks catch them; the Linux build in a container runs the reference's second binary so the rewrite is compared with both builds; a throughput check times the rewrite against the reference; a second Python version reruns the checks under another interpreter.

CheckModelLowMediumHighExtra-highMax
Mutation testingFable 5.20/230/233/2312/2321/23
Opus 5.50/230/201/152/154/11
Linux build in a containerFable 5.20/230/235/2313/2319/23
Opus 5.50/230/200/150/150/11
Throughput checkFable 5.20/230/232/233/2320/23
Opus 5.51/232/201/150/157/11
Second Python versionFable 5.20/230/230/231/238/23
Opus 5.50/230/200/150/152/11

Opus 5.5 counts use its runs without refusal fallback, so n varies; see methods.

Its thinking summaries show the same widening. Keyword counts over the summaries (rough, from the results analysis) find differential checking against the binary in every run at every level, while other themes climb with effort. Doubt about the written specification appears in 3 Low runs and 22 Max runs. Explicitly keeping the change minimal: 4 to 23. Forming and testing named hypotheses: 11 to 23. Cleaning up scratch files: 2 to 23. At higher effort it is not only checking more; it is more suspicious of the specification and more deliberate about the size of its change.

All of Fable 5.2's per-level means in one place:

Per task, meanLowMediumHighExtra-highMax
Minutes4.64.37.814.237.1
Output tokens16.2k15.0k30.8k61.7k141.5k
of which thinking7.7k (48%)7.1k (47%)18.3k (59%)40.8k (66%)94.7k (67%)
Tool calls10.710.316.427.058.9
Binary inspection calls4.45.16.28.211.3
Calls that run the reference by hand0.20.11.01.81.9
Test runs3.01.33.06.518.9
Edit-then-test cycles1.30.71.22.34.1
Thinking summary blocks98152558
Largest single burst, share of thinking62%59%63%47%25%
First binary inspection, median tool call22457
First edit, median minute2.22.03.26.311.7

Against GPT-6 Astra

GPT-6 Astra, in OpenAI's Codex, came closest to a clean sweep of Frontier v4 before Fable 5.2, solving 114 of its 115 runs. Its raw Codex streams did not survive a host reset in September, so it cannot be compared call by call. What survives for every model is the same pair of records: the run's token and time receipts, and the patch it left. Those already show two very different ways of working.

Claude Fable 5.2Claude Opus 5.5Claude Fable 5.1GPT-6 Astra
Thinking tokens and minutes per task by effort levelThinking tokensmean per task, log scale, whiskers ±1 standard error5001k3k10k30k100kLowMediumHighXHighMaxClaude Fable 5.2, Low: 7.7k (±1.1k, n=23)Claude Fable 5.2, Medium: 7.1k (±0.6k, n=23)Claude Fable 5.2, High: 18.3k (±1.3k, n=23)Claude Fable 5.2, Extra-high: 40.8k (±2.3k, n=23)Claude Fable 5.2, Max: 94.7k (±3.6k, n=23)Claude Opus 5.5, Low: 14.8k (±3.9k, n=23)Claude Opus 5.5, Medium: 22.8k (±6.1k, n=20)Claude Opus 5.5, High: 27.4k (±8.4k, n=15)Claude Opus 5.5, Extra-high: 33.8k (±3.7k, n=15)Claude Opus 5.5, Max: 68.1k (±2.3k, n=11)GPT-6 Astra, Low: 1.2k (±0.7k, n=23)GPT-6 Astra, Medium: 0.8k (±0.1k, n=23)GPT-6 Astra, High: 1.5k (±0.2k, n=23)GPT-6 Astra, Extra-high: 4.5k (±0.5k, n=23)GPT-6 Astra, Max: 7.2k (±0.6k, n=23)Fable 5.2Opus 5.5GPT-6 AstraMinutesmean per task, log scale, whiskers ±1 standard error3510204060LowMediumHighXHighMaxClaude Fable 5.2, Low: 4.6 min (±0.6 min, n=23)Claude Fable 5.2, Medium: 4.3 min (±0.5 min, n=23)Claude Fable 5.2, High: 7.8 min (±0.8 min, n=23)Claude Fable 5.2, Extra-high: 14.2 min (±0.8 min, n=23)Claude Fable 5.2, Max: 37.1 min (±2.2 min, n=23)Claude Opus 5.5, Low: 13.7 min (±3.5 min, n=23)Claude Opus 5.5, Medium: 18.6 min (±5.4 min, n=23)Claude Opus 5.5, High: 22.1 min (±4.6 min, n=22)Claude Opus 5.5, Extra-high: 20.7 min (±3.6 min, n=23)Claude Opus 5.5, Max: 37.5 min (±4.7 min, n=23)Claude Fable 5.1, Low: 26.9 min (±7.0 min, n=23)Claude Fable 5.1, Medium: 31.7 min (±9.4 min, n=23)Claude Fable 5.1, High: 28.8 min (±6.8 min, n=23)Claude Fable 5.1, Extra-high: 38.8 min (±10.5 min, n=23)Claude Fable 5.1, Max: 27.1 min (±3.8 min, n=23)GPT-6 Astra, Low: 4.2 min (±1.0 min, n=23)GPT-6 Astra, Medium: 3.8 min (±0.2 min, n=23)GPT-6 Astra, High: 4.9 min (±0.2 min, n=23)GPT-6 Astra, Extra-high: 8.1 min (±0.6 min, n=23)GPT-6 Astra, Max: 10.3 min (±0.5 min, n=23)Opus 5.5Fable 5.2Fable 5.1GPT-6 Astra

Claude Fable 5.2

Claude Code · 115 of 115 solved
  • Thinks 6.3 times as much as Astra reasons at Low (7.7k against 1.2k tokens a task) and 13 times as much at Max (94.7k against 7.2k).
  • Time grows 8 times from Low to Max, 4.6 to 37.1 minutes.
  • Changes only the module, every run. Never commits a test.
  • Comments rise from 12% to 19% of the lines it adds.

GPT-6 Astra

Codex CLI · 114 of 115 solved
  • Reasoning is 13% to 19% of output from Low to High, then 32% at Extra-high and 40% at Max.
  • Time grows 2.4 times from Low to Max, 4.2 to 10.3 minutes.
  • Adds a new test file in every one of its 115 runs; the median test file grows from 103 lines at Low to 207 at Max.
  • Module changes stay small and flat: median 55 to 65 lines.

The difference that stands out is where each model puts its checking. None of the task statements asks for tests. Astra writes a regression test file anyway, in all 115 runs, and as effort rises the file doubles in length while the module change hardly moves. Fable 5.2 runs its checks in scratch space and leaves nothing behind but the module. With more effort, Astra leaves more tests in the repository; Fable 5.2 runs more checks and thinks more, and leaves no trace of either in the diff.

Claude Fable 5.2Claude Opus 5.5Claude Fable 5.1GPT-6 Astra
Runs whose patch adds a test file, of 23 at each level
Runs whose patch adds a test file, of 23, by effort level05101523LowMediumHighExtra-highMaxGPT-6 Astra, Low: 23 of 23 patches add a test fileGPT-6 Astra, Medium: 23 of 23 patches add a test fileGPT-6 Astra, High: 23 of 23 patches add a test fileGPT-6 Astra, Extra-high: 23 of 23 patches add a test fileGPT-6 Astra, Max: 23 of 23 patches add a test fileClaude Fable 5.1, Low: 5 of 23 patches add a test fileClaude Fable 5.1, Medium: 9 of 23 patches add a test fileClaude Fable 5.1, High: 9 of 23 patches add a test fileClaude Fable 5.1, Extra-high: 11 of 23 patches add a test fileClaude Fable 5.1, Max: 8 of 23 patches add a test fileClaude Opus 5.5, Low: 0 of 23 patches add a test fileClaude Opus 5.5, Medium: 0 of 23 patches add a test fileClaude Opus 5.5, High: 1 of 22 patches add a test fileClaude Opus 5.5, Extra-high: 2 of 23 patches add a test fileClaude Opus 5.5, Max: 2 of 23 patches add a test fileClaude Fable 5.2, Low: 0 of 23 patches add a test fileClaude Fable 5.2, Medium: 0 of 23 patches add a test fileClaude Fable 5.2, High: 0 of 23 patches add a test fileClaude Fable 5.2, Extra-high: 0 of 23 patches add a test fileClaude Fable 5.2, Max: 0 of 23 patches add a test fileGPT-6 AstraClaude Fable 5.1Claude Opus 5.5Claude Fable 5.2

At Low the two are close on the wall clock (4.6 against 4.2 minutes), so Fable 5.2's extra thinking costs little time there. The gap opens with effort: at Max Fable 5.2 runs 3.6 times as long. Which habit is better depends on what you want from a patch. A committed test file documents the behaviour and guards it later; a module-only diff is smaller to review. Muse Spark 1.3, the one judge that reviewed both models, rates Fable 5.2's code 6.6 to 9.0 points higher than Astra's at every level, but that verdict covers the whole patch, not the test habit alone (see methods).

ModelEffortSolvedModule
only
Adds a
test file
Module
lines
Test
lines
Comment
share
Fable 5.2Low23/2323097012%
Medium23/23230113012%
High23/23230108013%
Extra-high23/23230106017%
Max23/2323099019%
GPT-6 AstraLow22/23023551039%
Medium23/23023581099%
High23/230235715710%
Extra-high23/230236520111%
Max23/230236520711%
Fable 5.1Low19/23175108011%
Medium20/23149102010%
High20/23149133011%
Extra-high22/231211148010%
Max23/23158162010%
Opus 5.5Low17/2320069011%
Medium23/23220109013%
High22/22171102014%
Extra-high22/23212125012%
Max21/23212141016%

Module only: runs whose patch changes exactly one file. Module and test lines: median lines added to non-test and test files. Comment share counts comment lines among lines added to non-test files. Fable 5.1's and Astra's figures come from the frozen v3.4 Code quality population, Opus 5.5's from v3.15 (22 High runs) and Fable 5.2's from v3.30 and v3.30.1, all parsed the same way.

Against Claude Opus 5.5

Opus 5.5 ran in the same harness, Claude Code, and its full streams survive in the private backup, so it can be compared call by call. (Opus 5.5's thinking was not recorded as text, only as token counts, which is all this comparison needs.) The sharpest difference is at Low.

Fable 5.2 at Low reads first

23 runs · 23 solved
  • Inspected the binary before its first edit in 23 of 23 runs.
  • 0.2 calls a run that feed hand-typed input to the reference.
  • 10.7 tool calls; first edit 60% of the way through (median 2.2 minutes).
  • Biggest thinking burst: 62% of the run's thinking.

Opus 5.5 at Low probes first

23 runs · 17 solved
  • Inspected the binary before its first edit in 12 of 23 runs, and never in 7.
  • 7.9 calls a run that feed hand-typed input to the reference.
  • 40.8 tool calls; first edit 28% of the way through (median 1.5 minutes).
  • Biggest thinking burst: 23% of the run's thinking.

At Low, Opus 5.5 often treats the program as a black box: it feeds it inputs, compares outputs with the module, edits, and repeats, building its picture of the program by trial. Hedgecore shows the difference at its widest. Opus 5.5 never disassembled the binary, and took 30.1 minutes and 53 tool calls, with 11 edits and 24 test runs, to solve it. Fable 5.2 inspected the binary at its second call, spent 79% of its thinking in one burst, made one edit and one check, and was done in 3.3 minutes.

The black-box route also failed more often. At Low, Opus 5.5 solved 11 of the 12 runs in which it inspected the binary before editing, and 6 of the 11 in which it edited first. With samples this small that is a pattern worth noting, not proof that the order caused the outcome; harder tasks may invite both the guessing and the failure.

From Medium up, Opus 5.5 inspects the binary first almost every time, and by Max the two models look alike on the surface: about 37 minutes and 50 to 60 tool calls a task, with more than a third of thinking going to testing for both. The difference left is in the checking. At Max Fable 5.2 mutation-tested its checks in 21 of 23 runs and ran the Linux build in a container in 19; in Opus 5.5's 11 Max runs without fallback the counts were 4 and 0. Opus 5.5 also keeps more of its thinking on reading: 37% at Max, against Fable 5.2's 22%.

Per task, meanModelLowMediumHighExtra-highMax
Output tokensFable 5.216.2k15.0k30.8k61.7k141.5k
Opus 5.529.3k44.7k50.6k52.6k95.3k
Fable 5.185.8k92.6k105.5k145.0k101.2k
GPT-6 Astra6.4k5.9k8.2k14.0k17.9k
Thinking or reasoning tokensFable 5.27.7k7.1k18.3k40.8k94.7k
Opus 5.514.8k22.8k27.4k33.8k68.1k
GPT-6 Astra1.2k0.8k1.5k4.5k7.2k
Thinking share of outputFable 5.248%47%59%66%67%
Opus 5.551%51%54%64%72%
GPT-6 Astra19%13%18%32%40%
MinutesFable 5.24.64.37.814.237.1
Opus 5.513.718.622.120.737.5
Fable 5.126.931.728.838.827.1
GPT-6 Astra4.23.84.98.110.3

Opus 5.5 tokens come from its runs without refusal fallback (n: Low 23, Medium 20, High 15, Extra-high 15, Max 11); its minutes, like every other model's, cover all published runs (22 at High). Fable 5.1 left no thinking count.

Against Claude Fable 5.1

Fable 5.1's raw streams were lost in the same September host reset, and it was not rerun, so it is compared through receipts and patches only. Two things changed between versions.

The effort dial works now. Fable 5.1's output barely moved with effort, from 86k tokens a task at Low to 101k at Max with a peak of 145k at Extra-high, and it spent 27 to 39 minutes a task at every level. Fable 5.2 uses 19% of that output at Low, at 17% of the time, and solves 23 tasks to Fable 5.1's 19. Its output then scales 8.7 times by Max.

The patch stopped growing. Fable 5.1's median patch grew from 112 to 190 lines with effort, it committed test files in 5 to 11 runs per level, and a few patches ran to thousands of lines (13,978 at most). Fable 5.2's patch stays at about 100 lines and one file at every level. Fable 5.1's refusal fallback also answered part of 11 runs, and 6 of those failed; Fable 5.2 never needed it, although every one of its runs disassembled the binary.

What it adds up to

  1. It starts from the ground truth. In all 115 runs Fable 5.2 inspected the binary before its first edit, usually by its second tool call. It does not guess at the program's behaviour from the specification and refine by trial; it reads the program.
  2. At low effort it thinks once and well. A Low run is one long burst of reasoning between reading the disassembly and writing the rewrite, then a short differential check. That is enough to solve every task, in under five minutes on average.
  3. Effort buys proof, not a different answer. From Low to Max the patch stays one file of about 100 lines. The extra twelvefold thinking goes into checking: differential fuzzing at scale, mutation testing of the checks themselves, the second build of the reference, other interpreter versions and throughput.
  4. It keeps its scaffolding out of the diff. Unlike GPT-6 Astra, which commits a growing regression test file, and Fable 5.1, which sometimes committed tests and huge patches, Fable 5.2 leaves only the module behind.

Methods and caveats

Runs. Claude Fable 5.2 (claude-fable-5-2) in Claude Code 2.1.321, November 9 to 11, 2026, run with summarized thinking display; the published results and judging are in the Fable 5.2 results. Claude Opus 5.5 in Claude Code 2.1.280, GPT-6 Astra in Codex CLI 0.153.4 and Claude Fable 5.1 in Claude Code 2.1.259 to 2.1.261, all in September 2026. One run per task per level for every model.

Sources. Fable 5.2's 115 raw streams and tool-call logs; Opus 5.5's raw streams, restored from the private backup; and, for all four models, the run receipts and candidate patches frozen in the Code quality populations (v3.4 for Fable 5.1 and Astra, v3.15 for Opus 5.5, v3.30 and v3.30.1 for Fable 5.2). Astra's and Fable 5.1's raw streams did not survive the September host reset, so neither has a tool-call or timing comparison here; in particular we cannot say when Astra first looked at the binary.

Activities. Each tool call is put in one class by rules over its tool name, command and file paths: reading the repository or the binary, running the binary by hand, building a harness, testing, editing the module, and review. Commands that do two things get one label. In a hand check of 40 randomly chosen calls, about 33 were clearly labelled right; most misses were scripts run without a recognisable name, since fixed, and mixed commands. Treat the shares as approximate. Binary inspection before the first edit agrees with the stricter check in the results analysis (115 of 115).

Thinking. Claude Code streams a running estimate of thinking tokens. Estimates between two tool calls are credited to the second call's class, then scaled so each run's total matches its billed thinking tokens (the raw estimates run at about 70% of the billed figure). Thinking summaries are summaries, not the raw reasoning, and their counts and lengths are counted only as structure. Theme counts are keyword matches from the results analysis and are rough.

Opus 5.5 fallback. Claude Code's refusal fallback answered part of 30 Opus 5.5 runs (0, 3, 7, 8 and 12 from Low to Max). Those streams mix two models, so every trace measure for Opus 5.5 uses only the runs it served alone: 23, 20, 15, 15 and 11. Its minutes, solve counts and patch shapes cover every published run; one High run has no record in the frozen population, so High has 22.

Harnesses differ. Claude Code and Codex count thinking differently: Claude Code reports thinking tokens per response, and Codex reports reasoning output tokens, which may not capture every token of hidden compute. Compare Astra's reasoning with Fable 5.2's thinking as an order of magnitude, not a precise ratio. The harnesses also offer different tools, so tool-call counts are not compared across them.

Scores. This report is about how the models work, not how they rank. Fable 5.2's combined score runs from 91.92 at Low to 93.85 at Max, with Code quality judged by Muse Spark 1.3 and GPT-6.1 Sol. Sol has since reviewed Fable 5.1's and Opus 5.5's frozen patches beside Muse (rounds v3.30.4 and v3.30.5), so the three Claude columns share one panel: on it Fable 5.2 leads at every level, only narrowly at Medium (0.08 ahead of Opus 5.5, inside the standard error), and its Code quality is within 1.5 points of Fable 5.1's at every level. Sol cannot judge another OpenAI model, so Astra keeps its Muse Spark 1.3 and Grok 4.6 panel, and Muse alone is the only like-for-like judge across all four; the Astra comparison above uses Muse's scores. The board keeps each model's published scores. Full tables are in the Fable 5.2 results.

Data. summary.json (every figure on this page), runs-traces.csv (one row per Claude Code run) and runs-records.csv (one row per run, all four models). They are built by scripts/build_report01_data.py from the private run records and drawn by scripts/build_report01_charts.py. Neither file contains thinking text or task content.

← All reports