Part of our AI Comparisons
Models·9 min read
By BitsMinds Hands-on test

GPT-6 Astra vs Claude Fable 5.1: Hill Climb

For the first time in this series, both models were told to run what they built and fix what they found before reporting done. Both did it at length — six test harnesses, a real browser, screenshots of every screen. Both still shipped a fault a player meets in the first minute. Both games are playable in the article.

Hill Climb: GPT-6 Astra versus Claude Fable 5.1 A teal desert buggy climbs a sandstone ridge on the left. An orange jeep climbs a green hill on the right, under an arc of gold coins. The two landscapes meet at a diagonal divide. 7 GPT-6 ASTRA CLAUDE FABLE 5.1 VS HILL CLIMB BITSMINDS.COM
Share:
BitsMinds LabHow this test was run2 models · 1 briefs · one attempt per model, and for the first time in the series both were required to run, exercise and fix their own build before reporting done — the report froze the file · Claude Fable 5.1 at maximum in Claude Code; GPT-6 Astra at Extra High in OpenAI Codex. Each is the top of its own product's dial, which is not the same as a measured equivalenceShow details
Models
Claude Fable 5.1 (Claude Code) · GPT-6 Astra (OpenAI Codex)
Attempts
One attempt per model, and for the first time in the series both were required to run, exercise and fix their own build before reporting done — the report froze the file. No retries, no follow-up notes, no cleanup.
Reasoning effort
Claude Fable 5.1 at maximum in Claude Code; GPT-6 Astra at Extra High in OpenAI Codex. Each is the top of its own product's dial, which is not the same as a measured equivalence.
Tools allowed
The opposite of every earlier round. Both models were told to verify before reporting done and both had a shell, Node and a browser to do it with: Astra wrote six test harnesses and drove Chrome over the DevTools protocol, Fable 5.1 wrote four physics harnesses and did the same.
Timing
Wall-clock time from prompt to finished file: Astra 28 minutes 24 seconds, Fable 5.1 75 minutes 38 seconds.
Scoring
Four categories scored out of five: graphics, physics, sound and gameplay. Final: Fable 5.1 15, Astra 14. No category for faithfulness to the original game, which is inspiration rather than a specification, and no credit for the amount of testing a model did.
Judging
Scored by BitsMinds from a local side-by-side comparison page of the untouched outputs. No blind scoring, no automated grading. Both games were played in an ordinary browser rather than in any preview tool.
Published
September 19, 2026

Result

ModelProviderScore
Claude Fable 5.1Anthropic15 pts
GPT-6 AstraOpenAI14 pts

15-14 to Fable 5.1, the narrowest result the series has recorded. Both models verified at length and both still shipped a visible fault, because what they checked was the engine and never the level.

The briefs — as described in the article; the exact prompt files were not published

  1. Round 1: Hill Climb Racing (single HTML file)

    Recreate Hill Climb Racing as one self-contained HTML file — everything inline, no CDN, no network, no images, all art drawn in code — surviving an iframe sandboxed with allow-scripts only, so no local storage and no cookies. Three screens in a loop with no dead ends: an opening screen, a menu, and the game itself with one level. A two-wheeled vehicle with suspension over hilly terrain, a camera that follows it, throttle and brake on the keyboard and as touch controls, a real fail state, a restart that does not reload the page, and physics not tied to the frame rate. Fuel and coins were deliberately not mentioned.

    Result: Fable 5.1 15-14 across four categories. Both shipped fuel and coins unprompted; both also shipped a fault a player meets in the first minute.

Read with care

  • Single run per model — a re-run could land differently.
  • Different harnesses (Claude Code vs Codex) mean the environment, not just the model, was under test.
  • The cover illustration was drawn by GPT-6 Astra, one of the entrants, from the finished article; the score it had put on the card was removed before publication.

Part of BitsMinds Lab, our series of original hands-on tests.

Every previous round of this series has carried the same line in the brief: write the file and stop, you will not see it run. The faults that decided those rounds were nearly all of one kind — a carousel that never turned, a rocket flight whose sequence ended at “ascent”, ghosts that rode the walls instead of the corridors. Each was the sort of thing a model catches in seconds by opening what it made. So the standing excuse held: these are failures of finishing, not of capability.

