By nerdynikhil
Real-time narration of what Claude Code is doing, with optional text-to-speech
A Claude Code CLI plugin that narrates what Claude is doing in real-time. Get audio and visual feedback as Claude reads files, runs commands, edits code, and more.
claude-narrator hooks into four Claude Code lifecycle events:
| Event | Emoji | What it announces |
|---|---|---|
| SessionStart | 🚀 | Session started, resumed, cleared, or compacted |
| PreToolUse | 🔊 | Which tool is about to run, with context (filename, command, etc.) |
| PostToolUse | ✅ | Tool finished, what it did |
| Stop | 🏁 | Claude is done and waiting for your next prompt |
All output goes to stderr so it never interferes with Claude's stdout.
jq for JSON parsing (brew install jq on macOS, apt install jq on Linux)say (macOS, built-in) or espeak (Linux) for text-to-speech (optional)git clone https://github.com/nerdynikhil/claude-narrator.git
cd claude-narrator
./install.sh --user # all projects
# or
./install.sh --project # current project only
./install.sh --user --uninstall
# or
./install.sh --project --uninstall
Set the environment variable before starting Claude:
export NARRATOR_DETAILED_LOG=1
Logs are written to logs/narration-YYYYMMDD.log with timestamps and tool details.
export NARRATOR_VOICE=Daniel # macOS: try Samantha, Moira, Alex, etc.
List available macOS voices with say -v '?'. For espeak on Linux, use voices like en+f3 or en+m1.
When unset, the system default voice is used.
export NARRATOR_TTS=0
When set to 0, all TTS is skipped but emoji console output continues. If neither say nor espeak is installed, TTS is silently skipped regardless.
The install script adds hook entries to your Claude Code settings.json (either ~/.claude/settings.json for user-wide or .claude/settings.json for project-level). Each hook runs a small bash script that:
jqsay/espeak in the backgroundclaude-narrator/
├── .claude-plugin/
│ └── plugin.json # Plugin manifest
├── hooks/
│ ├── hooks.json # Hooks wiring configuration
│ ├── session-start.sh # SessionStart handler
│ ├── pre-tool-use.sh # PreToolUse handler
│ ├── post-tool-use.sh # PostToolUse handler
│ └── stop.sh # Stop handler
├── docs/
│ ├── quickstart.md # Quick start guide
│ └── examples.md # Customization examples
├── logs/ # Log output (gitignored)
├── install.sh # Installer/uninstaller
└── README.md
MIT
Matches all tools
Hooks run on every tool call, not just specific ones
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
npx claudepluginhub nerdynikhil/claude-narrator --plugin claude-narratorPlays a notification sound when Claude is waiting for your input
Audio feedback system with multilingual TTS announcements, AI-powered contextual messages, and sound effects for Claude Code. Transform your coding experience with intelligent voice feedback that keeps you informed without breaking your flow.
Audio feedback when Claude Code agent completes tasks using pocket-tts
Voice I/O for Claude Code - speak to users and hear their voice input
Audio notifications + AI-controlled config for Claude Code, Cursor IDE, and Codex CLI events. 26 hooks, native matcher routing, TTS, webhooks, status line, focus flow, rate-limit alerts. Auto-bridges to Cursor IDE 3.2.16+; native install via 'audio-hooks install --cursor' or 'audio-hooks install --codex'.
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Memory compression system for Claude Code - persist context across sessions