如何在 Claude Code 或 Codex 完成時收到通知
2026年10月6日 更新
你在 Claude Code 或 Codex 裡開始一個很長的任務,切去做別的事,十分鐘後回來才發現它兩分鐘時就停了,一直在等你按「是」。在代理完成或需要你同意時響一聲或跳出通知,就能解決這個問題。
兩個工具都有免費的方法可以做到。這篇指南先介紹這些方法,再介紹 Clacky 的代理提醒,它會幫你把同樣的東西設定好。
重點整理
- Claude Code 在 Ghostty、Kitty 和 iTerm2 裡本來就能通知你(iTerm2 需要改一個設定)。在其他終端機裡,加一個掛鉤(hook)。
- 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 等等。
來源:hooks 參考文件 · hooks 指南
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。