This round takes the excuse away. Both models were told to run what they built, exercise it, look at it and fix what they found, with a single hard stop: the moment either reported it was done, the file was frozen and judged exactly as it stood. Verifying was not merely permitted, it was demanded, and time spent on it was explicitly not held against them.

They both took the invitation seriously. OpenAI’s GPT-6 Astra wrote six test harnesses and drove a real Chrome. Anthropic’s Claude Fable 5.1 wrote four physics harnesses and drove a real Chrome. Between them they produced more than thirty screenshots, ran the physics at frame rates from 30 to 144, and tested their own games inside a sandboxed iframe with storage blocked.

Both still shipped a fault that a reader finds in the first minute of play. The round went to Fable 5.1 by a single point, 15–14, the narrowest result this series has recorded.

Play them both

Both builds run below exactly as the models wrote them, nothing added and nothing tidied. Arrow keys or WASD on a desktop, the on-screen pedals on a phone. Click into a game before using the keyboard.

Ridgeline — GPT-6 Astra, 28 minutes 24 seconds.

Ridge Runner — Claude Fable 5.1, 75 minutes 38 seconds.

The brief

Recreate Hill Climb Racing as one self-contained HTML file: everything inline, no CDN, no network, no images, all art drawn in code. It had to survive an iframe sandboxed with allow-scripts only — no local storage, no cookies — because that is how it is embedded on this page. Three screens in a loop with no dead ends: an opening screen, a menu, and the game itself with one level. A two-wheeled vehicle with suspension over hilly terrain, a camera that follows it, throttle and brake on the keyboard and as touch controls, a real fail state, a restart that does not reload the page, and physics not tied to the frame rate.

What the brief never mentioned was fuel or coins — the two things Hill Climb Racing is actually built around. In earlier rounds the rule has been that a trap named in the brief gets solved and an unnamed one of equal difficulty gets approximated. Both models shipped fuel and coins unprompted. Both knew the game.

Ridgeline, by GPT-6 Astra

Astra took 28 minutes 24 seconds and 53 KB. It built a warm desert in flat editorial colour: sand, teal and terracotta, a buggy drawn with more mechanical detail than anything else in the round, and a menu that reads like the inside page of a travel magazine — a route profile of the hills ahead, a distance to the lookout, a fuel-stop count, a difficulty rating.

Ridgeline in play: a teal buggy climbing a sand-coloured ridge, with distance, fuel and coin readouts across the top and brake and gas pedals at the bottom corners
Ridgeline climbing out of the foothills. Distance, fuel and coins across the top, pedals in the bottom corners, and a fuel pickup announcing itself mid-screen. The three birds over the ridge are the ones that never move.
Ridgeline end-of-run panel reading Dust Yourself Off, with distance 294 metres, run time 26 seconds, 43 coins and 2.5 seconds of airtime
Astra’s end-of-run panel, here after a flip at 294 m. Every run terminates on this card, and both routes out of it lead back into the loop.

Ridge Runner, by Claude Fable 5.1

Fable took 75 minutes 38 seconds and 81 KB, and assembled it from nine source files through a build script of its own making. Its choice is the opposite one: bright arcade colour, a hard sun, a chunky orange jeep, a title screen where a bot drives the real physics behind the logo. It is the build that looks more like the game it is copying, and it is the one that feels quicker under the thumb.

Ridge Runner in play: an orange jeep airborne over a green hill under a blue sky, with an air time bonus counting up and a fuel can waiting on the ground ahead
Ridge Runner airborne off the first crest, 140 m in, with the air-time bonus counting up and a fuel can waiting where it lands.
Ridge Runner finish panel: 912 metres, 1 minute 30 seconds, 85 coins, longest air 2.5 seconds, no flips, score 10,747
A full-throttle run all the way to the flag: 912 m, 85 coins. That number matters — see below.

What they actually checked

This is the part the round exists to observe, and neither model coasted.

