Praxis

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.

Free Open source, MIT Local by default
NewThe model we trained, and its research, are open on Hugging Face

02 / 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

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

1game read 11games read 42games read 97times you made it

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.

03 / Six stages. The engine decides; models only put it in words

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

01Sync

Every game from your Chess.com archives, month by month, skipping months already fetched. You choose which speeds get analysed; rapid by default.

02Evaluate

A quick Stockfish pass over every position, then a deeper search with three candidate lines on each flagged move.

03Flag

The drop in winning chances sets the severity: inaccuracy, mistake or blunder. Arithmetic, with the clock reading attached. No model is asked.

04Verify

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.

05Explain

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.

06Aggregate

Mistakes become a pattern report, a weekly plan and drills from your own positions. Every figure in them is computed in code.

100ms per position 18depth per mistake 2local models 5·10·20win-% drop sets severity

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.

Severity Win-probability drop, computed no model
Cause Rules over an evidence graph, every claim checked verified
Commentary Optional trained model, shown only if every claim passes optional
Ask Prax 12 read-only tools over your games; figures cite the call they came from grounded
No evidence A factual answer with nothing behind it is refused, not guessed refuses
Web General chess questions only; never offered for questions about your games off by default

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

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.

Backend Spring Boot · orchestration and the API :8086
Engine Stockfish · a child process on UCI subprocess
Model Ollama · a 4B model for Ask Prax, a trained 2B for checked commentary :11434
Database PostgreSQL · games, mistakes, patterns :5432
Interface React · six screens and Settings :5173
Outbound Chess.com archives · your username, read-only the only one 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.

99.7%true claims, 2B with the graph 34.8%same model, board only 78%answers pass every check

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.

09 / Install

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.

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.

  1. git clone https://github.com/Praxis-Chess/Praxis-Chess.git
  2. cd Praxis-Chess
  3. docker 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

3.8 GB of models ≈ 10 min of download

You already
played the games.

Now find out what they keep trying to teach you.

Praxis Chess // built by Tanmay Anand