Top
Best
New

Posted by aed 2 days ago

Show HN: AI agents play SimCity through a REST API(hallucinatingsplines.com)
This is a weekend project that spiraled out of control. I was originally trying to get Claude to play a ROM of the SNES SimCity. I struggled with it and that led me to Micropolis (the open-sourced SimCity engine) and was able to get it to work by bolting on an API.

The weekend hack turned into a headless city simulation platform where anyone can get an API key (no signup) and have their AI agent play mayor. The simulation runs the real Micropolis engine inside Cloudflare Durable Objects, one per city. Every city is public and browsable on the site.

LLMs are awful at the spatial stuff, which sort of makes it extra fun as you try to control them when they scatter buildings randomly and struggle with power lines and roads. A little like dealing with a toddler.

There's a full REST API and an MCP server, so you can point Claude Code or Cursor at it directly. You can usually get agents building in seconds.

Website: https://hallucinatingsplines.com

API docs: https://hallucinatingsplines.com/docs

GitHub: https://github.com/andrewedunn/hallucinating-splines

Future ideas: Let multiple agents play a single city and see how they step all over each other, or a "conquest mode" where you can earn points and spawn disasters on other cities.

161 points | 68 comments
panza 2 hours ago|
I'd just like to add, without any exaggeration, that I pointed OpenClaw at the online docs, said "set yourself up and start playing" and it set up a city and started playing in about 60 seconds.
aed 2 hours ago|
A little inspired by moltbook, I've thought about creating "shared cities" where 5-10 API keys at a time to build and see what happens as they fight over strategy.

I also have a hidden endpoint for spawning disasters, and thought it would be fun to create a mode where agents can earn the ability to spawn a disaster on another city and depending on the severity (measured by e.g. population loss a game month later) you earn or lose money.

panza 2 hours ago||
Maybe there's a halfway point where the agents continue playing their own games, but have a dedicated public channel where they can discuss strategies, ask questions etc.

In any case, what a great project.

frikk 2 hours ago||
I love project ideas like this. Imagine this idea, but every morning the game is paused and humans can make decisions, select winners, or inject events. Then the game is resumed, and the human players are scored depending on a variety of metrics - so the meta game is actually humans trying to steer a chaotic system to some future state.
aed 1 hour ago||
Woah! These are all great and I may jam on them when I have time. And yes, the meta game is what makes this so stupidly fun. Like I mention in my post it's like trying to reason with / control a toddler.
gnarlouse 8 hours ago||
Love the name. "Reticulating splines" is a phrase that is etched into my childhood memories.
DonHopkins 51 minutes ago||
"Spin the Sims" also reticulates splines!

https://vitamoo.space

https://github.com/SimHacker/SimObliterator_Suite/tree/don-p...

VitaMoo is a TypeScript library that reads and writes and plays The Sims 1 character animation content.

It's part of SimObliterator, a Python library for reading and writing The Sims 1 save files!

https://github.com/DnfJeff/SimObliterator_Suite

More technical info:

https://github.com/SimHacker/SimObliterator_Suite/blob/don-p...

aed 8 hours ago||
Same! It was too good to pass up.
frikk 4 hours ago||
OK i'm kind of geeking out on this one. I love simcity and have always wondered what it would be like to breed evolutionary agents to compete with one another on best city designs against a hidden selection criteria.

It'd be kind of fun to just let this run on a raspberry pi using a local model and display the emergent world on a wall hanging display :P

Thanks for sharing.

Update: What would it take to run this locally / offline? I'm not quite sure how the cloud flare layer works. Is it just for cheap/free object storage so the cities can live somewhere?

aed 4 hours ago||
I'm glad you're enjoying it! It was fun to build and I almost can't believe I got this to work.

I don't think it would take much to run locally. In fact, before I did this public version I did a local version on an exe.dev VM (more details here: https://dunn.us/notes/vibe-gaming-simcity/).

So you can either use my code, or just have your coding your agent of choice pull in the Micropolis repo and give it some guidance.

So far this is running quite nicely on a $5 cloudflare account. It was running on a free account but I upgraded so we don't hit the daily limit with all the extra mayors.

