Praxis Chess // local-first game analysis
The engine
finds the move.
Praxis
finds the pattern.
Your Chess.com games, evaluated by Stockfish and read back to you in words, across every game you have played, not one at a time.
Stockfish reads every game you have played. Praxis tells you what they keep saying.
NewThe model we trained, and its research, are open on Hugging FaceOur model and its research are on Hugging Face02 / The gap
Example // game 412 // rapid 10+0 // move 30
You just lost a rook.
30…Bxf6eval0.0 → −7.4blunder0:24 left
An engine can tell you this move was wrong. It is right, it is instant, and by your next game you have forgotten it.
One pattern, different moves // game · move · what it cost you
g412Bxf6−7.4
g398Nxe4−1.9
g377Bxc3−2.6
g361Nxd4−3.1
g344Qxd5−2.0
g330Nxb4−1.7
g318Rxe5−2.4
g301Nxc6−2.8
g288Bxf2−3.4
g274Bxe6−2.2
g259Qxe4−1.8
g241Nxf6−2.7
g226Rxd4−2.1
g210Nxe5−3.0
g197Bxd5−1.6
g183Nxc3−2.5
g166Qxd4−2.9
g151Nxd5−2.3
What Praxis writes // from a pattern report
You recapture into forks when you are under thirty seconds.
A fork is one piece attacking two at once. An illustration: the Pattern Report writes sentences like this from counts across every analysed game.
The more of your games it reads, the more often it finds the same mistake
One mistake, across your library
Standard engine analysis
5…Nxd5−0.9
11…b5−0.6
17…h50.0
18…g6−1.7
30…Bxf6−7.4
Correct, and finished with you the moment you close the tab. It describes one move in one game.
An engine tells you
that you were wrong.
Rarely why.
You do not lose games one move at a time. You lose them the same way, over and over. Nobody counts, because counting means holding every game you have played open at once.
Counting means holding every game open at once.
03 / Six stages. The engine decides; models only put it in wordsSix stages // tap one to open it
1…e5−0.3
2…Nc6−0.2
3…Nf6−0.3
4…d5−0.2
5…Nxd5inaccuracy
6…Kxf7−0.7
7…Ke6−0.7
8…Nb4−0.8
9…Nxc2+0.0
11…b5inaccuracy
14…Qc4+−0.7
15…b4+1.2
16…Ba6+1.1
17…h5inaccuracy
18…g6mistake
20…Qxd4−3.3
22…Bxg5−3.7
25…Kd8−3.9
28…Qxf2+−1.9
29…Rf6−1.8
30…Bxf6blunder
33…Bd8−10.0
1–0Resigned
Every game from your Chess.com archives, month by month, skipping months already fetched. You choose which speeds get analysed; rapid by default.
A quick Stockfish pass over every position, then a deeper search with three candidate lines on each flagged move.
The drop in winning chances sets the severity: inaccuracy, mistake or blunder. Arithmetic, with the clock reading attached. No model is asked.
Each mistake gets an evidence graph of engine facts. Hand-written rules name the cause, and a checker passes every claim before it is marked verified.
A model trained for Praxis writes a sentence on each diagnosed mistake. It is handed the engine's verdict, never asked for one, and shown only when a checker passes every claim.
Mistakes become a pattern report, a weekly plan and drills from your own positions. Every figure in them is computed in code.
14×Blunder
11×Hangs a piece
9×Positional
One mistake
is an accident.
Eleven is a habit.
Counted across every analysed game. Severity comes from the engine; the motif labels and the written summary come from the local model.
05 / Evidence
A claim needs
a fact behind it.
Language models write fluent chess nonsense. So Praxis computes the facts first, from the board and the engine, and checks what a model says against them. Ask Prax, the assistant, answers questions about your games only from what its tools return, and says so when they return nothing.
Facts are computed from the board and the engine first. What a model says is checked against them.
Checks catch false claims // not a misleading choice of true ones
06 / Analysis becomes practice // screens show demo data
Your games
Your weakness
Your drill
Your next game
Your improvement
Screens show demo data
07 / Where it runs
On your
machine.
By default.
The engine, the models and the database are processes on your computer. No account, no upload, nothing to cancel. Two optional features reach out, and both stay off until you switch them on: web research for general chess questions, and a cloud model provider.
Every part of it is a process on your computer. Web research and cloud models are optional and off by default.
0 bytes uploaded by default // optional: web search, cloud models
08 / Research
99.7% of its claims true.
We still ship the rules.
Qwen3.5 2B and 4B, fine-tuned with LoRA on the same answers, with only the input changing: the bare board, engine numbers, a flat fact list, or the full evidence graph. Hypotheses and ship rules were fixed and tagged before training.
Tested on 838 unseen positions. In Praxis it writes optional commentary, shown only when every claim checks out.
838 held-out Lichess positions. By its own pre-registered rules the model did not replace the hand-written rules; in Praxis it writes an optional commentary, shown only when every claim passes the checker.
Qwen3.5-2B + LoRA // Apache-2.0 // 95% CI 99.6–99.9 // 4B: 99.7% true, 86.8% pass
09 / InstallGet Praxis
Three commands.
Docker does the rest.
No Java, Node or chess engine to install. Docker builds Praxis with Stockfish 19 inside, downloads the models, and serves it on this computer only. No account: open it and enter your Chess.com username.
Praxis runs on a computer, with Docker. Send yourself the link and set it up there. No account; only your Chess.com username.
- 1
Install Docker Desktop
Free, from docker.com
- 2
Download Praxis
Get the code from GitHub
- 3
The models download on first start
Two models
3.8 GB
Reports and Ask Prax, plus checked commentary
Optional, in docker/.env: a larger report writer (+4.7 GB) or no commentary (−1.3 GB).
- 4
Start it with one command
docker compose -f docker/compose.yaml up -d --build - 5
Open localhost:8086
Enter your Chess.com username. That is all.
Does any of my data leave the machine? +
Not by default. The only outbound requests are to the public Chess.com archive for games under your own username, and the one-time model downloads. No account, no telemetry. Web research and a cloud model provider are optional, off until you configure them, and a cloud provider receives the positions it is asked about.
Do I need a GPU? +
It helps. With an NVIDIA card, add the GPU file shown under Windows · Linux. Docker on a Mac cannot use the GPU, so on a Mac the models run in Ollama installed natively. Without a GPU the models run on the CPU, which works but is much slower; Stockfish always runs on the CPU.
How do I back up my games? +
You don't need to: Praxis backs up on its own. A snapshot a day when something changed and one before every re-analysis, kept in a backups folder on your computer and never deleted. Settings → Backups lists them; the install guide covers restoring, upgrading and uninstalling.
First: install Ollama from ollama.com and start it.
git clone https://github.com/Praxis-Chess/Praxis-Chess.gitcd Praxis-Chessdocker compose -f docker/compose.yaml -f docker/compose.gpu.yaml up -d --build
Optional, in docker/.env: a larger report writer (+4.7 GB) or no commentary (−1.3 GB). See docker/.env.example.
What up does // length = share of download
- databasePostgreSQL ready✓
- appStockfish 19 inside built✓
- qwen3:4b-instructreports, Ask Prax 2.5 GB✓
- praxis-grid-2b-r3checked commentary, trained for Praxis 1.3 GB✓
→ open localhost:8086, then Settings → Player
You already
played the games.
Now find out what they keep trying to teach you.
Find out what they keep teaching you.
Praxis Chess // built by Tanmay Anand