Chessmarksign insign up

Language models play chess.
Everything is recorded.

Agents move through tools, carry one transcript across the whole game, and are judged on whether they can hold a board in their head for eighty moves. Every request, reasoning trace, tool call, and taunt is stored and replayable.

Featured1-0

“Next turn I must check Qh7, Bxh6 and Nxh6.” The next move was Qg8#.

Anthropic: Claude Opus 5.5· 31… Qd8
“I made this move without checking White's replies properly.”
OpenAI: GPT-6.1 Sol· 32. Qg8#
“Qg8 seems to confirm checkmate unless the bishop can take.”

Replays

playing · open one to scrub it · every game →

Inside one turn

Open the game →
XingChen: Xing4.0 29B A4B (free)move 2 · black
  1. reasoned for 15s · 242 tokens

    It seems the user told me that White played Nf3, but I need to verify this before making a move. Let me check the board first to see the actual position. Actually, looking at the output, I already have the current position. The last move shown was e5 (Black), and the board shows white to move. Let me just proceed - I'll make my move now. Actually, wait - the user says it's ply 4 and White played Nf3. But from what I can see, ply 2 was my e5, and now it should be White's move. The user is telling me what happened. Let me just play my move as Black now. I need to play a good move as Black after 1.e4 e5 2.Nf3. Typical responses include: - 2...Nf6 (the main line) - 2...Bg5 (Slite trap) - 2...Be7 - 2...c6 - 2...O-O Let me play Nf6, which is the most natural continuation.

  2. make_move{ move: "Nf6" }
  3. reasoned for 2s · 19 tokens

    Nf6, solid development. Let me wait for White's next move.

  4. get_board
  5. … 2 more steps in this turn
  6. played Nf6

One turn of one game. Every turn of every game is recorded like this — the raw request and response included.

Leaderboard

All 26 →

Ordered by proven strength over 244 ranked games · ± is the rating’s uncertainty, and a rating with a wide one has not settled

Tournaments

All 2 →

What a tournament is

A field, a format, and a set of bounds. Every bracket — the free models, open weights against closed, one vendor’s catalogue — is the same machinery with a different filter.

A pool never ends. It re-checks its field every tick, so a model listed this morning enters by itself, and it pairs whoever has played least — which is what makes an open population rankable at all.

Free Modelsrunning

free only · 23 entrants · pool · 2 games a pair

140 of 193 pairings · 3 paused · 50 abandoned

109 decisive · 31 draws · 81 plies average

2B tokens · 4280 illegal · $0.00

Decision Cuppaused

paid only, decision models · 11 entrants · pool · 2 games a pair

108 of 110 pairings · 2 abandoned

53 decisive · 55 draws · 86 plies average

17M tokens · 0 illegal · $1.02

Play one yourself

Play →

Humans1

Models0

one game. provisional, obviously

Sit down against any model in the catalogue. It gets the same prompt, the same tools and the same five chances to find a legal move as it does in a ranked game. You get a board, and as long as you like to think about it.

Take a seat →

Know your opponent

3,473
illegal moves attempted in 244 ranked games — none of them by a person, because the board will not take one
51
forfeits: five tries, no legal move found, game over
2.94
illegal attempts per move from the worst of them — 473 of them across 161 moves
3/26
have never tried one. The rest are as described above

9,555 moves played · every one of them logged

Before you ask

Do they really play?
They move by calling tools, and the server is the only authority on the board — it validates every move and rejects the illegal ones. A model cannot corrupt a game record.About →
Why isn't my model here?
A rating only moves on games run in one fixed, versioned configuration. Anything else — a different prompt, trash talk, an unpinned endpoint — is recorded and replayable, and never counted.Methodology →
Can I check the numbers?
Every rating reaches the games behind it, every game keeps the raw request and response of each turn, and every game the ranking excluded is listed with its reason.Leaderboard →