Eight low-poly 3D renders in a row on a dark background: a gold hoard, a needle on a red base, an egg in a nest, a green duck, a running hare, an iron-bound chest, an oak tree with spreading roots, and a small island with a white stone.

Portfolio — incremental game Playable

THE DEATHLESS

Hide your death in an egg. Then hide the egg.

Version 1.1 · playable in the browser · about 13 hours to the ending. TypeScript · Vite · break_eternity.js · Vitest · Playwright · ElevenLabs · Blender. The seven vessels, left to right: the hoard, the needle, the egg, the duck, the hare, the iron chest, the great oak, the Isle of Buyan. Low-poly renders made from Python scripts, no hand modelling.

Play in your browser →

What it is

You are Koschei the Deathless, the sorcerer-king of the Russian tales who cannot die as long as his death stays hidden. You count gold, buy thralls, and watch heroes walk down the road towards the needle that holds your death. When the road gets crowded, you conceal the needle in an egg. The world resets, you come back stronger, and the next layer opens: the egg goes into a duck, the duck into a hare, the hare into an iron chest, the chest under an oak, and the oak on the Isle of Buyan. The folktale itself is the progression tree, and you can recite it after one look.

Each vessel brings a small mechanic of its own. Eggs hatch into hatchlings you choose between. Ducks fly out and come back with artifacts. The hare runs laps that speed up time. The chest forges runes on a grid. The oak grows rings and a tree of skills. Buyan wakes one step at a time with the tide. Baba Yaga’s hut wanders past and sells things. A warm storyteller narrates the whole thing like a scary tale told by the stove.

The game was also an experiment in production. One human held the design. An AI lead ran a swarm of small, cheap AI workers that wrote the code, tests, art and audio. It went from an empty folder to a finished game in three days, 7–9 October 2026.

By the numbers

  • 7 vessel layers, one ending, then Endless
  • about 13 hours to the ending for a simulated steady player
  • 346 unit tests and 26 browser tests, all green at release
  • 210 audio files: voiced lines, music and sound effects
  • 9 rendered 3D models and a full set of agent-drawn SVG icons
  • every line of game code written by agents; the humans wrote the rules

How it was built

The setup had three roles. The design owner was the human, together with a chat assistant acting as designer. They wrote the game design document, the technical spec and the typed contract, and they ruled on every question. The lead was a Claude Code instance (Sonnet 5.5) with an Opus 5.5 advisor. It cut tickets, dispatched workers in waves, ran the gates and wrote no game code. The workers were Claude Haiku 5.5 agents, up to ten at a time, each owning exactly one file per ticket. For the final polish round, the jobs that need taste went to Opus 5.5 agents: reviews, layout and copy.

The swarm ran on five principles.

  1. 01

    The contract is law

    Event names, state fields, test IDs and ports are fixed in a typed contract file that no worker may edit. A worker that needs something new writes it under Needs:, and the design owner decides. Ten agents writing ten files at the same time only fit together if nobody gets to improvise an interface.

  2. 02

    One file, one owner

    Every ticket names the files it owns, and nothing else may be touched. Where several panels shared a screen region, one agent owned the whole region for that round. The rule is boring and it removed a whole class of merge chaos.

  3. 03

    Tests are written blind

    Test writers read the design document and the spec, never the code they are testing. A test written from the implementation only proves that the implementation agrees with itself.

  4. 04

    The simulator plays first

    A headless bot plays the whole game far faster than real time before any human does. A second, “eager” bot prestiges at the first opportunity, to prove that no layer can be skipped. Balance changes without a simulator report were rejected.

  5. 05

    A human decides

    Every design question went up, not sideways: “May this line ever be dropped?” “May a layer be skipped?” Each answer went into a numbered decision log in the design document. There are thirty entries. The swarm never had to guess twice.

Every round ended at the same seven gates: typecheck, unit tests, browser tests, balance simulation, review agents, a screenshot playtest and an offline production build. A milestone only counted when all seven passed in the same round.

What the gates did not catch, and what that taught:

The economy that ate itself. Early on, gold went exponential in a way that no amount of tuning fixed. A diagnostic simulation found the cause: duplicate hatchlings multiplied each other. The fix was a rule rather than a number. Duplicates now stack additively, unique items stay unique, and passives grow sublinearly. That rule is now in the template for the next game.

The layer nobody had to play. The simulator showed that an eager player could skip the Hare entirely. The fix was a phase table in the design document: every layer must hold a player for a minimum time and a minimum number of prestiges. The eager bot now enforces it on every run.

The narrator who lost his lines. A cap on queued voice lines quietly dropped story beats when many happened at once. The ruling was that once-only lines (story, tutorials, the ending) are never dropped, and only ambient chatter may be. Fixing the queue took several rounds of patches. The lesson: when a runtime piece needs a third fix, stop patching and specify it as a pure module.

What only a human saw. The first real playtest found two things that hundreds of automated checks had passed. Beating the first heroes required frantic clicking, and a countdown line made the cards jump every second. Both became design rules: early threats must be beatable at one click per second, and live numbers never move the layout. The playtest is now a mandatory checkpoint after the first playable build, not a nice-to-have at the end.

