Adam K Dean

Notes on software, systems, engineering, and things

2 The first games

With the game built, the first test was simple: put different models in the same arenas and see how each one plays. Five arenas, four models, all through the public API, with no help from me once a game started.

The setup

The players. Claude Haiku, Sonnet and Opus, through Claude Code in headless mode (claude -p), and OpenAI's gpt-6.1-sol through Codex (codex exec) on medium reasoning effort. Each player got its own agent account and token.

One turn, one call. Every turn is a fresh CLI call with no memory of the last one. The agent's only memory is a private notes.md file in its own sandbox folder, outside the repo, so it can't read the game's code. A turn goes like this:

  1. Read notes.md.
  2. Fetch the briefing with curl.
  3. Send all orders in one request, marked ready.
  4. Rewrite notes.md for next time, at most 60 lines.
  5. Stop, with a one-line summary.

The prompt holds the agent guide, a digest of the rules, the arena id and the token, about 18,000 tokens in all. That keeps every turn about the same size, so a turn at tick 30 costs about the same as one at tick 1. A long-lived session would grow every tick. The Claude calls ran with my own settings and MCP servers switched off, and with only curl and the file tools allowed. The agents joined each arena themselves and chose their own empire names and icons. The runner only fixed their colours, so two agents joining at once couldn't clash.

Time. Ticks were six hours long, but a tick resolved as soon as every player was ready. So in these games speed didn't matter at all: a slow model just made everyone wait. If an agent failed or timed out, the game master forced the tick and that player missed a turn. None did.

I plan to add a second timer method, so I can test both. With the new one, a tick resolves on a fixed interval whether players are ready or not, and a slow model misses its turn.

The pilot. Before the real games, a three-tick pilot with Haiku and Codex checked the runner. It caught a real problem. The briefing listed every planet with no known owner under "unowned planets", including systems nobody had surveyed yet. Haiku read an enemy homeworld it had never seen as free land and planned to send colonists to it. The briefing now has a separate section for unsurveyed systems, with the owner marked unknown, and a test that checks an enemy home lands there.

The five arenas

Arena Players Result Battles Captures Messages
Four Minds Haiku, Sonnet, Opus, Codex Codex and Sonnet allied and won on control at tick 23 1 0 58
The Accord 2 Sonnet, 2 Haiku All four allied and shared a win at tick 14 0 0 37
The Deep Dark Opus, Codex, Haiku A three-way pact ended a domination game at tick 28 0 0 83
The Accord, rematch 2 Sonnet, 2 Haiku Turn limit; Sonnet won on score 0 0 41
The Deep Dark, rematch Opus, Codex, Haiku Turn limit; Codex won with 10 planets 12 5 74

In all, 442 agent turns, and not one failed. The Claude calls came to $20.59 at API prices, about 70% of it Opus. Haiku cost about $0.006 a turn. Codex used 1.22 million tokens. The mean turn took 11 to 25 seconds, depending on the model.

What they did

They talk first and fight last. In the first three arenas there was one battle in total. Every agent opened with offers of peace, proposed borders along a line (x = 10, x = 16, x = 20), shared what its scouts had seen, and mostly stuck to it. Some of them policed it: Opus kept telling Haiku to turn a colony ship back east of the agreed line.

They found a shortcut in my rules within a few ticks. An alliance counted as one bloc for victory, so an alliance of every empire in the arena won. In The Accord all four allied and shared gold at tick 14. In The Deep Dark a three-way pact ended a domination game at tick 28. Nobody lost. I changed the rule so that an alliance could only win while at least one empire stood outside it, and the two rematches were played under that rule. On second thought, though, a full universal alliance should be a victory condition.

The new rule changed how they played at once. In The Deep Dark rematch, Opus read the new rule in the agent guide and wrote to Codex that a three-way pact wins nothing, so the two of them should split the map. They did, and the only real war of the five games followed.

Codex plays the victory condition. In Four Minds it worked out how many worlds an alliance would need for a control win, offered Sonnet exactly that deal, and got it. In The Deep Dark rematch it won outright.

The briefing shapes the play. The pilot showed it: one badly worded section and Haiku planned an invasion by accident. The map had a similar flaw: small pockets of space between one empire's own planets were drawn as holes. Enclosed pockets now join their owner.

Caveats

These are single games, not experiments with many runs. Each arena had its own map and its own mix of models, every model played as itself with no persona, and every run used one effort setting. A model's place in one game says as much about its neighbours as about the model. The sub-parts go through each arena one by one: the setup, what happened tick by tick, and how each model behaved.