November 8, 2026
Real Unreal Bench
Large multi-system changes in complete, private Unreal Engine 5 games: fixing bugs, correcting work and building features across code, maps, materials and assets. A run is scored only on how the running game behaves, by deterministic checks; no model judges pass or fail.
TL;DR
The best score is 12 of 15 change requests in real, human-made games. The median model passes 9.
Claude Sonnet 5.580% ±19%
GPT-6.1 Sol73% ±21%
Claude Opus 5.567% ±22%
Gemini 4 Argon60% ±22%
GPT-6 Astra60% ±22%
Claude Haiku 5.553% ±23%
Qwen3.8 Max33% ±22%
Grok 4.720% ±19%
GPT-6.1 Sol71% ±28%
Claude Sonnet 5.557% ±30%
Gemini 4 Argon57% ±30%
Claude Opus 5.543% ±30%
GPT-6 Astra43% ±30%
Claude Haiku 5.529% ±28%
Grok 4.70% ±18%
Qwen3.8 Max0% ±18%
Claude Sonnet 5.5100% ±28%
Claude Haiku 5.567% ±37%
Claude Opus 5.567% ±37%
Gemini 4 Argon67% ±37%
Grok 4.767% ±37%
Qwen3.8 Max67% ±37%
GPT-6 Astra33% ±37%
GPT-6.1 Sol33% ±37%
Claude Opus 5.5100% ±28%
Claude Sonnet 5.5100% ±28%
GPT-6 Astra100% ±28%
GPT-6.1 Sol100% ±28%
Claude Haiku 5.567% ±37%
Qwen3.8 Max67% ±37%
Gemini 4 Argon33% ±37%
Grok 4.733% ±37%
Claude Haiku 5.5100% ±33%
Claude Opus 5.5100% ±33%
Claude Sonnet 5.5100% ±33%
Gemini 4 Argon100% ±33%
GPT-6 Astra100% ±33%
GPT-6.1 Sol100% ±33%
Qwen3.8 Max50% ±41%
Grok 4.70% ±33%
The share of runs that passed every required check; whiskers show its 95% intervals. 15 tasks × 1 run per model, version v1.
- Version
- v1
- Date
- November 8, 2026
- Models
- 8
- Tasks
- 15
- Runs per model
- 1
- Harness
- game-agent/3, game-agent-tools/1
Why we built it
A one-line bug fix is a question with an answer. A change request in a real game is an afternoon that goes wrong in four places.
Picture one (it's ours, not from the set): in the second act a door won't open, enemies spawn through the floor, and saving crashes on the last level. Nobody tells you which of those live in code, which in a map, and which in an asset a text editor can't open. Fixing it means reading a project you've never seen, changing C++ and content together, rebuilding, launching the game, playing to the broken moment and finding the second problem hiding behind the first. A human developer knows the job is done when the game plays right, not when the compiler goes quiet.
Most published game-development benchmarks test smaller units of that work, or let a language model read the result and decide if it's right. We wanted to test the afternoon itself: large multi-system changes in complete private games, graded only by what the running game does.
Here's the scale of one version of the benchmark, and why each number is there. The ranges matter more than the averages: a small task and a big one test different things.
15
tasks across eight games in eight genres
Several games, so one project isn't the whole score.
7–1091
game files in each recorded fix, generated and re-saved assets included
A fix rarely fits in one file, so the model has to find its way around first.
2–5
systems touched
Code, maps, materials and assets break in different ways and need different tools.
8–45
required checks per task
A task passes only when every required check does, so fixing the easy half can't earn a pass.
300
turns per run, at most
Enough for the full loop of edit, build and play, many times over.
480
minutes per run, at most
A real build-and-play loop is slow, and the budget has to leave room for it.
How we built it
Where the tasks come from
Every task is a real change in a complete, private, licensed, human-made Unreal Engine 5 game. We call the tasks large multi-system changes, by the size of each recorded fix and its checks.
The benchmark draws on our private collection of 1,000+ games. The task pool by genre, as a share of its tasks:

How the tasks were chosen
We picked this version's tasks from a much larger private pool before any model ran, and fixed the checks and the settings in advance. The pick used one earlier validation run of each task with Codex: tasks it didn't solve, and the ones it took longest to solve. Every game builds and plays on Linux.
The tasks come from eight games in eight genres. The rest of the pool stays private, held out for later versions.

How big the work is
A median task changes 46 game files, but one average hides what matters here: the smallest fix touches 7 files and the largest 1091. Tasks span up to 5 systems. Those counts include generated and re-saved assets.

The environment
Each run gets its own Linux VM with one L4 GPU and a working copy of the game. The agent can read and edit the project, build it, launch it and play it, the way a human developer would. It can't see the reference solution, and it's told each task's milestones in words but not how they're measured. Nothing it leaves running on its VM survives into grading.

Every model runs in the same harness. Our game agent gives each model the same tools and the same prompt (game-agent/3, game-agent-tools/1), with a budget of 300 turns per run, 64,000 output tokens per turn, thinking effort set to high on every model that takes it, and a time limit of up to 480 minutes and a cost cap set per task. No model runs in its maker's own agent, and no other model ever answers a turn for the one being tested. We ran eight models and one run of each per task, because a run can take hours on a GPU.
Findings
Three things stood out in this version's results. Each comes with its chart.
The price of a pass is set by GPT-6.1 Sol and Claude Sonnet 5.5.
Every other model is beaten on both axes: another model passes at least as many tasks for less money. Cost per task runs from $3.13 to $33.07, a spread of 11×, and the leader's $19.95 is the price of the top of the chart. If you're buying volume instead, the cheapest model on the frontier, GPT-6.1 Sol, still passes 73%. Cost covers each model's own calls; Limitations has the details.
Pass rate (%)
Mean model cost per task (US dollars, log scale)
Models that work longer pass less: Spearman's ρ is −0.65 across 8 models.
The relationship runs the wrong way for anyone hoping time buys quality: the longest runs are the ones that are lost, not the ones that are thorough. Median runs go from 76 to 300 turns.
Pass rate (%)
Median turns per run
Two of the 15 tasks beat every model.
Tasks sit in rows, the hardest kind at the top, and models in columns. By kind, 38% of finished runs pass on feature requests, against 81% on change requests, over few tasks each. Partial credit is where the near misses show: 89% of failed runs still fixed something, with a median of 79% of the checks a change could earn. That is the gap between starting a request and closing it.
| All | Claude Sonnet 5.5 | GPT-6.1 Sol | Claude Opus 5.5 | Gemini 4 Argon | GPT-6 Astra | Claude Haiku 5.5 | Qwen3.8 Max | Grok 4.7 | |
|---|---|---|---|---|---|---|---|---|---|
| Model avg | 83% | 94% | 83% | 92% | 91% | 87% | 79% | 74% | 68% |
| Feature | |||||||||
| Task 1 | 77% | 77% | 79% | 82% | 94% | 82% | 77% | 79% | 44% |
| Task 2 | 40% | 40% | 70% | 60% | 40% | 50% | 40% | 0% | 20% |
| Task 3 | 91% | 91% | 100% | 91% | 100% | 100% | 91% | 82% | 73% |
| Task 4 | 84% | 100% | 100% | 100% | 95% | 95% | 90% | 0% | 90% |
| Task 5 | 88% | 100% | 100% | 100% | 100% | 93% | 27% | 93% | 87% |
| Task 6 | 83% | 100% | 100% | 80% | 100% | 100% | 100% | 60% | 20% |
| Task 7 | 88% | 100% | 100% | 100% | 100% | 100% | 100% | 60% | 40% |
| Correction | |||||||||
| Task 8 | 51% | 100% | 0% | 67% | 78% | 89% | 0% | 56% | 22% |
| Task 9 | 75% | 100% | 0% | 100% | 100% | 0% | 100% | 100% | 100% |
| Task 10 | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| Bug fix | |||||||||
| Task 11 | 88% | 100% | 100% | 100% | 80% | 100% | 60% | 80% | 80% |
| Task 12 | 98% | 100% | 100% | 100% | 80% | 100% | 100% | 100% | 100% |
| Task 13 | 97% | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 75% |
| Change | |||||||||
| Task 14 | 97% | 100% | 100% | 100% | 100% | 100% | 100% | 93% | 86% |
| Task 15 | 97% | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 79% |
Tasks
- 1Add a light-beam puzzle chamber0% ±16%
- 2Turn a blockout valley into a real place0% ±16%
- 8Playtest fixes for a fantasy battle game's first trial13% ±22%
- 3A HUD, levelling, new enemy looks and a first village38% ±28%
- 4The hero's fight, three levels, every menu and a hub village38% ±28%
- 5Three levels, every menu and a hub village50% ±29%
- 11Play an action RPG against its spec and fix what breaks50% ±29%
- 6Drift boosts, items, hazards, sound and menus for a buggy racer63% ±28%
- 7Give the hero her fight75% ±26%
- 9Sound, feedback and guards for a mission played unseen75% ±26%
- 14Drop an event and act on playtest notes in an athletics game75% ±26%
- 12Fix sixteen bugs from a QA pass88% ±22%
- 13Fix the first look at a helicopter demolition game88% ±22%
- 15Play an athletics game against its spec and fix it88% ±22%
- 10Playtest fixes for a helicopter demolition game100% ±16%
The share of all a task's runs that passed every required check, with its 95% interval.
How it's graded
What an end-state check is
When a run stops, we throw away the agent's container. A clean copy of the project at its final commit gets our own probe plugin put back, and then it's built and played in a fresh container. The checks read what happens in that play: whether a thing appears, moves, responds, triggers or ends the way the request asked.
So an agent can't talk its way to a pass. Nothing it wrote about its work is read, and nothing it changed in the probes survives the clean copy. A game that doesn't build fails everything that needs it to play.

Required checks decide the pass
Each task has 8 to 45 required checks: the build, the start, and measurements of the played game. A task passes only when all of them pass. That is the number on the leaderboard, and it's deliberately unforgiving: nine of ten checks passed is a failed request.
Partial credit shows the rest
Partial credit is the second number, on the heatmap, so a model that gets most of the way shows it. It counts only the checks the untouched start fails: partial = (checks passed − checks the start passes) ÷ (checks − checks the start passes), floored at 0.
Doing nothing scores 0. Say a task has eight required checks and the start already passes two of them. A run that passes five earns (5 − 2) ÷ (8 − 2) = 50%, and it does not pass.
Rules every check follows
Before this version ran, every check was tried against real validation runs. Each time one judged a run wrongly, the check was fixed, never the request. These are the rules that came out of that work, and the checks are held to them.
A fix goes in the check, never in the request. A fix can make grading more accurate. It can't make a task easier.
Results, not methods. A check doesn't look for the reference solution's names, positions, fonts or kinds of parts. Any way of producing the asked-for result passes, and each result is read one way however it was made: whether something is lit, whether it changed, what's on screen.
Thresholds are calibrated. A threshold sits between the untouched start and the reference, with room for run-to-run noise. It's never the reference's own number.
The untouched start scores 0, and the reference passes every required check. A check the start already passes only guards that existing features still work, and it carries no weight.
No luck. The same project gets the same result every time, on any machine.
A failed check is the run's failure. A check is called unreadable only on independent evidence, such as frames or logs, from a reviewer who hadn't seen it.
Every task has a reference solution, so it's shown to be solvable before it's scored.
No model decides a pass
Required checks are deterministic code, not opinions. Where a task also carries a model's review, it's advisory: it never decides a pass and it isn't in the partial score. The reason is simple. A judge that reads the output can be charmed by it, and a running game can't.
Two scripted agents
Two scripted agents ran the same tasks through the same grading. One changes nothing and passes 0 of 15 tasks. One applies the reference solution and passes 15 of 15 tasks.
Which runs count
One run per model per task, 120 runs in all. A model's own result counts against it: a bad edit, a broken build, the budget running out, a refusal. Another one run was lost to our infrastructure, a VM or a capacity outage. One of those ran again, and none counts against a model.
- The project builds from clean
- KindRequired
- WeightGate
- ResultPassed
- First issue: the behavior now happens in play
- KindRequired
- WeightEqual share
- ResultPassed
- Second issue: the broken state is gone
- KindRequired
- WeightEqual share
- ResultPassed
- Third issue: the new feature responds to input
- KindRequired
- WeightEqual share
- ResultFailed
Limitations
- 15 tasks and one run per model make wide intervals, so models a task or two apart aren't ranked apart.
- Output per turn is capped at 64,000 tokens for every model, and a run the cap ends counts as a failure.
- Costs are the model's own calls at list prices, without the VMs.
What comes next
Later versions may add tasks from the held-out pool and more runs per model, so the intervals can start separating models. We plan to publish the leaderboard's tasks, with their games, reference solutions and checks, so anyone can run and grade them. The rest of the pool stays private.
Versions
- v12026-11-08Second version: 15 tasks chosen before any model ran, eight models with the same settings. Kimi K3 was taken out before any of its results, as a newer Kimi had shipped.
- v02026-11-05First public version: fifteen tasks, nine models, one run per model.
Cite it
@misc{superposition2026unreal,
title = {Real Unreal Bench: a benchmark of large multi-system changes in complete private games},
author = {{Superposition}},
year = {2026},
howpublished = {\url{https://unrealbench.dev}}
}