ChessBench
ExplorerStar on GitHub

Methodology

How ChessBench scores a model

Every model sees the same Lichess puzzles, with the same prompt. One try. The moves have to match the published solution exactly.

puzzles
150
tactic types
5
rating bands
3
models tested
68
graded answers
10,200

Dataset unavailable · generated Unknown UTC

01

What happens to each puzzle

  1. 1

    Pick

    Taken from the public Lichess puzzle database. A fixed seed picks ten puzzles for each tactic and each rating band. Anything longer than three moves is skipped.

  2. 2

    Ask

    The model gets the position as FEN and a text board, plus who moves and how many moves to give. The reply has to be UCI, written like e2e4.

    Sample mate in one

    8 . . . . . . k .
    7 . . . . . p p p
    6 . . . . . . . .
    5 . . . . . . . .
    4 . . . . . . . .
    3 . . . . . . . .
    2 . . . . . P P P
    1 . . . . R . K .
      a b c d e f g h

    White to move, 1 move. e1e8

  3. 3

    Read

    A bare move line is used as-is. If the model writes around it, the moves are pulled out. Algebraic moves like Qxf7# are converted from the position.

    • e1e8Used as-is
    • The rook goes e1e8Moves pulled out
    • Re8#Converted
    • (blank)Wrong
  4. 4

    Mark

    Solved means the line matches Lichess exactly. A close answer is still wrong.

02

The puzzles

Ten of each tactic in each rating band, so every band weighs the same. Solved is the average across models.

Tactic800–12001200–16001600–2000PliesSolved
Mate in 1
Mate on the first move.
1010101
81.0%
Mate in 2
Mate in two moves, with the reply forced.
1010103
49.7%
Fork
One move that attacks two pieces.
1010103
27.5%
Pin
Moving the front piece would lose the one behind it.
1010103
30.2%
Hanging piece
Win a piece that isn't defended.
1010101–3
32.5%

A ply is one side's move. Mate in two is three plies here: yours, their reply, then mate.

03

The prompt

One system prompt for every model. The puzzle is sent after it: FEN, a text board, who moves, the tactic, and how many moves to play.

System promptShowHide
You are solving a chess tactics benchmark.

Rules:
1. Use the current position shown below.
2. Output ONLY the final UCI move line — nothing else.
3. Output exactly the required number of plies.
4. Use lowercase UCI notation: each move is the source square followed by the destination square (e.g. e2e4, g1f3, e7e8q for promotion).
5. Do NOT use algebraic notation (Nf3, Qxe5, O-O, Rxd1+, etc.). Only source-destination pairs.
6. Separate moves with a single space. No commas, no move numbers, no check/mate symbols.
7. Do not wrap output in code blocks, markdown, or any formatting.
8. You may think privately, but your final response must contain a move line.
9. Never return an empty final response.
Temperature
0, when the model allows it
Max tokens
400, or 8,192 for reasoning models
Reasoning
Medium, when the model has that setting
04

Messy replies

A lot of answers ignore the format. If the moves are still in there, they get pulled out and scored. Counts below are every reply in this run. Green was scored. Red was wrong.

Clean move line
Just the moves, nothing else.
6,92067.8%
Moves inside other text
Pulled out of a longer reply.
3443.4%
Converted from algebraic
Something like Qxf7#, translated from the board.
3873.8%
Asked again
Older runs sent one follow-up after a blank reply.
5355.2%
Wrong length
Too many moves, or not enough.
890.9%
Unreadable
Not a move this parser could use.
330.3%
Blank
Nothing came back.
1,62615.9%
Request failed
The API errored on this puzzle.
2662.6%
05

The score

  • Exact line

    Has to match Lichess, including the opponent's forced replies on longer puzzles.

  • One try

    One request per puzzle. A blank reply or a failed request is wrong.

  • Accuracy

    Solved puzzles divided by 150. Each tactic has the same number of puzzles, so this is also the average of the tactic scores.

  • Cost

    Token use and dollars, as OpenRouter reported them, added up for the whole run.

06

What this misses

  • Only the Lichess line counts. Another move that also wins is marked wrong.
  • One puzzle is worth about 0.7 points. Gaps smaller than that are noise.
  • Each model was run once. A second run can score differently, even at temperature 0.
  • The board is text. Models never see a picture of the position.
07

Sources

Lichess puzzle database↗

The positions, and the solutions this benchmark treats as correct.

ChessBench on GitHub↗

The sampler, the prompt, the parser, and the raw results.

Benchmark explorer→

Every answer, one puzzle at a time.