← 返回
精选AI模型发布/更新#Claude Code#Claude Fable 5#GitHub Pages#OpenAI#Raccoon Heist#Three.js

用Claude Fable 5零人工干预生成完整浣熊抢劫游戏:一次推文到成品的实验

Simon Willison 博客(Atom)T2
03:4208/06 03:42社区阅读原文 ↗导出 MD ↓

评分

77
信息增量8 ×0.3

展示了AI从概念素材自主构建完整游戏的详细流程,包含提示词和工具链,具有较高的信息增量。

内容质量9 ×0.2

文章结构清晰,包含可复现的代码、截图和过程记录,质量上乘。

实用价值8 ×0.2

对于想用AI自主开发游戏或应用的开发者,提供了可直接参考的工作流和提示词模板。

时效性9 ×0.15

发布于2026年8月,反映了最新的AI模型能力,具有时效性。

信源可信度9 ×0.15

Simon Willison是知名技术作者,Blog内容基于亲身实验,可信度高。

基础分 85 × T2 信源权重 ×0.9 = 77

精选线 70已入选精选

精选理由

文章提供了可复现的提示词、工具链和过程记录,兼具趣味性和技术深度,是一份高质量的一手实践报告。

AI 点评

「这篇文章最吸引我的不是“浣熊抢劫”游戏本身,而是Fable 5在零人工干预下独立完成了美术生成、技术选型、功能迭代和测试修复的完整闭环。对于独立开发者,这意味着你只需一句提示词就能获得一个可玩的MVP;对于AI研究者,它展示了模型在长时程任务中的自主规划与工具调用能力。强烈建议阅读完整的transcript和notes.md,你会看到AI如何一步步修正自己的错误。」

速览

Simon Willison在2022年用GPT-3和DALL-E生成了一款名为“Raccoon Heist”的游戏概念推文。四年后,他决定测试Claude Fable 5能否仅凭那两条截图和文本提示,独立构建出完整可玩的3D游戏。通过Claude Code for web结合GitHub Pages实时预览,并赋予OpenAI图像模型API访问权限,Fable 5成功生成了游戏的全部内容,包括纹理、UI、移动端适配,还自主添加了巡逻狗等机制。文章详细展示了提示词、开发流程和中间产物,为AI自主编程提供了宝贵案例。

  • Claude Fable 5根据2022年的推文截图,独立完成了从游戏设计到代码实现的全部工作。
  • 通过GitHub Pages实现持续预览,Claude Code在每次提交后约30秒内展示最新版本。
  • Fable 5利用OpenAI的gpt-image-2生成游戏纹理和标题画面,并自主决定技术栈(Three.js)。
  • 游戏包含移动端优化、巡逻狗等机制,并通过Playwright自动截图验证和修复了视觉问题。

正文

以下为原文,中文全文翻译生成中

Back in 2024 I tweeted screenshots of a game concept generated by GPT-3 and some concept "art" created using DALL-E. Today, on the fourth anniversary of that tweet, I decided to see if Claude Fable 5 (running in Claude Code for web) could build the entire game from the content of that tweet. It did a pretty good job of it!

You can play the game here. Here's a short video demo:

Your browser does not support HTML5 video.

How I built this

This is the August 5th, 2022 tweet:

Simon Willison @simonw - New hobby: prototyping video games in 60 seconds using a combination of GPT-3 and DALL-E Here's "Raccoon Heist". Two images - the first is a screenshot of the GPT-3 playground, prompt below. On the right is a very clearly DALL-E generated image of an almost-isometric 3D computer game, with two raccoons sneaking down a street past a futuristic looking building, looking like they want to steal something.

My GPT-3 prompt back then was:

Write a detailed product description of a computer game where a team of raccoons go on heists.

This was in the text completion days, where you asked GPT-3 to complete the rest of the text. It completed:

In "Raccoon Heist", you and your team of thieving raccoons are tasked with pulling off a series of daring heists. From robbing banks to stealing priceless art, no job is too big or too small for your furry crew. You'll need to use your wits and your skills to avoid the police and make a clean getaway with the loot. With exciting gameplay and a charming cast of characters, "Raccoon Heist" is the perfect game for anyone looking for a light-hearted caper.

