← All work
The Singularity Times Strategy simulation · 2026 · Playable now
Live · one HTML file, no build step

Plague Inc., but the disease is the race to AGI.

You run a frontier lab. One tick is one month. Reach AGI at 100% with alignment above 60 before a rival, or before a rogue state actor ignites an uncontrolled superintelligence first. The whole thing is played as the front page of a newspaper being typeset in real time.

The game mid-run: a race board showing five rival labs by AGI readiness, a pixel creature at centre, four national-mood thermometers, a build panel for datacenters and scientists, and a compute and capital bar along the bottom
Mid-run · the race board, the creature you are raising, and the economy that pays for it.
Play it → Source →
01 / Why build it

Three things I could not get across in an argument.

I did not build this to have a finished opinion about AI. I built it because there were three things I kept failing to explain in conversation, and a simulation makes you be specific in a way that having views does not.

01 · The squeeze
Open weights eat your margin, and the margin was paying for safety.
In the game, rival labs keep releasing open models, and every release drives a free tier that eats into what your product can charge. Stop shipping and your revenue collapses within months. So you ship faster, and thinner, and with less checked than you wanted to.
02 · The trap
You have to reach AGI. Get there unaligned and you lose anyway.
There is no option in this game to decide not to build it, because there is not one in reality either. The win condition is AGI at 100% with alignment above 60. Racing gets you there and loses. Stopping loses. The only winning line is arriving with it under control.
03 · The upside
The good outcomes are modelled as seriously as the bad ones.
Biotech policy compounds into real health gains. The space tree lets orbital compute run away from anything you can build on the ground. Most AGI conversation is either doom or boosterism; the interesting part is that both are live in the same run, and your choices decide which one you get.

The squeeze is the one I most wanted people to feel rather than be told. It is easy to say a lab should slow down. It is harder to say it while watching your own revenue fall because a rival open-sourced something last month, with a rogue-actor clock ticking in the corner. The commercial pressure is what makes safety hard, not villainy, and a spreadsheet cannot make you feel that.

What the game will not let you do

Early builds had alternate victory conditions, and players kept "winning" without ever reaching the singularity. That was the game quietly agreeing that you could opt out. I removed them. Now the singularity always arrives, and the only question the game asks is what kind of world was standing when it did.

02 / The look

What would this look like if it were not trying to look like AI?

That question replaced the first visual direction entirely. The original was the default: a clean control room, glowing panels, the aesthetic every AI product has agreed to share. It was competent and completely forgettable.

The answer was a broadsheet. Cream newsprint, black monospace, ASCII progress bars, a scrolling wire-service ticker and a blinking caret. Nothing glows. Nothing is glass. The interface reads as something being typeset rather than something being rendered, which is a strange fit for a game about machine intelligence and exactly why it works.

Start screen with faction and strategy selection
Faction select
A model release card offering four cognitive focus choices
Shipping a model, and choosing what it is good at
The capital investments policy tree
Capital · one of five policy trees

The constraint that made it hold together: one HTML file, no dependencies, no build step. Around 1,700 lines of vanilla HTML, CSS and JavaScript. Every decision about type, colour and layout had to survive being written by hand, which turns out to be a good filter for whether a decision is worth having.

03 / The creature

The thing you are raising, growing where you can see it.

A bitmap creature sits at the centre of the page. It grows through six life stages, from embryo to singularity, and takes one of six species forms depending on how you have played. Neglect alignment and it visibly reddens, cracks and jitters.

The SAGE creature, a calm green form
SAGE · transparent, careful
The ROGUE creature form
ROGUE · capability first
The TITAN creature form
TITAN · corporate colossus

It is the game's only piece of anthropomorphism and it does a lot of work. A number going from 61 to 57 means nothing at a glance. A creature that has started to crack means something immediately.

The sprite pipeline

The creature started out as shapes drawn by code, which worked but had no life to it. Replacing it with real pixel art meant writing a brief precise enough for an image model to actually deliver on: six creature types, each across six growth stages and four animations, all laid out on contact sheets on a fixed 256-pixel grid so each frame could be sliced out cleanly. The colours were limited to a broadsheet newspaper's ink and cream, and each image was named to match, one to one, exactly what the creature was doing, so the game always knew which picture to show for which action.