Astra wrote harnesses for physics, invariants and tuning, then automated a real Chrome over the DevTools protocol and walked its own game through every screen: opening, menu, driving, airborne, crash, out of fuel, finish line, pause, plus a small-screen pass. It ran 18 stress runs and checked that the simulation agrees with itself between 30 and 144 frames per second. It loaded the finished file inside an allow-scripts iframe with storage blocked, which is exactly the condition this page imposes.

Fable wrote a rest test (0.000 mm of drift), a fuzzer across 24 random throttle-and-brake policies, 25-metre drops onto flat ground and onto a 41° slope at 21.7 m/s, and a jump tracer. It drove its own step function at a steady 60 fps, a steady 30 fps and a jittery 4–100 ms pattern and got bit-identical end states. It screenshotted every screen at three viewports including a 390×700 portrait phone, ran the game inside a sandboxed iframe at three sizes, and confirmed through performance.getEntriesByType('resource') that the page makes no network requests at all.

Read those two paragraphs again and the round looks like it should have produced two clean builds.

What they missed

Fable’s level hangs 32 of its 117 coins in arcs over the four jumps, and almost none of them can be collected. The cause is one argument. The 85 coins in the ground rows are placed at terrain.groundY(x) - 1.35 — the surface directly beneath each coin, always within reach. Four lines later, the arc coins are placed at terrain.groundY(j[0]) - arc: the ground height at the start of the jump, a single fixed reference, while the arc runs 18 metres downrange and adds up to 8 metres on top of it. The arc never looks at the terrain underneath itself.

Replaying Fable’s own physics engine into each jump at full throttle from 60 metres back, and measuring height above ground with the same expression its own tracer uses:

JumpCar’s apexCoin heights above the surfaceReachable
380 m2.1 m3.4 · 6.3 · 8.7 · 9.7 · 10.0 · 10.1 · 9.5 · 7.90 of 8
560 m1.9 m2.7 · 5.5 · 8.6 · 10.3 · 10.6 · 10.6 · 10.3 · 9.50 of 8
715 m2.4 m4.6 · 9.6 · 13.6 · 16.2 · 17.6 · 17.3 · 15.3 · 12.90 of 8
830 m4.2 m3.4 · 6.6 · 9.5 · 11.6 · 12.3 · 10.6 · 7.5 · 4.71 of 8

The finish panel further up says the same thing from the other direction. That run drove the level end to end at full throttle and came home with 85 coins — exactly the number of coins in the ground rows, and not one of the 32 in the arcs.

Now the uncomfortable part. Fable wrote the instrument that finds this. Its jump tracer drives the vehicle off the first ramp under three different control policies and prints, among other things, maxH=2.6m. It ran that harness. It reported the number. It never compared the number with the heights it had hung in the air.

Astra’s two faults are smaller and both sit in the presentation layer. Three birds hang in the canyon behind the buggy, and they are static: their horizontal position includes the camera offset so they drift with the parallax, but their height is a constant and nothing in the expression that draws them is a function of time. They never flap and they never fly. And the audio is close to inaudible — the engine drone is held at a gain of 0.026 and one-shot effects default to 0.07, against Fable’s 0.8 master and 0.45 engine. Astra also ships with sound off until you switch it on. Turn it up to the top of the dial and the engine is there; at a normal volume the game is silent.

Time, tokens and what the round cost

Astra was faster by a factor of 2.7, which is the same direction every cross-lab round has gone so far.

GPT-6 AstraClaude Fable 5.1
SettingExtra HighMAX
Wall clock28 min 24 s75 min 38 s
Delivered file53 KB, 222 lines81 KB, 1,529 lines
Tokens reported141,245358,999
List price$10 per million in, $50 per million out — the same for both

Those token totals come from each harness’s own accounting and are not guaranteed to count the same things, so read the ratio rather than the absolute figures: Fable spent roughly two and a half times the tokens and two and a half times the wall clock for a one-point win. At list prices the two models are identical per token, which makes the token ratio the cost ratio — and on a rough agentic split that lands near two dollars against five.

Scoring