My prompt to DALL-E was short:

Screenshot from a video game where a team of raccoons go on a heist

Today's experiment: can I dump those screenshots into Fable 5 with a prompt telling it to write a game, then leave it to its own devices and get a working game at the end?

Setting Claude Code for web up to use GitHub Pages

A frustrating thing about Claude Code for web is that it can be hard to test what it's working on while it's still working.

I've been using GitHub Pages to work around that limitation, and found it to work really well.

Here's my process:

  1. Create a new repository for the project at https://github.com/new - this can be public or private, the trick works equally well for both.
  2. Start a Claude Code for web session, in the Claude iPhone or Desktop apps or in the browser at https://claude.ai/code
  3. Tell Claude what to work on, and encourage it to commit an index.html page as quickly as possible. This will create a branch with a name like claude/3d-raccoon-heist-game-50n293
  4. Navigate to the Settings -> Pages area for the repository (github.com/simonw/raccoon-heist/settings/pages in my case), select "Deploy from a branch", pick the branch name, and hit Save.

That's all it takes! Within about 30 seconds of each push the latest content will be visible at yourname.github.io/your-repo/.

If you do this with a private repo, anyone who can guess the name of the repo will be able to view the published content. I don't worry much about this myself.

The Fable 5 prompt

Here's the prompt I gave Fable 5 (written in the notes app on my phone - this entire project was conducted on mobile). I accompanied it with the two images from the original tweet.

Build this 3D game, for the browser.

This repo is configured to serve static files so make sure there is an index.html that loads everything else.

Make sure it is mobile-friendly (touch controls, works well on small screens).

You have an OpenAI API key and access to their image generation model APIs, use that for textures to use with your 3D models. Docs here: https://developers.openai.com/api/docs/guides/image-generation - use gpt-image-2

Work independently - do not ask me to make any further design decisions. Make sure the game is fun, a little surprising, has good raccoon heist vibes, and is visually pleasing.

Commit and push as often as possible so I can preview your work - start with an index.html that presents a title screen, then build from there.

Append to a notes.md file as you work, including your changes to that as part of every commit.

I didn't make any technology choices. I assumed (correctly) that it would probably use Three.js based on previous experiments.

Giving Claude access to an OpenAI key turns out to work really well for filling in gaps in its capabilities - in this case we needed some way to generate images to use as textures. Fable is very good at prompting image generators!

I said "Work independently - do not ask me to make any further design decisions" because I wanted to see if it could produce a full, working game without any further input from me.

I also said "Commit and push as often as possible so I can preview your work". When you use Claude Code in the Claude iPhone app you give it a GitHub repository and it works in a branch. Telling it to "push as often as possible" means commits start landing in that branch straight away.

I like asking for notes.md as a bit of added flavor - here's that finished file, and the entry it made when it added the dog:

