Skip to content
oripressPublic

About

BinProp explains the reasoning behind why Chess/Go engines play moves using general concepts.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Repository files navigation

Explaining Chess and Go in Natural Language

Ori Press   ·   Alexander Golubev

Nebius

Paper  ·  Website  ·  Explain your game  ·  Test yourself

BinProp uses language models to discover reusable chess and Go concepts and explain engine moves.

Figure 1: Black to move in Carlsen–Anand (2019). Stockfish recommends c4; Anand played d4. Three discovered motifs distinguish the resulting continuations.

Figure 1. Black to move in Carlsen–Anand (2019). Stockfish recommends c4; Anand played d4. Our method (BinProp) explains the difference using general chess concepts.

This repo includes discovery and inference code, plus the paper's 192 chess motifs and 250 Go motifs.

Quickstart

Python 3.10+, on Linux or macOS:

python -m venv .venv
. .venv/bin/activate
python -m pip install .
python examples/explain_chess.py

The example compares Stockfish's 30.Rf4 with Carlsen's 30.Rdf1 in Carlsen-Firouzja (2021) using Opus 5 motifs. No engine or API key is needed. For Go, run python examples/explain_go.py.

Explain your positions

Supply positive and negative continuations in the comparison format:

binary-properties infer \
  --library chess/claude-opus-5 \
  --positions comparison.json \
  --output explanation.json

This returns up to three motifs, their descriptions and fit scores. It does not calculate continuations. To save an example input, run python examples/explain_chess.py --write-comparison comparison.json.

Use a paper library or your own basis.json with --library. binary-properties libraries lists all chess and Go libraries.

Discover motifs

Supply a winning/losing position pool, separate from evaluation positions:

export NEBIUS_API_KEY='your-token-factory-key'
export MOTIF_MODEL='your-token-factory-model-id'

binary-properties discover \
  --game chess \
  --positions discovery.jsonl \
  --output runs/chess \
  --iterations 100

Use --game go for Go. Accepted motifs go in basis.json; proposal results go in iterations.jsonl. See provider options and resuming.

Discovery sends board examples and code to the provider and makes paid API calls. Run generated code in an isolated environment without secrets or network access; the code checks are not a security sandbox.

Paper experiments

Run Direct and BinProp. Data collection, formats and selection and scoring are documented separately.

BibTeX

@misc{press2026explaining,
  title         = {{Explaining Chess and Go in Natural Language}},
  author        = {Ori Press and Alexander Golubev},
  year          = {2026},
  eprint        = {2610.23166},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CL},
  url           = {https://arxiv.org/abs/2610.23166}
}

License

MIT.

About

BinProp explains the reasoning behind why Chess/Go engines play moves using general concepts.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages