No. 19 Sunday 1 November Game dev, software and AI

Let the checker decide

An agent finished Factorio through the same limits a player has, and the best agent setups this week let plain code, not the model, say when work is done. Plus a folder that can hijack a coding agent.

The short version

  • Games and software GPT-5.6 Sol launched a rocket in Factorio after 13.5 hours of game time, driving the game through a library that enforces a player's reach and fog of war.
  • Game dev Unity's beta CLI lets a coding agent run tests, press Play and take screenshots in a live Editor, and a new open-source tool sends agents to playtest UE5, Unity and Godot projects.
  • Software and AI Five small open models beat a frontier model on ten hard coding problems when a test script, not a model, decided success; Google's PageBreak reports 500+ XSS bugs only after plain code reproduces each one.
  • Software and AI A web page can drop an instruction file into Downloads; agents started there followed it, Codex in over 90% of tries and Claude Code in about half.
  • Software and AI Karpathy built a site from 40,000 Hacker News comments in about two hours of talking to Claude Code.
Games and software News

An agent beat Factorio with a player's limits

A developer had an AI coding agent play the factory game Factorio from start to rocket launch, through a small code library that only lets it do what a human player could. It took 13.5 hours of game time.

ContextFactorio is a game about building ever larger automated factories; launching a rocket is its traditional win condition. Ryan Madden has been testing agents on it for months.

Factorio screenshot of a rocket lifting off from its silo, beside the agent's transcript reporting the rocket's parts and ingredients as it assembles and launches it.
Image: Ryan Madden

Ryan Madden ran OpenAI's GPT-5.6 Sol inside the Codex agent at a low thinking level, on peaceful mode (no enemies). It did not see the screen as pixels: it called a small Python library that enforces the player's reach and fog of war, the same limits a person has in the game's interface. Earlier runs went through shell commands.

Sol built through red, green, blue, purple and yellow science and launched the rocket at 13.5 hours of game time. Madden had planned to stop at blue science. GPT-5.5 had failed largely because it never used conveyor belts.

It was not clean. Late in the run Sol never fully connected some production lines and kept the factory going by carrying supplies by hand between areas. Madden publishes the production log and a timelapse, and plans runs with enemies and other models.

Technical details

The interface is a game manager plus a Python library the agent imports. Madden says it applies the same restrictions human players face in the GUI, naming player reach and fog of war; the post does not list the rest. The run manager logged total resource production, annotated with each science milestone.

The post gives no real-time duration, token count or cost. Madden's earlier posts cover getting Claude Code to play Factorio and a testbed called Faketorio.

Why it mattersA game API that matches what a player can do turns an agent run into evidence about your systems: where it stalls, what it works around, which shortcuts it finds. That is a playtest you can rerun after every change.

For youExpose one ElementalBlades system (inventory or crafting) through a small player-limited command set and let Claude Code try a fixed goal; the workarounds it finds are your bug list.

fog of war
Parts of the map a player has not explored yet and cannot see.
Codex
OpenAI's coding agent, which runs commands and edits files from a terminal.
thinking level
How much the model reasons before acting; lower is faster and cheaper.

Sources Ryan Madden: GPT-5.6 Sol can beat FactorioTimelapse of the run (YouTube)

More like this Less like this

Agents inside the game

Editors and games open up to agents that run, play and look.

Game dev Release

Unity's CLI lets a coding agent drive the Editor

ContextUntil now most agents could edit a Unity project's files but not see or run the game inside the Editor.

Unity's free beta command-line tool talks to a running Unity Editor, so a coding agent can run tests, press Play and take screenshots, then check its own work against the request.

A package in the project starts a small local server in the Editor. The CLI, or an agent through it, sends commands as JSON over HTTP.

The loop Unity describes: change something, run a named command, take a screenshot, compare it with the prompt, repeat until it matches.
Technical details

Needs Unity 6.0 or later and the com.unity.pipeline package. Built-in commands include editor_play, run_tests, list_build_targets and screenshot; tagged functions in your project register as custom commands. Eval is gated by a per-project access key and Unity says to treat it like remote code execution, for local development only.

