Claude Code の処理完了時に通知を受け取るには、システムの通知コマンドを実行する Stop hook を ~/.claude/settings.json に追加します。Stop は Claude が応答を終えた瞬間に発火します。「Claude が入力を待っている」ことを知りたい場合は、Notification hook も追加してください。これは許可の prompt が約 6 秒待機したとき、または Claude が約 1 分アイドル状態のときに発火します。どちらも Mac、Windows、Linux で動作し、Claude Code Notifier などのツールを使えば同じ通知をスマートフォンにも送れます。
01Claude Code 標準の通知動作
Claude Code は、ユーザーが terminal から離れていると判断すると、自動で通知しようとします。デフォルトでは iTerm2、Ghostty、Kitty ではデスクトップ通知を送り、Apple Terminal ではベル文字を送ることがありますが、それ以外の terminal では何もしません。また iTerm2 では、アラート設定を有効にしないと何も表示されません。
そのため、VS Code の terminal、Warp、Windows Terminal、多くの Linux terminal では、通常何も通知されません。preferredNotifChannel 設定で terminal ベルを強制することはできます(terminal ベルのガイドを参照)。どの terminal でもきちんとしたデスクトップ通知を受け取るには、hook が必要です。
02必要な 2 つの hook
hook は、Claude Code がセッション中の決まったタイミングで実行するコマンドです。ここで重要なのは次の 2 つです。
StopClaude が応答を終えたとき(中断した場合は除く)「Claude が完了した」permission_prompt を指定した Notification入力がないまま許可の prompt が約 6 秒待機したとき「Claude が承認を求めている」idle_prompt を指定した NotificationClaude の完了後、入力がないまま約 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 は、「戻ってきて」を意味する 2 つのタイプだけに絞り込んでいます。
何も表示されない場合は、macOS が Script Editor をブロックしている可能性があります。osascript は通知の表示に Script Editor を使います。Terminal で一度 osascript -e 'display notification "test"' を実行してから、システム設定 > 通知を開き、Script Editor の通知を許可をオンにしてください。
04Linux と Windows でも同じように設定できます
上記の JSON の構造はそのままにして、command の文字列だけを置き換えます。
Linux(デスクトップ通知デーモンが必要なため、ヘッドレスサーバーでは使えません):
"command": "notify-send 'Claude Code' 'Claude has finished'"
notify-send がない場合は、Debian や Ubuntu なら libnotify-bin を、それ以外のディストリビューションでは相当するパッケージをインストールしてください。SSH やサーバー環境についてはSSH 経由の通知を参照してください。
Windows(PowerShell)。Anthropic 公式の例では、画面隅のトーストではなくメッセージボックスが開きます:
"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 の相互運用機能経由で powershell.exe を呼び出せる必要があります。その他の方法はWindows ガイドで紹介しています。
05動作を確認する
- Claude Code で
/hooksと入力します。StopとNotificationの下に hook が表示されていれば OK です。 - Claude に簡単な質問をします。返答が来たら
Stopの通知が表示されるはずです。 - 許可が必要な操作を依頼し、別のウィンドウに切り替えて待ちます。約 6 秒後に
permission_promptの通知が届きます。
settings.json の変更は通常すぐに反映されます。/hooks に hook が表示されない場合は、ファイルが有効な JSON か(末尾のカンマやコメントがないか)確認してください。claude --debug で Claude Code を起動すると、各 hook の動作を確認できます。その他の対処法はトラブルシューティングのチェックリストにまとめています。
06スマートフォンで通知を受け取る
デスクトップ通知が役立つのは、デスクにいるときだけです。席を離れたら、別の場所で通知を受け取る必要があります。主な方法は 3 つあります:
- 自分で運用する push サービス(ntfy など)を、同じ hook から
curlで呼び出す方法。安価で柔軟です。ntfy ガイドを参照してください。 - Telegram、Slack、Discord 向けのチャット webhook。普段からチャットを使っているなら便利です。チャット webhook ガイドを参照してください。
- Claude Code Notifier。hook の設定を代わりに行い、スマートフォンから応答することもできます。
通知さえ届けばよいなら、自作の方法で十分です。ただし一方通行なのが難点です。Claude が待っていることはわかっても、何かを承認するには結局キーボードの前に戻る必要があります。
Claude Code Notifier は(Anthropic 製ではない)独立したツールで、Mac・Windows・Linux 向けの無料コマンドラインツール ccn と、iPhone・Android 向けアプリの 2 つで構成されています。インストールは 1 行で完了します:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Windows では、PowerShell で irm https://claudecodenotifier.com/install.ps1 | iex を実行します(Windows 対応はベータ版です)。Homebrew、npx @touchtap/ccn、Claude Code プラグインなどその他の方法は、ccn のページを参照してください。
インストールすると、それぞれ ccn hook を実行する 7 つの hook エントリが追加されます。settings.json のその他の内容はそのまま残り、初回のみ同じ場所にバックアップが保存されます。スマートフォンがなくても、Claude が作業を終えたとき、許可を求めたとき、質問したときに、ccn がパソコンにデスクトップ通知を表示します。この部分は無料で、ネットワークなしでも動作します。
ccn pair でスマートフォンをペアリングすると、さらに次の機能が使えます:
- ターンが終わった瞬間に届く「Claude が完了しました」の push 通知
- 許可リクエストへの応答(今回のみ許可、セッション中は許可、拒否)
- Claude からの選択式の質問にスマートフォンから回答
- 完了直後に Claude へ次の指示を送れる入力欄
直近 30 秒以内に入力していた場合は、スマートフォンへの確認は行わず、通常どおり terminal で確認されます。アプリの利用にはサブスクリプションまたは買い切り購入が必要です。詳しくは料金をご覧ください。設定手順はスマートフォンのペアリングで説明しています。
07よくある質問
Notification hook が発火するまでに時間がかかるのはなぜですか?
permission_prompt タイプは、prompt が表示されてから入力がないまま約 6 秒経つまで待ちます。idle_prompt は Claude の完了後、約 60 秒待ちます。画面を見ている間に通知が来ないよう、意図的にこの遅延が設けられています。「完了」をすぐに知りたい場合は Stop hook を、「承認が必要」をすぐに知りたい場合は PermissionRequest hook を使ってください。
Esc で Claude を中断した場合も Stop hook は発火しますか?
いいえ。中断によってターンが終わった場合、Stop は実行されません。レート制限などの API エラーでターンが終わった場合も同様です。その場合、Claude Code は別の StopFailure イベントを発火するので、同じ方法で hook を設定できます。
Stop hook はメッセージごとに発火しますか?それともタスク全体が終わったときだけですか?
ターンごとに発火します。Claude Code にはタスク全体がいつ終わったかはわからず、応答を止めたタイミングしかわかりません。やり取りが長く続くと、返答のたびに通知が届きます。多すぎる場合は、代わりに idle_prompt 通知を使ってください。約 1 分離席したときだけ発火します。
VS Code や JetBrains の terminal でも使えますか?
はい。hook は terminal ではなく Claude Code 自体から実行されるため、IDE の terminal を含め、どの terminal でも動作します。terminal に依存するのは組み込みの通知のほうです。IDE terminal ガイドを参照してください。
スマートフォンに何もインストールせずに通知を受け取れますか?
ある程度は可能です。ntfy やチャット webhook に送信する hook なら、すでに使っているアプリに通知を届けられます。ただし、何かが起きたことを知らせるだけです。スマートフォンから承認や回答をするには、返答を hook に送り返す仕組みが必要で、それを実現するのが Claude Code Notifier のアプリです。