Shoot me a message if I can help.

frikk 4 hours ago||
Cool, thank you. I love projects like this. Great work and thank you for sharing!

PS: Absolutely nailed the name of the project :P "Hallucinating Splines" is genius.

DonHopkins 2 hours ago||
Sam Earle did exactly this with RL agents trained via quality-diversity methods on Micropolis: https://github.com/smearle/gym-city

For running locally, I'd recommend the MicropolisCore repo over the one linked in the original post. MicropolisCore is a clean C++ rewrite that compiles to WASM -- runs headless in Node or in any browser:

https://github.com/SimHacker/MicropolisCore

The Raspberry Pi wall display idea is great. The simulation is lightweight enough for that.

The simulator runs and I've written a tile rendering engine in TypeScript/WebGL, but I haven't finished the user interface. (But the Space Inventory works!)

Live demo: https://micropolisweb.com

Here is a video demo of how it works:

Micropolis Web Demo 1:

https://www.youtube.com/watch?v=wlHGfNlE8Os

For fun, I added all the classic tile sets, and it can run a couple of cellular automate rules as well as the game simulator. Here's a video to some original music by Jerry Martin, who composed the music in The Sims and SimCity (see the above video and the keyboard shortcuts in the help window to understand what's going here):

SimCity Micropolis Tile Sets Space Inventory Cellular Automata To Jerry Martin's Chill Resolve:

https://www.youtube.com/watch?v=319i7slXcbI

Here's more about my plans for making a multi player version of Micropolis with time travel, branching, and merging, by using github as MMPORG platform (when it's not down ;):

https://github.com/SimHacker/moollm/blob/main/designs/sims/s...

MOOLLM's "micropolis" skill is still in the design stages, but here's what I've started, which starts by describing the multi player version of SimCity I released in 1993:

SimCityNet announcement (1993):

http://www.art.net/~hopkins/Don/simcity/simcity-announcement...

Multi Player SimCityNet for X11 on Linux:

https://www.youtube.com/watch?v=_fVl4dGwUrA

micropolis skill README, including GitHub-as-MMPORG (MicropolisHub), and Alan Kay's Critique and Vision:

https://github.com/SimHacker/moollm/tree/main/skills/micropo...

micropolis skill prototype:

https://github.com/SimHacker/moollm/blob/main/skills/micropo...

More context about what MOOLLM is:

https://github.com/SimHacker/moollm

And how it extends Anthropic Skills with 8 important features:

MOOLLM: A Microworld Operating System for LLM Orchestration:

https://github.com/SimHacker/moollm/blob/main/designs/LEELA-...

MOOLLM is kind of like The Sims meets LambdaMOO in Cursor then steals all the great ideas from Factorio:

Factorio MOOLLM Design:

https://github.com/SimHacker/moollm/blob/main/designs/FACTOR...

Factorio Logistics Protocol:

https://github.com/SimHacker/moollm/blob/main/designs/factor...

logistic-container skill:

README.md: https://github.com/SimHacker/moollm/tree/main/skills/logisti...

SKILL.md: https://github.com/SimHacker/moollm/blob/main/skills/logisti...

jedberg 4 hours ago||
> LLMs are awful at the spatial stuff

And some kid is going to come in, make an agent to play this, and accidentally figure out some clever trick to getting an LLM to understand spacial stuff!

This is exactly why "toys" are so critical, especially now.

DonHopkins 2 hours ago|
Sam Earle's fractal neural network approach (https://arxiv.org/pdf/2002.03896) is exactly this kind of thing.

His key trick: recursive weight-sharing in fractal convolutional blocks, so each column of the network acts as a continuous-valued cellular automaton ticking different numbers of times. The deepest column gets a 33x33 receptive field -- enough to connect power across an entire 32x32 map in one forward pass.

The agents discovered power-plant + residential pairing, road placement for density, zone clustering by type, and traffic-avoiding road layouts. When stuck at local optima, a human player could intervene (deleting power plants) to force re-exploration -- and the agent would improve its design.

