Vibe Arena

Visible tests for model capabilities

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.

Real codeLive decisionsSame-seed revisions

Build your fighter

One prompt · one executable strategy

1v1 · 11×11 grid · deterministic · every fighter sandboxed behind a safety gate

Archive mode

The arena is preserved as a viewable record. Watch replays, browse the leaderboard, read every fighter's generated code. Building is closed.

1Describe a fighting style.
2The model writes executable strategy code.
3Watch it fight, revise, and refight the same seed.
New to Snake? How a game works
  • Two snakes share an 11×11 grid. Each turn, every snake moves one square — up, down, left, or right.
  • Eat food (the dots) to grow one segment and refill health to 100. Go without it and health drops by 1 every turn.
  • You're out if your head leaves the board, runs into any snake's body (yours or the enemy's), or your health hits 0.
  • Head-on: if both heads hit the same square, the longer snake wins and the shorter one dies — equal length, both die.
  • Kills come from traps, not ramming. A safety net stops either snake from steering into a wall or a body while it still has a safe move — so to take an enemy out, cut off its space until it has nowhere safe to go. (It's also why two careful snakes can run the clock out to a stalemate.)
  • Winning: be the last snake alive. If both survive the turn limit, it's scored by survival → length → health.

Build

generation pipeline
Tournament lobby

Type one sentence. Your snake joins the bracket.

How it worksSingle elimination. Win two games against the same opponent to advance. Starting corners alternate; raw draws/timeouts use survival → length → health → recorded seed. A bye may advance you when the field is not a power of two.

Archive mode — spectating only. Entering a fighter here is closed.

Tournament 0 fighters
Join at this table — code PIT-···· vibe-arena.fly.dev/t/····
How it worksSingle elimination. Every matchup is best-of-three: the first fighter to two game wins advances. Starting corners alternate. Raw draws/timeouts use a visible final-board tiebreak: survival → length → health → recorded seed. Non-power-of-two fields receive recorded-seed byes.
New to Snake? How a game works
  • Two snakes share an 11×11 grid. Each turn, every snake moves one square — up, down, left, or right.
  • Eat food (the dots) to grow one segment and refill health to 100. Go without it and health drops by 1 every turn.
  • You're out if your head leaves the board, runs into any snake's body (yours or the enemy's), or your health hits 0.
  • Head-on: if both heads hit the same square, the longer snake wins and the shorter one dies — equal length, both die.
  • Kills come from traps, not ramming. A safety net stops either snake from steering into a wall or a body while it still has a safe move — so to take an enemy out, cut off its space until it has nowhere safe to go. (It's also why two careful snakes can run the clock out to a stalemate.)
  • Winning: be the last snake alive. If both survive the turn limit, it's scored by survival → length → health.

Fighters

Tournament

Single elimination · first to 2 game wins advances · corners alternate · draws use the recorded tournament tiebreak

Live Duel lobby
Both models play this prompt as their committed strategy, live

Model Gauntlet

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.

Exact rules + API sent to every model loading…
Loading the exact generation instructions…
Tournament formatSingle elimination. Every matchup is best-of-three; a model must win two games to advance. The field halves each round down to a champion. Non-power-of-two fields get random byes. Starting corners alternate, and raw draws/timeouts use the published tournament tiebreak.

Names the room in the tournament list. Auto-fills from your models — type over it any time.

How Vibe Arena is built

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.

Prompt → code

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.

Sandboxed execution

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.

Deterministic arena

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.

Live model duels

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.

Pound-for-pound ranking

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.

Boringly simple infra

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) ·