Claude Code は Windows Terminal、PowerShell、VS Code の terminal ではデフォルトでデスクトップ通知を表示しないため、Windows では自分で追加する必要があります。%USERPROFILE%\.claude\settings.json に、PowerShell を実行する Notification hook(完了通知には Stop hook も)を追加します。メッセージボックスなら何もインストールせずに使え、BurntToast モジュールを使えば本格的なトーストを表示できます。Claude Code を WSL 内で実行している場合、hook は Linux 上で実行されるため、Windows のデスクトップに届けるには Windows 相互運用機能経由で powershell.exe を呼び出す必要があります。
01ネイティブ Windows か WSL か:hook の実行場所
Claude Code は Windows 上でネイティブに実行するか、WSL 内で実行するかのどちらかで、これによって通知 hook の動き方が変わります。
- ネイティブ Windows。設定は
%USERPROFILE%\.claude\settings.jsonにあります。Anthropic の hooks リファレンスによると、コマンド hook はデフォルトで Git Bash 上で実行され、Git Bash がインストールされていない場合は PowerShell で実行されます。"shell": "powershell"を指定すると個別の hook で PowerShell を強制できます。その場合、Claude Code はpwsh.exe(PowerShell 7)が見つかればそれを使い、なければpowershell.exe(Windows PowerShell 5.1)を使います。 - WSL。
claudeは WSL の terminal 内でインストール・実行するため、設定ファイルはディストリビューション内の Linux 側の~/.claude/settings.jsonになり、hook は Linux のシェルで実行されます。そこでnotify-sendを使っても、通常 Windows のデスクトップには届きません。代わりに Windows のプログラムを呼び出してください。
02手軽な確認方法:terminal のベル
最も簡単な合図はベルです。設定ファイルに次を追加します:
{
"preferredNotifChannel": "terminal_bell"
}
これで Claude Code は、完了時や入力待ちのときにベル文字を送信します。Windows Terminal では、ベルの動作はプロファイルごとに settings.json の bellStyle で設定します。"bellStyle": ["window", "taskbar"] にすると、音を鳴らす代わりにウィンドウとタスクバーのボタンが点滅します。詳しくは terminal ベルのガイドを参照してください。ただし、terminal が見えている間しか役に立ちません。
03PowerShell を使った Notification hook
Anthropic の hooks ガイドにある Windows 向けの例です。何もインストールせずに動作します:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""
}
]
}
]
}
}
画面隅のトーストではなくダイアログボックスが開き、terminal の背後に表示されることもあります。まず PowerShell でコマンドを試してください。Claude Code で /hooks と入力すると、hook が読み込まれているか確認できます。
matcher が空の場合、permission_prompt(承認待ちが約 6 秒続いた)や idle_prompt(Claude が約 60 秒前に完了した)を含むすべての通知タイプで発火します。タイミングについては Notification hook ガイドで説明しています。
04BurntToast で本物のトーストを表示する
BurntToast は、Windows のトースト通知用に広く使われている、コミュニティ製の PowerShell モジュールです。ユーザー単位で一度インストールします:
Install-Module -Name BurntToast -Scope CurrentUser
動作を確認します:
New-BurntToastNotification -Text 'Claude Code', 'Claude needs your attention'
hook で使います。このバージョンはプロファイルなしで PowerShell を起動し、この呼び出しに限って実行ポリシーを回避するため、Git Bash からでも PowerShell からでも同じように動作します:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"New-BurntToastNotification -Text 'Claude Code', 'Claude needs your attention'\""
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"New-BurntToastNotification -Text 'Claude Code', 'Claude has finished'\"",
"async": true
}
]
}
]
}
}
Stop hook は毎ターンの終わりに実行されるため、タスクの完了を 1 分後ではなくすぐに知ることができます。Stop hook ガイドを参照してください。"async": true を指定すると hook がバックグラウンドで実行されるため、PowerShell の起動が遅くても Claude Code が待たされません。
トーストがまったく表示されない場合は、設定 > システム > 通知 を確認してください。通知がオンで、応答不可がオフになっている必要があります。BurntToast のトーストは通常そこで Windows PowerShell の項目として表示されるため、その通知も許可しておく必要があります。
05WSL から:相互運用機能で Windows を呼び出す
WSL 内では hook は Linux 上で実行されますが、WSL は .exe の名前で Windows のプログラムを起動できます。Anthropic のガイドでは、Windows 相互運用機能によって powershell.exe が PATH に含まれている必要があると説明されています。これはデフォルトで有効で、/etc/wsl.conf の [interop] セクションにある appendWindowsPath で制御されます。WSL のシェルから確認してください:
command -v powershell.exe
Windows 側に BurntToast をインストールしておけば、WSL の ~/.claude/settings.json に書く hook も同じコマンドです:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"New-BurntToastNotification -Text 'Claude Code', 'Claude has finished'\"",
"async": true
}
]
}
]
}
}
WSL から Windows PowerShell を起動すると 1 秒以上かかることがあり、これも "async": true を使う理由の一つです。
06Claude Code Notifier の位置づけ
ここまでの hook は、席にいるときなら十分です。しかし席を離れると役に立たず、トーストから Claude のコマンドを承認することもできません。
Claude Code Notifier は、Claude Code の hooks を基盤にした独立したツールです(Anthropic ではなく TouchTap が開発)。無料のコマンドラインツール ccn は Mac、Windows、Linux で動作します(Windows 版はベータ)。ネイティブ Windows では PowerShell からインストールします:
irm https://claudecodenotifier.com/install.ps1 | iex
Claude Code の設定に hook のエントリを追加し、ファイルのほかの部分には手を加えず、バックアップも保存します。インストール直後から、Claude の完了時、権限が必要なとき、質問があるときに Windows のトーストを表示します。スマートフォンもネットワークも不要です。terminal ではなく Claude Code に hook するため、Windows Terminal、PowerShell、IDE の terminal のどれでも同じように動作します。
Claude Code を WSL で実行している場合は、Claude Code とその設定がある WSL 内に、Linux 用のコマンドで ccn をインストールしてください:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
その後 ccn test を実行します。WSL 内からのデスクトップ通知が Windows のデスクトップに届くかどうかは WSL の構成次第なので、WSL ではスマートフォン経由が確実です。スマートフォンをペアリングすると、イベントが push 通知で届き、権限を一度だけ許可・セッション中は許可・拒否したり、Claude の質問に答えたり、次の指示を送ったりをスマートフォンから行えます。スマートフォンアプリについては、スマートフォンのペアリング、ccn のページ、料金を参照してください。
ccn をインストールする場合は、通知が重複しないよう、自分で設定した toast 用の hook を削除してください。
07よくある質問
Windows で PowerShell の hook が何もしないのはなぜですか?
まず、同じコマンドを PowerShell で直接実行してみてください。そこで動くなら、/hooks に hook が表示されているか、JSON のエスケープが正しいか(内側の " にはすべてバックスラッシュが必要)を確認します。BurntToast の場合は、Claude Code を実行するのと同じユーザーにモジュールがインストールされているか、また応答不可(Do Not Disturb)がオフになっているかも確認してください。
Windows 版 Claude Code で hook を使うには Git Bash が必要ですか?
いいえ。Git for Windows がインストールされていれば hook は Git Bash で、なければ PowerShell で実行されます。個々の hook に "shell": "powershell" を指定することもできます。
notify-send は WSL で使えますか?
Windows のデスクトップに通知を出す目的では、通常は使えません。確実なのは、上で紹介したように WSL の相互運用機能を使って hook から powershell.exe を呼び出す方法です。
Windows Terminal だけで Claude Code の通知を表示できますか?
デフォルトではできません。preferredNotifChannel を terminal_bell に設定し、ウィンドウやタスクバーが点滅する bellStyle を選ぶか、toast を出す hook を使ってください。
Windows の通知を無料で受け取る方法はありますか?
はい。上記の PowerShell hook も、ccn のデスクトップ通知も無料です。サブスクリプションまたは買い切り購入が必要なのはスマホアプリだけです。