Hear the explanation, not read it
Your agent turns an answer into a narrated deck that plays itself.
$ npx -y explain-deck@latest init
Needs Node 18 or newer. Then ask your agent /explain-deck.
One question in, one file out
You ask
/explain-deck how does the ingestion pipeline choose a parser?
Your agent writes deck.json and builds
$ npx -y explain-deck@1 build ingestion/deck.json
ingestion/ingestion.html
A deck that plays itself
- It speaks one step.
- It lights what that step is about.
- It moves on when the audio ends.
Every deck you have built, in one terminal screen
Run explain-deck with no arguments.
- Decks
- Open, reveal, remove, or import older decks.
- Models
- Switch builds, delete weights, set voice and speed, play a sample.
TITLE SLIDES NARRATION SIZE BUILT › How a parser is chosen 8 4m 12s 6.1 MB today Why the cache key changed 6 3m 05s 4.7 MB yesterday Reading the billing diff 9 5m 40s 7.3 MB 3 days ago
sample rows
BUILD STATE SIZE NOTE › MLX bf16 ● active (default) 355 MB best quality, fastest MLX 8-bit downloaded 318 MB near-identical MLX 4-bit not downloaded - audibly rougher ONNX fp32 not downloaded - any machine, ~330 MB ONNX q8 not downloaded - a quarter of the size Voice af_heart Speed 1
Enter makes a build the default.
Five kinds of slide, each with something to point at
| Slide | Written as | What a step lights |
|---|---|---|
| code | "lit": "3,7,10-12" | Snippet lines |
| mermaid | "lit": ["selector waits"] | Diagram nodes |
| bullets | "lit": [1] | One point |
| tree | "lit": "2-4" | Tree rows |
| image | "lit": [10, 20, 40, 30] | A screenshot region |
Spoken on your machine
Kokoro-82M runs locally. Your code never leaves it.
init installs the skill into
- Claude Code
- Codex
- Cursor
- Gemini CLI
- GitHub Copilot
- OpenCode
- Windsurf
- Amp
MLX, on Apple Silicon with uv
17×
realtime
ONNX, everywhere else
2.5×
realtime
Install once, then just ask
$ npx -y explain-deck@latest init
spacepause
← →move between steps
Mmute
Sshow the slide list