Claude Code 自带通知功能:当 Claude 完成任务或在权限 prompt 处等待、而你似乎不在电脑前时,它会通过 terminal 提醒你。提醒方式由 preferredNotifChannel 设置决定。默认值 "auto" 会在 iTerm2、Ghostty 和 Kitty 中发送桌面通知,在其他大多数 terminal 中则什么都不做。把它设为 "terminal_bell",就能在任何 terminal 中触发响铃字符。可以通过 /config(其中叫 Local notifications)或在 ~/.claude/settings.json 中设置。
01快速解决
如果 Claude 完成时你什么都没听到,把下面的内容加到 ~/.claude/settings.json:
{
"preferredNotifChannel": "terminal_bell"
}
然后确认你的 terminal 会对响铃做出反应:播放声音、弹跳 Dock 图标、闪烁标签页或弹出通知。这个设置在 terminal 里,而不在 Claude Code 里。在 Mac、Windows 和 Linux 上,大多数 terminal 的偏好设置里都有“bell”或“alert”相关选项。
02preferredNotifChannel 的所有取值
"auto"(默认)在 iTerm2、Ghostty 和 Kitty 中发送桌面通知。在 Apple Terminal 中,仅当该描述文件关闭了声音响铃时才发送响铃字符。其他 terminal 中不做任何事"terminal_bell"在任何 terminal 中触发响铃字符"iterm2"发送 iTerm2 桌面通知"iterm2_with_bell"iTerm2 桌面通知加响铃"kitty"发送 Kitty 桌面通知"ghostty"发送 Ghostty 桌面通知"notifications_disabled"不发送任何通知该设置可以放在任意 settings 文件中:用户级(~/.claude/settings.json)、项目级(.claude/settings.json)或本地(.claude/settings.local.json)。旧版本把它放在 ~/.claude.json 中,Claude Code 仍会读取留在那里的值。
03内置通知何时触发
根据 Anthropic 的文档,内置提醒与 Notification hook 的触发时机相同。在 terminal 会话中:
- 权限 prompt:prompt 等待约六秒且没有任何按键后触发。每次按键都会重新计时。
- 完成:Claude 停止约 60 秒后触发,前提是这期间你没有输入,且没有后台 agent 仍在运行。
所以内置的“完成”提醒是有意延迟的。它的设计目的是在你走开时提醒你,而不是在你盯着屏幕时打扰你。如果想在每轮结束的那一刻就收到提醒,请改用 Stop hook(参见 Stop hook 指南)。
04各 terminal 配置
iTerm2(macOS)
iTerm2 默认会收到桌面通知,但需要你先在 iTerm2 中允许才会显示:
- 打开 Settings > Profiles > Terminal。
- 勾选 Notification Center Alerts。
- 点击 Filter Alerts,启用 Send escape sequence-generated alerts。
同时在 System Settings > Notifications 中确认已允许 iTerm2 显示通知。
Apple Terminal(macOS)
Apple Terminal 不会收到桌面通知。使用 "auto" 时,Claude Code 只有在检测到前台窗口的描述文件关闭了 Audible bell 时,才会发送静音响铃。如果描述文件开启了 Visual bell 或 Dock 弹跳选项,响铃会表现为窗口闪烁,或在 Terminal 处于后台时弹跳 Dock 图标。
注意一个细节:如果你在首次运行时接受了 Claude Code 的 terminal 设置提示,它会运行 /terminal-setup,从而关闭 Apple Terminal 描述文件中的声音响铃。想听到声音,就设置 "terminal_bell",并在 Settings > Profiles > Advanced 中重新开启 Audible bell。
Ghostty 和 Kitty(macOS 与 Linux)
两者无需配置即可收到桌面通知,并会转发到操作系统的通知中心。
其他终端
Windows Terminal、GNOME Terminal、Konsole、Alacritty、WezTerm、Warp 以及 IDE 终端默认都不会收到任何提醒。可以设置 "terminal_bell" 并开启终端自身的响铃处理,或者使用 hook。IDE 终端有各自的特殊情况,详见VS Code、Cursor 和 JetBrains 指南。
05通过 SSH 和在 tmux 中使用
桌面通知是一段由你本机终端解析的转义序列,所以即使 Claude Code 通过 SSH 运行在远程服务器上,通知也能送达。Ghostty 和 Kitty 无需额外配置即可转发。iTerm2 需要上面提到的提醒设置。
在 tmux 中,除非开启 passthrough,否则这段序列会被吞掉。把下面的内容加到 ~/.tmux.conf,然后运行 tmux source-file ~/.tmux.conf:
set -g allow-passthrough on
detach 的会话是另一回事:没有终端连接时,就没有任何东西能显示提醒。参见tmux 指南和通过 SSH 接收通知。
06内置提醒与 hook 搭配使用
Notification hook 与内置提醒同时运行,而不是取代它。Anthropic 的文档明确指出,即使设置为 "notifications_disabled",hook 依然会触发:这个设置只改变 Claude Code 提醒你的方式,不影响 hook 是否运行。这样就能清晰分工:
- 在电脑前用
"auto"或"terminal_bell"提醒。 - 其他需求交给 hook,比如播放系统提示音、在收不到通知的终端里显示桌面通知,或者用 ntfy 推送到手机。
- 如果 hook 已经会显示桌面通知,就设置
"notifications_disabled",避免收到两条。
例如,下面的配置会在 Claude 需要你处理时,在 macOS 上播放提示音,任何终端都适用:
{
"hooks": {
"Notification": [
{
"hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }]
}
]
}
}
Linux 和 Windows 下的对应写法见 Linux 指南和 Windows 指南。
07内置选项的局限
- 只在电脑上生效。响铃或通知来自你屏幕上的终端。走去厨房就会错过。
- 取决于终端。很多常用终端不改设置就什么都收不到。
- 无法直接回应。它只告诉你 Claude 在等待,你还是得回到键盘前。
Anthropic 的 Remote Control 搭配 Claude 移动应用,是获取手机推送的官方方式。对比指南将它与其他方案放在一起做了比较。
08Claude Code Notifier 的定位
如果你一直在电脑前工作,内置提醒加上 "terminal_bell" 可能就够了。Claude Code Notifier 适合你不在电脑前的时候。它的命令行工具 ccn 以 Claude Code hook 的形式运行,因此在 Mac、Windows 和 Linux 的任何终端里都能用,不依赖响铃设置。单独使用时,它会在 Claude 完成任务、需要权限或提问时显示桌面通知。配对手机后,你可以在手机上允许或拒绝权限、回答 Claude 的问题并发送下一条指令;如果你在最近 30 秒内打过字,手机上就不会有任何待处理的内容。参见 ccn 页面。
09常见问题
如何关闭 Claude Code 的通知?
设置 "preferredNotifChannel": "notifications_disabled",或者在 /config 的 Local notifications 中选择它。已配置的 Notification hook 仍会运行。
为什么 iTerm2 不显示 Claude Code 的通知?
iTerm2 需要在 Profiles > Terminal > Filter Alerts 下勾选 Notification Center Alerts 并启用 Send escape sequence-generated alerts,同时在 macOS 设置中授予通知权限。在 tmux 中还要设置 allow-passthrough on。
为什么 Apple Terminal 没有响铃?
Claude Code 的终端设置会关闭 Apple Terminal 的声音响铃。设置 "terminal_bell",并在描述文件的 Advanced 标签页中重新打开 Audible bell。
终端响铃在 VS Code 中有效吗?
默认无效。设置 "terminal_bell" 并检查 VS Code 的终端响铃设置,或者使用 hook。详见 IDE 指南。