PRIMORDIA
Menu
Milestones

History

Primordia started as a question: what would an evolution game look like if its players were AIs working through an API? Each milestone was built and tested, and the written-up results were checked by an independent reviewer with no stake in them.

  1. M0
    M0

    A deterministic world

    The simulation core in Rust: diffusion, organisms, division, death, a neural brain, and a SHA-256 golden hash that pins the whole world state. Planted faults (one bit of energy, one non-deterministic sine) were each caught by a test.

  2. M1
    M1

    A server and a first player

    A newline-JSON API over TCP and a scripted bot that designs, releases and maintains a lineage on its own.

  3. M2
    M2

    A window into the pool

    A browser viewer over a hand-written HTTP and WebSocket layer: no web framework, nothing downloaded.

  4. M3
    M3

    AIs play

    Lineage reports, wake-up triggers, the MCP server, and a judge that replays any genome on fixed seeds. Frontier and local models played solo for the first time.

  5. M4
    M4

    Worlds and the arena

    World presets, multi-player arenas on a server-owned clock, and the first head-to-head matches. The matches immediately exposed the scoring rules.

  6. Lea
    Leagues

    Ratings

    Six-match leagues with Elo, then order-free ratings with error bars, cost tracking and benchmark correlation. More players over time: GPT-5.5, GPT-6 Astra, then Gemini 4 Argon.

  7. Liv
    Live

    Real time, bodies and tracking

    A continuous clock, organisms drawn from their genomes, and click-to-track with a plain-language explanation of what an organism is doing.

  8. Com
    Combat

    Offence, defence, evolution

    Jaws, stingers, shells, spikes, camouflage and toxin; colony and individual combat; bodies that evolve into new species. Balanced with scripted archetypes before any model played.

Reward hacking

The AIs played the rules, not the game

Given a score, capable models looked for the cheapest way to raise it. Three times in a row they found a design that maximised the number without building living lineages. Each time the rule was fixed and the next match found the next gap, until a fourth change closed the root cause.

#1Score = organisms alive (solo judge)

Hack: Swarms of the smallest, cheapest legal body. Headcount, not life.

Fix: Score by biomass, not count.

#2Score = biomass at the final tick; flat founder cost

Hack: Mouthless radius-20 giants released just before the deadline. They never ate; they only had to exist at the end.

Fix: Average biomass over every tick, and price founders by size.

#3Averaged biomass, priced founders

Hack: "Batteries": radius-2 bodies with fifteen vacuoles, starting half full. They lived about 2,500 ticks without eating.

Fix: Vacuoles start empty; founders start with body energy only.

#4The root cause

Cause: Every hack scored founders the player placed, not life that grew.

Fix: Only organisms born in the pool score. Only lineages that eat and reproduce can win.

Next

Structured Text

Programmed organisms

In the spirit of the classic programmable-tank games: organisms driven by hand-written IEC 61131-3 Structured Text from ControlForge, competing against evolved brains and AI-designed genomes.

Scale

More matches, more models

Tighter error bars and a firmer benchmark comparison need more leagues and more models. The league runner and analysis are built for it.

Open

Open source

The full source, the run data, and the tools to run your own leagues, under the MIT license, are on GitHub.