在 Mac 上接收 Claude Code 的任务完成提醒,或在它需要你处理时收到通知。

在 Mac 的任何终端中,你都可以收到 Claude Code 的完成通知,也可以在它停下来等你确认时收到提醒。具体怎么设置,取决于你使用的终端。

默认情况下,只有在 Ghostty、Kitty 和 iTerm2 中,Claude Code 才会在完成任务或等待你授权、且判断你似乎已离开时发送桌面通知。Terminal.app、Warp 和 VS Code 终端都不会显示横幅。在这些终端中,可以把 /config 中的 Local notifications 设为终端响铃,或添加钩子:完成时用 Stop,需要你处理时用 Notification。

最后更新:

Cowork Island

macOS 14 或更高版本。
Apple 芯片和 Intel 处理器。
免费版无需账户。

免费下载

看看你的终端默认会怎么提醒。

当 Claude 完成任务或因权限请求而暂停,且判断你似乎已离开终端时,Claude Code 会触发内置提醒。提醒是否显示为横幅,取决于所用的终端应用。

Claude Code 在 Mac 各终端中的默认提醒方式
终端未设置时的表现需要做什么
Ghostty桌面通知在 macOS 中允许该终端发送通知。
Kitty桌面通知在 macOS 中允许该终端发送通知。
iTerm2调整一项 iTerm2 设置后可显示桌面通知开启 iTerm2 的转义序列提醒(见下一节)。
Terminal.app不显示横幅。默认仅在 Terminal 的 Audible bell 关闭时触发响铃。使用终端响铃设置或钩子。
Warp不显示横幅使用终端响铃设置或钩子。
VS Code 终端不显示横幅使用终端响铃设置或钩子。
任何终端中的 tmux通知无法传递出来将 set -g allow-passthrough on 添加到 ~/.tmux.conf,然后运行 tmux source-file ~/.tmux.conf。

开启内置提醒。

Claude Code 用 preferredNotifChannel 这项设置控制提醒。在 Claude Code 中输入 /config,然后打开 Local notifications。默认值是 auto。其他选项有 terminal_bell、iterm2、iterm2_with_bell、kitty、ghostty 和 notifications_disabled。

终端响铃是程序需要你注意时,终端发出的短促声音或闪烁提示。要在 Terminal.app、Warp 或 VS Code 中使用它,也可以把下面这一行添加到 Claude Code 设置文件(例如 ~/.claude/settings.json)的最外层花括号内:

"preferredNotifChannel": "terminal_bell"

  • iTerm2:打开 Settings > Profiles > Terminal,勾选 Notification Center Alerts,点按 Filter Alerts,然后开启 Send escape sequence-generated alerts。
  • Terminal.app:要让响铃更容易被注意到,请打开 Settings > Profiles > Advanced,在 Bell 下选择为程序坞图标添加标记,或让图标在 Terminal 处于后台时跳动。如果你接受了 Claude Code 首次运行时的终端设置,Terminal 的 Audible bell 就已被关闭;想听到声音,可以在这里勾选 Audible bell。
  • 任何终端:终端应用本身需要获得发送通知的权限,请在“系统设置”>“通知”中允许。

较早的文章会让你运行 claude config set。这条命令已不存在:请使用 /config,或编辑设置文件。

完成时用 Stop,需要你处理时用 Notification。

钩子是 Claude Code 在指定时机运行的 shell 命令。你可以在设置文件中配置钩子。它们适用于所有终端,因为运行钩子不依赖终端。

Anthropic 官方的通知设置示例使用 Notification 事件。这个事件只能通过 idle_prompt 告知你 Claude 已完成,而且要等大约 60 秒,并且你在这期间没有输入任何内容才会触发。如果希望 Claude 一停下来就收到提醒,请使用 Stop。

用于提醒的 Claude Code 钩子事件
事件与匹配规则触发时机适用提醒
StopClaude 完成回复时,即每一轮结束时触发;你中断它后不会触发。Claude 完成时提醒
Notification + permission_prompt权限请求已等待大约 6 秒时触发。在终端中输入内容会延后触发。Claude 需要你确认时提醒
Notification + elicitation_dialogMCP 服务器(接入 Claude Code 的工具)打开表单,且你已有大约 6 秒没有输入内容时触发。Claude 需要你提供信息时提醒
Notification + elicitation_url_dialogMCP 服务器要求你打开网页,且你已有大约 6 秒没有输入内容时触发。Claude 需要你提供信息时提醒
Notification + idle_promptClaude 完成后大约 60 秒触发,前提是你没有输入内容,也没有子智能体仍在后台运行。稍后再提醒

如果某一轮因 API 错误(例如达到速率限制)而结束,触发的是 StopFailure,而不是 Stop。通知钩子不能阻止任何操作,只会运行你指定的命令。

复制现成的钩子配置。

下面的每段配置都应放入 ~/.claude/settings.json,对你的所有项目生效。每段配置都已检查 JSON 和 shell 语法,无需额外软件。