Tools change shape. The 3D models were planned through a Blender plugin that never connected. The swarm switched to Blender on the command line, with a small helper library that frames, lights and renders any scene in one call. That turned out to be more reliable and parallel, with up to three renders at once.

Feature highlights

  • Seven vessels, one tale

    Needle, egg, duck, hare, chest, oak, island. Each prestige layer is a step of the folktale with its own mechanic and currency, and the vessels visibly nest around the needle.

  • Heroes on the road

    Bogatyrs set out for your needle one at a time and walk the road in real time. Bone Wardens wear them down, and you can drive them back by hand. A captured hero pays ransom. Marya Morevna, the one hero who once had Koschei in chains, arrives late and hits hard.

  • Something hatches

    Eggs hatch into a choice of three hatchlings, from common to mythic. Mythics are unique, and duplicates stack in a way you can predict. Every card shows exactly what it will add to your current income before you pick.

  • Baba Yaga’s hut

    The hut on chicken legs wanders past now and then and sells strange goods for gold. She also gave Koschei the idea in the first place: put it in an egg.

  • Every number explains itself

    Every purchase shows its concrete gain in today’s numbers (“+12.4 gold/s, +8%”) before you buy. Every number has a tooltip that breaks it down to its sources. Live numbers never shift the layout.

  • Told aloud

    A storyteller narrates every beat, and Baba Yaga has a voice of her own. There is a music track per context, plus sound for everything you click. All of it was generated with ElevenLabs inside a fixed credit budget that the swarm was not allowed to exceed. Narration can be set to all, story only, or off.

Also in the game: offline progress with a summary for every layer, automation servants that unlock as rewards, chronicles (achievements), save export and import.

Where it stands

Version 1.1 is out. All seven layers, the ending and Endless mode are complete and playable. Version 1.1 is a polish round by Opus agents: clearer tooltips, a calmer layout, the human playtest fixes and self-hosted fonts.

Next planned: a final verification pass on 1.1 (the last playtest round and a full gate run), and a human listening pass over all the audio. Then the lessons from this project feed into the next swarm game, which starts from a template kit built from this one.

Screens

  • Game screen with a gold counter of 117, a gold hoard on the left, a thralls list with Grave Crow and Bone Rat Swarm in the middle, and an empty road column on the right.
    The first minutesA hoard, a needle on the table and two kinds of thralls. The road on the right is still quiet.
  • Game screen with a hero card labelled 'A wandering bogatyr' moving down the road column towards the needle.
    Someone is comingA wandering bogatyr sets out for the needle. The road shows how far he is, and the tooltip shows how long until he arrives.
  • Dialog titled 'Something hatches' with three hatchling cards: Golden Phoenix Chick (mythic), Pointing Chick and Three-Beaked Nestling (common).
    Something hatchesChoose one hatchling and the others will not wait. Each card states its effect on your current income.
  • Dialog titled 'Hide your death in a duck's egg' showing a gain of 15 shells, the items that reset and the items that stay, with Conceal and Not yet buttons.
    Hide your death in a duck’s eggThe prestige dialog lists exactly what you gain, what resets and what stays.
  • The Great Oak panel with a ring counter, a growth bar and a constellation-like tree of nodes.
    The Great OakIt counts its rings, not the years it spent doing it. A skill tree grows from its roots.
  • The Isle of Buyan panel with a render of the island, a High Tide bar and a list of awakening steps: Wake the Stone, Tide-Song, The White Burning Stone, Raven of the Isle, The Healing Spring.
    The Isle of BuyanThe stone wakes one step at a time, and the tide decides how fast the world listens.

Tech stack

  • Game: TypeScript (strict), Vite, break_eternity.js for numbers past 1e308. No framework, no backend, and it runs offline once loaded.
  • Testing: Vitest (unit), Playwright (browser and screenshot playtests), plus a custom headless balance simulator with reference and eager bots.
  • Art: SVG icons written by agents to a style sheet, and low-poly 3D renders from Blender 5 driven by Python on the command line.
  • Audio: ElevenLabs text-to-speech, voice design, music and sound effects, under a guarded API client with a hard credit cap. Web Audio playback with a voice queue that never drops story lines.
  • Fonts: self-hosted open-licence fonts via Fontsource.
  • Production: Claude Code. The lead was Sonnet 5.5 with an Opus 5.5 advisor. Builders and testers were Haiku 5.5 agents in waves of up to ten. Opus 5.5 handled reviews and the final polish round.

Play it

Play in your browser →

Desktop browser recommended (1280×800 or larger, works down to 1024 wide). Your progress saves in your browser automatically. Export a save from Settings if you want to move it. Sound starts after your first click.

Credits. Design: dilmun.at, with Claude as co-designer. Built by a swarm of Claude agents (Anthropic). Voice, music and sound effects generated with ElevenLabs. 3D renders made in Blender. Fonts under the SIL Open Font License, self-hosted. break_eternity.js under the MIT License. Based on the public-domain Russian folktales of Koschei the Deathless. All in-game text is original.