Beta 14 (October 21) added unity mcp --tools and --exclude-tools so an agent only sees the tools you pick, unity setup claude to install the plugin from Anthropic's Claude Code marketplace, and specific exit codes for failures instead of a generic 6. It also stopped passing service-account and git tokens to programs the CLI starts.

Why it mattersAn agent that can run the game and look at it can check its own changes, which is the step most game work with agents has been missing. Unreal and Godot teams can copy the shape: named commands first, free-form code last.

For youThis is the pattern to copy for UE5: a localhost command server in an editor plugin with named commands (run tests, PIE, screenshot) that Claude Code calls over MCP. Worth a look as a Fab tool idea too.

MCP
Model Context Protocol, a standard way to offer tools to an AI agent.
localhost
Your own machine; a server bound to it cannot be reached from the network.
eval
A command that runs a one-off piece of C# inside the live Editor or a running build.

Sources Unity: Pipeline and CLI technical walkthroughUnity CLI release notes

More like this Less like this

Game dev Release

Autopilot

An Apache-licensed playtesting agent for Unreal Engine 5.4 to 5.8, Unity 6 and Godot 4.7, driven from Claude Code or Codex.

Autopilot installs into an Unreal, Unity or Godot project, opens a play window, plays toward a goal you type, then closes it and writes a report. It drew 544 GitHub stars in its first days.

It reads the project's source, probes the running game in PIE, and has a coding agent write small harnesses for a model that picks actions. You ask it to explore, test, verify or reach a goal; it keeps project memory between runs.

Treat it as early: the repository has six commits, no benchmark or video, does not explain how it reads the screen or sends input, and setup asks for an account with Aura, the company behind it.

Engines
UE 5.4 to 5.8, Unity 6+, Godot 4.7+
Agents
Claude Code or Codex, via skills and MCP
Models
Your own subscription or API keys

Why it mattersAgent playtesting is moving from research demos into tools that install into a normal project. Even without trusting the claims, a run report on every build is cheap to try.

For youTry a ten-minute exploration run on an ElementalBlades test map in UE 5.8 and read what it reports about the combat plugin before trusting it further.

PIE
Play In Editor: running the game inside the engine's editor window.
harnesses
Small pieces of code that connect a model to the game so it can observe and act.

Sources Autopilot on GitHub

More like this Less like this

Game dev Release

Terrain3D 1.1

An open-source terrain editor and renderer for Godot 4.5 to 4.8.

Terrain3D, a free terrain tool for the Godot engine, reached 1.1, adding an ocean, surface displacement and support for C# projects, with work from 28 contributors.

The release adds an ocean mesh with an example shader, texture height displacement with tessellation, ambient occlusion textures and generated C# bindings. Web and mobile support improved but stay experimental.

The notes cite over 380 updates since 1.0, and some APIs changed, so check the migration discussion before upgrading a project.

Godot
4.5 to 4.8
Released
October 30
Contributors
28
Platforms
Windows, Linux, macOS; web and mobile experimental

Why it mattersA free terrain tool shipping oceans and C# support narrows the gap with commercial engines for open-world Godot games.

For youA useful reference for how a world tool ships across engine versions: one release supports four Godot minors and publishes its API changes separately.

tessellation
Splitting a surface into more triangles so fine height detail can show up as real shape.
C# bindings
Generated code that lets C# scripts call a library written in another language.

Sources Terrain3D releases

More like this Less like this

Let plain code decide

The model proposes; a script or a rule says yes or no.

Software and AI Lesson

Five small models beat a big one when a script judges

A team of five copies of a mid-sized open model, each with its own job and a shared notes file, solved more of ten hard coding problems than a frontier model alone. A plain test script, not a model, decided when each was done.

The team-solve workflow in Memdoor, run on the first ten LiveCodeBench Hard problems. Each role starts with a fresh context and talks to the others only through files.

Mean problems solved out of 10 over five passes: 9.8 for the Qwen3.8-27B team, 9.6 for the original authors' harness, 8.0 for Fable 5 alone. Author-reported.
Technical details