合并配置,不要覆盖。如果文件中已有 "hooks" 对象,请在其中添加 "Stop" 或 "Notification" 键,与现有内容并列。如果该键已经存在(例如,Cowork Island 会添加这两个键),就不要重复添加:把示例中的条目,也就是方括号内用花括号包住的那部分,作为新条目复制到该键的列表中,条目之间用逗号分隔。不要再粘贴一个 "hooks" 块,这可能会丢掉其他钩子;也不要替换整个文件,否则会删除其他设置。文件必须遵循严格的 JSON 格式,不能有注释,也不能有末尾逗号。

Claude 完成时,在 Mac 上显示横幅。

放入 ~/.claude/settings.json

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'on run argv' -e 'display notification (item 1 of argv) with title \"Claude Code\" sound name \"Glass\"' -e 'end run' \"Finished in ${PWD##*/}\""
          }
        ]
      }
    ]
  }
}

Claude 需要你确认时,在 Mac 上显示横幅。

放入 ~/.claude/settings.json

{
  "hooks": {
    "Notification": [
      {
        "matcher": "permission_prompt|elicitation_dialog|elicitation_url_dialog",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'on run argv' -e 'display notification (item 1 of argv) with title \"Claude Code needs you\" sound name \"Ping\"' -e 'end run' \"Waiting for your OK in ${PWD##*/}\""
          }
        ]
      }
    ]
  }
}

这两种横幅都会显示会话运行所在的文件夹名称。

允许“脚本编辑器”显示横幅。

在 Mac 上,osascript 横幅由内置的“脚本编辑器”应用发出。在允许“脚本编辑器”发送通知之前,这条命令会悄悄失败,macOS 也不会弹出授权请求。

  1. 在 Terminal 中运行一次以下命令:

osascript -e 'display notification "test"'

  1. 打开“系统设置”>“通知”,找到“脚本编辑器”,然后开启“允许通知”。

用声音代替横幅。

放入 ~/.claude/settings.json

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

用语音播报提醒。

放入 ~/.claude/settings.json

{
  "hooks": {
    "Stop": [
      { "hooks": [ { "type": "command", "command": "say \"Claude has finished\"", "async": true } ] }
    ],
    "Notification": [
      { "matcher": "permission_prompt", "hooks": [ { "type": "command", "command": "say \"Claude needs your permission\"", "async": true } ] }
    ]
  }
}

"async": true 让 Claude Code 在 Mac 播报语音时继续运行。

如果想让一种事件显示横幅、另一种事件播放声音,可以使用两次通知钩子生成器:每次选择一个事件及其提醒方式,再用生成器的合并框将两份结果添加到文件中。它会告诉你每段配置应放在哪个文件里,所有操作都在浏览器中完成。

没有反应时,检查这些地方。

  • 信任文件夹。在你接受该文件夹的工作区信任对话框之前,Claude Code 不会运行任何钩子,包括 ~/.claude/settings.json 中的钩子。
  • 查看已加载的钩子。在 Claude Code 中输入 /hooks。它会列出你的钩子及各自所在的文件,但不能添加钩子。Claude Code 通常会自动读取你的修改;如果没有,请重启会话。
  • 工作用 Mac。组织可以只允许运行自己管理的钩子。这时,/hooks 会显示“Only hooks from managed settings run here”,个人钩子不会运行。
  • 同时收到两次提醒。各层级设置中的钩子会叠加,因此,项目文件中的提醒钩子和用户设置文件中另一个不同的提醒钩子都会触发。若几个文件中配置了完全相同的钩子,则只运行一次。钩子还会与内置通知同时运行。如果两种提醒都收到了,可以把 Local notifications 设为 notifications_disabled,保留钩子。
  • 提醒太多。Stop 会在每一轮结束后触发,并非只在整个任务完成时触发。
  • 如果你也使用 Cowork Island。请像上面的示例一样,把每个自定义钩子放在独立条目中,并存放在 ~/.perch/ 之外。应用只把包含 /.perch/ 的命令视为自己的命令,而且会替换整个条目,因此放在它的条目中的自定义命令也会随之被移除。

也可以选择无需设置的方案。

Cowork Island 是本指南作者开发的一款 Mac 应用。它把你的 AI 智能体会话汇集在刘海下方的面板中,显示每个会话的状态,让你一眼看清哪个需要你处理。有没有刘海都能用。

  • Claude Code 会自动连接。应用会添加自己的钩子条目,与你现有的钩子并存。
  • 每个会话会显示为运行中、待办或 「需要你处理」。默认情况下,某个会话开始需要你处理时,小岛会自动展开,除非该会话所在的终端已经在前台。
  • 会话完成时,小岛默认展开 5 秒。你可以改为只在小岛上显示一个圆点,或不作任何提示。
  • 对于 Claude Code,你可以在小岛上允许或拒绝某项操作,或回答选择题。在小岛上回答是免费的。
  • 声音默认关闭,需要你手动开启。「需要审批」提示音免费;「会话完成」提示音属于 Pro 功能。
  • 它本身不会发送 macOS 横幅通知。提醒方式是展开小岛;如果你开启了声音,还会播放提示音。

免费版一次显示一张会话卡片。Pro 会显示你的所有会话;跳转回会话所在的窗口、标签页或窗格也是 Pro 功能。7 天 Pro 试用会自动开始,每台 Mac 仅限一次,无需填写支付信息。查看方案和安装指南。

免费下载

参考来源。

把下载链接发给自己,稍后使用。