By matjic
Native terminal notifications when Claude Code needs your attention
Claude Code hook that sends native terminal notifications (bell, OSC escape sequences) when Claude Code needs your attention.
/plugin marketplace add matjic/cc-terminal-notifier
/plugin install cc-terminal-notifier
That's it — hooks are registered automatically.
If you prefer manual setup, install globally via npm:
npm install -g @matjic/[email protected]
Then add the following to your ~/.claude/settings.json:
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt|idle_prompt|elicitation_dialog",
"hooks": [
{
"type": "command",
"command": "cc-terminal-notifier"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "cc-terminal-notifier"
}
]
}
],
"SubagentStop": [
{
"hooks": [
{
"type": "command",
"command": "cc-terminal-notifier"
}
]
}
]
}
}
Or run directly with npx (replace cc-terminal-notifier with npx @matjic/[email protected] in the hooks above).
| Terminal | Method | Notification Style |
|---|---|---|
| Kitty | OSC 99 | Desktop notification with title + body |
| WezTerm | OSC 99 | Desktop notification with title + body |
| foot | OSC 99 | Desktop notification with title + body |
| Ghostty | OSC 777 | Desktop notification with title + body |
| iTerm2 | OSC 9 | Desktop notification with message |
| All others | Bell | Terminal bell (flash/sound) |
Optionally create ~/.config/claude-code/terminal-notifier.json to customize behavior:
{
"enabled": true,
"method": "auto",
"showProjectName": true,
"events": {
"permission": { "enabled": true },
"complete": { "enabled": true },
"subagent_complete": { "enabled": false },
"question": { "enabled": true }
},
"messages": {
"permission": "Claude Code needs permission",
"complete": "Claude Code has finished",
"subagent_complete": "Subagent task completed",
"question": "Claude Code has a question"
}
}
true)"auto", "bell", "osc9", "osc777", "osc99" (default: "auto" — auto-detects from TERM_PROGRAM)true)true/false shorthand)| Event | Hook | Default |
|---|---|---|
permission | Notification (permission_prompt) | Enabled |
question | Notification (idle_prompt, elicitation_dialog) | Enabled |
complete | Stop | Disabled |
subagent_complete | SubagentStop | Disabled |
No notification appears:
method explicitly in the config~/.claude/settings.jsonecho '{"hook_event_name":"Notification","notification_type":"permission_prompt","cwd":"/tmp","session_id":"test","transcript_path":"","permission_mode":"default","message":"test"}' | cc-terminal-notifierNotification goes to wrong output:
/dev/tty directly, avoiding stdout. If /dev/tty is unavailable, it falls back to stderr.Apache-2.0
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 matjic/cc-terminal-notifierSmart notifications for Claude Code task statuses (Go implementation)
Warp terminal integration for Claude Code - native notifications, and more to come
Ghostty terminal notifications for Claude Code events (bell, OSC 777). Notifies on permission prompts, idle, auth, and elicitation dialogs.
Desktop notifications showing what Claude Code is working on - stay informed even when the terminal is not in focus. Optional sound alerts and AI summaries
Sends OS notifications when Claude Code is waiting for user input
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.