Finding the Move Is Not Winning the Game: XiangqiBench for Closed-Loop Evaluation of LLM Agents
Organizations: FloatAI · ETH Zurich · University of Copenhagen · Independent Researcher
Abstract
Static evaluations credit a language model for naming the right move, but an agent must carry a plan through to a verified outcome while an opponent responds. We introduce XiangqiBench, an executable benchmark that measures this difference in Chinese chess: starting from 119 tactical endgames with forced mates supported by engine or checks-only search, an LLM agent must deliver checkmate against an engine defender. An interactive REPL interface separates real moves, state queries, and forward simulation, and we record 8,568 multi-turn trajectories from 12 frontier LLMs under two observation protocols. Three signals that look like competence each overstate closed-loop success. (i) The Conversion Gap: models play the stored reference first move in 26.1% of Sighted trials, yet only 13.9% of these trials end in a win. (ii) The Consistency Gap: the leading model reaches 38.7% pass@3 but only 5.9% pass^3, winning all three trials on 7 of the 46 positions it ever wins. (iii) The Simulation Gap: 32.3% of accepted simulation calls stop on an illegal move, and in 49.3% of comparable cases the real defender replies differently from the line the agent simulated; self-authored rollouts check legality but cannot anticipate the opponent. Finding the move is not winning the game: agent evaluations should score closed-loop outcomes and report reliability alongside coverage.
Figures & tables
| Class | Command & Operational Semantics | Sighted | Restricted |
| (Transitions) | move(from_to) : Validate and commit a real move; trigger defender | ✓ | ✓ |
| resign() : Surrender; terminate trial with defender win | ✓ | ✓ | |
| (Perception) | view_board() : Render ASCII board, FEN, active color, and piece census | ✓ | ✗ |
| get_legal_moves() : Enumerate legal moves in the current state | ✓ | ✗ | |
| get_history() : Return the move sequence with piece annotations | ✓ | ✓ | |
| (Hypothesis) | simulate(moves) : Execute alternating line on cloned state; verify legality | ✓ | ✗ |
Appendix figures & tables33 assets
Supplementary material from the paper’s appendix.
Appendix
| Model | Developer | Weights | Model ID |
|---|---|---|---|
| Gemini 3.1 Pro | Closed | gemini-3.1-pro | |
| GPT-5.5 | OpenAI | Closed | gpt-5.5 |
| Qwen 3.7 Max | Alibaba | Closed | qwen3.7-max |
| Claude Opus 4.7 | Anthropic | Closed | claude-opus-4.7 |
| DeepSeek V4 Pro | DeepSeek | Open | deepseek-v4-pro |
| Seed 2.0 Pro | ByteDance | Closed | seed-2.0-pro |
| Pass@1 | Pass@3 | pass^3 | ||||
|---|---|---|---|---|---|---|
| Model | S | R | S | R | S | R |
| Gemini 3.1 Pro | 22.1 | 14.0 | 38.7 | 32.8 | 5.9 | 1.7 |
| GPT-5.5 | 9.0 | 3.4 | 17.6 | 6.7 | 2.5 | 0.8 |
| Qwen 3.7 Max | 6.2 | 2.8 | 13.4 | 5.9 | 0.8 | 0.8 |
| Claude Opus 4.7 | 5.3 | 0.8 | 10.9 | 1.7 | 0.8 | 0.0 |
| DeepSeek V4 Pro | 2.8 | 0.0 | 5.0 | 0.0 | 1.7 | 0.0 |
| Pass@ | pass^k | ||||||
|---|---|---|---|---|---|---|---|
| Model | Prot. | ||||||
| Gemini 3.1 Pro | S | 22.1 | 33.1 | 38.7 | 22.1 | 11.2 | 5.9 |
| Gemini 3.1 Pro | R | 14.0 | 24.4 | 32.8 | 14.0 | 3.6 | 1.7 |
| GPT-5.5 | S | 9.0 | 14.0 | 17.6 | 9.0 | 3.9 | 2.5 |
| GPT-5.5 | R | 3.4 | 5.3 | 6.7 | 3.4 | 1.4 | 0.8 |
| Qwen 3.7 Max | S | 6.2 | 10.4 | 13.4 | 6.2 | 2.0 | 0.8 |
| Model | Sighted | Restricted-observation |
|---|---|---|
| Gemini 3.1 Pro | 2.2 | 0.3 |
| GPT-5.5 | 0.0 | 0.6 |
| Qwen 3.7 Max | 25.5 | 3.4 |
| Claude Opus 4.7 | 0.0 | 1.1 |
| DeepSeek V4 Pro | 0.0 | 13.2 |
| Seed 2.0 Pro | 0.0 | 25.2 |
| Factors | Queries per turn | |||||||
| Arm | Refresh | Queries | Pass@1 (%) | Solved | Rej. (%) | View | Legal | Sim. |
| Gemini 3.1 Pro, 20 positions | ||||||||
| Full | ✓ | ✓ | 48.3 | 17/20 | 1.7 | 0.00 | 0.00 | 0.75 |
| No queries | ✓ | ✗ | 33.3 | 11/20 | 0.7 | – | – | – |
| No refresh | ✗ | ✓ | 35.0 | 14/20 | 4.0 | 0.32 | 0.19 | 1.00 |
| Neither | ✗ | ✗ | 41.7 | 15/20 | 6.9 | – | – | – |
| Trajectory measure | Sighted | Restricted-observation |
|---|---|---|
| Trajectory denominator | 4284 | 4284 |
| Requested simulation | 3098 | 0 |
| At least one accepted simulation call | 3098 | 0 |
| At least one full legal requested line | 2155 | 0 |
| At least one mid-line invalid step | 1639 | 0 |
| At least one capped request | 32 | 0 |
| Model | Any | Full | Accepted | Rejected |
|---|---|---|---|---|
| Gemini 3.1 Pro | 332 | 299 | 1081 | 675 |
| GPT-5.5 | 356 | 353 | 1727 | 191 |
| Qwen 3.7 Max | 290 | 188 | 360 | 284 |
| Claude Opus 4.7 | 357 | 241 | 595 | 529 |
| DeepSeek V4 Pro | 354 | 266 | 810 | 1006 |
| Seed 2.0 Pro | 328 | 222 | 426 | 359 |
| Model | Median | Mean | 1 ply (%) | 2 plies (%) |
|---|---|---|---|---|
| Gemini 3.1 Pro | 3 | 3.57 | 12.5 | 87.5 |
| GPT-5.5 | 1 | 1.52 | 71.9 | 28.1 |
| Qwen 3.7 Max | 4 | 4.20 | 9.2 | 90.8 |
| Claude Opus 4.7 | 3 | 3.38 | 5.5 | 94.5 |
| DeepSeek V4 Pro | 3 | 3.12 | 27.0 | 73.0 |
| Seed 2.0 Pro | 2 | 2.20 | 46.7 | 53.3 |
| Turn pattern (priority order) | Sighted (%) | Restricted-observation (%) |
|---|---|---|
| No executed move | 898 (5.9) | 1,319 (10.6) |
| Simulation rejected/aborted, then recovery | 4,386 (28.6) | 0 (0.0) |
| Simulate, then adopt tested root | 1,447 (9.4) | 0 (0.0) |
| Simulate, then choose different root | 774 (5.1) | 0 (0.0) |
| Observe, then move | 234 (1.5) | 15 (0.1) |
| Direct execution | 6,988 (45.6) | 10,581 (85.4) |
| Observed failure class | Sighted | Restricted-observation |
|---|---|---|
| All observed failures | 4106 | 4206 |
| Invalid-action limit | 12 | 1178 |
| No command/tool call | 105 | 6 |
| Perpetual check by the attacker | 16 | 7 |
| Repetition draw | 39 | 56 |
| Action limit | 25 | 0 |
| Model | Accepted | Check | Capture | Quiet |
|---|---|---|---|---|
| Gemini 3.1 Pro | 353 | 95.5 (+84.8) | 25.5 (+18.7) | 4.2 (-80.8) |
| GPT-5.5 | 357 | 95.8 (+85.1) | 25.5 (+18.7) | 3.6 (-81.3) |
| Qwen 3.7 Max | 287 | 88.9 (+77.9) | 27.2 (+20.3) | 8.7 (-76.0) |
| Claude Opus 4.7 | 356 | 84.6 (+73.8) | 29.8 (+23.0) | 10.7 (-74.3) |
| DeepSeek V4 Pro | 350 | 81.4 (+70.7) | 27.7 (+21.0) | 14.6 (-70.4) |
| Seed 2.0 Pro | 357 | 88.0 (+77.2) | 33.3 (+26.6) | 7.3 (-77.7) |
| Model | Rook | Cannon | Horse | Pawn | Other |
|---|---|---|---|---|---|
| Gemini 3.1 Pro | +10.9 | -22.5 | +3.2 | +10.8 | -2.5 |
| GPT-5.5 | +16.1 | -17.5 | -5.7 | +8.7 | -1.6 |
| Qwen 3.7 Max | +4.7 | -17.8 | +6.2 | +8.8 | -1.9 |
| Claude Opus 4.7 | +4.7 | -22.2 | +11.2 | +9.3 | -3.0 |
| DeepSeek V4 Pro | +11.7 | -21.9 | +7.7 | +4.5 | -1.9 |
| Seed 2.0 Pro | +24.2 | -27.3 | -4.0 | +9.9 | -2.7 |
| Model | Accepted | Check | Capture | Quiet |
|---|---|---|---|---|
| Gemini 3.1 Pro | 356 | 82.6 (+71.9) | 26.7 (+19.9) | 10.4 (-74.6) |
| GPT-5.5 | 357 | 72.5 (+61.8) | 37.8 (+31.0) | 13.7 (-71.3) |
| Qwen 3.7 Max | 352 | 69.9 (+59.1) | 26.7 (+19.9) | 18.8 (-66.2) |
| Claude Opus 4.7 | 355 | 58.9 (+48.1) | 45.1 (+38.3) | 19.7 (-65.2) |
| DeepSeek V4 Pro | 341 | 43.4 (+32.7) | 36.1 (+29.3) | 34.0 (-50.9) |
| Seed 2.0 Pro | 334 | 55.7 (+45.0) | 35.3 (+28.7) | 32.0 (-53.0) |
| Model | Rook | Cannon | Horse | Pawn | Other |
|---|---|---|---|---|---|
| Gemini 3.1 Pro | +11.4 | -19.4 | +2.5 | +7.6 | -2.2 |
| GPT-5.5 | +11.6 | -17.5 | -1.2 | +8.2 | -1.1 |
| Qwen 3.7 Max | +0.5 | -15.5 | +5.2 | +9.2 | +0.6 |
| Claude Opus 4.7 | +5.4 | -27.8 | +10.4 | +13.0 | -1.1 |
| DeepSeek V4 Pro | +7.7 | -19.5 | +4.4 | +6.3 | +1.1 |
| Seed 2.0 Pro | +18.7 | -16.1 | -6.8 | +7.0 | -2.8 |
| Initial red piece | Cases | Sighted pass/traj. | Restricted-observation pass/traj. |
|---|---|---|---|
| Rook | 99 | 158/3564 | 66/3564 |
| Cannon | 103 | 144/3708 | 62/3708 |
| Horse | 91 | 140/3276 | 52/3276 |
| Pawn | 71 | 107/2556 | 53/2556 |
| Combination | Cases |
|---|---|
| rook+cannon+horse+pawn | 34 |
| rook+cannon+horse | 33 |
| rook+cannon+pawn | 16 |
| cannon+horse+pawn | 7 |
| rook+cannon | 6 |
| horse+pawn | 5 |
| First moved piece | Sighted | Restricted-observation |
|---|---|---|
| Rook | 2032 | 1665 |
| Cannon | 705 | 588 |
| Horse | 851 | 608 |
| Pawn | 556 | 525 |
| Other | 31 | 88 |
| Unknown | 0 | 0 |
| Contrast; model; setting | Root move; agent moves | Outcome; actions |
|---|---|---|
| C1a JH-084 Gemini 3.1 Pro, trial 1 Sighted | Root move: g5g9. Played: g5g9, h5h9 | Pass; checkmate. Invalid: 0. B/L/S: 0/0, 0/0, 0/0. |
| C1b JH-084 GPT-OSS 120B, trial 1 Sighted | Root move: g5g9. Played: g5d5, e0d0, d0e0, e0d0, … | Fail; resignation. Invalid: 3. B/L/S: 1/1, 1/1, 0/0. |
| C2a SQYQ-066 Gemini 3.1 Pro, trial 2 Sighted | Root move: g8g9. Played: g8g9, d8e8, g9g8, i5g6, … | Pass; checkmate. Invalid: 0. B/L/S: 0/0, 0/0, 4/7. |
| C2b SQYQ-066 Gemini 3.1 Pro, trial 1 Sighted | Root move: g8g9. Played: g8g9, d8d9, g9g8, i5g6, … | Fail; attacker checkmated. Invalid: 0. B/L/S: 0/0, 0/0, 8/18. |
| C3a SQYQ-062 DeepSeek R1, trial 2 Restricted observation | Root move: f8e8. Played: a5e5, e5e8, b8c6 | Fail; invalid-action limit. Invalid: 5. B/L/S: 0/0, 0/0, 0/0. |
| C3b SQYQ-062 Gemini 3.1 Pro, trial 1 Restricted observation | Root move: f8e8. Played: c8c9, a5e5, e2g0 | Fail; attacker checkmated. Invalid: 1. B/L/S: 0/0, 0/0, 0/0. |
LLM Agent Evaluation
Large language model agent evaluation measures whether tool-using systems complete tasks reliably, safely, and efficiently.
See all 1,203 papers