VS Code、Cursor 和 JetBrains 的 IDE 终端默认收不到 Claude Code 的桌面通知,因为 Claude Code 只会向 iTerm2、Ghostty 和 Kitty 发送通知。要收到提醒,可以设置 "preferredNotifChannel": "terminal_bell" 让 IDE 处理响铃,或者在 ~/.claude/settings.json 中添加一个 Notification hook 来显示桌面通知或发送 push。无论在集成终端还是 VS Code 扩展的聊天面板中,hook 都会触发,因为两者读取的是同一个设置文件。
01IDE 为什么没有动静
Claude Code 的内置提醒取决于它所运行的终端。在默认设置下,它只在 iTerm2、Ghostty 和 Kitty 中弹出桌面通知,Anthropic 的终端文档也明确指出 VS Code 集成终端收不到通知。JetBrains 终端的情况相同。终端响铃指南解释了 preferredNotifChannel 的每个取值。
在 VS Code 和 Cursor 中运行 Claude Code 有两种方式,两者的区别很关键:
claude~/.claude/settings.json~/.claude/settings.json(同一个文件)JetBrains IDE(IntelliJ IDEA、PyCharm、WebStorm、GoLand、Android Studio 等)的情况与右侧一列相同:Claude Code 插件会在 IDE 的集成 terminal 中运行 claude 并与之连接。
02方案 1:terminal 响铃
如果 claude 运行在集成 terminal 中,在 ~/.claude/settings.json 中加入:
{
"preferredNotifChannel": "terminal_bell"
}
这样 Claude Code 需要你处理时会发出响铃字符,之后怎么提醒由 IDE 决定。VS Code 和 Cursor 通过无障碍信号(accessibility signal)设置处理 terminal 响铃,在设置中搜索“terminal bell”即可选择提示音。在 JetBrains IDE 中,请查看对应版本的 terminal 设置。没戴耳机或 IDE 在后台时,响铃很容易被忽略,所以大多数人会接着用方案 2。
03方案 2:Notification hook
Hook 会运行你指定的命令,在所有 IDE 中都可用,无论是 terminal 还是 VS Code 聊天面板。下面这个在 macOS 上显示桌面通知:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
在 Linux 上用 notify-send 'Claude Code' 'Claude Code needs your attention',在 Windows 上用一条 PowerShell 命令;Linux 指南和 Windows 指南里有测试过的版本。如果 osascript 在 macOS 上没有任何显示,打开 System Settings > Notifications,允许 Script Editor 发送通知,osascript 的通知就是以这个 app 的名义发出的。
在 VS Code 扩展中,不用打开文件也能查看 hook:打开 Customize 区域并选择 Hooks,即可看到当前会话加载的 hook,按事件分组(需要 Claude Code v2.1.269 或更高版本)。
如果想在 Claude 完成时立即收到提醒,而不只是在它等待时,再加一个 Stop hook。Claude 完成时获取通知的指南展示了两者如何搭配使用。
VS Code 扩展中的触发时机不同
在 terminal 中,permission_prompt 通知要等 prompt 大约六秒没有按键才会触发,每按一次键都会重新计时。而在 VS Code 扩展(以及 Claude Desktop)中,根据 Anthropic 的文档,它会在 Claude 发出请求约六秒后触发,打字不会推迟它;如果你提前作答,则不会触发。如果在面板里工作时觉得太吵,可以设置环境变量 CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS=1 将其关闭。Notification hook 指南列出了所有通知类型及其触发时机。
04远程窗口:SSH、WSL、dev container 和 JetBrains Remote Development
IDE 通知最常在这里出问题。当 VS Code 或 Cursor 窗口连接到 SSH 主机、WSL 或 dev container 时,Claude Code 运行在那台系统上,读取的是那里的 ~/.claude/settings.json,而不是你笔记本上的。你的 hook 也在那里运行。这时 osascript 或 notify-send 这类桌面命令没有桌面可用,会静默失败。
JetBrains Remote Development 也类似:Claude Code 插件必须安装在远程主机上,Claude Code 也在那里运行。
可行的替代方案:
- Windows 上的 WSL:hook 可以通过 Windows 互操作调用
powershell.exe,只要它在 WSL 内的PATH中。 - SSH 主机和容器:通过网络把提醒发到能触达你的地方,比如 ntfy,或 Telegram、Slack 或 Discord webhook。SSH 指南介绍了各种选项。
05通过 /ide 使用外部 terminal
如果想用内置桌面通知,可以在 iTerm2、Ghostty 或 Kitty 中运行 Claude Code,再用 /ide 命令连接到 IDE。查看 diff 和共享选区仍通过 IDE 完成,提醒则由外部 terminal 发出。在 iTerm2 中需要先开启提醒设置,见 terminal 响铃指南。
06其他值得了解的事
- Shift+Enter:在 VS Code 和 Cursor 中运行一次
/terminal-setup,Shift+Enter 就能插入换行。JetBrains 的 terminal 不支持,可以用 Ctrl+J,或先输入\再按 Enter。 - Remote Control:可以在 VS Code 扩展中用
/remote-control启动 Anthropic 的 Remote Control,在 Claude 手机 app 上跟进会话。它有自己的套餐和登录要求,见对比。 - 多个窗口:如果在多个 IDE 窗口中运行 Claude Code,在提醒中加上项目文件夹,就知道是哪个在等你。hook 的输入包含
cwd。见同时运行多个会话。
07Claude Code Notifier 的定位
如果你就坐在 IDE 前,用 Notification hook 调用系统自带的通知工具是个不错的免费方案。但离开屏幕时它就帮不上忙,也无法直接作答。
Claude Code Notifier 的 ccn 同样是一个 hook,所以在 IDE terminal 中和在其他 terminal 中一样可用,支持 Mac、Windows 和 Linux。单独安装时,它会在 Claude 完成、需要权限或提问时显示桌面通知。配对手机后,你可以在手机上对权限请求选择允许一次、本会话内允许或拒绝,选择 Claude 问题的答案,并发送下一条指令。如果你在最近 30 秒内打过字,terminal 会照常询问,手机上不会有待处理的请求。手机推送经由中继发送,而不是本地桌面,所以如果把 ccn 装在 IDE 窗口所连接的远程机器上,手机照样能收到。Claude Code Notifier 是独立产品,并非 Anthropic 出品。见 ccn 页面和配对手机。
08常见问题
为什么 Claude Code 在 VS Code 中不通知我?
VS Code 集成 terminal 收不到 Claude Code 的内置桌面通知。在 ~/.claude/settings.json 中设置 "preferredNotifChannel": "terminal_bell" 或添加 Notification hook,然后开启新会话。
Claude Code VS Code 扩展支持 hook 吗?
支持。Claude Code 在 IDE 扩展中触发的 hook 事件与 terminal 中相同,扩展和 CLI 共用 ~/.claude/settings.json。扩展的 Customize 区域可以查看和编辑 hook。
在 Cursor 中能用吗?
能。Cursor 可以安装同一个 Claude Code 扩展,claude 在其集成 terminal 中的运行方式与 VS Code 相同。上面的内容全部适用。
我的 hook 在本地能用,但在 Remote SSH 窗口里不行,为什么?
在远程窗口中,Claude Code 及其 hook 都运行在远程机器上,而那台机器没有桌面环境。请在那台机器上编辑 ~/.claude/settings.json,改用 ntfy 这类网络 push,而不是桌面通知命令。