Claude Code 通知:分辨它在等你還是已經完成

「被卡住的工作階段看起來和已完成的工作階段一模一樣,結果我先打開了錯的那一個。」Claude Code 一則功能請求中的這句話道盡了問題。以下說明如何為兩者分別取得不同的訊號。

作者:Aslan,Pet Island 團隊 · 更新於 2026年10月26日 · 閱讀時間 4 分鐘

簡答

當你不在時,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 和其他終端機中,除非你自行設定,否則看不到任何反應。

最簡單的解法是終端機響鈴:

~/.claude/settings.json複製
{
"preferredNotifChannel": "terminal_bell"
}

響鈴的效果由你的終端機決定。在 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 需要權限時發出兩聲高音嗶聲,完成時發出一聲低音嗶聲:

%USERPROFILE%\.claude\settings.json複製
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [
{ "type": "command", "shell": "powershell",
"command": "[Console]::Beep(1320, 150); [Console]::Beep(1320, 150)" }
]
}
],
"Stop": [
{
"hooks": [
{ "type": "command", "shell": "powershell",
"command": "[Console]::Beep(660, 300)" }
]
}
]
}
}

Console.Beep 接受以赫茲為單位的頻率和以毫秒為單位的持續時間,並會等到嗶聲結束。Anthropic 的 hook 指南也提供了一個用 System.Windows.Forms 開啟訊息方塊的 Windows 範例;他們自己也註明,那是對話方塊而不是通知,而且可能在終端機後方開啟。

macOS 與 Linux

Anthropic 的文件在 macOS 上使用 afplay:

~/.claude/settings.json複製
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }]
}
],
"Stop": [
{
"hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Pop.aiff" }]
}
]
}
}

若要可見的提醒,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日 對照下列頁面確認。代理程式更新很快;若內容不再相符,請以官方頁面為準。

延伸閱讀

從螢幕頂端回應每一個代理程式。

Windows 與 Mac · 免費試用 7 天,之後一次付清 $8.99 · 每筆銷售提撥 $1 餵養街頭動物

免費試用 Pet Island