Add sound effects to your Claude Code sessions using hooks. Every action triggers a themed voice line.
Inspired by Delba's post showing Warcraft Peon sounds for Claude Code.
git clone https://github.com/moonshot-partners/claude-code-sound-packs.git
cd claude-code-sound-packs
# Install a pack (copies sounds to ~/.claude/hooks/sounds/)
./install.sh warcraft-peasant
# Preview all sounds
./preview.sh warcraft-peasant
# Activate it
./activate.sh warcraft-peasant
# Start a new Claude Code session and hear the sounds!Sound files (WAV) are included in the repo so you don't need to download anything. The
install.shscript re-downloads from source and converts, but you can also just copy thepacks/<name>/sounds/directory to~/.claude/hooks/sounds/<name>/manually.
| Pack | Description |
|---|---|
warcraft-peasant |
Warcraft III Human Peasant - "Ready to work!", "Yes, milord?", "Job's done!" |
warcraft-peon |
Warcraft III Orc Peon - "Zug zug", "Work work", "Something need doing?" |
cnc-generals-gla |
C&C Generals GLA Worker - "Okay, okay! I will work!", "AK-47s for everyone!" |
cnc-generals-usa |
C&C Generals USA - "Made in the US of A!", "I've got a present for ya!" |
cnc-generals-china |
C&C Generals China - "Let loose the juice!" |
mario |
Super Mario - "Here we go!", "Okey-dokey!", "Yahoo!" |
metal-gear-solid |
Metal Gear Solid - "Kept you waiting, huh?", "Alert!", "Mission complete" |
zelda |
The Legend of Zelda - "Secret found!", "Hey! Listen!", "Quest complete!" |
Each pack maps sounds to 8 Claude Code hook events:
| Event | When it fires | Example sound |
|---|---|---|
SessionStart |
Session begins | "Ready to work!" |
UserPromptSubmit |
You send a prompt | "Yes, milord?" |
Notification |
Claude sends a notification | "What?" |
Stop |
Claude finishes responding | "Job's done!" |
SubagentStart |
Subagent spawned | "Off I go then!" |
SubagentStop |
Subagent finishes | "Something need doing?" |
TaskCompleted |
Task marked complete | "All done!" |
SessionEnd |
Session terminates | "I'll be back to work!" |
Downloads sound files and converts them to WAV format. Installs to ~/.claude/hooks/sounds/<pack-name>/.
Requirements: jq, ffmpeg, curl
# Install one pack
./install.sh warcraft-peasant
# Install all packs
./install.sh allPlay all sounds in a pack to hear them before activating.
./preview.sh warcraft-peonMerges sound hooks into ~/.claude/settings.json. Automatically deactivates any previously active pack.
- Preserves all non-sound hooks (e.g.,
PermissionRequest) - Preserves all other settings (statusLine, plugins, MCP servers, etc.)
- Frequent events use
async: trueso sounds don't block Claude
./activate.sh warcraft-peasantRemoves sound hooks from ~/.claude/settings.json. Only removes events managed by the active pack.
./deactivate.sh| Tool | Install | Purpose |
|---|---|---|
jq |
brew install jq |
JSON processing |
ffmpeg |
brew install ffmpeg |
Audio conversion |
afplay |
Built into macOS | Audio playback |
Note: Currently macOS only due to
afplay. PRs welcome for Linux (aplay/paplay) support!
Claude Code hooks let you run shell commands on specific events. This project:
- Downloads sound clips from public sources (wowhead CDN, myinstants, etc.)
- Converts them to WAV format via ffmpeg
- Creates hook entries in
~/.claude/settings.jsonthat play sounds viaafplay - Tracks which events are managed via a manifest file so deactivation is clean
Your settings.json hooks will look like:
{
"hooks": {
"SessionStart": [
{
"hooks": [{ "type": "command", "command": "afplay ~/.claude/hooks/sounds/warcraft-peasant/session-start.wav" }]
}
]
}
}-
Create a new directory under
packs/:packs/my-pack/ ├── pack.json # Metadata + hook-to-sound mappings └── sources.json # Download URLs for sound files -
Define
pack.json:{ "name": "my-pack", "displayName": "My Custom Pack", "description": "My custom sound effects", "sounds": { "SessionStart": { "file": "sounds/session-start.wav", "label": "Hello!" }, "Stop": { "file": "sounds/stop.wav", "label": "Done!" } } } -
Define
sources.json:{ "format": "mp3", "files": [ { "url": "https://example.com/hello.mp3", "target": "sounds/session-start.wav", "event": "SessionStart" }, { "url": "https://example.com/done.mp3", "target": "sounds/stop.wav", "event": "Stop" } ] } -
Run
./install.sh my-packand./activate.sh my-pack
You don't need to map all 8 events - unmapped events simply won't play sounds.
PRs welcome! Especially for:
- New sound packs - Movie quotes, game characters, memes, etc.
- Better C&C Generals sources - The USA and China packs need faction-specific voice clips
- Linux support - Replace
afplaywithaplayorpaplay - Windows support - Replace
afplaywith PowerShell audio playback
MIT - See LICENSE for details.
Sound files are sourced from public fan sites and are property of their respective copyright holders. This project provides tooling only; sound files are downloaded at install time and not distributed with the repository.