49 of 50 runs solved, for $35.79 of model use through OpenRouter (median run about 40 minutes and $0.39). The repository lists its own caveats: only ten problems, possible training-data contamination, the Fable 5 column was copied from the paper's files rather than rerun, and the loop sees only public samples while scoring uses hidden tests.

Two failure modes shared with the original paper: a correct program replaced after a wrong counterexample from the manager role, and a passing program overwritten in a later round.

Why it mattersThe sample is tiny, but the shape is reusable: split the work into roles with clean contexts, keep a written ledger, and let a deterministic check end the loop instead of the model's own verdict.

For youMap it onto Claude Code subagents with a Stop hook that runs the test script; the plugin repos already have tests the hook can call.

LiveCodeBench Hard
The hardest tier of a benchmark of recent programming contest problems.
fresh context
Each step starts with an empty memory and only reads the files it is given.

Sources Memdoor team-solve workflow

More like this Less like this

Software and AI Lesson

Google's bug agent must prove each bug in code

Google's PageBreak agent hunts security bugs in its web apps, but reports one only after a small program written by engineers reproduces the attack.

500+cross-site scripting bugs found since January (Google-reported)

Gemini models investigate; plain validators decide. A script running in the page proves an XSS, a file write proves path traversal, an outbound DNS call proves code execution. Unconfirmed leads are kept to design new validators, not sent to teams. Google claims near-zero false positives; nobody has checked that independently.

Why it mattersThe model proposes and code confirms: the same split as the coding workflow beside it, at production scale.

XSS
Cross-site scripting: tricking a site into running an attacker's script in a visitor's browser.

Sources InfoQ: Google's PageBreakGoogle: inside the PageBreak project

More like this Less like this

Software and AI Do this

Do not start a coding agent in your Downloads folder

ContextCoding agents read instruction files such as AGENTS.md (Codex) or CLAUDE.md (Claude Code) from the folder they start in, and treat them as the user's own rules.

Any web page can save a file into Downloads without asking. Security researchers found agents started there read a planted instruction file and followed it, from changing settings to running malware.

What Forever Security saw when an agent opened in a folder with a planted file. Codex was tested with a real attacker's file found on a customer machine; Claude Code with a stand-in.

Codex Claude Code
Planted file AGENTS.md CLAUDE.md
What it asked for A new tool server in the machine-wide config that installs an npm package A project settings file pointing the API address at the attacker
How often it worked More than 90% of tries About 50%
What the attacker gets Malware (function-color) running on every later session The login token, then commands run on the next start, or the same session about a fifth of the time

The researchers say there is nothing for OpenAI or Anthropic to patch: the agents behave as designed. Start agents only in folders you made, and read instruction files you did not write.

Technical details

Codex payload: a [mcp_servers.project-tools] block in ~/.codex/config.toml that installs function-color through launchctl, plus a child codex exec with --dangerously-bypass-approvals-and-sandbox. Claude Code path: .claude/settings.json with ANTHROPIC_BASE_URL set to the attacker's server, which then answers with a forged Bash tool call that disables the sandbox.

Forever's telemetry: about half of its customers run a coding agent in Downloads at some point. npm has removed function-color; if it appears in a machine's installs, treat the machine as compromised and rotate credentials.

Why it mattersAn instruction file is executable in practice: whoever writes it steers the agent. Downloads is the one folder strangers can write to without asking.

For youCheck the routine scripts and shell aliases that launch Claude Code: they should always cd into a known repo first, never start from ~ or Downloads.

AGENTS.md
A file of standing instructions that Codex and other agents read from the folder they start in.
npm package
A bundle of JavaScript code installed from the public npm registry.
token
A secret string that proves who you are to a service, like a saved password.

Sources Forever Security: Markdown is the new executableHelp Net Security

More like this Less like this

Build lean

Small tools, short deadlines, data that fits in cache.

Software and AI Lesson

Karpathy built HackerTube in two hours by only talking

Andrej Karpathy made a YouTube-style site of videos that Hacker News commenters recommended, in about two hours, with Claude Code doing the code, the server setup and the deploy.