New escalation: from night 3 the yards get a patrolling guard dog — a low-poly brown hound with a spiked red collar and a wagging tail. It wanders between random spots, and within 12 units it catches your scent and tracks you by smell (line of sight is irrelevant — it's all nose, shown by a 👃 over its head and barking). It gives up if you open a 17-unit gap. Getting caught messages are now source-specific: guard / headlights / hound. Verified wander → track → caught with an automated test.

Reviewing the transcript

You can access the Claude Code shared session, and I also used my claude-code-transcripts tool to export my own HTML version which you can find here.

Fable started with an index page, vendored a copy of Three.js, then wrote its own gen_textures.py script (copy here).

It generated the textures and spot-checked them to make sure they looked OK. The metal.jpg file it generated for the trash can looks like this, though I don't think it was applied exactly right in the game itself:

A game texture atlas of dark blue-grey riveted metal panels, showing a circular hatch with a handle in the top left, ribbed corrugated panels across the middle, a plain circular plate bottom left, and flat banded strips at top and bottom. No text visible.

Then it built out the first basic version of the game, then decided to "smoke-test in the pre-installed Chromium" using Playwright. This meant it could take screenshots of its own work and eyeball them. It did that for both desktop and mobile widths of the page, then noticed that the raccoon was invisible at mobile widths, so it fixed that:

The raccoon, dumpster hideout, and both crew raccoons are now perfectly visible on mobile. Committing this critical fix.

It decided to generate a title screen, which it did using this gen_title.py script. Here's the gpt-image-2 prompt it used for that:

Video game key art, low-poly 3D render style, moody nighttime scene: a cute low-poly raccoon wearing a tiny black burglar mask sneaking on its hind legs carrying a glowing gold coin, next to a tipped-over metal trash can, suburban house with warm glowing windows in the background, deep blue night, full moon, fireflies, cinematic rim lighting, charming heist caper mood. No text, no words, no logos.

And the resulting image (which Claude thought was "gorgeous") - though I note that when it's shown on desktop it gets cropped to just the top third without the raccoon!

Polygon raccoon holding a gold coin next to an overturned trash can, a house and the moon in the background.

Then my favorite change: it added the dog:

export function makeDog() {
  const g = new THREE.Group();
  const BROWN = 0x8a6440, DARK = 0x5e4128;
  const body = new THREE.Mesh(new THREE.SphereGeometry(0.42, 10, 8), M(BROWN));
  body.scale.set(0.9, 0.8, 1.5);
  body.position.y = 0.55;
  body.castShadow = true;
  g.add(body);
  const head = new THREE.Mesh(new THREE.SphereGeometry(0.3, 10, 8), M(BROWN));
  head.position.set(0, 0.85, 0.62);
  g.add(head);
  const snout = new THREE.Mesh(new THREE.SphereGeometry(0.16, 8, 6), M(DARK));
  snout.scale.set(0.9, 0.7, 1.3);
  snout.position.set(0, 0.76, 0.9);
  g.add(snout);
  const nose = new THREE.Mesh(new THREE.SphereGeometry(0.06, 6, 6), M(BLACK));
  nose.position.set(0, 0.78, 1.08);
  g.add(nose);
  for (const s of [-1, 1]) {
    const ear = new THREE.Mesh(new THREE.SphereGeometry(0.12, 6, 6), M(DARK));
    ear.scale.set(0.7, 1.3, 0.5);
    ear.position.set(0.2 * s, 1.08, 0.55);
    g.add(ear);
    const eye = new THREE.Mesh(new THREE.SphereGeometry(0.05, 6, 6), M(0x1a1a1a, { emissive: 0x331111 }));
    eye.position.set(0.13 * s, 0.92, 0.86);
    g.add(eye);
  }
  const tail = new THREE.Mesh(new THREE.CylinderGeometry(0.05, 0.09, 0.5, 6), M(DARK));
  tail.position.set(0, 0.8, -0.62);
  tail.rotation.x = 0.8;
  g.add(tail);
  // spiked collar
  const collar = new THREE.Mesh(new THREE.TorusGeometry(0.22, 0.05, 6, 12), M(0xc0392b));
  collar.position.set(0, 0.78, 0.5);
  collar.rotation.x = Math.PI / 2.4;
  g.add(collar);
  const legGeo = new THREE.CylinderGeometry(0.07, 0.09, 0.34, 6);
  const legs = [];
  for (const [x, z] of [[-0.22, 0.35], [0.22, 0.35], [-0.22, -0.35], [0.22, -0.35]]) {
    const leg = new THREE.Mesh(legGeo, M(DARK));
    leg.position.set(x, 0.17, z);
    g.add(leg);
    legs.push(leg);
  }
  let phase = Math.random() * 10;
  return {
    group: g,
    animate(dt, speed) {
      phase += dt * (3 + speed * 10);
      const amp = Math.min(0.6, 0.1 + speed * 0.6);
      legs[0].rotation.x = Math.sin(phase) * amp;
      legs[3].rotation.x = Math.sin(phase) * amp;
      legs[1].rotation.x = -Math.sin(phase) * amp;
      legs[2].rotation.x = -Math.sin(phase) * amp;
      tail.rotation.z = Math.sin(phase * 1.5) * 0.4;
      body.position.y = 0.55 + Math.abs(Math.sin(phase)) * 0.04 * (0.3 + speed);
    },
  };
}

And did a round of testing on it using Playwright, including another screenshot.

  // walk near the dog
  await page.evaluate(() => { const d = window.__rh.dog; window.__rh.teleport(d.x + 6, d.z); });
  await page.waitForTimeout(2000);
  info = await page.evaluate(() => JSON.stringify({ dog: window.__rh.dog, state: window.__rh.state, player: window.__rh.debug().player }));
  console.log('after approach:', info);
  await page.waitForTimeout(3000);
  info = await page.evaluate(() => JSON.stringify({ dog: window.__rh.dog, state: window.__rh.state }));
  console.log('after chase:', info);
  await page.screenshot({ path: __dirname + '/shot-dog.png' });

Screenshot of the game. Night 3, the raccoon is in the middle intersecting with the dog. A message reads Busted! The Guard shooed you off! The screen has a red tinge around the edges.

It made a few more tweaks, then declared itself done:

Raccoon Heist is built, tested, and pushed — 7 commits on claude/3d-raccoon-heist-game-50n293, all verified with automated Playwright playthroughs on desktop, portrait-phone, and landscape-phone viewports.

The game: You're a masked raccoon sneaking out of your crew's dumpster hideout into a moonlit cul-de-sac. Grab coins, gems, rings, donuts, and fish (they visibly stack on your back and slow you down), then waddle 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 adds a scent-tracking hound that ignores line-of-sight entirely. A police cruiser sweeps the street with headlights, homeowners randomly peek out of windows, a seagull periodically dive-bombs your unclaimed loot, pizza slices trigger a 6-second speed FRENZY, and a rare golden TV is worth 120 points if you can haul its weight home. Win ranks: TRASH PANDA ⭐ → CAT BURGLAR ⭐⭐ → MASTER OF DISGUISE ⭐⭐⭐, with your best run saved to localStorage.

How it's built: Vendored Three.js (no CDN), procedural low-poly characters, and a procedural WebAudio soundtrack (sneaky walking-bass jazz plus all sound effects — zero audio files). All seven ground/wall textures and the title-screen hero art were generated with gpt-image-2 and committed as static assets, so the deployed game makes no API calls. Mobile gets a dynamic touch joystick (appears wherever you touch) plus a DASH button; desktop uses WASD/arrows and Space.

Testing caught two real bugs worth mentioning: the canvas rendered at 2× size on any real phone (a cssText assignment was wiping Three.js's inline sizing — desktop DPR-1 tests masked it completely), and the win screen's star-rating div inherited the title screen's full-screen .stars CSS and silently swallowed every tap on the "next night" button. Both are fixed and regression-tested, along with pickup, banking, chase/caught, dawn, night progression, and lose/retry flows.

notes.md has the full build log. The game is live on the branch — just serve the repo root and open index.html.

Is the game any good?

It's an impressive starting point, but it's not a good game.

You move your raccoon around a yard collecting items - donuts, fish, gold coins, jewels - while avoiding guards with flashlights and, in later levels, a dog. You have a limited carrying capacity, and once that's full you need to drop stuff off at the dumpster. If you pick up a pizza slice you get a temporary speed boost.

There are no team mechanics at all - there are two other static raccoons next to the dumpster but they're purely decoration.

It gets slightly more challenging as the levels progress - the dog introduced in level 3 is the most interesting new mechanic - but it's very, very easy to beat. It's also pretty boring - each night has a fixed duration and you can collect all of the items and then have nothing else to do while waiting for the dawn.

I was impressed by the implementation. It's fully 3D, there are trash cans, the flashlight illumination cones are fun, and it has a reasonably coherent visual style. It works on mobile. The music ("a procedural WebAudio soundtrack (sneaky walking-bass jazz plus all sound effects — zero audio files)" according to Claude) is simple but feels about right.

As a finished game project, it's mediocre. As a starting point from a single prompt I think it's very impressive.

I've vibe coded up quite a few games now. They've all been deeply disappointing from a gameplay perspective - it turns out designing games that are fun remains a uniquely human trait, and one which requires significantly more skill and experience than either Claude or I can bring to bear.

That said, I thoroughly recommend tinkering with game development projects as a way to explore the capabilities of agents. It's a fun, low-risk way to try out new things. If you stick at it long enough you might even produce something that's worth playing!

Tags: game-design, ai, generative-ai, llms, anthropic, claude, text-to-image, vibe-coding, coding-agents, claude-mythos-fable

相关条目

91

五维评分

信息增量9 ×0.3

详细揭示了两个具体设置如何协同作用实现三倍性能提升,信息增量高。

内容质量8 ×0.2

来自OpenAI官方,数据明确,结构清晰,但缺少对比实验细节。

实用价值9 ×0.2

为AI工程师提供了可直接操作的性能调优方案,实用性强。

时效性10 ×0.15

消息刚发布,具有高度时效性。

信源可信度10 ×0.15

信源为OpenAI官方新闻,权威可靠。

基础分 91 × T1 信源权重 ×1 = 91

精选线 60已入选精选

23:00OpenAI:News(RSS)T1RSS

精选启用两项设置使ARC-AGI-3基准测试分数提升三倍

这项发现太关键了!它表明模型的性能不仅取决于训练,还取决于推理时的配置。对于AI工程师和研究者来说,这是一个必须注意的优化方向。特别是那些在资源受限设备上部署模型的团队,可能会因此找到低成本提升能力的方法。

科技模型#ARC-AGI-3#GPT-5.6#OpenAI
91

五维评分

信息增量9 ×0.3

首次公开GPT-5.6具体效率优化细节,此前仅有传闻。

内容质量8 ×0.2

内容简洁,关键指标明确,但缺乏详细技术文档支撑。

实用价值9 ×0.2

直接指导企业如何降低AI部署成本,具有商业参考价值。

时效性10 ×0.15

刚发布的官方新闻,时效性极强。

信源可信度10 ×0.15

来源为OpenAI官方博客,信源权威。

基础分 91 × T1 信源权重 ×1 = 91

精选线 60已入选精选

08:00OpenAI:News(RSS)T1RSS

精选GPT-5.6:前沿智能与前沿效率的融合

这条消息值得关注,因为它标志着大模型竞争从单纯拼参数转向拼效率。对于AI开发者和企业决策者来说,GPT-5.6意味着可以用更少预算获得更高性能,尤其适合那些被推理成本挡在门外的长上下文或Agent场景。OpenAI这一步,可能重新定义‘前沿’的标准。

AI模型#Agent工作流#GPT-5.6#OpenAI
91

五维评分

信息增量8 ×0.3

首次提出针对CPU优化的1M上下文模型,填补了边缘设备长文本推理的空白,信息增量显著。

内容质量9 ×0.2

技术细节清晰,提供了基准测试对比和架构解释,图文并茂,质量上乘。

实用价值10 ×0.2

直接降低长上下文应用的硬件成本,开源权重可立即部署,实用价值极高。

时效性10 ×0.15

当日发布的博客,且长上下文推理是当前AI热点,时效性满分。

信源可信度9 ×0.15

Hugging Face官方博客,作者为Liquid AI,属于第一方技术发布,可信度高。

基础分 90.5 × T1 信源权重 ×1 = 91

精选线 60已入选精选

23:01Hugging Face:Blog(RSS)T1RSS

精选LFM2.5-Encoder:面向CPU快速长上下文推理的新模型

这篇博文让我眼前一亮,因为它直接解决了大模型在CPU上跑长上下文的痛点。对于没有高端GPU的团队或个人开发者,LFM2.5-Encoder系列提供了可立即使用的开源方案。尤其推荐给做RAG、文档搜索或代码分析的朋友——现在用普通服务器就能处理百万级token的文档了。

AI模型#CPU推理优化#LFM2.5-Encoder#Liquid AI
91

五维评分

信息增量9 ×0.3

首次公开自动化红队系统的具体机制与实验发现,信息增量高。

内容质量8 ×0.2

来自官方,结构清晰,但未提供完整技术细节(如具体模型版本),扣1分。

实用价值9 ×0.2

对AI安全工程师、模型开发者和企业部署者直接指导作用,实用性极强。

时效性10 ×0.15

刚刚发布,是当前AI安全领域最前沿进展之一。

信源可信度10 ×0.15

信源为OpenAI官方新闻,权威且一手。

基础分 91 × T1 信源权重 ×1 = 91

精选线 60已入选精选

18:00OpenAI:News(RSS)T1RSS

精选GPT-Red:OpenAI通过自我对弈实现AI红队自动化,提升模型鲁棒性

GPT-Red 是红队测试从人工到自动化的里程碑,特别适合安全工程师和对齐研究者关注。它直接降低了测试成本,但也引发了对“自动攻击”本身的伦理讨论——值得所有关注AI治理的人深入思考。

AI模型#AI安全对齐#GPT-Red#OpenAI
91

五维评分

信息增量9 ×0.3

这是首个针对AI模型生物安全的漏洞赏金计划,为行业提供了全新的安全评估视角。

内容质量9 ×0.2

官方来源,内容清晰,涵盖范围、奖励、准则等关键细节。

实用价值8 ×0.2

对AI安全研究员和生物安全专家有直接参与价值,但普通用户关联度较低。

时效性10 ×0.15

刚刚发布,完全符合新闻时效要求。

信源可信度10 ×0.15

OpenAI官方RSS和博客,信源权威可靠。

基础分 91 × T1 信源权重 ×1 = 91

精选线 60已入选精选

18:00OpenAI:News(RSS)T1RSS

精选OpenAI推出GPT-5.5生物漏洞赏金计划

这个计划值得关注,因为它首次将AI漏洞赏金制度拓展到生物安全领域,不仅为安全社区提供了新的研究方向,也为AI风险治理提供了实际演练场。对模型安全研究者、生物安全专家以及关心AI双重用途的从业者尤其重要。

AI模型#Bio Bug Bounty#GPT-5.5#OpenAI
91

五维评分

信息增量8 ×0.3

公布了vLLM新后端的具体架构设计与实测数据,对了解推理优化前沿有较高信息增量。

内容质量9 ×0.2

技术细节清晰,有定量性能对比,来源为官方博客,内容质量高。

实用价值10 ×0.2

直接降低LLM部署门槛与成本,对AI工程化落地具有极高实用价值。

时效性10 ×0.15

发布即时,属于最新技术动态,时效性满分。

信源可信度9 ×0.15

来源为Hugging Face官方博客,vLLM为开源权威项目,可信度高。

基础分 90.5 × T1 信源权重 ×1 = 91

精选线 60已入选精选

08:00Hugging Face:Blog(RSS)T1RSS

精选vLLM推出原生速度Transformers建模后端,大幅提升推理性能

这项更新对于AI工程团队非常关键:无需格式转换意味着能更快地迭代模型,而2-5倍的速度提升直接降低GPU成本。如果你正在做LLM在线服务或者批量推理,这几乎是必读的技术更新。

AI模型#Hugging Face#PagedAttention#Transformers
90

五维评分

信息增量9 ×0.3

手语转文本是AI无障碍领域的新突破,提供了此前罕见的具体模型信息。

内容质量8 ×0.2

来源权威,内容清晰描述了模型功能、应用场景和开发理念。

实用价值9 ×0.2

对聋人群体、开发者和无障碍研究者具有直接参考与应用价值。

时效性9 ×0.15

刚刚发布的官方公告,时效性非常高。

信源可信度10 ×0.15

Google DeepMind官方博客,信源可信度极高。

基础分 89.5 × T1 信源权重 ×1 = 90

精选线 60已入选精选

22:01Google DeepMind:Blog(RSS)T1RSS

精选Google DeepMind 发布手语转文本模型 SL2T,助力聋人用户

这则消息的意义不仅在于技术突破,更在于AI开始真正关注边缘群体的需求。对开发者而言,SL2T的架构思路和技术路径值得深入研究;对无障碍倡导者来说,这是推动行业标准的重要案例。

AI模型#Google DeepMind#SL2T#手语识别

引用前请核对原文