claude-code-notifier
how it works guides faq
◐English
English العربية Deutsch Español Français עברית Italiano 日本語 한국어 Nederlands Polski Português (Brasil) Русский Türkçe Tiếng Việt 简体中文 繁體中文
Get started
All guides

Claude Code's built-in notifications: the terminal bell and preferredNotifChannel

Updated 31 October 2026 · 6 min read
on this page 01The quick fix 02Every preferredNotifChannel value 03When the built-in notification fires 04Terminal by terminal 05Over SSH and inside tmux 06The built-in alert and hooks together 07Limits of the built-in options 08Where Claude Code Notifier fits 09FAQ

Claude Code has a built-in notification: when Claude finishes or waits on a permission prompt and you seem to be away, it alerts you through the terminal. The preferredNotifChannel setting decides how. The default, "auto", sends a desktop notification in iTerm2, Ghostty and Kitty and does nothing in most other terminals. Set it to "terminal_bell" to ring the bell character in any terminal, through /config (where it is called Local notifications) or in ~/.claude/settings.json.

01The quick fix

If you hear nothing when Claude finishes, add this to ~/.claude/settings.json:

{
  "preferredNotifChannel": "terminal_bell"
}

Then make sure your terminal does something with the bell: plays a sound, bounces the Dock icon, flashes the tab or raises a notification. That setting lives in the terminal, not in Claude Code. On Mac, Windows and Linux most terminals have a "bell" or "alert" section in their preferences.

02Every preferredNotifChannel value

ValueWhat Claude Code does
"auto" (default)Desktop notification in iTerm2, Ghostty and Kitty. In Apple Terminal, the bell character only when that profile's audible bell is off. Nothing elsewhere
"terminal_bell"Rings the bell character in any terminal
"iterm2"Sends an iTerm2 desktop notification
"iterm2_with_bell"iTerm2 desktop notification plus the bell
"kitty"Sends a Kitty desktop notification
"ghostty"Sends a Ghostty desktop notification
"notifications_disabled"Sends nothing

The setting can go in any settings file: user (~/.claude/settings.json), project (.claude/settings.json) or local (.claude/settings.local.json). Older versions kept it in ~/.claude.json, and Claude Code still reads a value left there.

03When the built-in notification fires

According to Anthropic's documentation, the built-in alert shares its timing with the Notification hook. In a terminal session:

  • Permission prompt: after the prompt has waited about six seconds without a keystroke. Each key you press restarts the wait.
  • Finished: about 60 seconds after Claude stops, and only if you have not typed since and no background agent is still running.

So the built-in "finished" alert is deliberately not instant. It is designed to reach you when you have wandered off, not to ping you while you watch. If you want an alert the moment a turn ends, use a Stop hook instead (see the Stop hook guide).

04Terminal by terminal

iTerm2 (macOS)

iTerm2 gets a desktop notification by default, but iTerm2 only shows it after you allow it:

  1. Open Settings > Profiles > Terminal.
  2. Check Notification Center Alerts.
  3. Click Filter Alerts and enable Send escape sequence-generated alerts.

Also check that iTerm2 is allowed to show notifications in System Settings > Notifications.

Apple Terminal (macOS)

Apple Terminal gets no desktop notification. With "auto", Claude Code sends a silent bell only when it finds Audible bell turned off in the front window's profile. The bell then shows as a window flash, or a Dock bounce while Terminal is in the background, if the profile's Visual bell or Dock bounce option is on.

Watch for one detail. If you accepted Claude Code's first-run terminal setup prompt, it ran /terminal-setup, which turns the audible bell off in your Apple Terminal profile. To hear a sound, set "terminal_bell" and turn Audible bell back on under Settings > Profiles > Advanced.

Ghostty and Kitty (macOS and Linux)

Both get a desktop notification with no setup, and both forward it to your operating system's notification center.

Everything else

Windows Terminal, GNOME Terminal, Konsole, Alacritty, WezTerm, Warp and IDE terminals get nothing by default. Set "terminal_bell" and turn on the terminal's own bell handling, or use a hook. IDE terminals have their own quirks, covered in the VS Code, Cursor and JetBrains guide.

05Over SSH and inside tmux

The desktop notification is an escape sequence that the terminal on your own computer interprets, so it reaches you even when Claude Code runs on a remote server over SSH. Ghostty and Kitty forward it with no extra setup. iTerm2 needs the alert settings above.

