Never miss Claude's response again
Elegant notification solutions for Claude Code CLI - from simple terminal bells to rich desktop alerts
Quick Start β’ Installation β’ Configuration β’ Examples
Ever found yourself:
- π€ Constantly switching tabs to check if Claude has responded?
- π Missing Claude's questions while working in another window?
- β° Wasting time waiting when Claude has already finished?
We've got you covered! Choose from three notification styles that fit your workflow perfectly.
Minimal β’ Recommended β’ Custom
Most users should use the Recommended tier:
# One-line installation (works anywhere - downloads configs automatically)
curl -sSL https://raw.githubusercontent.com/dongzhenye/claude-code-notifications/main/install.sh | bash
That's it! You now have smart audio notifications configured. π
- Claude Code CLI installed (
claude
command available) - macOS / Linux / Windows operating system
- Audio output for sound notifications
π― Option 1: Automatic Installation (Recommended)
# Download and run the installer
curl -sSL https://raw.githubusercontent.com/dongzhenye/claude-code-notifications/main/install.sh | bash
Or clone and run locally:
git clone https://github.com/dongzhenye/claude-code-notifications.git
cd claude-code-notifications
./install.sh
The installer will:
- β Detect your operating system
- β Automatically download configurations from GitHub (no cloning needed!)
- β Apply the recommended configuration
- β Create a backup of existing settings
- β Provide desktop notification setup options
βοΈ Option 2: Manual Installation
-
Choose your configuration file:
- macOS:
recommended/recommended.macos.json
- Linux:
recommended/recommended.linux.json
- Windows:
recommended/recommended.windows.json
- macOS:
-
Copy to Claude settings:
cp recommended/recommended.macos.json ~/.claude/settings.json
-
Test the configuration:
# macOS afplay /System/Library/Sounds/Glass.aiff # Linux paplay /usr/share/sounds/freedesktop/stereo/message.oga # Windows (PowerShell) [System.Media.SystemSounds]::Asterisk.Play()
Perfect for: Users who want instant notifications with zero setup.
claude config set --global preferredNotifChannel terminal_bell
Features:
- β 5-second setup - Just run one command
- β Works everywhere - Universal terminal bell
- β Zero dependencies - Nothing to install
- β Same sound for all - No event differentiation
macOS Terminal Sound Setup
If you don't hear the bell on macOS:
- Open Terminal β Preferences β Profiles
- Select your profile β Advanced tab
- Enable "Audible bell"
- Adjust volume in System Preferences β Sound
Perfect for: Daily users who want smart notifications without fatigue.
What makes it special:
- π΅ Only 2 key events - Needs input & task complete
- πΆ Carefully chosen sounds - Glass (attention) & Tink (done)
- π No notification fatigue - Designed for all-day use
- π Cross-platform - Works on all operating systems
Sound Philosophy:
High-frequency events (completion) β Gentle sound (Tink)
Low-frequency events (needs input) β Noticeable sound (Glass)
Configuration Details
The configuration maps Claude events to system sounds:
{
"hooks": {
"Stop": [{
"description": "Sound notification on completion",
"hooks": [{
"type": "sound",
"path": "/System/Library/Sounds/Tink.aiff"
}]
}],
"Notification": [{
"description": "Sound notification when input needed",
"hooks": [{
"type": "sound",
"path": "/System/Library/Sounds/Glass.aiff"
}]
}]
}
}
Perfect for: Power users who want visual notifications and advanced integrations.
Examples included:
- π₯οΈ Desktop notifications with title and message
- π± Push notifications to your phone
- π Webhook integrations with Slack/Discord
- π¨ Custom scripts for any behavior
Desktop Notification Example (macOS)
# Install terminal-notifier (if needed)
brew install terminal-notifier
# Use the provided script
cp custom/system-notify.macos.sh ~/claude-code-notifications/
# Configure in ~/.claude/settings.json
{
"hooks": {
"Notification": [{
"hooks": [{
"type": "command",
"command": "~/claude-code-notifications/custom/system-notify.macos.sh notification"
}]
}]
}
}
The script provides:
- π System notification center integration
- π Custom titles and messages
- π΅ Optional sound effects
- πΌοΈ Claude icon in notifications
Create Your Own Integration
Create a custom script that receives the event type as first argument:
#!/bin/bash
EVENT_TYPE=$1
case "$EVENT_TYPE" in
"notification")
# Your code for input needed
curl -X POST https://your-webhook.com/claude-needs-input
;;
"stop")
# Your code for task complete
osascript -e 'display notification "Task complete!" with title "Claude"'
;;
esac
Endless possibilities:
- π Smart home integration (turn on a light)
- π Log events to a database
- π€ Trigger other automations
- π Track productivity metrics
π macOS
# Test individual sounds
afplay /System/Library/Sounds/Glass.aiff
afplay /System/Library/Sounds/Tink.aiff
# Explore all available sounds
for sound in Basso Blow Bottle Frog Funk Glass Hero Morse Ping Pop Purr Sosumi Submarine Tink; do
echo "Playing $sound..."
afplay "/System/Library/Sounds/$sound.aiff"
sleep 1
done
π§ Linux
# Test with PulseAudio
paplay /usr/share/sounds/freedesktop/stereo/message.oga
# Test with ALSA
aplay /usr/share/sounds/freedesktop/stereo/complete.oga
# List available sounds
find /usr/share/sounds -name "*.oga" -o -name "*.wav"
πͺ Windows
# Test system sounds
[System.Media.SystemSounds]::Asterisk.Play()
[System.Media.SystemSounds]::Exclamation.Play()
[System.Media.SystemSounds]::Hand.Play()
# List available WAV files
Get-ChildItem C:\Windows\Media\*.wav | Select-Object Name
π No sound playing?
- Check system volume - Ensure it's not muted
- Test the sound file directly - Use commands above
- Verify file paths - Ensure sound files exist
- Check permissions - Some systems restrict audio playback
π Multiple/duplicate sounds?
-
Clear terminal bell:
claude config set --global preferredNotifChannel none
-
Check for duplicate hooks:
cat ~/.claude/settings.json
-
Use the installer's backup:
cp ~/.claude/settings.json.backup ~/.claude/settings.json
βοΈ Settings not applying?
- Settings take effect immediately (no restart needed)
- Check JSON syntax with
jq . ~/.claude/settings.json
- Ensure you're editing the correct file:
~/.claude/settings.json
- Try the automatic installer for proper configuration
π― Focused Development
# Start a long-running task
claude "Refactor this entire codebase to use TypeScript"
# Switch to email/Slack/browser
# π Get notified when Claude needs clarification
# β
Get notified when complete
π Learning & Exploration
# Ask complex questions
claude "Explain the entire architecture and create documentation"
# Go make coffee β
# π Return when Claude is ready
π Iterative Tasks
# Multi-step processes
claude "1. Analyze code 2. Write tests 3. Fix bugs 4. Update docs"
# Work on other things
# π Get notified at each step requiring input
Claude Code supports these notification events:
Event | Description | Frequency | Recommended Sound |
---|---|---|---|
Notification |
Needs user input/permission | Low | Noticeable (Glass) |
Stop |
Completed response | High | Gentle (Tink) |
The Claude Code hook system is powerful and flexible:
{
"hooks": {
"EventName": [{
"description": "Human-readable description",
"hooks": [{
"type": "sound|command",
"path": "/path/to/sound",
"command": "command to run"
}]
}]
}
}
Multiple hooks can be chained for complex behaviors.
We love contributions! Here's how you can help:
- π Report bugs - Open an issue with details
- π‘ Suggest features - Share your ideas
- π§ Submit PRs - Improvements welcome
- π Improve docs - Help others get started
- β Star the repo - Show your support
MIT License - see LICENSE file for details.
Created with β€οΈ by Zhenye Dong
If this tool saves you time, please consider giving it a β