explainx / blog
Did Opus 5 One-Shot Call of Duty in the Browser?
Matt Shumer’s Claude of Duty: ~55k-line Three.js FPS, zero art assets, agent harness, public prompt. What “one-shot” means — and what the README admits.
explainx / blog
Matt Shumer’s Claude of Duty: ~55k-line Three.js FPS, zero art assets, agent harness, public prompt. What “one-shot” means — and what the README admits.

Jul 25, 2026
Hours after Claude Opus 5 launched, am.will shipped a browser Rocket Arena clone with reflections, Rapier physics, and bots — then filmed Opus playing the game itself. explainx.ai breaks down the demo, stack, and what it means.
Jul 21, 2026
On July 20, 2026, The Bugged Dev gave Kimi K3 the same 3D football stadium challenge previously run on Claude Fable 5. Fable finished under an hour with one big HTML file; Kimi took nearly three hours — running E2E tests, screenshots, and responsive checks. explainx.ai unpacks the anecdote, the "vibe coding vs vibe engineering" frame, and why harness + verification behavior matter more than wall-clock time.
Jul 26, 2026
The API rate card is only the first line of an agent bill. This guide reconstructs a realistic research-and-reporting workflow turn by turn, then shows why context replay, retries, and tools determine the monthly total.
Matt Shumer’s July 25, 2026 X demo put a simple claim in front of 1M+ views: Claude Opus 5 one-shotted this game — and everything on screen was custom code, not a single external art asset. Hours later the prompt and MIT code landed as Claude of Duty: a browser FPS on Three.js r180 / WebGL2, ~55k lines, 11 subsystems, zero models/HDRIs/image/audio files.
Skeptics immediately cried “days of iteration, never one-shot.” Shumer’s reply: the prompt and code are public. Both sides can be true. This explainx.ai guide is the builder decode — what the prompt actually asks for, what the harness proves, how far it is from real CoD, and what to steal for your own Opus 5 agent loops. Pair it with the same-week Opus 5 Rocket League clone: demos are the new launch charts.
| Question | Answer |
|---|---|
| Repo? | mshumer/Claude-of-Duty (MIT) |
| Engine? | Three.js r180 + WebGL2 only |
| Art assets? | None — all procedural |
| Lines / systems? | ~55k / 11 subsystems |
| “One-shot”? | One seed prompt + agent fan-out + /loop |
| Matches CoD? | No — critics ~5.05/10 peak |
| Killer lesson? | Harness beats vibes (imagediff, profile) |
| Agent process? | Sequential owners beat parallel fan-out |
| Run? | npm i && npm run dev → :5173 |
| Prompt file? | prompt.md in-repo |
From the repo’s prompt.md — this is the published seed:
I want you to build a first-person shooter at the level of the most recent Call of Duty games. It should be utterly perfect, visually beautiful, with every single thing done at AAA quality—from textures to physics to anything you could think of.
Fan out sub-agents and have sub-agents tackle each one individually so that the game is utterly perfect. You should /loop on each item and have a separate sub-agent check it visually to ensure it looks triple A. That separate sub-agent should be a really harsh critic, and if it doesn't look triple A, it should keep going.
Don't stop until each sub-agent is utterly wowed with the quality when compared with the actual Call of Duty game. It should literally compare them side by side blind and say which one looks better. Do this in ThreeJS. /loop until it's utterly perfect. Fan out sub-agents and ultracode.
That is not “write me a cube shooter.” It is an orchestration brief: fan-out, harsh visual critics, blind A/B vs CoD, /loop until wow. Marketing “one-shot” = one human paste. Engineering reality = multi-agent search against a visual bar the README later admits was never fully cleared.
If you are writing agent prompts this week, note the pattern: impossible quality bar + explicit critic role + stop condition tied to comparison, not “looks fine to me.” That is closer to specs-not-tricks than to vibecoding folklore.
| Subsystem | Job |
|---|---|
render | HDR, CSM shadows, GTAO, TAA, motion blur, Karis bloom, EV100 metering, AgX |
materials | GPU texture forge — 19 procedural surfaces, POM, triplanar, edge wear |
sky | Scattering, TOD, PMREM, volumetric fog / shafts |
world | ~120×120 m market street, enterable interiors, instanced props |
physics | From scratch — BVH, swept capsule, CCD, PBD ragdolls, penetration |
player | Move SM, slide/mantle/lean, camera feel |
weapons | Procedural guns, ADS, recoil, ballistics |
fx | Particles, decals, tracers, muzzle, explosions |
ai | Skinned soldiers, navmesh, cover, ragdoll death |
ui | DOM HUD — crosshair, minimap, killfeed |
audio | Web Audio synthesis only — HRTF, occlusion, reverb |
ARCHITECTURE.md is the contract agents worked against: directory ownership, event vocabulary, shared surface types. That file is the real “skill” — not the X clip. Same lesson as thin prompts / thick artifacts: the durable artifact is the interface map.
Procedural everything also puts this next to img2threejs and Bunpav procedural audio — different products, same bet that code is the asset pipeline.
Shumer’s README says it out loud: the tooling may matter more than the game.
| Tool | Role |
|---|---|
capture.mjs | One named GPU headless shot |
shotset.mjs | Fast 11-shot review (leaky state) |
baseline.mjs | Isolated page per shot — bit-identical |
imagediff.mjs | Per-pixel gate; nonzero exit on any change |
profile.mjs | Real DPR gameplay; hitch attribution via WebGL program counts |
playtest.mjs | Scripted move/fire smoke |
1. Median FPS theater. Static-camera benches said ~94 fps while real Retina gameplay (3.34 MP internal) ran 12–17 fps with 728–1236 ms stalls from 34+ lazy WebGL shader compiles mid-frame. profile.mjs reporting p50/p95/p99 + program counts is what made the hitch visible.
2. Non-reproducible screenshots. Reusing one page across 11 shots leaked particles, decals, exposure — 10/11 shots differed across “identical” runs. baseline.mjs fresh pages made imagediff a real gate.
After optimization (constrained to zero visual change, proven by imagediff):
| Metric | Before | After |
|---|---|---|
| fps p50 | 12–17 | 28–30 |
| fps p99 | 4–9 | 14–17 |
| worst frame | 728–1236 ms | 66–82 ms |
| shader compiles in play | 34–35 | 0 |
| boot | ~9–12 s | 3.7–4.6 s |
Shader pre-warm killed stalls. Making pre-warm pixel-neutral required fixing clocks that animated off performance.now() instead of the engine clock — boot-time changes were shifting “identical” frames. That is elite harness thinking, not demo fluff.
Builder takeaway for Claude Code / agent fleets: if you cannot diff pixels and attribute hitches, you are optimizing vibes. See also agent harness guide and Claude Code model vs effort.
The README refuses cope:
The goal was to match a modern Call of Duty. It does not.
Critic scores: 3.59 → 4.14 → 4.05 → 5.05 / 10. Two shots “CLOSE”; rest “AMATEUR”. Blind A/B: every critic every round picked real CoD.
Called-out gaps: blocky hands, procedural-noise materials up close, mannequin enemies, approx GI, 28–30 fps at Retina after art passes nearly doubled triangle cost (5.9M → 11.3M).
Unfixed root cause: viewmodel light rig ~20× the irradiance of the world — black material in view scene still renders bright from F0; weapon albedos cheated to ~⅓ physical, capping material separation on the most-looked-at object.
That honesty is why this demo is useful. Compare to launch-week Opus 5 charts — demos sell the ceiling; READMEs that admit the floor teach you how to run agents without self-delusion.
Three rounds of six agents each owning a directory moved score only +0.46 and left frame-ruining defects higher (60 → 47 → 66) because tonemap / sky / indirect light are one coupled system — isolated agents broke each other’s assumptions.
One sequential pass with a single owner per coupled concern: +1.00 score, defects 66 → 26.
Best single insight: critics kept saying the weapon was “untextured.” It was not — it was specular-dominated (diffuse L=26 vs shipped L=67). Prior rounds crushed albedos to fight “too bright,” which killed diffuse and made the complaint worse. The winning agent contradicted the brief and raised diffuse instead.
That is the map is not the territory lesson in game form: critic language is a lossy sensor; measure the actual L values.
| Phrase | Accurate meaning here |
|---|---|
| One-shot | One human seed prompt / session intent |
| Not one-shot | One forward pass, no loops, no critics, no harness |
| Opus 5 role | Frontier model powering the agent fleet (per Shumer) |
| What shipped | Orchestrated multi-subsystem codebase + eval tools |
X commenters who assumed hidden day-long manual coding still owe the public prompt.md a read — but you also should not claim “55k LOC in one completion.” Precision keeps demos credible next to Rocket League Opus play and Shumer’s earlier voxel Manhattan prompting work.
git clone https://github.com/mshumer/Claude-of-Duty.git
cd Claude-of-Duty
npm install
npm run dev
Open http://127.0.0.1:5173, click canvas to lock pointer. Controls: WASD, mouse, LMB fire, RMB ADS, R reload, Shift sprint, Ctrl crouch, Space jump, Q/E lean, Esc release.
Expect Apple-silicon Retina numbers in the mid-20s fps on ultra unless you lower preset — the README already set expectations.
Primary sources: GitHub — mshumer/Claude-of-Duty · in-repo README.md / prompt.md / ARCHITECTURE.md · Matt Shumer’s July 25–26 X demo and follow-ups.
Stars, fps numbers, and critic scores are as published in the repo README around July 26, 2026. Re-clone before citing — demos iterate fast.