Get notified when Claude Code needs you
Claude Code pauses when it wants permission to run something, and again when it finishes. If you're in another window, nothing tells you. Here are four ways to fix that on a Mac, from a one-line setting to a menu bar app.
| Option | Works in | What you get | Setup |
|---|---|---|---|
| Your terminal | Ghostty, Kitty, iTerm2 | A macOS notification | None, or one switch in iTerm2 |
| Terminal bell | Any terminal | A sound | One setting |
| Notification hook | Any terminal | A notification, or any command you choose | A few lines of JSON |
| Muster | Any terminal, Claude's app, Codex and Cursor | An alert you can answer, and ⌥Tab to the session | Install an app |
1Let your terminal show it
Claude Code sends a desktop notification by itself in Ghostty, Kitty and iTerm2 when it finishes or waits for permission while you're away from the terminal.
- iTerm2 needs one switch: Settings → Profiles → Terminal, check "Notification Center Alerts", then under "Filter Alerts" turn on "Send escape sequence-generated alerts".
- tmux swallows these notifications unless you let them through. Add this to
~/.tmux.conf, then runtmux source-file ~/.tmux.conf:
set -g allow-passthrough on
Other terminals, including Apple's Terminal, Warp and the terminals inside VS Code and Cursor, don't get this notification. Use one of the options below.
2Ring the terminal bell
This works in any terminal. It's only a sound, so it won't tell you which session rang.
~/.claude/settings.json{
"preferredNotifChannel": "terminal_bell"
}
3Add a Notification hook
A hook runs a command when something happens in Claude Code. This one shows a macOS notification when Claude Code waits for a permission (permission_prompt) or for your next message (idle_prompt):
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt|idle_prompt",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code is waiting for you\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
]
}
}
- If your settings already have a
"hooks"section, add"Notification"inside it rather than replacing it. - To hear only about permission requests, set the matcher to
permission_prompt. To hear every time Claude finishes a reply, add the same command as aStophook, which takes no matcher. - macOS may list these notifications under Script Editor. If none appear, allow Script Editor in System Settings → Notifications.
4Use Muster
A notification says that something happened. With several sessions running, you still have to find out which one, and switch to it to answer. Muster is a free menu bar app built for that.
- See who needs you. A count in the menu bar, and an alert at the top of the screen when any session waits on you, whether it's Claude Code in a terminal, Claude's desktop app, Codex or Cursor.
- Answer from where you are. ⌥↩ allows a command and ⌥⌫ denies it, using Claude Code's
PermissionRequesthook. If Muster isn't running, Claude Code asks the usual way. - Jump to it. ⌥Tab lists every session, the one that needs you first. Letting go opens it in its terminal or app.
It reads the files Claude Code already writes, so there's no account and nothing leaves your Mac. MIT licensed, for macOS 14 or later.
brew install --cask josefchen/tap/muster
Questions
Why don't I get notifications in the VS Code or Cursor terminal?
Claude Code only sends its own desktop notification to Ghostty, Kitty and iTerm2. In other terminals, use the bell, a hook or Muster.
Can I be notified only for permission requests?
Yes. Set the hook's matcher to permission_prompt.
Do notifications work over SSH?
Claude Code's own notification reaches your Mac over SSH in Ghostty and Kitty, and in iTerm2 once forwarding is on. Muster also lists the Claude Code sessions that Claude's desktop app runs over SSH.
I run several sessions at once. Which option fits?
A hook or the bell tells you that some session needs you. Muster tells you which one, and lets you answer it without switching.
Based on Anthropic's documentation for terminal setup and hooks.