HackerTube home page: a YouTube-style grid of video thumbnails with topic chips across the top and a sidebar of categories with video counts.
Image: Andrej Karpathy

A Claude Code workflow ran Sonnet over the full Hacker News comment archive from Hugging Face, removed spam and kept about 40,000 comments recommending a YouTube video. That became 6,454 videos from 2007 to 2026 across 150 topics, in a YouTube-like interface.

Karpathy made the YouTube API key, rented the server and bought the domain; the agent did the rest, including hardening the server. Recommendations live in the browser session, with no accounts.

  • Cheap model for bulk filtering, stronger model for building
  • Human steps: keys, money, domain
  • Export the data so others can rebuild it

Why it mattersThe pattern (dataset, cheap model to filter, agent to build and ship) fits any niche directory, and the human's part has shrunk to the steps that need an account.

For youSame recipe for a directory of Unreal plugins or techniques recommended in r/unrealengine comments, as a side project or Fab marketing page.

Hugging Face
A site that hosts open AI models and datasets.
Sonnet
Anthropic's mid-sized model, cheaper than Opus.

Sources Karpathy: HackerTube

More like this Less like this

Software and AI Release

Prospero: a coding harness built around deadlines

Chris Wellons released Prospero, a desktop coding agent where the engine runs on the target machine and the window runs on yours, and every operation has a deadline.

Prospero window with a sessions list, an agent transcript showing a rendered fractal and a before and after table, a jobs log with timings, and a plan panel.
Image: Chris Wellons

The engine is headless and can sit on a remote box over SSH or in WSL, while a Dear ImGui interface runs locally. It has subagents, MCP, git worktrees, web search and session forking, and brings no model of its own: you point it at llama.cpp or a hosted API.

Wellons claims it uses about two orders of magnitude fewer resources than other harnesses; that is his own figure, not a benchmark. He also says permissions guard against mistakes, not attacks: real isolation needs a container or another machine.

  • Every operation has a deadline
  • A shell command that times out becomes a background job
  • The whole process tree is killed as one unit
Technical details

Community edition is free; the Professional edition is paid and adds remote engines. Config is plain INI, for example model = falstaff/Qwen3.8-27B and an include = line that pulls shared settings from a URL. It does not work with a Claude subscription.

Why it mattersDeadlines on every step and killing the whole process tree are the two habits that keep unattended agent runs from hanging overnight, whichever harness you use.

For youBorrow the deadline rule for the long routines: wrap each step in a timeout and kill the process group on expiry.

headless
Running without its own window, controlled by another program.
WSL
Windows Subsystem for Linux, which runs Linux programs on Windows.

Sources Chris Wellons: Prospero

More like this Less like this

Games and software Lesson

More work, less waiting: a hash table split 4,096 ways

A database engineer made a big counting query faster by doing 70% more work, because the new version waits on main memory far less. A busy processor can be mostly idle, waiting for data.

Counting 99 million rows by user on one core of an AMD EPYC server. Splitting keys into 4,096 small hash tables first halved the time the CPU spent stalled on memory, from 50.1% to 23.5%.

Second-run times from Maor Kern's post (Epsio). DRAM traffic fell from about 4.5 GB to 1.5 GB with partitions, while retired operations rose from 11.4 to 19.4 billion.

Why it mattersCPU at 100% can hide a processor that is mostly waiting. Measure stalls (perf stat shows them) before optimising, and lay data out in cache-sized chunks: true for game update loops as much as for databases.

For youThe same split applies to per-frame entity updates in the gameplay plugins: process by chunk instead of chasing pointers across one huge map.

hash table
A structure that finds a value by its key in roughly one step, by scattering keys across slots.
DRAM
Main memory, far slower to reach than the caches on the processor.
perf stat
A Linux tool that reads the processor's counters, such as stalls and instructions.

Sources Maor Kern: It's the memory latency, stupid

More like this Less like this

Software and AI Lesson

One rule agents break: public calling public

Alex Kladov (matklad) argues that when two public functions share logic, both should call a private helper, rather than one public function calling the other and growing options only it needs.

