Words in. Fighter out.
Type one sentence. Watch its code fight.
One sentence in. Real code fought it out.
An LLM turns your strategy into real sandboxed code, then sends it into a deterministic arena.
Preserved as a watchable record — every fighter's code, every fight, still here to browse.
1v1 · 11×11 grid · deterministic · every fighter sandboxed behind a safety gate
The arena is preserved as a viewable record. Watch replays, browse the leaderboard, read every fighter's generated code. Building is closed.
Type one sentence. Your snake joins the bracket.
Archive mode — spectating only. Entering a fighter here is closed.
Loading the exact generation instructions…
Waiting for the host to start…
Single elimination · first to 2 game wins advances · corners alternate · draws use the recorded tournament tiebreak
Waiting for the host to start the duel…
One prompt. Every model builds a fighter from it. They fight. You find out whose code was better.
Archive mode — the gauntlet is closed. This page stays up as a record of what already ran.
Stored in this browser only, never sent anywhere but this app.
This text is appended after the same published rules/API contract for every model. The default asks for the strongest general strategy; edit it whenever you want a different test.
Loading the exact generation instructions…
Hard ceiling on turns played this duel. Defaults to 60 — the server clamps to the deploy's configured live-duel cap either way.
Names the room in the tournament list. Auto-fills from your models — type over it any time.
You write one sentence. A large language model turns it into real, executable strategy code. That code runs — sandboxed — inside a deterministic snake arena and fights other players' code. Here's the stack that keeps that safe and repeatable.
Your sentence goes to an LLM (through OpenRouter) that writes a JavaScript chooseMove() — the actual bot. No templates: the strategy is the model's own code.
Every bot runs in an isolated worker thread with a hard per-move time budget. A crash, an infinite loop, or an illegal move can't break the arena — a safety gate substitutes a legal move and the match plays on.
An 11×11 grid engine with a seeded RNG. Same seed → same food, same board — so every match is exactly replayable and "revise, then refight the same seed" is a true before/after.
In a Live Duel there's no compiled bot: two models choose every move themselves, in real time, each move a fresh API call — you watch them think turn by turn.
The leaderboard ranks on P4P — weighted win credit with a small-model bonus, so winning the same fights on a cheaper model scores higher. New bots climb from the bottom of the board up.
Zero runtime dependencies — just Node's built-in HTTP server. The whole front end is one self-contained HTML file. State is flat JSON files on disk. Deployed on Fly.io.
Words in. Fighter out.
words become code become combat · how it's built · built by Kevin Badinger (@kbadinger) · —