若要在 Claude Code 完成時收到通知,請在 ~/.claude/settings.json 中加入一個 Stop hook,執行系統的通知指令。Stop 會在 Claude 回應結束的當下觸發。若想在「Claude 需要我輸入」時收到通知,再加一個 Notification hook:權限提示等待約六秒,或 Claude 閒置約一分鐘時就會觸發。兩者在 Mac、Windows 和 Linux 上都能用,而 Claude Code Notifier 這類工具還能把同樣的通知傳到你的手機。
01Claude Code 內建的行為
當你似乎不在 terminal 前時,Claude Code 本身就會試著提醒你。預設情況下,它在 iTerm2、Ghostty 和 Kitty 中會送出桌面通知,在 Apple Terminal 中可能會發出 bell 字元,在其他 terminal 則什麼都不做。iTerm2 還必須先開啟提醒設定才會顯示。
所以如果你用的是 VS Code 內建 terminal、Warp、Windows Terminal 或大多數 Linux terminal,通常什麼都收不到。你可以用 preferredNotifChannel 設定強制使用 terminal bell,詳見terminal bell 指南。若要在任何 terminal 中都有真正的桌面通知,就需要 hook。
02你需要的兩個 hook
Hook 是 Claude Code 在工作階段中固定時間點執行的指令。這裡會用到其中兩個:
StopClaude 回應結束時(你中斷它時不會觸發)「Claude 已完成」Notification,matcher 為 permission_prompt權限提示已等待約六秒,且你沒有輸入任何內容「Claude 需要核准」Notification,matcher 為 idle_promptClaude 完成後約 60 秒,期間你都沒有輸入提醒你輪到你了Stop 是最快的,每一輪結束就立刻執行。Notification 類型則只在你離開時才會觸發:每次按鍵都會延後它,所以你盯著畫面時不會被打擾。如果想在 Claude 要求權限的當下就收到訊號,請改用 PermissionRequest hook,詳見PermissionRequest 指南。
想了解 hook 的整體運作方式(事件、matcher、設定檔、結束代碼),請參閱 Claude Code hook 詳解。
03macOS 上可用的設定
開啟 ~/.claude/settings.json(不存在就新建一個),加入以下內容。如果檔案中已有 hooks 物件,請把 Stop 和 Notification 作為鍵加進去,而不是整個取代。
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\"'"
}
]
}
],
"Notification": [
{
"matcher": "permission_prompt|idle_prompt",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
Stop 沒有 matcher,所以每一輪都會觸發。Notification 的 matcher 則把它限制在代表「該回來了」的兩種類型。
如果什麼都沒出現,可能是 macOS 擋掉了 Script Editor,而 osascript 是透過它來顯示通知的。先在 Terminal 執行一次 osascript -e 'display notification "test"',再開啟 系統設定 > 通知,找到 Script Editor 並開啟 允許通知。
04在 Linux 和 Windows 上做同樣的設定
保留上面的 JSON 結構,只要替換 command 字串即可。
Linux(需要桌面通知 daemon,因此無法用在 headless 伺服器上):
"command": "notify-send 'Claude Code' 'Claude has finished'"
如果沒有 notify-send,在 Debian 和 Ubuntu 上請安裝 libnotify-bin,其他發行版則安裝對應的套件。SSH 和伺服器環境請參考透過 SSH 接收通知。
Windows(PowerShell)。Anthropic 官方範例會開啟一個訊息方塊,而不是角落的 toast 通知:
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude has finished', 'Claude Code')\""
這個方塊可能會出現在 terminal 視窗後面,所以請先在 PowerShell 中測試指令。在 WSL 下,必須能透過 Windows interop 呼叫 powershell.exe。其他做法請參考Windows 指南。
05確認是否正常運作
- 在 Claude Code 中輸入
/hooks,應該會看到你的 hook 列在Stop和Notification底下。 - 問 Claude 一個簡短的問題。它回覆時,應該會跳出
Stop通知。 - 請它做一件需要權限的事,接著切換到其他視窗等待。大約六秒後會收到
permission_prompt通知。
對 settings.json 的修改通常會立即生效。如果 /hooks 中沒有出現某個 hook,請檢查檔案是否為有效的 JSON(不能有結尾逗號,也不能有註解)。用 claude --debug 啟動 Claude Code,就能看到每個 hook 執行了什麼。更多解法請見疑難排解清單。
06在手機上接收通知
桌面通知只有在你坐在電腦前時才有用。一旦離開座位,就需要把通知送到別的地方。常見的做法有三種:
- 自行架設的 push 服務,例如 ntfy,在同樣的 hook 中用
curl呼叫。便宜又有彈性。請參考 ntfy 指南。 - 聊天 webhook,支援 Telegram、Slack 或 Discord。如果你本來就整天掛在聊天軟體上,這很適合。請參考聊天 webhook 指南。
- Claude Code Notifier,幫你處理好 hook,還能直接從手機回覆。
如果只是想收到提醒,自己動手的做法就很夠用。它們的限制在於只能單向通知:你知道 Claude 在等你,但還是得回到鍵盤前才能核准任何操作。
Claude Code Notifier 是獨立工具(並非 Anthropic 出品),由兩部分組成:ccn,一個支援 Mac、Windows 和 Linux 的免費命令列工具,以及 iPhone 和 Android app。只要一行指令就能安裝:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
在 Windows 上,請在 PowerShell 中執行 irm https://claudecodenotifier.com/install.ps1 | iex(Windows 支援目前為 beta)。其他安裝方式,包括 Homebrew、npx @touchtap/ccn 和 Claude Code 外掛,請見 ccn 頁面。
安裝時會新增七個各自執行 ccn hook 的 hook 項目,settings.json 其餘內容維持不變,並在旁邊存一份一次性備份。即使完全沒有手機,ccn 也會在 Claude 完成、需要權限或提出問題時,在電腦上顯示桌面通知。這部分免費,而且不需要網路。
用 ccn pair 配對手機後,還能獲得:
- 回合一結束就收到「Claude 已完成」的 push 通知;
- 權限請求可以選擇允許一次、在本次工作階段中允許,或拒絕;
- 直接在手機上回答 Claude 的選擇題;
- 在 Claude 完成後,立刻透過後續輸入框送出下一個指示。
如果你在過去 30 秒內有打字,就不會等待手機回應,terminal 會照常詢問。app 需要訂閱或買斷,請見價格方案。設定步驟請參考配對手機。
07常見問題
為什麼我的 Notification hook 要等很久才觸發?
permission_prompt 類型會等到 prompt 顯示約六秒且你都沒有輸入才觸發,idle_prompt 則會在 Claude 完成約 60 秒後才觸發。這個延遲是刻意設計的,避免你正盯著畫面時還被打擾。想要即時的「已完成」通知,請用 Stop hook;想要即時的「需要核准」通知,請用 PermissionRequest hook。
如果我按 Esc 中斷 Claude,Stop hook 會觸發嗎?
不會。因為你中斷而結束的回合不會執行 Stop。回合因 API 錯誤(例如 rate limit)而結束時也不會執行。這種情況 Claude Code 會另外觸發 StopFailure 事件,你可以用同樣的方式掛 hook。
Stop hook 會在每則訊息後觸發,還是只在整個任務完成時觸發?
每個回合結束後都會觸發。Claude Code 無法得知你的整體任務何時完成,只知道它何時停止回應。如果你們來回對話很多次,每次回覆都會收到一則通知。覺得太多的話,可以改用 idle_prompt 通知,它只會在你離開約一分鐘後才觸發。
在 VS Code 或 JetBrains 的 terminal 中也能用嗎?
可以。hook 是由 Claude Code 本身執行,而不是由 terminal 執行,所以在任何 terminal 中都能運作,包括 IDE 內建的 terminal。會受 terminal 影響的是內建通知。請參考 IDE terminal 指南。
不在手機上安裝任何東西,也能收到通知嗎?
部分可以。發送到 ntfy 或聊天 webhook 的 hook,可以把通知送到你手機上現有的 app,但只能告訴你發生了什麼事。若要在手機上核准或回答,就需要能把你的回覆傳回 hook 的工具,這正是 Claude Code Notifier app 的功能。