His example, in Zig. Both public entry points stay small; the shared work lives in one private function.

pub fn foo() void {
    return helper(.frobnicate);
}

pub fn bar() void {
    return helper(.transmogrify);
}

fn helper(mode: enum { frobnicate, transmogrify }) void {
    // ...
}

If foo called bar instead, bar would pick up flags that exist only for foo, and its public contract would drift.

The exception: shortcut functions that are only a chain of public calls can stay that way. On tests, he says mock I/O, not methods.

Why it mattersCoding agents reuse whatever public function is nearby. One line in an instruction file or review prompt keeps APIs from bloating.

For youAdd it to the plugin repos' CLAUDE.md: public Blueprint-callable functions should share private helpers, not call each other.

Sources matklad: Avoid public functions calling other public functions

More like this Less like this

Learn one thing

What is a test oracle?

A test oracle is whatever decides if a program's output is right: an expected answer, a rule, or a check that the bad thing really happened. Today's best agent setups make the oracle plain code, so the model cannot grade its own work.

Think of it like thisA referee with a rulebook and a stopwatch. Players can argue, but the goal counts only if the ball crossed the line.

Every test has two parts: inputs that exercise the code, and an oracle that judges the result. Sometimes the oracle is easy (compare with a known answer); sometimes it is the hard part, such as deciding if a graphics kernel's rounding is acceptable or if a security bug is real.

With agents the oracle matters more, because a model asked whether it succeeded tends to say yes. The Memdoor workflow lets a diff of sample outputs end the loop, Google's PageBreak counts a bug only when code reproduces the attack, and the Factorio run relied on the game itself to count the launched rocket.

A weak oracle lets bad work through, so it is worth reviewing as carefully as the code it checks.

The model can do the work; the oracle, written by people, decides if it counts.
kernel
A small function that runs many times in parallel on a GPU.

Try this today

Software and AI 15 minutes For practitioners

Check what a folder will tell your agent before you start it there

In fifteen minutes you know which instruction files and settings an agent would pick up in a folder, and whether anything has changed where your agent sends its traffic.

You needA terminal, and Claude Code or Codex installed.

  1. List the instruction files

    In the folder you are about to open, look for AGENTS.md, CLAUDE.md and a .claude folder. If you did not write them, read them before starting an agent.

  2. Look for a changed API address

    Search project settings and the Codex config for base URL overrides and tool servers you did not add. Any ANTHROPIC_BASE_URL or chatgpt_base_url you did not set is a red flag.

  3. Check for the known malware

    Ask npm whether function-color is installed globally. If it is, treat the machine as compromised and rotate tokens from another machine.

  4. Make it a habit

    Never start an agent from Downloads or your home folder; open it from a project folder you created.

# run in the folder before starting an agent
ls -la AGENTS.md CLAUDE.md .claude 2>/dev/null
grep -rn "BASE_URL\|base_url\|mcpServers\|mcp_servers" .claude ~/.codex/config.toml 2>/dev/null
npm ls -g function-color

You know it worked whenIn a folder you made yourself, the grep prints only lines you recognise and npm reports function-color is not installed. Running it in Downloads should show no instruction files at all.

For youRun it once in each repo the routines open, and in ~ to confirm no stray CLAUDE.md sits in the home folder.

ANTHROPIC_BASE_URL
A setting that tells Claude Code which server to send its model requests to.

Sparks

What is catching on right now, and the idea worth borrowing from each.

The lab

Research from the front line, in plain words: what it solves, how, and what you could do with it.

Software and AI PreprintarXiv preprint

AI reviewers now catch 72% of real bugs, with people about 82%

(When) Should a Software Factory be Lights-off? Benchmarking Code Review Agents on Bug DetectionChenyang Yang, Hao He, Ti-Chung Cheng, et al. (Microsoft Research, Carnegie Mellon University)