Inside tmux, the sequence is swallowed unless you allow passthrough. Add this to ~/.tmux.conf and run tmux source-file ~/.tmux.conf:

set -g allow-passthrough on

Detached sessions are a different problem: if no terminal is attached, nothing can show the alert. See the tmux guide and notifications over SSH.

06The built-in alert and hooks together

Notification hooks run alongside the built-in alert; they do not replace it. Anthropic's documentation is explicit that hooks fire even with "notifications_disabled": the setting only changes how Claude Code alerts you, not whether your hook runs. That gives you a clean split:

  • Keep "auto" or "terminal_bell" for the alert at the desk.
  • Add a hook for anything else, such as a system sound, a desktop notification in a terminal that gets none, or a push to your phone with ntfy.
  • If a hook already shows a desktop notification, set "notifications_disabled" to avoid seeing two.

For example, this plays a sound on macOS whenever Claude needs attention, in any terminal:

{
  "hooks": {
    "Notification": [
      {
        "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }]
      }
    ]
  }
}

Linux and Windows equivalents are in the Linux guide and the Windows guide.

07Limits of the built-in options

  • It stays on the computer. The bell or notification comes from the terminal on your screen. Walk to the kitchen and you miss it.
  • It depends on the terminal. Many popular terminals get nothing until you change a setting.
  • You cannot answer it. It tells you Claude is waiting; you still have to come back to the keyboard.

Anthropic's Remote Control, with the Claude mobile app, is the official way to get phone pushes. The comparison guide covers it next to the other options.

08Where Claude Code Notifier fits

If you work at your desk, the built-in alert plus "terminal_bell" may be all you need. Claude Code Notifier is for when you are not at the desk. Its command line tool, ccn, runs as a Claude Code hook, so it works in any terminal on Mac, Windows and Linux, with or without bell settings. On its own it shows a desktop notification when Claude finishes, needs a permission or asks a question. With a phone paired, you can allow or deny permissions, answer Claude's questions and send the next instruction from the phone, and if you typed in the last 30 seconds nothing waits on the phone at all. See the ccn page.

09FAQ

How do I turn off Claude Code's notifications?

Set "preferredNotifChannel": "notifications_disabled", or pick it under Local notifications in /config. Any Notification hooks you have set up still run.

Why does iTerm2 not show Claude Code notifications?

iTerm2 needs Notification Center Alerts checked and Send escape sequence-generated alerts enabled under Profiles > Terminal > Filter Alerts, plus notification permission in macOS settings. Inside tmux, also set allow-passthrough on.

Why is there no bell in Apple Terminal?

Claude Code's terminal setup turns off Apple Terminal's audible bell. Set "terminal_bell" and switch Audible bell back on in the profile's Advanced tab.

Does the terminal bell work in VS Code?

Not by default. Set "terminal_bell" and check VS Code's terminal bell settings, or use a hook. The IDE guide has the details.

Claude Code Notifier Get a push on your phone when Claude Code finishes or needs you, then approve, deny or answer from there. The ccn command line tool is free on Mac, Windows and Linux.
Download for iOS Download for Android Install ccn

Related guides

  • Claude Code notifications in VS Code, Cursor and JetBrains terminalsWhy IDE terminals stay silent when Claude Code finishes, and how to get alerts in VS Code, Cursor and JetBrains with a setting or a hook.
  • Claude Code in tmux or screen: getting notified from a detached sessionGet notified when Claude Code in tmux or screen finishes or needs you: allow-passthrough, bell alerts, naming the session, and phone pushes when detached.
  • The Claude Code Notification hook: when it fires and how to use itWhen Claude Code's Notification hook fires, what permission_prompt and idle_prompt mean, the input it gets, and why it waits before firing.
  • Every way to get Claude Code notifications, comparedBuilt-in alerts, your own hooks, ntfy and chat webhooks, Anthropic's Remote Control and notifier apps, compared on what each can and cannot do.
claude-code-notifier

Claude Code Notifier is an independent third-party application. It is not affiliated with, endorsed by, or sponsored by Anthropic, PBC. "Claude" and "Claude Code" are trademarks of Anthropic, PBC.

apps iOS App Android App ccn for macOS, Windows & Linux All guides
legal Privacy Policy Terms of Service Other languages © 2026 touchtap. All rights reserved. TouchTap Ltd is registered in England and Wales, company number 13942589.