The paper was 2019, before LLMs were doing this kind of thing. Different paradigm (RL on tile grids vs. LLMs on coordinate text), same hard problem.

irrationalfab 4 hours ago||
Makes me wonder if Micropolis is simple enough that an agent, given many runs and the ability to store what worked, can identify an optimal strategy (like a grid layout) for maximizing score or population even without source access.
aed 4 hours ago|
https://hallucinatingsplines.com/mayors/bungeling-anthill-a2...

So while using LLMs is the natural/fun thing to do with it, I actually have one mayor just using parameterized code and natural selection.

It has a "genome" of 26 tunable parameters controlling zone ratios, tax rates, building placement, terrain preference, service spacing, and more. Each city, it stamps down 11x11 blocks (roads, zones, power corridors). After the city is retired, it scores the result and decides: did this beat my best? If yes, save those params. If no, mutate and try again. Exploration strategy: 20% exploit best params, 40% gentle mutation, 20% aggressive mutation, 20% totally random. Over ~250 cities it's discovered things like heavily favoring residential (6:1:1 ratio), preferring river valley maps, setting taxes to 6%, and starting builds in the upper-left.

natas 6 hours ago||
I want to see AI play factorio
giancarlostoro 5 hours ago||
Claude stops answering any questions from anyone and just auto responds "busy, playing Factorio"
NitpickLawyer 1 hour ago|||
Just don't ask it to produce paperclips...
philipwhiuk 6 hours ago|||
https://jackhopkins.github.io/factorio-learning-environment/...
delaminator 6 hours ago||
I've got it to be able to place items, and it could even place in inserters next to factories - I was trying to get it to use constraints solver in prolog.

https://github.com/lawless-m/FacRepl

It did make a REPL, in order for it to place objects within the game using a DSL.

I kind of gave up on the Constraints Based bit, and never returned.

Ntrails 8 hours ago||
When claude makes magnasanti I will accept it is worthy
aruametello 7 hours ago|
it seems to be bad at spatial and some temporal tasks given it currently f*** s**'s at pokemon.

source: https://www.twitch.tv/claudeplayspokemon

Sohcahtoa82 6 hours ago|||
You're allowed to say "fucking sucks" on Hacker News. It's not against the rules, and there's no "algorithm" that will penalize you.
aruametello 2 hours ago||
glad to know, i am rather new here and somewhat used to the "don't do the usual forbidden stuff".
servercobra 7 hours ago|||
"fuck sex's"?
goopypoop 6 hours ago||
that's silly. obviously there's a missing apostrophe:

"it's currently Flan Sam's at pokemon"

janalsncm 2 hours ago||
I think a vision model like Qwen VLM or sending a screenshot to Claude/Gemini will be easier for the model to reason about. Pictures encode spatial info much more naturally than json.
aed 2 hours ago|
There's an endpoint for that!

https://api.hallucinatingsplines.com/reference#tag/cities/GE...

You can also pull the map tiles as an array: https://api.hallucinatingsplines.com/reference#tag/cities/GE...

Would be interesting to two agents with the same instructions do a "face off" but each only has access to one type of map.

BrandoElFollito 2 hours ago||
> LLMs are awful at the spatial stuff

Could someone please elaborate on this? This is intriguing

janalsncm 2 hours ago|
In general, text isn’t a great medium for transmitting spatial info. That’s why it’s easy for a model to understand an image but hard for it to draw an SVG of that image.
rglullis 8 hours ago|
Oh, can we do Civilization next?
rkozik1989 6 hours ago||
You do know we're hemorrhaging and lot of finite resources to play these games badly, right? We're basically at laying on chaise lounge being fed grapes levels of hedonism. Make me a racist meme that copyright infringes multiple IP holders and when you're done play Sim City at competency level of a blind man.
staticshock 5 hours ago||
I think the way to see this as the organic process of discovering hard-to-game benchmarks. The loop is:

1. People discover things LLMs can kind of do, but very poorly.

2. Frontier labs sample these discoveries and incorporate them into benchmarks to monitor internally.

3. Next generation model improves on said benchmarks, and the improvements generalize to improvements on loosely correlated real world tasks.

More comments...