Figure: a merged pandas pull request with its diff on the left; on the right a review agent in a sandboxed copy writes a review.md flagging a TypeError, and LLM judges match it to the real bug filed later.
Image: Yang et al. (arXiv)
The problem
Developers now spend more time reviewing AI-written code than writing it, and nobody knew how often a review agent finds a real bug when it is not told one exists.
The idea
Mine real bugs from project history: 865 caught in human review before merge and 689 found after merge, across 99 repositories. Give the agent the pull request in a sandbox, have it write a ranked review, and let a panel of model judges check whether the real bug is in its top five comments.
The result
The best agent found 71.9% of bugs in its top five comments (79.6% before merge, 64.2% after), up from 47.7% for a model about five months older, at about $3 and ten minutes a task. Human reviewers alone caught about half; humans plus the agent about 82%. Accuracy dropped by up to 25.5% on company monorepos, where fewer bugs are visible in the diff.
Use it
Run an agent review before merge, but tell it to run the code and read beyond the diff (worth up to 5.8% more for about 10% more cost), give it project knowledge, and keep a person on large or cross-file changes.

For youBefore merging plugin changes, run Claude Code as a reviewer with the instruction to build and run tests, and compare its top five comments with what users later report.

More like this Less like this

  1. Idea
  2. Prototype
  3. Code released
  4. Shipping

ReadPaper (arXiv)CRBugBench on GitHub

Software and AI PreprintarXiv preprint

A fix chosen with a bigger model can fail the model you ship

Repairs for Whom? Evaluator-Executor Mismatch in Selecting Repairs for Failed LLM AgentsYijun Liao, Fanwei Liang

The problem
When an agent fails, repair methods pick which step to change using a stronger model, a replay or a judge. Nobody checked whether that pick helps the agent that will actually run it.
The idea
Take fixed sets of failed runs and candidate one-step repairs, score each repair by rollouts of the deployed agent itself, and measure how much is lost when a different evaluator chooses.
The result
Choosing with a 14B model's rollouts for a 7B agent lost 0.25 of expected success gain on ALFWorld; greedy replay lost 0.08 to 0.13. About twenty rollouts of the bigger model were worth one or two of the deployed agent's own. Tested only on 7B and 8B open models in three text environments.
Use it
When you tune a prompt or an instruction file with a strong model, re-run the failing tasks on the model you actually deploy and keep the change only if it helps there.

For youRules tuned in sessions on Opus should be rechecked on the cheaper subagent model the routines fan out to.

More like this Less like this

  1. Idea
  2. Prototype
  3. Code released
  4. Shipping

ReadPaper (arXiv)Code

Game dev PaperACM Transactions on Graphics

One physics character learns parkour from a few video clips

HIL: Hybrid Imitation Learning for Dynamic Athletic ControlJiashun Wang, Yifeng Jiang, Haotian Zhang, et al. (Carnegie Mellon University, NVIDIA)

A strip of a blue simulated character vaulting, climbing and jumping over a series of grey boxes in one continuous run.
Image: Wang et al. (arXiv)
The problem
Physics characters that copy motion clips exactly are precise but break on new terrain; ones that only imitate the style adapt but lose the exact moves.
The idea
Train one controller with half its practice runs tracking clips exactly and half reaching goals in the style of the clips, sharing one view of the scene. The data is 19 short clips of 15 parkour skills, pulled from ordinary video with pose estimation and cleaned up with physics.
The result
In the arXiv version, skill accuracy reached 0.66 against 0.54 for style-only imitation and 0.15 for a task-reward baseline, with lower tracking error, but it completed fewer tasks (0.74 against 0.85). It kept over 70% completion with noisy obstacles.
Use it
A recipe for traversal: a handful of reference clips and one policy that both reproduces moves and chains them over new obstacles. It needs your own training pipeline; there is no drop-in engine plugin.

For youWorth reading for the action RPG's traversal plans; the split between exact tracking and goal-reaching maps onto motion matching plus procedural adjustment in UE5.

More like this Less like this

  1. Idea
  2. Prototype
  3. Code released
  4. Shipping

ReadPaper (ACM TOG)arXiv versionProject page

Also moving

This week on Toa Radar

Read the weekly summary: The week agents learned to play, and to be checked
Tune mode is on in this browser. Turn it off