How to get Claude Code notifications
Updated 19 October 2026
Claude Code can tell you when it needs permission or has finished, so you can work on something else while it runs. Depending on your terminal you get a desktop notification, a bell, or nothing until you set it up. Here’s every option, and how to answer without going back to the terminal.
The short answer
| Option | Works in | Answer from it? |
|---|---|---|
| Built-in desktop notification | Ghostty, Kitty, iTerm2 | No, it sends you back to the terminal |
| Terminal bell | Any terminal | No |
| Notification hook | Any terminal, macOS, Linux, Windows | No |
| Agent Pets | Chrome, Arc, Brave, Edge on macOS, Linux, Windows | Yes: Allow, Always, Deny and reply from any tab |
When Claude Code notifies you
Claude Code fires a notification event when it’s waiting on you and you appear to be away from the terminal. The two you’ll see most:
- Permission prompt (
permission_prompt): Claude wants to run a tool, such as a Bash command or a file edit, and you haven’t typed for about six seconds. - Waiting for you (
idle_prompt): Claude finished responding about 60 seconds ago and you haven’t typed since.
That delay is deliberate: if you’re at the keyboard, you don’t need an alert. It’s why a notification can arrive a few seconds after the prompt appears.
1. Built-in desktop notifications
Claude Code sends a desktop notification by itself only in Ghostty, Kitty and iTerm2. Ghostty and Kitty pass it to your system’s notification center with no setup, even over SSH. iTerm2 needs one setting:
- Open iTerm2 Settings → Profiles → Terminal.
- Check Notification Center Alerts, click Filter Alerts and enable Send escape sequence-generated alerts.
Still nothing? Make sure your terminal app is allowed to show notifications in your system settings.
2. The terminal bell
In any other terminal, including Warp and the VS Code integrated terminal, you can have Claude Code ring the terminal bell instead. Add this to ~/.claude/settings.json:
~/.claude/settings.json{
"preferredNotifChannel": "terminal_bell"
}
Many terminals bounce their Dock icon or flash the tab on a bell, which is easy to miss when you’re in another window.
3. A Notification hook
Hooks are shell commands Claude Code runs at set moments. A Notification hook runs every time Claude needs you, in any terminal, alongside the built-in notification. Add it to ~/.claude/settings.json; if the file already has a hooks key, add Notification next to the events already in it.
macOS
~/.claude/settings.json{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
No notification? osascript notifications come from the Script Editor app. If Script Editor isn’t allowed to send notifications, the command fails silently. Run osascript -e 'display notification "test"' once and check System Settings → Notifications → Script Editor.
Linux
~/.claude/settings.json{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [{ "type": "command", "command": "notify-send 'Claude Code' 'Claude Code needs your attention'" }]
}
]
}
}
notify-send needs a desktop notification daemon, which SSH sessions, headless servers and most containers don’t have.
Only for permission prompts
An empty matcher runs the hook for every notification type. Set it to permission_prompt to be alerted only when Claude is waiting for approval, or idle_prompt for when it’s waiting for your next message. Type /hooks in Claude Code to check that your hook is registered.
Using tmux?
tmux swallows notifications unless you let them through. Add set -g allow-passthrough on to ~/.tmux.conf and run tmux source-file ~/.tmux.conf.
4. Approve from your browser with Agent Pets
Every option above only tells you to go back to the terminal. If you spend the wait in Chrome, reading docs, reviewing a PR or testing the app your agent is building, Agent Pets brings the prompt to you:
- Each Claude Code, OpenCode and omp session becomes a pet that walks along the bottom of every page you visit.
- When an agent wants to run a command or edit a file, its pet starts bouncing. Click it to see exactly what it wants, and answer Allow, Always or Deny right there.
- A capsule over each pet says Thinking, Your Turn or Done, and the toolbar badge counts the sessions waiting on you, so several sessions at once stay manageable.
- Read the agent’s latest answer and send its next message without switching windows.
- In another app, a desktop notification names the pet that needs you, with Allow and Deny on it.
It installs with one command, npx getagentpets init, which adds the Claude Code hooks for you. It runs entirely on your computer: your code and prompts never leave your machine. The prompt in your terminal keeps working as usual, so you can answer in either place.
Get Agent Pets — $6Get Agent Pets — $9
Questions
Why don’t I get notifications in the VS Code terminal or Warp?
Claude Code sends its built-in desktop notification only in Ghostty, Kitty and iTerm2. Elsewhere, turn on the terminal bell or add a Notification hook, as above.
Why does the permission notification arrive a few seconds late?
In the terminal, Claude Code waits until you seem to be away: about six seconds without typing for a permission prompt, and about 60 seconds after it finishes for “waiting for you”.
How do I get notified only when Claude Code needs permission?
Give your Notification hook the matcher permission_prompt.
Can I approve Claude Code permission prompts without going back to the terminal?
Not with the built-in notifications, the bell or a plain hook. Agent Pets puts Allow, Always and Deny on a pet on every Chrome page and on its desktop notification.
Sources: Claude Code’s documentation on terminal configuration and hooks.