The image sheets that came back were built directly into the game file itself, so the whole game stays a single file with nothing extra to load separately. The game then cuts each sheet up into its individual frames as it runs. The procedural renderer was kept as a fallback, so if a sheet fails, the game drops back to the old creature rather than showing nothing at all.

A sprite contact sheet: the SAGE archetype drawn across its growth stages, with paired animation frames on each row
One archetype sheet · growth stages down, animation frames across
The ascended creature with a singularity halo
Ascended · the last stage
04 / Balance

The game plays itself, hundreds of times, so I do not have to.

A strategy game lives or dies on its difficulty curve, and a curve cannot be tuned by feel when the designer already knows every mechanic. So the whole game runs with no browser window open: the single HTML file loads into Node.js against a faked, simplified stand-in for the browser page, just convincing enough that the game logic works normally. That set-up lets scripted bot players run through the simulation on their own.

A testing tool runs the game over and over on its own, playing four factions with several strategies across many different combinations of settings for how fast rival factions advance. It then reports how often each side wins, how often a singularity happens, and how long games last. It caught three real design faults that a human playtester can only describe as "it feels off".

Fault 01 · the goal was optional
Governance strategies won 95% of runs and reached the singularity 0% of the time.

Alternate victory conditions were quietly pre-empting the actual objective. Players were winning without ever getting near the thing the game is about. The fix was to remove the alternate victories entirely: the singularity is the goal, and the state of the world decides which of the 22 endings you get.

Fault 02 · a silent bankruptcy
A change to datacenter running costs bankrupted every faction by month 25.

Not one faction, all four, every time, and invisibly. The cost curve was correct in principle and lethal in the opening. It got a starter-kit grace period so early expansion stays a decision rather than a trap.

Fault 03 · one strategy ate the game
Naive compute-rushing won about 90% of games.

If one obvious strategy dominates, the other four playstyles are just for show. I went back and retuned the numbers behind the rival strategies, testing different values until rushing was outpaced roughly 60% of the time, while broader play still won often enough to be worth playing.

None of these were visible from playing it. The first two would have shipped, and the third would have quietly made most of the game pointless. The harness is the part of this project I would keep if I could only keep one thing.

05 / How it was made

Fourteen shipped versions in about a week.

Designed and directed by me, built pair-programming with Claude Code across roughly a week of sessions. Every iteration was playtested, critiqued and redirected before the next one started. The game found its shape through play rather than through a specification.

Thrown away
A real-time map land-grab rebuild, discarded entirely after one session. It looked more impressive and it lost the simulation feel, which was the whole point.
Replaced
The generic control-room styling, swapped for the broadsheet after asking what it would look like if it were not trying to look like AI.
Deepened
Model releases went from one button, to versioned launches, to versioned launches with a cognitive focus, which is closer to how real labs actually ship.
Removed
Alternate victory conditions, once the bot data showed they were pre-empting the goal.
Every release
Every change went through the same routine: automated Playwright tests clicked through the game checking nothing broke, a gate blocked the release if there were any hidden errors, and screenshots were reviewed by eye. Then it was reviewed, merged in as one clean update, and published automatically by GitHub Actions. Fourteen times.
06 / The verdict

Every run ends with a front page about what you did.

Twenty-two finales, from Paperclip Dawn and Commons Ascendant to The Oracle and Warden's Peace. Each one comes with a generated transcript: the class of intelligence you raised, a three-beat synthesis of the world you made, and a timeline of the decisions that defined the run.

The Oracle ending: a verdict card describing the intelligence raised, the world it made, and a dated list of the decisions that defined the run
An ending · the intelligence you raised, the world you made, and the decisions that got you there.

The synthesis is derived from the ending rather than written alongside it, so the story can never contradict its own verdict. It is a small thing that took a rewrite to get right, and it is the difference between a summary that feels authored and one that feels generated.

Why build this at all

It started as a joke premise, Plague Inc. but the disease is the AGI race, and turned into the most useful thing I have made for thinking about the subject. Simulating a race forces you to be specific about the trade-offs in a way that having opinions about it does not.

It is also a straight demonstration of the loop I use everywhere else: build the thing, instrument it, let the data contradict you, throw away what the data kills. The bots disagreed with me three times and were right three times.

Play it →