Experiment 03 · same model, pure harness

Same model.
You pick the better game.

Both agents were handed the identical prompt and the identical model — Claude Fable 5. The only variable is the harness: Amp Ultra (amp -x --mode ultra) versus Claude Code (claude -p --effort high). Amp built it faster and cheaper — but a game is meant to be played, so judge the result yourself.

Same model: Claude Fable 5 3 cold runs per agent Single self-contained HTML + Three.js
Play the best run of each

The face-off

We ran three cold runs per agent (benchmark strategy below) and link only the best run of each here, so you compare each harness at its strongest. Games open in a new tab. Controls: WASD move · mouse look · left-click fire · right-click pump · R reload · Esc pause. Click the game to lock the pointer.

Amp Ultra · Fable 5

Amp — best run (Cold 3)

416.5 s$2.421,218 LOCclean exit ✓

Selected as Amp’s best: cheapest and largest output of its three runs, delivered in under 7 minutes.

▶ Play the Amp game
Claude Code · Fable 5

Claude — best run (Cold 1)

765.4 s$4.801,253 LOCapi_error*

Selected as Claude’s best: its fastest and cheapest run with the most code. *All Claude runs ended in an API error, but the game HTML was recoverable.

▶ Play the Claude game
The point: on the coding process, Amp wins decisively (see the numbers below). On the game itself, we deliberately leave the verdict to you — output quantity is not quality.
Measured results

Same model — 2.1× faster, 2.6× cheaper

Both agents used Claude Fable 5, so these gaps reflect the harness, not the model.

453.8 s
Amp avg duration
953.3 s
Claude avg duration
$2.65
Amp avg cost / run
$6.95
Claude avg cost / run
RunAmp durationAmp costAmp LOCClaude durationClaude costClaude LOC
Cold 1397.1 s$2.931,118765.4 s$4.801,253
Cold 2547.6 s$2.601,1501,107.9 s$8.841,170
Cold 3416.5 s$2.421,218986.6 s$7.201,196
Average453.8 s$2.651,162953.3 s$6.951,206
3-run total$7.95$20.84 — exhausted the Claude Max monthly limit

Efficiency: Amp 2.56 LOC/s and $2.28 per 1,000 LOC; Claude 1.27 LOC/s and $5.76 per 1,000 LOC. Output size was similar (~1,100–1,200 lines) — more lines is not inherently a better game. Amp cost is zero-markup pass-through, read via amp threads usage.

Why this is the cleanest harness test

Same model, same prompt — the paper says
that is the only honest harness comparison.

The quantum benchmark on the previous page compares different models in different harnesses, so a skeptic can argue the model is doing the work. This page cannot be argued away: both agents ran Claude Fable 5 on the verbatim prompt, so model capability is held constant and the 2.1× / 2.6× gap is pure harness.

matches the 2026 academic definition

A May 2026 survey, Code as Agent Harness (arXiv:2605.18747, UIUC × Meta × Stanford), names its open problem #1 as “harness-level evaluation and oracle adequacy” — the complaint that public benchmarks “conflate the capabilities of the base model, the quality of the harness, the reliability of tools, the informativeness of feedback, and the difficulty of the environment.” This experiment is designed to not conflate: the model and the prompt are pinned, so only the harness can vary.

“The state is not what the code looks like but what the code does.” — §4.3.1, on execution-based representation

That is why this page asks you to play the games, not read the code. The paper calls this an execution-based harness representation — the verdict is the runtime, not a linguistic judgment. Four of the survey’s six harness-level metric dimensions are directly instantiated here:

01 · Trajectory efficiency
2.1× / 2.6×
faster / cheaper — same model, so pure harness efficiency
03 · Recovery ability
clean exit
Amp exits clean; all 3 Claude runs hit an API error mid-build (HTML recoverable)
04 · State consistency
controlled
identical model + identical prompt — harness is the only independent variable
05 · Replayability
playable
the trajectory ships as a runnable game — you re-execute it by playing

In the paper’s vocabulary, this is the experiment that isolates the harness as the independent variable and uses execution as the oracle. Every other public benchmark the survey cites (SWE-bench, OSWorld, MLE-bench…) varies the model alongside the harness and then reports a single conflated score. The baboons face-off is the controlled-trial version of the same idea — and it is the one a skeptic cannot dismiss as “maybe the other model was just better.”

Benchmark strategy

Why three cold runs?

Agentic coding is stochastic — one run can flatter or flunk either agent. So each agent got three independent cold runs: fresh context every time, no reference implementation, no reusing a previous attempt (no “cold-start” carry-over). Averaging across runs measures the harness’s typical behaviour rather than a lucky sample. On this page we then surface the single best run of each so you can play each harness at its strongest — the full six runs are in the repo.

The identical prompt both agents received

The prompt

Nothing was tailored per agent. The full specification — weapon ballistics, spread formula, five levels, London environment, HUD, audio — was handed to both, verbatim:

Create a complete first-person shooter game in a single HTML file using Three.js (loaded from CDN). Save the file as game.html. The game must meet ALL of these requirements: GAME CONCEPT: Player is a human hunter on the streets of London. Enemies are baboons (monkeys). 5 levels of increasing difficulty. WEAPON - Pump-Action Shotgun: 10 rounds capacity, buckshot ammunition, 9 pellets per shot. Pump action required between shots (right-click to pump). Reload with R key. Left-click to fire. SPREAD/IMPACT CIRCLE MECHANICS: Base: 45cm impact circle at 50 meters. Closer than 50m: reduce circle by factor 0.02 for every 10 meters closer (Formula: spread_diameter = 0.45 * (0.98 ^ floor((50 - distance) / 10))). 50m to 130m: increase circle by factor 1.01 for every 10 meters farther (Formula: spread_diameter = 0.45 * (1.01 ^ floor((distance - 50) / 10))). 130 meters is the end of range. Implement this as the buckshot pellet spread cone. ENEMIES (Baboons): 3D models with body, head, arms, legs, eyes. Health bar above each baboon. AI: move toward player, melee attack when close. Death animation (fall over). ENVIRONMENT (London Streets): Asphalt road with dashed center lines. Buildings on both sides with windows. Sidewalks, street lamps with point lights. Parked cars, benches, bins, bollards. Fog for atmosphere. LEVELS: Level 1: 5 baboons, 100 HP, speed 2.0, unarmed, 80m area. Level 2: 8 baboons, 100 HP, speed 3.0, unarmed, 90m area. Level 3: 12 baboons, 120 HP, speed 3.5, unarmed, 100m area. Level 4: 15 baboons, 150 HP, speed 4.0, unarmed, 110m area. Level 5: 10 baboons, 200 HP, speed 4.0, ARMED WITH SAME SHOTGUN, 120m area. On level 5, baboons can shoot back at the player with the same shotgun. CONTROLS: WASD movement, Mouse look, Shift sprint. Left-click fire, Right-click pump, R reload, Esc pause. Pointer lock controls for FPS. HUD: Health bar (bottom left). Ammo display (bottom right) showing 10 shells. Level name and score (bottom center). Crosshair with dynamic spread circle indicator. Kill feed (top right). AUDIO: Gunshot sound (Web Audio API). Pump action sound. Reload sound. Baboon scream sound. EFFECTS: Muzzle flash. Damage screen flash when hit. Level transition screens. Game over and victory screens with stats. Pause menu. TECHNICAL: Single self-contained HTML file. Three.js from CDN (use ES modules with importmap). PointerLockControls from Three.js addons. No external dependencies other than Three.js CDN. Must work by opening the HTML file in a browser.