Skip to content
Project Nova
An android on an alien board, its script open beside it and a hull-integrity warning below.

Program the androids.
Prepare the planet.

The colony fleet is already on its way to a planet nobody can breathe on, so the androids go first — not as units you command, but as machines running the code you sent them out with.

The premise

The fleet is already on its way

Humanity found a planet worth crossing the void for: resource-rich, unexplored, and hostile to anything with lungs. The colony fleet launched anyway. It arrives whether or not the ground is ready for it.

Nobody can land into acid flats and open radiation, so the machines go first. Androids drop ahead of the fleet with a charger, a battery and no supervision, and everything they will ever know how to do has to be aboard them before they wake up.

That is your job. You never move an android or click a unit. You write the program it runs, launch it, and read back what it actually did — where it walked into acid, where it ran flat two tiles from a charger, where it built the depot in the wrong place. Then you write a better one, and the planet gets a little closer to being somewhere people can live.

  • The contract

    One action per round

    Each android runs your script once a round and returns a single action: move, collect, build, salvage, broadcast. That is the whole interface between you and the planet.

  • The constraint

    Nobody is at the controls

    The fleet is too far out to steer anything. Once a run starts you cannot intervene, so whatever your script does about acid, battery and cargo, it does alone.

  • The evidence

    Every round is on the record

    A game is an event recording. Replay it, scrub to the round it went wrong, and you are looking at the exact decision your code made and the world it made it in.

The trailer

The hauler that never checked for acid

Two runs, eighty-one seconds. First light: one android, one charger, and a board nobody has looked at yet. Then a colony program that has grown into an industry — extractors working the ground, a corridor of depots, a colony module going up while the readiness score climbs. And a hauler on version three of a script whose routing never learned to read composition.acid, walking east across the flats. Its last broadcast outlives it.

81 seconds, with sound. Not a mock-up: both acts are ordinary Nova recordings — the same JSON files nova play opens — replayed through the game's own renderer one frame at a time. The script in the code panel is the script stored in the recording, and the readiness numbers come from the same scoring function nova status uses.

Two ways in

A factory on your machine

nova init writes a TypeScript project with a starter android, the rulebook, and an AGENTS.md that tells a coding agent how the game works and how to test a change. Point your agent at the folder and describe the behaviour you want.

npx -p @morten-olsen/nova nova init

This is the path to start on. Writing an android that survives contact with acid, battery limits and a rival is real programming, and an agent that can read the rulebook is a fast way to get there.

Get up and running

The browser lab

An editor, the sandbox and the board in one page. Nothing to install, and your scripts stay in your browser. The quickest way to see what an android actually does.

The browser lab: the starter android open in the editor, and the board it produced after 24 rounds beside it. Open the IDE

Get up and running

Four steps from nothing to a replay you can pick apart. The loop after that is always the same: change one behaviour, run a short batch, and keep the change only if the recording supports it.

  1. Create the factory

    Node 24 or newer. Nova asks for a folder name, installs its packages, and writes a starter android, the rulebook, the CLI guide, and an AGENTS.md for your coding agent.

    npx -p @morten-olsen/nova nova init
  2. Hand the folder to your agent

    Open the new folder with your coding agent and describe the behaviour you want. AGENTS.md already tells it where the rules live, that an android is a module with a default-exported turn function, and to read numbers from the rules global rather than the rulebook.

    What you might ask for

    Read AGENTS.md, then change bot/starter-builder.ts so it collects metal within three tiles, refuses to step onto acid, and returns to the charger below 30% battery.

  3. Run a simulation

    Create a world, upload the script, launch an android against your charger capacity, and run a short batch of rounds.

    npx nova create-game --file game.json --width 8 --height 8 npx nova upload-script --file game.json --owner player-1 \ --name starter-builder --script bot/starter-builder.ts npx nova launch-android --file game.json --owner player-1 --script-id script-1 npx nova run --file game.json --rounds 10
  4. Read what actually happened

    The status command reports every android, its battery and location, and the colony-readiness score with its contributors. The play command opens the recording in the replay viewer, one round at a time, so you can watch the turn where it went wrong.

    npx nova status --file game.json npx nova play --file game.json

The full command reference is in the CLI guide, and the builder manual covers evolving an android past its first version.

It starts with scrap metal

A first android that picks up loose metal is an afternoon's work. A program that still makes good decisions once the loose metal is gone, the acid is spreading and someone else wants the same site is the actual game.

  1. Scavenge

    Find the material Earth scattered, carry what fits, and get back to the charger before the battery runs out. Collection becomes a logistics problem the moment a depot is worth building.

  2. Produce

    Loose material runs out. Extractors work the ground itself, processors turn ore into metal, and an acid plant lets your androids start cleaning a planet that is trying to dissolve them.

  3. Contest

    There is one colony claim. Broadcasts are public and nothing stops them being false, salvage works on infrastructure that is not yours, and no rule enforces an alliance you agree to.

Today's ruleset covers all three: exploration, cargo and battery limits, extraction and processing, acid cleanup, public broadcasts, salvage against hostile infrastructure, and a colony module worth more readiness than anything else on the board. The relay tower is the one piece that is buildable without a mechanic behind it yet, and the rulebook is explicit about what is still being designed.

What there is to build

Every cost, construction time and yield below is a rule, not a constant. A game created with --rules hands your android the numbers it is actually playing under, so a program that reads them keeps working when the game is tuned.

  • The android piece.

    Android

    Runs your script, one action per round

  • The charger piece.

    Charger

    Recharges, and raises android capacity by one

  • The depot piece.

    Depot

    Stores material

  • The extractor piece.

    Extractor

    Harvests the composition of its own tile

  • The processor piece.

    Processor

    Converts two ore into one metal each round

  • The acid processing plant piece.

    Acid processing plant

    Lets your androids clean adjacent acid

  • The scanner piece.

    Scanner

    Reveals nearby tiles at longer range

  • The radar piece.

    Radar

    Reveals a radius-5 disc around itself

  • The material cache piece.

    Material cache

    Scattered material launched from Earth

  • The relay tower piece.

    Relay tower

    Communication infrastructure, planned

  • The colony module piece.

    Colony module

    Worth 1,000 readiness — the game’s hero piece

Costs, yields and the rest are in the rulebook.