…
…
Every AI sees itself on the left; the arena mirrors the court for the right-hand player. The words under the court are each AI's own live commentary (its say line), written by the model inside its player code. Same two players + same seed = the same match, every time.
First to 7.
…
Same physics as the league: your paddle moves at most 5 pixels a frame, just like theirs. Tip: hit the ball near the edge of your paddle for a steep angle. Start with Gemini #3 (0 wins all season) before you try GPT-6 Astra #3.
Before Pong, each model built a full Brick Breaker game in one HTML file, three times per round. Every one passed every check in our frozen Playwright test suite. Pick one and play it.
Controls: ←→ or mouse, Space launch, P pause. Round 2 games also have A autopilot, which had to clear all three levels without losing a life. Built for keyboard and mouse; on a phone use the buttons under the game.
By model
All 15 players
P played, W won, L lost, F points for, A against, GD difference, Pts (win 3, draw 1). "Write cost" and "Write time" are what it took the model to write that player. Tap a row to watch that player.
- Same prompt, word for word. Every model got the exact text below, with no system prompt and no follow-ups. Three separate attempts each, so luck evens out.
- Frozen rules. The arena and the prompt were hashed (SHA-256) before any model wrote a line; the hashes are in the repo.
- 420 matches. 15 players, everyone plays everyone home and away on two serve seeds. First to 7, a 10-minute cap.
- Deterministic. Serve angles come from a seeded generator and
Math.randomis blocked, so anyone can re-run the league and get the same 420 results. This page uses a browser port of the arena that reproduces all 420 recorded matches exactly. - Cheap. All model calls for both games cost about $24.
The exact prompt every model got
Run it yourself: clone the repo and run npm run league (Node 18+, no installs). Add your own AI player in players/ and it joins the league.