在 Mac 上收到 Claude Code 的完成通知,或在它需要你處理時收到提醒。
在 Mac 上,無論使用哪個終端機,都能收到 Claude Code 的完成通知,或在它停下來等你核准時收到提醒。通知設定方式取決於你使用的終端機。
預設情況下,Claude Code 只有在 Ghostty、Kitty 和 iTerm2 中才會傳送桌面通知,而且必須是它完成工作或等待你授權、同時判斷你似乎已離開時。Terminal.app、Warp 和 VS Code 終端機都不會顯示橫幅。在這些終端機中,請將 /config 裡的 Local notifications 設為終端機鈴聲,或加入鉤子:完成時使用 Stop,需要你處理時使用 Notification。
先看看你的終端機預設會怎麼通知。
當 Claude 完成任務或暫停等待你授權,而且你似乎已離開終端機時,Claude Code 就會觸發內建通知。這個通知是否會顯示為橫幅,取決於你使用的終端機 App。
| 終端機 | 未設定時 | 設定方式 |
|---|---|---|
| Ghostty | 桌面通知 | 在 macOS 中允許這個終端機傳送通知。 |
| Kitty | 桌面通知 | 在 macOS 中允許這個終端機傳送通知。 |
| iTerm2 | 調整一項 iTerm2 設定後,即可顯示桌面通知 | 開啟 iTerm2 的跳脫序列通知(見下一節)。 |
| Terminal.app | 沒有橫幅。預設只會在 Terminal 的有聲鈴聲關閉時觸發鈴聲。 | 使用終端機鈴聲設定或鉤子。 |
| 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 下選擇於 Dock 圖示顯示標記,或在 Terminal 位於背景時讓圖示彈跳。如果你接受了 Claude Code 首次啟動時的終端機設定,它就已關閉 Terminal 的有聲鈴聲;若想聽到鈴聲,請在這裡勾選 Audible bell。
- 所有終端機:終端機 App 本身必須在「系統設定」>「通知」中獲准傳送通知。
較舊的文章會教你執行 claude config set。這個指令已不存在,請改用 /config 或編輯設定檔。
完成通知用 Stop,需要你處理時用 Notification。
鉤子(hook)是 Claude Code 在指定時機執行的 shell 指令。你把鉤子列在設定檔中就能使用。鉤子適用於所有終端機,因為執行過程不經由終端機處理。
Anthropic 官方的「接收通知」範例使用 Notification 事件。這個事件只有透過 idle_prompt 才會通知你 Claude 已完成,而且約晚 60 秒,還必須是你在這段時間內沒有輸入內容。若想在 Claude 停下來的當下收到通知,請使用 Stop。
| 事件與比對條件 | 觸發時機 | 用途 |
|---|---|---|
Stop | Claude 每一輪回覆結束時觸發,但你中斷它之後不會觸發。 | 通知你 Claude 已完成 |
Notification + permission_prompt | 授權提示等待約 6 秒後觸發。在終端機中輸入內容會延後觸發。 | 通知你 Claude 需要你核准 |
Notification + elicitation_dialog | MCP 伺服器(接入 Claude Code 的工具)開啟表單,而且你已有約 6 秒未輸入內容時觸發。 | 通知你 Claude 需要你提供資訊 |
Notification + elicitation_url_dialog | MCP 伺服器要求你開啟網頁,而且你已有約 6 秒未輸入內容時觸發。 | 通知你 Claude 需要你提供資訊 |
Notification + idle_prompt | Claude 完成約 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##*/}\""
}
]
}
]
}
}
這兩種橫幅都會顯示工作階段所在的資料夾名稱。
允許 Script Editor 顯示通知橫幅。
在 Mac 上,osascript 的通知橫幅由內建的 Script Editor App 發送。在允許 Script Editor 傳送通知之前,這個指令會失敗,但不會顯示錯誤,macOS 也不會詢問你的授權。
- 在 Terminal 中執行一次以下指令:
osascript -e 'display notification "test"'
- 開啟「系統設定」>「通知」,找到 Script Editor,然後開啟「允許通知」。
用音效代替橫幅。
加入 ~/.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" } ] }
]
}
}
讓 Mac 用語音提醒你。
加入 ~/.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/以外的位置。App 只會將含有/.perch/的指令視為自己的鉤子,而且會整個取代項目。因此,放在 App 鉤子項目中的指令,也會隨該項目一起被移除。
也可以選擇不需設定的方式。
Cowork Island 是本指南作者開發的 Mac App。它會把你的 AI 代理工作階段集中在瀏海下方的面板中,顯示每個工作階段的狀態,讓你一眼看出哪個需要你處理。有沒有瀏海都能使用。
- Claude Code 會自動連線。App 會加入自己的鉤子項目,與你現有的鉤子並存。
- 每個工作階段會顯示為「執行中」、「待辦」或「需要你處理」。預設情況下,一旦有工作階段需要你處理,小島就會自動展開,除非該工作階段的終端機已在前景。
- 工作階段完成時,小島預設會展開 5 秒。你可以改為在小島上顯示一個圓點,或不顯示任何提示。
- 使用 Claude Code 時,你可以在小島中允許或拒絕某項操作,或回答選擇題。在小島中回答不需付費。
- 音效預設關閉,需由你自行開啟。「需要審核」音效免費提供;「工作階段完成」提示音則包含在 Pro 中。
- App 本身不會發送 macOS 通知橫幅。它會展開小島來提醒你;如果你已開啟音效,也會播放聲音。
免費版一次顯示一張工作階段卡片。Pro 會顯示所有工作階段,跳轉回工作階段所在的視窗、標籤頁或窗格也包含在 Pro 中。7 天 Pro 試用會自動開始,每台 Mac 限一次,不需要付款資訊。查看方案與安裝指南。
免費下載資料來源。
- Claude Code 文件:終端機設定
- Claude Code 文件:鉤子參考資料
- Claude Code 文件:鉤子指南
- Claude Code 文件:設定參考資料
- Claude Code 文件:設定
- Claude Code 更新紀錄
- Terminal 使用手冊:進階設定
- Mac 自動化指令碼指南:顯示通知
- Cowork Island 常見問題與安裝指南
來源查核日期:2026年10月18日。本指南由 Cowork Island 的開發者撰寫。如需更正,請寄信至 support@coworkisland.com,或在 GitHub 提出 Issue。