CategoryGPT-6 AstraClaude Fable 5.1
Graphics34
Physics44
Sound34
Gameplay43
Total1415

Graphics went to Fable on the strength of the direction rather than the draughtsmanship: Astra’s buggy is the better-drawn object and its palette is the more sophisticated one, but Fable’s brighter register is the one that pulls the eye and the one that reads as this kind of game. Physics was a draw — both vehicles drive as they should, suspension and all. Sound went to Fable on audibility. Gameplay went to Astra, and only because of the coins: Fable’s game is the more enjoyable one to drive right up to the point where you watch a row of coins sail past overhead.

What the round shows

Letting a model check its own work did not produce a clean build. It produced a confident report. Astra signed off with the sentence “no known unfinished or broken features”; Fable volunteered three limitations, and the coins were not among them.

What both models verified was the engine: integrator stability, penetration depth, frame-rate independence, the screen graph, the sandbox. What neither verified was the level — whether the thing built on top of that engine is playable as designed. Every check they ran was a check that passes on a correct engine carrying a broken level. The fault that decided the round was not beyond either model’s reach; it is two numbers, in two files, one of which Fable had already printed.

That is a narrower and more useful finding than the one the old format produced. It is not that these models cannot test their work. It is that, left to choose what to test, they test the machinery and not the experience.

How this test was run

One attempt each, the same prompt to both apart from the output path, no follow-up messages and no clean-up: both files are served exactly as the models wrote them. Fable 5.1 ran as a Claude Code subagent at maximum effort; GPT-6 Astra ran in OpenAI’s Codex CLI at Extra High. Identical prompt, different scaffolding. Both were told to verify before reporting done, and both had a shell, Node and a browser available to do it with. Scoring was done by BitsMinds across four categories from a local side-by-side page, playing both games in an ordinary browser rather than in any preview tool; the coin measurements above were made afterwards by replaying the delivered build’s own physics code.

Earlier rounds: the same two models on three briefs, and Claude Opus 5 against GPT-5.6 Sol, both under the old no-checking rule.

More on Claude

Evergreen coverage we keep current — start here.

Want AI news before everyone else?

The morning's most important AI stories, straight to your inbox. No fluff.

Related Articles

Gemini 3.8 Live: thinking while the conversation continues An editorial illustration in a dark blue and violet room. A carefully drawn studio microphone and a tilted smartphone flank a translucent speech bubble carrying the multicoloured Gemini star. A continuous luminous audio waveform travels between them. Above the bubble, a separate arc connects small search, reasoning and completion symbols, representing background work continuing during a spoken conversation. The phone screen and visual paths are conceptual, not a reproduction of Google's actual interface or internal reasoning. Original vector illustration for BitsMinds, gemini-3-8-live-extended-thinking-voice. 16 September 2026. GEMINI 3.8 LIVE EXTENDED THINKING Gemini 3.8 LIVE The conversation continues Thinking. Still talking. BITSMINDS.COM
Models

Gemini 3.8 Live Tops Voice AI and Undercuts GPT

Atria Dawn Preview 744B · MIT · shipped with no announcement BITSMINDS.COM
Models

Atria Dawn: A 744B Agent Model, Shipped in Silence

Anthropic model cadence: waiting for the next beat A sculpted terracotta metronome with the Claude symbol stands on a warm cream surface. Beside it, a solid model cartridge reads Fable 5.1, released 1 September. An outlined, translucent future cartridge reads Fable 5.2 with a prominent question mark and the word Unconfirmed. Six small solid beats represent the six models released since April. The image illustrates a release pattern and an unconfirmed rumour, not an announced model or launch date. ANTHROPIC MODEL CADENCE / 2026 RELEASE RHYTHM ANTHROPIC The next beat? A release pattern. A rumour. An open question. FABLE 5.1 RELEASED / 01 SEP 2026 FABLE 5.2 ? UNCONFIRMED NO OFFICIAL ANNOUNCEMENT SIX RELEASES SINCE APRIL BITSMINDS.COM
Models

No Fable 5.2 Yet, but Anthropic’s Cadence Says Soon