Claude Code notifications not working? Fixes

Updated 21 October 2026

You set up Claude Code notifications and nothing shows up, or it shows up late, or only some of the time. Most cases come down to a handful of causes: the six-second rule, a terminal that doesn’t support it, a hook that never registered, or your system blocking the alert. Work through this list from the top.

Quick checklist

SymptomLikely causeFix
Arrives late, or never while you’re typingClaude Code waits until you seem awayUse a PermissionRequest hook
Nothing at all, no hook set upYour terminal isn’t Ghostty, Kitty or iTerm2Bell or hook
Hook never runsWrong file, broken JSON or hooks turned offCheck with /hooks
Hook runs, no alert on screenmacOS or Linux blocks itSystem settings
Nothing inside tmuxtmux swallows itAllow passthrough
No alert when Claude asks you a questionQuestions aren’t a notification typePreToolUse on AskUserQuestion

1. It arrives late, or not while you’re typing

This is by design. In the terminal, Claude Code only notifies you when you appear to be away:

If you want an alert the moment Claude asks for permission, use a PermissionRequest hook instead of a Notification hook. It runs as soon as a tool call needs your decision. A hook that prints nothing and exits normally doesn’t approve or deny anything, so the prompt still waits for you:

~/.claude/settings.json{
  "hooks": {
    "PermissionRequest": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code needs permission\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

On Linux, use notify-send 'Claude Code' 'Claude Code needs permission' as the command. One exception: PermissionRequest doesn’t run for a sandboxed command’s network request; that still only reaches you as permission_prompt.

2. Your terminal doesn’t support built-in notifications

Without any setup, Claude Code sends desktop notifications only in Ghostty, Kitty and iTerm2, and iTerm2 needs Settings → Profiles → Terminal → Notification Center Alerts turned on, with Send escape sequence-generated alerts enabled under Filter Alerts. In Warp, the VS Code integrated terminal and most others, you get nothing until you either turn on the bell or add a hook:

~/.claude/settings.json{
  "preferredNotifChannel": "terminal_bell"
}

The full setup for each option is in How to get Claude Code notifications.

3. The hook never registered

4. The hook runs but no alert appears

5. You’re inside tmux

tmux swallows the escape sequences terminals use for notifications. Add set -g allow-passthrough on to ~/.tmux.conf, then run tmux source-file ~/.tmux.conf.

6. No alert when Claude asks you a question

When Claude stops to ask a multiple-choice question with the AskUserQuestion tool, it isn’t a permission prompt, and users report no Notification hook firing for it. To be alerted anyway, run your command before that tool with a PreToolUse hook:

~/.claude/settings.json{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "AskUserQuestion",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code has a question\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

7. In the VS Code extension or the desktop app

There, Claude Code sends permission_prompt about six seconds after it asks, whether or not you’re typing, and skips it if you or a PermissionRequest hook answer first. Before Claude Code v2.1.233 it didn’t fire in these sessions at all, so update if you’re on an older version.

Skip the setup: approve from your browser with Agent Pets

Every fix above still ends with you going back to the terminal. Agent Pets uses Claude Code’s PermissionRequest hook, so it hears about a prompt the moment Claude asks, with no six-second wait, and lets you answer it from Chrome:

npx getagentpets init adds the hooks for you, next to any you already have. It runs entirely on your computer, and the terminal prompt keeps working as usual.

Get Agent Pets — was $25, now $6Get Agent Pets — $25

Questions

Why is my Claude Code notification delayed?

In the terminal, Claude Code waits until you seem away: about six seconds without typing for a permission prompt, and about 60 seconds after it finishes for “waiting for you”. Use a PermissionRequest hook for an immediate alert.

How do I check that my Claude Code hook is registered?

Type /hooks in a Claude Code session. It lists every hook Claude Code loaded and where each one came from.

Why don’t I get notifications in Warp or the VS Code terminal?

Built-in desktop notifications only work in Ghostty, Kitty and iTerm2. Elsewhere, set preferredNotifChannel to terminal_bell or add a Notification hook.

Can a notification hook approve the permission for me?

A Notification hook can’t. A PermissionRequest hook can return a decision, but a plain alert command shouldn’t. Agent Pets lets you approve from a pet on any Chrome page or from its desktop notification.

Sources: Claude Code’s documentation on hooks, terminal configuration and tools; GitHub issue #59908.

More guides