Claude Code 通知:分辨它在等你還是已經完成
「被卡住的工作階段看起來和已完成的工作階段一模一樣,結果我先打開了錯的那一個。」Claude Code 一則功能請求中的這句話道盡了問題。以下說明如何為兩者分別取得不同的訊號。
簡答
當你不在時,Claude Code 完成工作或等待權限都會發出通知,但預設只有 Ghostty、Kitty 和 iTerm2 會把它顯示為桌面通知。在其他環境中,請設定 "preferredNotifChannel": "terminal_bell"。若要兩種不同的音效,請用搭配 permission_prompt matcher 的 Notification hook 代表「需要你」,用 Stop hook 代表「已完成」。
Claude Code 本身會做什麼
當 Claude 完成工作或因權限提示而暫停,而你似乎不在終端機前時,它會觸發通知事件。預設只有在 Ghostty、Kitty 和 iTerm2 中,它才會轉成桌面通知。在 Windows Terminal、VS Code 終端機、Warp 和其他終端機中,除非你自行設定,否則看不到任何反應。
最簡單的解法是終端機響鈴:
響鈴的效果由你的終端機決定。在 Windows Terminal 中,bellStyle 設定可以是 audible(預設)、window、taskbar、all 或 none。設為 all 時,Windows Terminal 會播放音效並讓工作列圖示閃爍。
- iTerm2:Settings → Profiles → Terminal → 勾選「Notification Center Alerts」,然後在 Filter Alerts 中啟用「Send escape sequence-generated alerts」。
- tmux:在
~/.tmux.conf中加入set -g allow-passthrough on,否則通知永遠傳不到外層終端機。 - 透過 SSH:桌面通知會傳回你的本機,所以遠端工作階段仍然可以提醒你。
系統通知的功能請求(#26581,34 個讚)以「已有此功能」結案,指的正是這個內建通知。為「等待中」和「已完成」提供不同訊號的請求(#94373)仍未結案。這就是 hook 派上用場的地方。
兩個事件:Notification 與 Stop
Notification會在 Claude Code 傳送通知時觸發。它的 matcher 是通知類型。你需要關心的兩種是permission_prompt(Claude 需要你核准工具使用,且提示已等待約六秒)和idle_prompt(Claude 約 60 秒前完成回應,而你之後沒有輸入任何內容)。Stop會在 Claude 每次完成回應時觸發。你中斷它時不會觸發;API 錯誤則會改為觸發StopFailure。
hook 會與內建通知同時執行,而不是取代它,所以兩者可以並存。
Windows:兩種不同的音效
在 Windows 上,hook 在 Git Bash 中執行;若未安裝 Git Bash 則在 PowerShell 中執行。設定 "shell": "powershell" 可以免去猜測。以下設定會在 Claude 需要權限時發出兩聲高音嗶聲,完成時發出一聲低音嗶聲:
Console.Beep 接受以赫茲為單位的頻率和以毫秒為單位的持續時間,並會等到嗶聲結束。Anthropic 的 hook 指南也提供了一個用 System.Windows.Forms 開啟訊息方塊的 Windows 範例;他們自己也註明,那是對話方塊而不是通知,而且可能在終端機後方開啟。
macOS 與 Linux
Anthropic 的文件在 macOS 上使用 afplay:
若要可見的提醒,macOS 上可用 osascript -e 'display notification "Claude needs you" with title "Claude Code"',Linux 上可用 notify-send "Claude Code" "Claude needs you"。
幫你省下一整晚的細節
- Stop 觸發得很頻繁。 Claude 每次完成回應都會觸發,而不只是在整個工作完成時。如果這太吵,請改用
idle_prompt通知。它會等約一分鐘,而且只在你沒有輸入時觸發。 - 需要時就讀取事件內容。 Notification 的輸入包含
message、title和notification_type,所以指令碼可以顯示實際的請求內容。 - Agent view。 如果你用
claude agents執行背景工作階段,當某個工作階段開始需要輸入、完成或失敗時,它會透過同一個preferredNotifChannel通知你,並以agent_needs_input或agent_completed類型觸發 Notification hook。 - 終端機狀態。 實作 OSC 7501 狀態協定的終端機,可以顯示每個 Claude Code 工作階段是在工作中、等待中還是已完成。Claude Code v2.1.295 或更新版本會自動回報。
- hook 在 Windows 上不觸發? 請參閱 Claude Code hook 在 Windows 上無法運作。原因幾乎都出在 shell。
看出是哪個工作階段,並回應它
音效告訴你發生了某件事,卻不會告訴你它來自三個終端機中的哪一個,或 Claude 想執行什麼。Pet Island 讓每個 Claude Code 工作階段在螢幕頂端的小島上都有一席之地:工作中、等你回應,或已完成。權限請求會連同指令或差異內容一起出現,你可以當場允許或拒絕;提問和計畫也以同樣方式處理。想仔細查看時,點一下就能跳到對應的終端機。
常見問題
Claude Code 有通知功能嗎?
有。當你不在時,它完成工作或等待權限都會觸發通知。Ghostty、Kitty 和 iTerm2 預設會將其顯示為桌面通知;在其他終端機中,請將 preferredNotifChannel 設為 "terminal_bell",或新增 Notification hook。
如何在 Claude Code 完成時聽到音效?
新增一個播放音效的 Stop hook,例如 macOS 上用 afplay,Windows 上在 PowerShell 中用 [Console]::Beep。
如何分辨「需要權限」和「已完成」?
用搭配 permission_prompt matcher 的 Notification hook 播放一種音效,再用 Stop hook 播放另一種。
為什麼我在 Windows Terminal 或 VS Code 中收不到通知?
Claude Code 預設只在 Ghostty、Kitty 和 iTerm2 中傳送桌面通知。請將 preferredNotifChannel 設為 "terminal_bell",或使用 hook。
通知在 tmux 中能用嗎?
可以,只要在 ~/.tmux.conf 中加入 set -g allow-passthrough on。
資料來源
本頁所有設定與行為均已於 2026年10月26日 對照下列頁面確認。代理程式更新很快;若內容不再相符,請以官方頁面為準。
- Claude Code 文件:Configure your terminal(設定終端機,通知)
- Claude Code 文件:Hooks guide(Hooks 指南)
- Claude Code 文件:Hooks reference(Hooks 參考)
- Claude Code 文件:Agent view
- Issue #26581:Claude 需要注意時發出系統通知
- Issue #94373:等待中與已完成使用不同通知
- Issue #2427:工作完成時發出音效通知
- Microsoft Learn:Windows Terminal 設定檔設定(bellStyle)
- Microsoft Learn:Console.Beep