Crosshair LLM Benchmark
Wouldn't it be nice to have a board game to evaluate models against that isn't in the training data? Well, I introduce to you Crosshair, which I invented on October 25, 2026. Should be safe for a few generations yet!
Crosshair is a 7×7 connection-and-flip board game built specifically to work well for a benchmark like this:
- Zero training contamination: Crosshair didn't exist when these models were trained, so no games, opening books, or strategy guides appear in pretraining data. Every move has to be worked out from the four-sentence ruleset in the prompt.
- No draws and fast games: Red connects top to bottom; Blue connects left to right. Orthogonal sandwiches and 2×2 diagonal crosscuts flip enemy stones in place and can chain across the board, so draws cannot happen and every game ends by ply 49 (usually in 25 to 40 plies).
- Small branching factor (~8 to 12 legal moves per turn): Playing at
(c, r)restricts your opponent's next move to empty squares in Rowror Columnc(unless that cross is full, which gives them a free move anywhere). That keeps the move list short enough for a model to actually work through in its scratchpad, while still leaving plenty of room for 3- to 5-ply traps.
Plus, I trained a few Monte Carlo Tree Search and AlphaZero engines in Rust (ai-crosshair) to set a baseline for engine strength. The neural network is only 114K parameters and trained in six minutes on my desktop GPU, which makes it a fun yardstick for frontier language models:
Plain MCTS with random playouts and no neural network or hand-written evaluation heuristics.
The raw 114K-parameter (457 KB) AlphaZero network with tree search turned off. Picks its top policy move with zero lookahead.
The 114K network guiding a 400-simulation PUCT tree. Also grades every turn in the tournament as the shadow oracle.
Deeper 4,000-simulation AlphaZero search. Went 80–0 across all 20 frontier and flash LLM configurations.
How the harness works: Model matchups are 4 games each with colors swapped. On every turn, the harness sends a plain prompt with the rules, the 7×7 ASCII board, and the legal moves, while az-puct-400 scores the move in the background. Click any model or engine below to see its stats and step through its games:
| # | Model | ||||
|---|---|---|---|---|---|
| 1 | az-puct-4000engine | 2343 | 127–1 (99%) | 82.9% | — |
| 2 | az-puct-400engine | 1888 | 117–18 (87%) | 99.9% | — |
| 3 | gemini-4-argon@high | 1440 | 19–13 (59%) | 42.2% | $0.39 |
| 4 | gpt-6.1-sol@low | 1408 | 9–11 (45%) | 39.9% | $0.14 |
| 5 | gpt-6.1-sol@high | 1398 | 17–15 (53%) | 40.4% | $0.49 |
| 6 | gemini-3.8-flash@high | 1328 | 20–16 (56%) | 46.3% | $0.17 |
| 7 | gemini-4-argon@low | 1290 | 6–14 (30%) | 38.8% | $0.10 |
| 8 | claude-opus-5.5@high | 1259 | 14–18 (44%) | 36.0% | $0.55 |
| 9 | claude-haiku-5.5@low | 1255 | 5–11 (31%) | 38.3% | $0.01 |
| 10 | claude-haiku-5.5@high | 1223 | 16–20 (44%) | 38.0% | $0.02 |
| 11 | deepseek-v4.1-flash@high | 1211 | 18–18 (50%) | 35.1% | $0.04 |
| 12 | az-puct-1engine | 1200 | 12–45 (21%) | 54.2% | — |
| 13 | gpt-6-luna@high | 1158 | 13–23 (36%) | 36.5% | $0.02 |
| 14 | deepseek-v4-pro@high | 1148 | 11–21 (34%) | 38.7% | $0.32 |
| 15 | random-uct-50engine | 1135 | 46–83 (36%) | 29.0% | — |
| 16 | gemini-3.8-flash@low | 1135 | 3–13 (19%) | 32.2% | $0.04 |
| 17 | claude-opus-5.5@low | 1085 | 4–16 (20%) | 31.8% | $0.31 |
| 18 | qwen3.8-flash@high | 1036 | 11–25 (31%) | 28.1% | $0.01 |
| 19 | qwen3.8-max@high | 978 | 6–26 (19%) | 31.6% | $0.18 |
| 20 | gpt-6-luna@low | 970 | 2–14 (13%) | 29.5% | $0.01 |
| 21 | qwen3.8-flash@none | 909 | 2–14 (13%) | 21.9% | $0.01 |
| 22 | deepseek-v4-pro@none | 899 | 2–18 (10%) | 20.4% | $0.02 |
| 23 | qwen3.8-max@none | 866 | 3–17 (15%) | 30.1% | $0.17 |
| 24 | deepseek-v4.1-flash@none | 865 | 1–15 (6%) | 17.1% | <$0.01 |