如何在 Claude Code 或 Codex 完成时收到通知
更新于 2026年10月6日
你在 Claude Code 或 Codex 里开始一个很长的任务,切去做别的事,十分钟后回来,却发现它两分钟时就停下了,在等你点“是”。只要智能体在完成或需要你确认时发出声音或通知,这个问题就解决了。
两个工具都有免费的方法。本指南先介绍这些方法,然后介绍 Clacky 的智能体提醒,它会帮你把同样的东西设置好。
简要版
- Claude Code 在 Ghostty、Kitty 和 iTerm2 中本身就能通知你(iTerm2 需要改一个设置)。在其他终端中,添加一个钩子。
- Claude Code 的 Stop 钩子在它完成时触发;Notification 钩子在它需要你时触发。让其中任意一个运行
afplay播放声音,或运行osascript显示通知。 - Codex:在
~/.codex/config.toml中添加一行notify,或打开它内置的终端通知。 - 不想改配置文件?Clacky 的智能体提醒会帮你添加钩子,并为“完成”和“需要你”播放不同的声音。
智能体如何告诉你它完成了
两个工具都能在合适的时机运行你的一条命令。通知其实就是这么回事:Claude Code 叫它钩子(hook),Codex 叫它 notify。无论这条命令做什么(播放声音、显示横幅、让屏幕闪一下),都会在智能体停下或请求输入时执行。
Claude Code:内置通知
Claude Code 完成时,或在等待权限确认时,可以自己发送一条桌面通知。Anthropic 的文档说,这在 Ghostty 和 Kitty 中开箱即用。在 iTerm2 中,需要开启一次:
- iTerm2 → Settings → Profiles → Terminal。
- 勾选 Notification Center Alerts。
- 点击 Filter Alerts,启用 Send escape sequence-generated alerts。
在 tmux 里运行 Claude Code?在 ~/.tmux.conf 中添加 set -g allow-passthrough on,否则通知永远到不了你的终端。你也可以在 Claude Code 的 /config 设置中选择它通知你的方式(比如终端响铃)。
Claude Code:播放声音的钩子
在 Apple 的“终端”、VS Code 或其他任何终端中,用钩子就能做到。钩子写在 ~/.claude/settings.json(对所有项目生效)或 .claude/settings.json(对单个项目生效)中。有两个事件很重要:
- Stop:Claude 完成了回答。
- Notification:Claude 需要你(权限确认,或者它一直在等你输入)。
下面这段会在两种情况下都播放一个 macOS 声音。把它合并到你的设置文件中(保留文件里已有的内容):
{
"hooks": {
"Stop": [{ "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }] }],
"Notification": [{ "matcher": "", "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Ping.aiff" }] }]
}
}更喜欢横幅通知?改用下面这条命令(和 Anthropic 的示例一样):
osascript -e 'display notification "Claude Code needs your attention" with title "Claude Code"'在 Claude Code 中输入 /hooks 可以查看已经设置了什么。新钩子只对保存之后启动的会话生效。/System/Library/Sounds/ 里的声音可以随便用:Glass、Ping、Pop、Purr、Submarine 等等。
Codex:notify 设置
Codex CLI 会在每一轮结束后运行你指定的程序,用 ~/.codex/config.toml 中的 notify 设置。Codex 会把这一轮的 JSON 描述作为最后一个参数传入(它的 type 是 agent-turn-complete),简单的声音命令可以忽略它:
notify = ["sh", "-c", "afplay /System/Library/Sounds/Glass.aiff"]notify 是顶层键:要放在文件中任何 [section] 之前。Codex 的终端界面也有内置通知([tui] 下的 notifications),它使用终端自己的通知或响铃;能否看到横幅取决于你的终端。
Codex 的 notify 在一轮完成时触发。它没有像 Claude Code 的 Notification 钩子那样单独的“需要你批准”事件。
Clacky 点两下就搞定
智能体提醒会帮你添加钩子,为“完成”和“需要你”播放不同的声音,在你使用终端或通话时保持安静,还能让你的 Mac 一直醒着,直到智能体完成。免费 7 天,无需银行卡。
Clacky 的智能体提醒:同样的效果,无需配置
如果你不想编辑 JSON 和 TOML,Clacky(一个 Mac 菜单栏 app)有智能体提醒。它使用与上面相同的钩子,所以不会有任何东西盯着你的屏幕或读取你的终端:
- 打开 Clacky 的仪表盘 → 智能体提醒。
- 在 Claude Code 或 Codex 旁边,点击 设置…。Clacky 会展示它将要添加的具体内容;点击 添加钩子。它会在原文件旁边保留一份备份(
settings.json.clacky-backup)。 - 点击 发送测试提醒,听听两种声音。
你会得到:
- 完成(一个上扬的和弦)和需要你(两下轻敲加一个问句)用不同的声音,每个智能体有五种声音可选。
- 一道可选的柔和屏幕边缘光晕,持续大约一秒。它可以点穿,也从不出现在录制中。
- 在前台时保持安静(智能体的终端是当前活跃 app 时不出声)和通话时保持安静(麦克风在使用时不出声),两者默认都开启。
- 菜单栏中每个会话一个圆点:工作中、等待中或已完成。点一下就能把对应的终端带到前面。
- 保持唤醒 → 直到智能体完成,这样长时间的运行不会因为 Mac 睡着而中断。
Claude Code 在任何终端和 Claude app 的 Code 标签页中都能用。Codex 支持 CLI,会收到完成的声音(Codex 不发送“需要你”事件)。如果你的 Codex 配置里已经有一行 notify,Clacky 会保留它并告诉你,而不是替换掉。移除… 只会删除 Clacky 添加的那几行。
如果什么都没发生
- 重启会话。 钩子在会话启动时读取,所以已经在运行的会话不会通知。
- 检查文件能否解析。
settings.json中少一个逗号,就会让所有钩子失效。把它粘贴到任意 JSON 校验工具里检查。 - 单独测试命令。 在“终端”中运行
afplay /System/Library/Sounds/Glass.aiff。没有声音?检查你的输出设备和音量。 - 横幅不显示? 在 系统设置 → 通知 中检查你的终端(如果用
osascript,则检查“脚本编辑器”),以及专注模式。 - 同时响两声? 你设置了两套(比如你自己的钩子和 Clacky 的)。保留一个就好。
常见问题
Claude Code 有内置的通知声音吗?
它在 Ghostty、Kitty 和 iTerm2 中可以自己发送桌面通知(iTerm2 需要打开 Send escape sequence-generated alerts)。想在任何终端里听到声音,就添加一个运行 afplay 的 Stop 或 Notification 钩子。
Stop 钩子和 Notification 钩子有什么区别?
Stop 在 Claude 完成回答时运行。Notification 在 Claude 需要你时运行:权限确认,或者它一直在等你输入。大多数人两个都想要,并配上不同的声音。
Codex 能在需要批准时告诉我吗?
Codex 的 notify 程序在一轮完成时运行(agent-turn-complete)。目前它没有单独的批准事件,所以你会在这一轮结束时听到提示。
Clacky 会读取我的代码或提示词吗?
不会。钩子只告诉 Clacky 是哪个工具、哪个终端 app、会话 ID 以及发生了什么(工作中、已完成或需要你)。它不会传递你的提示词、代码或输出。不会发送任何东西到任何地方:只是在你 Mac 上的一个文件里写一行。
它支持 Cursor 吗?
Clacky 暂时还不支持:Cursor 的钩子仍在测试阶段。目前支持 Claude Code 和 Codex CLI。
更多指南
第一次了解 Clacky?它是一个小巧的 Mac 菜单栏 app,把声音、屏幕录制、截图、Mac 健康和智能体提醒都放在一个仪表盘里。 查看所有工具 · 免费试用 7 天
核实于 2026年10月6日。 有内容变了,或者这里写错了?请发邮件到 hello@clacky.app。