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.

The explain-deck player showing a diagram slide, with the slide list on the left, two nodes lit, and the narration line and controls below.

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

  1. It speaks one step.
  2. It lights what that step is about.
  3. 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

SlideWritten asWhat 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

Share it as a Claude artifact

Ask your agent to host the deck in an artifact and it publishes the one HTML file.

/explain-deck host this in an artifact

Elsewhere it is still one file: any static host, or an email.

CheckWhat happens
SizeDecks run 5 to 8 MB; the limit is 16 MB.
NameThe page_title becomes its name.
PrivacyPrivate until you share it.

Install once, then just ask

$ npx -y explain-deck@latest init
spacepause
← →move between steps
Mmute
Sshow the slide list