chess-postmortem-skills
Four Claude Code skills for chess post-mortems: Stockfish-checked explanations, annotated PGN, an HTML board and a narrated video
- 76 ★ on the repository
- Last commit
Extended access
Why this level
- The skill runs a downloaded Stockfish binary and Python scripts, and video is built with `ffmpeg`
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add skills/chess-postmortem-skillsDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- The skill runs a downloaded Stockfish binary and Python scripts, and video is built with `ffmpeg`
This is third-party code. Review the repository files before installing.
What it does
The skills turn one of your games into a post-mortem you can read: plain-language explanations of mistakes with every claim checked against Stockfish. The `chess-analysis` skill sweeps every move with Stockfish, then parallel investigator subagents ask the engine naive questions until each mistake makes sense. The output is a layered annotated PGN, a standalone HTML board and one "plan pause" where both sides' plans are derived from engine lines. If you recorded your thoughts aloud during the game, Claude transcribes the recording locally with whisper.cpp and uses the clock times in the PGN to match each phrase to a move. The review then refutes your actual reasoning, with no guessing about it. The `chess-video` skill builds a narrated game video with a board, arrows, an eval gauge, piper voice and subtitles. `chess-position` studies one position from a FEN or a screenshot, and `chess-play` lets you play Claude over PGN files with no engine. A full run takes about an hour of processing. The skills are written for Claude, so the `SKILL.md` files double as documentation, and `skills/chess-analysis/SKILL.md` is the place to start.
Who it is for. Chess players who play slow games, record their thoughts and want to review their reasoning along with where the eval bar dropped.
Good fit when
- A 15+10 rapid game ended and you want to understand why a move turned out to be a mistake
- Think-aloud notes are recorded and need to be tied to moves of the game
- You want a standalone HTML board with comments layered over it
- A position from a book or a screenshot should be studied with engine checks
- You want to turn a game into a narrated video for review with a student
Not a fit when
- A blitz game needs a check in seconds: analysis on lichess or chess.com is enough
- You cannot wait an hour: a full run is long
- You want only the score and the engine line with no plain-language explanation
Example request
Analyze my game from the lichess link and my think-aloud recording, explain the three main mistakes and build an HTML board.Limitations
It needs a `.venv-chess` Python environment with `python-chess` and `cairosvg`, and for video also `pillow`, `piper-tts` and `ffmpeg`. Stockfish comes from `$STOCKFISH` or `PATH`, otherwise the `get_stockfish.sh` script downloads the official Linux binary. Transcribing think-aloud notes needs whisper.cpp. Game files live in a `chess-games/` folder at the project root. The depth of explanations depends on the reader level, set once, for example in `CLAUDE.md`. The model can still be wrong, so ask it to recheck a doubtful position with the engine.
How to disable. Delete the `chess-analysis`, `chess-video`, `chess-position` and `chess-play` skill folders from `~/.claude/skills/` or the project `.claude/skills/`. The `.venv-chess` environment and the `chess-games/` folder can be removed by hand.
FAQ
How do I install the skills?
Clone the repo and copy the folders from `skills/` into `~/.claude/skills/` or the project `.claude/skills/`.
What is needed for a game review?
Stockfish, `python-chess`, `cairosvg` and a game link or a PGN file. Video adds `ffmpeg`, `pillow` and a piper voice.
How are think-aloud notes used?
Whisper.cpp transcribes the recording locally, and the clocks in the PGN tie each phrase to the move you were deciding at that moment.
How long does a review take?
A full run with the engine sweep, investigations, annotations and video takes about an hour of processing.
Can I play chess against Claude?
Yes, the `chess-play` skill runs a game over PGN files, renders the board to PNG for vision and uses subagents for blunder checks. No engine is attached.
Discussion
No questions or reviews yet.
Related
SkillsAbout a hundred skills for Claude Code: meetings, research, publishing, TDD, Telegram, email and personal analytics
A mentor skill for Claude Code that guides you to LeetCode solutions with hints instead of handing over code at once
The Taixu five-turns skill pack: ideas pass divergence, convergence, verification, critique and a rescue of rejected options.
The /court skill puts an idea on trial: a prosecutor, a defense, 12 jurors and a judge instead of Claude’s usual agreement.
Seven Claude Code skills: turn a video, article or PDF link into text and an action plan, plus a Scrum coach, a session log and an unblock helper
A desktop app and skm CLI: one copy of each skill in a central hub, symlinked into every AI tool
README in short
Covers the four skills, the game 010 example, the workflow from recording to video, environment requirements, install by copying and the example files.
README badge
Original SKILL.md
---
name: chess-analysis
description: Engine post-mortem of a chess game producing a deeply annotated PGN. Runs a Stockfish eval sweep, then interrogates the engine with "naive questions" (via parallel investigator subagents) until every mistake and every complex engine move is genuinely explained, and writes layered annotations (short notes on ordinary moves, deep dives on 0.3+ pawn errors). Use whenever the user asks to analyze/review/annotate a game, find their mistakes, run a post-mortem or "stage 2", asks "where did I go wrong", or after a game played with the chess-play skill ends. Also for analyzing any PGN file the user provides. If the user recorded themselves thinking aloud during the game (a voice memo / mp3 alongside the game), this skill also covers transcribing it locally, clock-aligning it to the moves, and weaving the player's actual beliefs into the annotations.
---
# Chess post-mortem: sweep, interrogate, annotate
Goal: an annotated PGN a human learns from. An eval number is not an
explanation — the deliverable is the *why*, verified against the engine
and against your own eyes (render positions, look at them).
## Pipeline overview
0. **Audience** — whose game this is and what level to write for.
1. **Setup** — engine + venv.
2. **Sweep** — eval every move, flag mistakes (≥0.3 pawn loss).
3. **Investigate** — one subagent per mistake, in parallel, running the
naive-question method (see below).
3b. **Plan pause** — exactly one quiet position per game, both sides'
plans derived from the engine.
4. **Brief comments** — a subagent pass giving short notes to the
ordinary moves.
5. **Build** — merge everything into `annotations.json`, run
`build_annotated.py`, validate.
6. **Verify** — a subagent re-checks the artifact against the checklist.
7. **Viewer** — bundle the annotated PGN + sweep + engine-line sidecars
into a standalone HTML analysis board (`build_viewer.py`).
8. **Deliver** — send the PGN and the HTML viewer, summarize findings in
chat, commit if in a real repo session.
## 0. Who the review is for — settle this before writing anything
Every comment in this pipeline is pitched at a reader. Pick the level
first and record it, or the annotations drift into proving things the
player can already see.
- **The user's own games**: use the level the user gave you (ask once if
you don't know it, and remember the answer: a CLAUDE.md line or a memory
note such as "my lichess handle is X, write for 1800"). That number wins
over the PGN's Elo header. Ratings in the header are often misleading:
a correspondence or daily rating over a dozen games can sit 300-400
points below the player's real strength.
- **Anybody else's game**: read `WhiteElo`/`BlackElo` for the side being
reviewed and calibrate to that. If the tag is missing, or the rating is
provisional (RD > 150, or a handful of games), ask the user instead of
assuming a low number.
Write the result into `annotations.json` as a top-level
`"audience": {"level": 1800, "source": "user-set"}` so the
brief-comment pass, the plan pause, the verifier and stage 3's narration