Discover MCPs & agents
Loading MCPs and agents…
Loading MCPs and agents…
Audio notifications for Claude Code — never miss when your AI pair programmer needs you. Plays distinct sounds when Claude asks a question, finishes a task, or needs your input. Zero dependencies. Cross-platform.
From the repo.
Audio notifications for Claude Code — never miss when your AI pair programmer needs you.
Stop staring at your terminal. claude-code-ding plays distinct sounds when Claude Code asks a question, finishes a task, or needs your input — so you can context-switch freely and come back the moment you're needed.
Works on Windows, macOS, and Linux. Zero dependencies. Installs in 30 seconds.
Claude Code runs autonomously — sometimes for minutes at a time. Without notifications, you're either:
claude-code-ding solves this with three distinct audio alerts:
| Sound | Event | What it means |
|---|---|---|
| 🔔 Three quick ascending beeps | Question asked | Claude needs your answer to continue |
| 🔔 Two medium beeps | Stopped / needs input | Claude finished responding, your turn |
| 🔔 Rising chime | Task completed | A background task just finished |
Each sound is different so you know exactly what's happening without looking.
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/whoisjaso/claude-code-ding/main/install.sh | bash
Windows (PowerShell):
irm https://raw.githubusercontent.com/whoisjaso/claude-code-ding/main/install.ps1 | iex
~/.claude/settings.json
"hooks" section:profiles/windows.json — Windows (PowerShell [console]::beep)profiles/macos.json — macOS (afplay system sounds)profiles/linux.json — Linux (paplay / PulseAudio)/hooks to reload.Zero dependencies — uses your system's built-in beep capability. Works everywhere.
| Platform | How it works |
|---|---|
| Windows | [console]::beep() via PowerShell |
| macOS | afplay with system sounds |
| Linux | paplay with freedesktop sounds |
Want different sounds? Edit the commands in your settings.json hooks:
Windows — use any .wav file:
"command": "powershell -NoProfile -Command \"(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\notify.wav').PlaySync()\""
macOS — use any .aiff/.mp3 file:
"command": "afplay /System/Library/Sounds/Ping.aiff"
Linux — use any .ogg/.wav file:
"command": "paplay /usr/share/sounds/freedesktop/stereo/message-new-instant.oga"
Claude Code supports hooks — shell commands that run in response to lifecycle events. claude-code-ding uses three hook events:
┌─────────────────────────────────────────────────────┐
│ Claude Code │
│ │
│ ┌──────────┐ PreToolUse: AskUserQuestion │
│ │ Question │───────────────────────► 🔔 ding! │
│ └──────────┘ │
│ │
│ ┌──────────┐ Stop │
│ │ Stopped │───────────────────────► 🔔 ding! │
│ └──────────┘ │
│ │
│ ┌──────────┐ TaskCompleted │
│ │ Done │───────────────────────► 🔔 ding! │
│ └──────────┘ │
└─────────────────────────────────────────────────────┘
PreToolUse → AskUserQuestion — Fires right before Claude asks you something. Three quick beeps grab your attention.Stop — Fires whenever Claude stops generating. Two beeps signal it's your turn.TaskCompleted — Fires when a background task finishes. A rising chime tells you without interrupting your flow.All hooks run with "async": true so they never block Claude's execution.
Windows — change frequency (Hz) and duration (ms):
"command": "powershell -NoProfile -Command \"[console]::beep(800,200)\""
macOS — adjust volume (0-255):
"command": "afplay -v 0.5 /System/Library/Sounds/Ping.aiff"
Remove or comment out the hook you don't want in ~/.claude/settings.json. For example, to keep only the "question asked" notification, remove the Stop and TaskCompleted hook entries.
Add hooks to .claude/settings.json in your project root to override global settings for that project. Set an empty hooks array to silence notifications for a specific project:
{
"hooks": {
"Stop": []
}
}
| Platform | Shell | Status |
|---|---|---|
| Windows 10/11 | PowerShell 5.1+ | ✅ Tested |
| macOS 12+ | zsh/bash | ✅ Tested |
| Ubuntu 22.04+ | bash | ✅ Tested |
| Debian 12+ | bash | ✅ Tested |
| WSL2 | bash | ✅ Works (uses Linux profile) |
Requires Claude Code (Anthropic's official CLI).
Install PulseAudio utils:
sudo apt install pulseaudio-utils
Or use speaker-test as a fallback:
speaker-test -t sine -f 800 -l 1 & sleep 0.3 && kill $!
/hooks to verify hooks are loaded~/.claude/settings.json is valid JSONAdjust your system volume, or tweak the beep parameters (see Configuration).
Remove the PreToolUse (AskUserQuestion matcher), Stop, and TaskCompleted entries from the "hooks" section in ~/.claude/settings.json. Keep any other hooks you have.
Or run:
# Coming soon: uninstall script
# For now, manually edit ~/.claude/settings.json
Yes. Hooks are a core Claude Code feature available in all current versions. The PreToolUse, Stop, and TaskCompleted events are stable and supported.
No. All hooks run with "async": true, meaning they execute in the background and never block Claude's response generation.
Yes! See the Custom Sounds section. Point the command to any audio file on your system.
Yes — Claude Code hooks work regardless of where you run Claude Code. Terminal, VS Code integrated terminal, Cursor, iTerm2, Windows Terminal — it all works.
Yes. Add a .claude/settings.json in your project root with different hook commands. Project settings override user settings.
Claude Code supports many hook events: SessionStart, PostToolUse, PreCompact, Notification, and more. Add the same command pattern to any event in your settings. See the Claude Code hooks documentation.
PRs welcome! Ideas:
.wav / .ogg sound packsMIT — do whatever you want with it.
If this saved you from terminal-watching, give it a ⭐
Stop watching your terminal. Start hearing it.
Built for the Claude Code community.
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.