Claude Code 的价值就在于长时间运行:把任务交出去,你去干别的。问题是什么时候该回来看。看得太勤,省下的时间又搭进去了;看得太晚,Agent 可能从第二分钟起就一直在等你批准权限。
在 Mac 上有三种解决办法,从自己动手配 hook 到开箱即用的内置功能。
值得关注的两个时刻
不管用哪种方法,你都需要知道两个不同的时刻:
- 已完成。 Agent 结束了这一轮,正在等你的下一条消息。
- 需要输入。 Agent 在任务中途停了下来,通常是要请求运行命令或修改文件的权限。
第二种更重要。卡在权限确认上的 Agent,进度是零。
方法一:Claude Code hooks
Claude Code 可以在特定事件发生时运行一条 shell 命令。有两个 hook 事件正好对应上面两个时刻:
Stop:Claude 回复结束时触发。Notification:Claude 需要你关注时触发,比如请求权限,或者等待输入太久。
把它们加到 ~/.claude/settings.json(对所有项目生效)或某个项目的 .claude/settings.json 里。下面的例子用的是 macOS 自带的 osascript:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Task finished\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Waiting for your input\" with title \"Claude Code\" sound name \"Funk\"'"
}
]
}
]
}
}重启 Claude Code,跑个小任务测试一下。第一次运行时,macOS 可能会询问是否允许“脚本编辑器”显示通知。
这种方法的局限: 通知不会告诉你来自哪个项目或哪个终端,点通知也不会跳过去,而且其他每个 Agent 都得再配一遍。最新的事件列表请查看 Claude Code hooks 文档。
方法二:Codex notify
Codex CLI 可以在每轮 Agent 结束后运行一个程序。在 ~/.codex/config.toml 里把 notify 设成一条命令,Codex 会把事件的 JSON 描述传给它:
notify = ["osascript", "-e", "display notification \"Codex finished\" with title \"Codex\""]新版 Codex 也支持 hooks,包括 Stop 事件,可以在 hooks.json 或 config.toml 的 [hooks] 表里配置。不同版本的选项会变,请查看对应版本的 Codex hooks 文档。
方法三:Vibe Console 内置
Vibe Console 替你盯着每一个 Agent 终端,支持全部 8 款 Agent,无需任何配置:
- 每个标签页都有状态圆点,显示它的 Agent 在运行还是空闲,一屏 Agent 网格扫一眼就清楚。
- Agent 完成时,应用会播放提示音(默认 Glass),并在 MacBook 刘海处短暂弹出那个会话,告诉你是哪个 Agent、哪个终端。
- Agent 停下来等你时,会播放另一种提示音(默认 Funk),不用看屏幕也能分清“跑完了”还是“卡住了”。
- 两种提示音都可以自定义,也可以关掉。
当 Claude Code 或 Codex 的用量在某个窗口内超过 80% 和 100% 时,它还会发 macOS 通知。详见 Claude Code 用量额度。
同时跑好几个 Agent 时,这个功能最有用。参见 如何并行运行多个 Claude Code Agent。
该用哪一种?
| Hooks / notify | Vibe Console | |
|---|---|---|
| 费用 | 免费 | 包含在应用中 |
| 配置 | 每个 Agent 单独配,JSON 或 TOML | 无需配置 |
| 区分“完成”和“卡住” | 可以,需要两个 hook | 可以,两种提示音 |
| 显示是哪个终端 | 否 | 是,在刘海中显示 |
| 8 款 Agent 全支持 | 仅限支持 hooks 的 | 是 |
如果你一次只跑一个 Claude Code 会话,hooks 就够用了。如果你在多个项目里同时跑好几个 Agent,一个分得清哪个终端是哪个的工作区最省时间。
常见问题
为什么我的 Claude Code hook 没触发?
检查 JSON 是否合法、文件位置是否正确、是否重启了 Claude Code。再在终端里单独运行那条 osascript 命令,确认系统允许显示通知。
能在手机上收到通知吗?
Hook 可以调用任何命令,包括推送服务。Claude Code 也支持通过它的手机 App 远程控制,离开工位也能查看会话。
内置提示音免费试用 14 天:下载 Vibe Console。
