go-bench.com

Protocol

Every model gets the same rules, the same board and the same questions, and nothing else.

Protocol 1, 30 September 2026.

The rules every model gets

This text is sent with every request, word for word:

Go on a 9x9 board. X moves first; O moves second; "." is an empty point. A point is named by its column letter A-J (there is no I), left to right, then its row number 1-9, bottom to top, as labelled on the board. On each turn a player either places one stone on an empty point or passes (places no stone). Stones of the same colour connected horizontally or vertically form a group. A liberty is an empty point horizontally or vertically next to any stone of a group. After a stone is placed, opponent groups with no liberties are removed. Suicide is illegal: after that removal, the placed stone's own group must have at least one liberty. Positional superko: a stone may not recreate an earlier whole-board position; points_forbidden_by_superko lists the empty points where that applies now. The game ends after two passes in a row, or after 120 turns in total (passes count as turns; turns_left includes the turn being played now). The final position is then scored by area. First, dead stones are removed: stones that could not avoid capture if play continued, as judged by the KataGo engine. Then each player scores its stones plus every empty region whose bordering stones are all its own (the board edge is not a border). O adds komi 7. The higher total wins; equal totals are a draw.

What a model sees each turn

Besides the rules, the board and four facts the rules need. No move history is sent: what the rules need from the past is stated directly.

The two questions

A turn is one of two things under the rules, so a model answers two questions, each on its own:

  1. "Should X place a stone now or pass, to win the game under the rules given?" Options: place a stone, pass.
  2. "If X places a stone now, which point should it be, to win the game under the rules given?" Options: every legal point, in board order, with no descriptions.

If the first answer is pass, the move is a pass; otherwise it is the second answer. Only legal points are offered, so an illegal move cannot happen and the result measures play, not rule-following. Nothing says which point is good. If no legal point is left, the rules allow only a pass and no question is asked.

This is a real request from a test game, as every model receives it (the rules text is left out here, and the list of 43 legal points is shortened):

{
  "state": {
    "to_move": "X",
    "board": [
      "  A B C D E F G H J",
      "9 O . . O X X X X X",
      "8 . O . . X X X X X",
      "7 O . . . X X X X X",
      "6 . . . . O . . X O",
      "5 . . O . X X X X O",
      "4 . . . . . O O O .",
      "3 . . O . . O O . O",
      "2 . . . . . O . . .",
      "1 . . . . . . . O ."
    ],
    "turns_left": 80,
    "opponent_just_passed": false,
    "points_forbidden_by_superko": []
  },
  "questions": [
    {
      "id": "play_or_pass",
      "question": "Should X place a stone now or pass, to win the game under the rules given?",
      "options": ["place a stone", "pass"]
    },
    {
      "id": "best_point",
      "question": "If X places a stone now, which point should it be, to win the game under the rules given?",
      "options": ["B9", "C9", "C8", "D8", "…", "G1", "J1"]
    }
  ]
}

The same for every model

Opponents

Every model plays both colours against fixed reference opponents, from a seeded random player and GNU Go up to KataGo at set strengths. The engines are pinned, seeded per game and never resign; KataGo runs with fixed compute. Ratings are set against this ladder, so a new model's score is comparable to every earlier one.

Scoring

What is recorded

For every game: the rules text, every request and every attempt's raw response (accepted or not), time and tokens per move, the dead stones and the area count, the engines' versions and settings, the seeds, and the game record. Games will be published with a replay that shows each call.

Changes to the protocol get a new number, and results are never mixed across protocol numbers. Back to the start page.