Tools

Claude Fable 5 generated a browser 3D "Raccoon Heist" demo from a single prompt

On the fourth anniversary of an earlier concept tweet, Simon Willison asked Claude Fable 5 (via Claude Code for web) to build a complete browser 3D game from a single prompt and two images.

Claude Fable 5 generated a browser 3D "Raccoon Heist" demo from a single prompt

On the fourth anniversary of an earlier tweet, Simon Willison asked Claude Fable 5 (running in Claude Code for web) to build an entire browser 3D game from the content of that tweet and two attached images. The agent produced a playable demonstration that Was pushed to a GitHub branch and tested with automated playthroughs.

Origin and aim

Willison’s original tweet from August 5, 2022 included a GPT-3 generated product description for a game called “Raccoon Heist” and concept images produced with DALL·E. On August 5, 2026 he prompted Claude Fable 5 to “Build this 3D game, for the browser,” attaching the two images and instructing the agent to work independently and commit frequently so the development could be previewed.

Workflow: Claude Code for web and GitHub Pages

To preview progress while the agent was working, Willison paired Claude Code for web with a GitHub repository and published the branch via GitHub Pages. The key steps:

  • Create a new repository (public or private).
  • Start a Claude Code for web session and tell Claude to commit an index.html quickly and then iterate.
  • Configure GitHub Pages to deploy from the branch that Claude creates (for this project the branch was claude/3d-raccoon-heist-game-50n293).

After each push the site became visible at the pages URL in roughly 30 seconds. Willison notes that publishing from a private repo still exposes the site to anyone who can guess the repository URL.

Prompt, tech choices and how Claude filled gaps

The mobile-written prompt told Claude to produce a mobile-friendly, touch-controlled 3D browser game that serves static files from index.html, to use an OpenAI API key and gpt-image-2 for generated textures, to work without further design input, and to append progress notes to notes.md in every commit. Willison did not force technology decisions; Claude selected Three.js based on prior experience.

Giving Claude an OpenAI key allowed it to generate textures and hero art with gpt-image-2. Throughout the build the agent:

  • created an index.html and vendored a local copy of Three.js,
  • wrote a gen_textures.py script to generate image assets,
  • spot-checked generated textures,
  • created a title-screen image with gen_title.py using gpt-image-2,
  • and committed frequently to the branch claude/3d-raccoon-heist-game-50n293.

Automated testing and bug fixes

Claude ran Playwright-based smoke-tests in a bundled Chromium to take screenshots of desktop and mobile widths. The tests surfaced and Claude fixed several issues, notably:

  • a CSS assignment caused the canvas to render at 2× size on real phones (desktop DPR-1 testing had hidden the problem), and
  • the win-screen star-rating .stars CSS inherited the title-screen full-screen rule and swallowed taps on the “next night” button.

The agent recorded its build log in notes.md, including entries like the addition of a patrolling guard dog and automated verification of wander → track → caught behavior.

What the game is and how it’s built

Technical and gameplay highlights:

  • A fully 3D game built with Three.js (vendored, no CDN), procedural low-poly characters, and a procedural WebAudio soundtrack (walking-bass jazz plus all sound effects; no audio files).
  • All seven ground/wall textures and the title-screen hero artwork were generated with gpt-image-2 and committed as static assets, so the deployed demo performs no runtime API calls.
  • Mobile controls use a dynamic touch joystick (appears wherever you touch) and a DASH button; desktop uses WASD/arrows and Space.

Gameplay summary:

  • You play a masked raccoon sneaking out of the crew’s dumpster hideout into a moonlit cul-de-sac. Collect coins, gems, rings, donuts and fish (which visibly stack on your back and slow you down), then carry them home and bank them before dawn.
  • Each night raises the goal and the heat: night 1 has one flashlight-sweeping guard, night 2 has two, night 3 introduces a scent-tracking hound that ignores line-of-sight. A police cruiser sweeps the street with headlights; homeowners sometimes peek out of windows; a seagull periodically dive-bombs unclaimed loot; pizza slices trigger a 6-second speed FRENZY; and a rare golden TV is worth 120 points if you haul it home.
  • Win ranks are TRASH PANDA ⭐ → CAT BURGLAR ⭐⭐ → MASTER OF DISGUISE ⭐⭐⭐, and your best run is saved to localStorage.

Claude made seven commits to claude/3d-raccoon-heist-game-50n293 and verified them with automated Playwright playthroughs across desktop, portrait-phone and landscape-phone viewports.

Is it any good?

Willison’s assessment: technically impressive but not a good game. Specifics:

  • The implementation is notable: full 3D, flashlight illumination cones, coherent visual style, and mobile compatibility. The procedural audio matches the game’s mood.
  • However, it lacks meaningful team mechanics (the other two raccoons are decorative), has limited difficulty progression, and becomes dull once you’ve collected all items and wait for dawn.
  • The dog mechanic in night 3 is the most interesting addition, but overall the game is very easy and doesn’t sustain engaging play.

As a finished project it’s mediocre; as a fully agent-produced starting point from a single prompt it’s very impressive. Willison observes that designing genuinely fun games remains a human skill that current agents and his own quick iterations haven’t matched.

Final thoughts

Willison recommends experimenting with agent-driven game development as a low-risk way to explore agent capabilities. Tinkering can be entertaining and, with enough work, might turn an agent-generated demo into a playable game. The repository, Claude Code session and notes.md are available in Willison’s logs for those who want to inspect or run the demo locally.