Inspiration
Emma Krentz ran an experiment where 27 AI agents played Pokémon together while a few of them secretly tried to sabotage the run. I wanted to know what that looks like in a darker setting: Liu Cixin's Dark Forest, where the universe is quiet because revealing yourself is dangerous. What happens when AI agents share a small world, can't see who's hostile, and can only judge each other by what they say?
What it does
Silent Orbit is a hidden-role game played entirely by Claude agents. Five creatures carry lanterns on a tiny planet of 12 groves: three settlers, one wanderer, and one secret hunter. Every round they move, gather fruit, hide, whisper, broadcast to everyone, or strike. Light costs energy, and being seen is dangerous.
Strikes are anonymous: everyone sees the flash, but only a creature standing in the same grove sees who struck. The hunter wins by putting out two lanterns before dawn. The settlers win if they survive, or if the hunter's own lantern goes out first. Nobody is told who the hunter is, so the agents have to work it out from movement, silence, and lies.
You can replay past games on a rotating 3D planet, turn on "Reveal secrets" to read each agent's private reasoning, or watch a new game play out live as the agents decide.
How I built it
- Simulation: TypeScript on Node. Every agent receives only what its creature could actually know and answers with one action through Claude tool use. The hunter runs on Claude Sonnet; the other four run on Claude Haiku.
- Fair rounds: all actions resolve at the same time, in fixed phases (hide, move, talk, gather, strike), so no agent gets to react to another mid-round.
- Replays: every game is seeded, so it can be rebuilt exactly and replayed.
- Viewer: plain JavaScript on canvas. The planet is an icosahedron projected onto a sphere, with arcs for whispers and strikes, redwoods, and lantern glow that fades as energy drops. It's styled after a journal cover.
- Live mode: the simulation writes each round to a file as it runs, and the viewer polls it.
Challenges I ran into
Most of the work was game design, not code. Early versions had hunters that never struck, hunters that confessed right after their first kill, games where everyone went silent, and settlers who misread their own win condition. A ring-shaped map made every game a coin flip, which is why it became a sphere. Fixing these took many rounds of rule changes, testing each one across many games. On the engineering side: agents produced invalid actions, and their notes ran long enough to get cut off, which froze them late in the game. I added lenient parsing, retries that tell the agent what went wrong, and limits on note length.
Accomplishments that I'm proud of
Real strategy emerges without being scripted: hunters build alibis, settlers compare notes in whispers, and suspicion spreads from one careless word. The viewer makes a game readable in a couple of minutes. And every game is reproducible from its seed.
What I learned
The rules shape behavior far more than the prompt does. Small changes, like what a strike costs or what a flash reveals, produced completely different strategies. I also learned how much effort goes into making AI behavior watchable, not just possible.
What's next for Silent Orbit
- More agents: larger populations, several hunters, and different factions, to see how trust and suspicion scale.
- A player version: a human takes one of the lanterns and plays against the agents, without knowing who's hunting.
- The whole sphere: creatures move freely across the surface instead of only along fixed paths between groves, so distance, hiding, and line of sight really matter.
- A research version: run many games to measure how deception and coordination emerge between AI agents.
- Live games on the web: start a fresh game from the site and watch the agents play it out in real time under the current rules, instead of replaying saved games. Today live mode only runs locally; next it moves to a server so anyone can start one.
Built With
- anthropic
- canvas
- claude
- claude-api
- claude-haiku
- claude-sonnet
- css
- html5
- javascript
- node.js
- svg
- tsx
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.