Claude Desktopの通知が来ない? macOSの設定とClaude Code Hooksで解決する方法
はじめに
Claude Desktopアプリには「レスポンス完了時に通知する」という設定がある。長い処理を待つ間に別の作業をしたいとき、これをONにしておけば完了を見逃さずに済む――はずだった。
ところが、設定を有効にしても通知が一向に届かない。アプリ側の問題かと思いきや、原因はmacOS側にあった。
原因: macOSの「通知を要約」
macOS(Sequoia以降)には「通知を要約」という機能がある。Apple Intelligenceが通知内容をまとめて、定期的にダイジェストとして配信してくれるものだ。
この機能がONになっていると、Claudeからの通知もAIによって「要約対象」と判断され、リアルタイムでは届かなくなる。つまり、通知が消えたのではなく、後でまとめて届く設定になっていた。
解決策
- システム設定を開く
- 通知 → アプリ一覧からClaudeを選択
- 「通知を要約」をOFFにする
ついでに「通知スタイル」を「持続的」に変更しておくと、通知が自動で消えずに残るので見逃しにくくなる。
「通知を要約」はアプリごとに設定できる。他のアプリで便利に使っている場合でも、Claudeだけ個別にOFFにすれば問題ない。
より確実な方法: Claude Code Hooks
Claude Desktopの通知は上記の設定で解決できるが、Claude Codeを使っている場合はもっと確実な方法がある。Hooksという仕組みだ。
Hooksを使うと、Claudeの応答が完了したタイミングで任意のシェルコマンドを実行できる。macOSネイティブの通知APIを直接叩けるので、OS側の要約機能に影響されない。
~/.claude/settings.jsonに以下を追加する。
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claudeの応答が完了しました\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
]
}
}
この設定はグローバル(全プロジェクト共通)で適用される。プロジェクトごとに.claude/settings.jsonを用意する必要はない。
設定を保存したら、次回のClaude Code起動時から有効になる。Claudeが応答を完了するたびに、macOSの通知センターにサウンド付きの通知が表示される。
カスタマイズ
サウンドの変更
sound nameの値を変えることで通知音をカスタマイズできる。macOSに標準搭載されているサウンドの例:
"Glass"— デフォルト的な透明感のある音"Ping"— 短く控えめ"Pop"— 軽快なポップ音"Hero"— 達成感のあるファンファーレ"Purr"— 柔らかい振動音
サウンドファイルは/System/Library/Sounds/にある。ファイル名から拡張子を除いた部分がサウンド名になる。
通知メッセージの変更
display notificationの文字列を変えれば、通知の内容を自由にカスタマイズできる。
osascript -e 'display notification "処理が終わりました" with title "Claude" subtitle "確認してください" sound name "Pop"'
入力待ち時にも通知する
Claudeがユーザーの入力を待っている状態(permission prompt等)でも通知を出したい場合は、Notification hookを使う。
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"応答が完了しました\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"入力を待っています\" with title \"Claude Code\" sound name \"Ping\"'"
}
]
}
]
}
}
まとめ
- Claude Desktopの通知が届かない場合、まずmacOSの「通知を要約」がONになっていないか確認する
- Claude Codeを使っているなら、Hooksで
osascriptを実行するのが最も確実 - Hooksはグローバル設定(
~/.claude/settings.json)に書けば全プロジェクトで有効 Stopで応答完了時、Notificationで入力待ち時にそれぞれ通知を出せる