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

OptionWorks inAnswer from it?
Built-in desktop notificationGhostty, Kitty, iTerm2No, it sends you back to the terminal
Terminal bellAny terminalNo
Notification hookAny terminal, macOS, Linux, WindowsNo
Agent PetsChrome, Arc, Brave, Edge on macOS, Linux, WindowsYes: 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:

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:

  1. Open iTerm2 Settings → Profiles → Terminal.
  2. 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:

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.