AIエージェントに作業を任せたとき、完了したかどうかが気になって何度もチャット画面を見に行ってしまうことがあります。5分で終わるはずの作業が、気がついたら30分前に完了していた。その間ずっと画面の前で待っていたのは時間の無駄だったと感じる瞬間です。
もうひとつ厄介なのが「承認待ち」です。AIエージェントが処理を進めるなかで「これをやっていいですか?」とユーザー確認を待つ場面が出てくることがあります。これに気付かずに長時間放置してしまうと、せっかく任せた作業が止まってしまいます。
先日私はこの2つで何度か困ったので、Claude Codeで作業完了と承認待ちの両方を、Windowsの画面右下にトースト通知が自動で出る環境を作りました。設定が終わってから別アプリで作業していてもAIの状況を見逃さなくなり、任せる安心感が大きく変わりました。
この記事では、その設定で必要だった3つの仕組みの概要と、Claude Codeに貼り付けるだけで全部自動セットアップしてくれるコピペ用プロンプトを公開します。
なぜAIエージェントに通知が必要なのか
AIエージェントの一番のメリットは、長い作業を任せられることです。動画を1本作る、メルマガを大量に作る、デプロイを監視する、複数サイトに同時投稿する。どれも数分から数十分かかる作業で、その間に人間は他のことができます。
でも、そのまま放っておくと完了したかどうかが分からないという別の問題が出てきます。何度もチャット画面を覗きに行ってしまうので、結果として人間が張り付いた状態と変わりません。
さらに承認待ちで止まっている場合は、自分が気付くまで作業が一切進まないので、放置すれば放置するほど時間が無駄になります。
通知のないAIエージェントは本来のメリットを半分以下に削ってしまいます。離席している間に終わった作業や止まっている作業は、戻ってきたときにきちんと気づける状態にしないと、本当の意味で「任せた」ことになりません。
Claude Codeにはデフォルトでデスクトップ通知がない
意外なことに、Claude Codeにはデフォルトでデスクトップ通知の機能がありません。チャット画面の中では作業完了や承認待ちの表示が出ますが、画面が別のアプリで隠れていれば見えませんし、画面オフになっていれば気づけません。
これを解決するには、Claude Codeの「フック」という仕組みを活用します。フックは特定のタイミングでスクリプトを自動で呼び出す機能です。作業完了時(Stopイベント)と確認ダイアログ表示前(PreToolUseイベント)の2か所にフックを仕込むことで、どちらの通知も実現できます。
設定すべき場所は3つあります。
仕組みの3つのコンポーネント
1:タスク完了通知用スクリプト
ホームフォルダの中の `~/.claude/hooks/desktop_notify.py` という場所にPythonファイルを作ります。中身はPowerShellを呼んでWindowsのトースト通知を発行する仕組みです。Claude Codeから渡される情報(作業ディレクトリのパスなど)を読み取って、タブ名を含む通知を発行します。
2:Claude Codeの設定ファイルにフック登録
`~/.claude/settings.json` に2か所のフック設定を追加します。
ひとつは作業完了のタイミング(Stopイベント)で1のスクリプトを呼ぶ設定です。引数として `Stop` を渡すことで、スクリプト側で「タスク完了」を表示できます。
もうひとつは `AskUserQuestion` ツールが呼ばれる直前(PreToolUseイベント)のフックです。Claude Codeが確認ダイアログを表示しようとした瞬間にスクリプトが実行され、「確認待ち」の通知が出ます。この方法はセッションログの監視や常駐スクリプトを必要とせず、ツールの呼び出しタイミングに確実に連動します。
3:Windows側の通知バナーをON
ここが最大のハマりポイントです。Windows 11はアプリ単位で通知バナーの表示を許可制にしています。Windows PowerShellの通知バナーがOFFになっていると、スクリプトは正常に動いているのに、画面右下にバナーが出ずアクションセンター(Win+Nで開く通知一覧)にだけ通知が溜まる現象が起きます。
レジストリで `ShowBanner=1` を設定することで解決します。
クロードコードに貼り付けるだけで設定完了するプロンプト
ここまでの3つの設定、自分で全部手作業でやろうとすると1時間以上かかります。そこで、Claude Code(Windows版)のチャットに貼り付けるだけで全部自動セットアップしてくれるプロンプトを用意しました。
このプロンプトは Write/Edit ツールを使わず、Bash ツールの curl コマンドと python3 コマンドだけで設定を完了します。Claude Code の auto mode でもブロックされずに動きます。
「~/.claude/ への書き込みは auto mode でブロックされるのでは」と心配な方へ。**この方式は Write/Edit ツールを一切使いません。** Bash ツールの mkdir / curl / python3 / powershell の組み合わせだけでセットアップが完了します。Bash ツールが許可されていれば確実に動きます。
以下を選択してコピー、Claude Codeのチャットに貼り付けて送信してください。
“` 以下を実行してください。Claude Codeのデスクトップ通知(タスク完了 + 承認待ち)をWindows環境にセットアップします。スクリプト本体はGitHubの公開リポジトリから curl でダウンロードします。Write/Edit ツールは使いません。
【前提条件】 – Windows 10 または Windows 11 – Claude Code をWindowsネイティブで使っている(WSL2の中ではない) – Python 3.10以上がインストール済み
【手順1】公開リポジトリからスクリプトをダウンロード(Bashで実行)
mkdir -p ~/.claude/hooks ~/.claude/tools curl -fsSL raw.githubusercontent.com/joshicrea/claude-desktop-notify/main/desktop_notify.py -o ~/.claude/hooks/desktop_notify.py echo "ダウンロード完了"
【手順2】settings.json にフック設定を追記(Bashで実行)
python3 << ‘PYEOF’ import json, os p = os.path.expanduser(‘~/.claude/settings.json’) with open(p, encoding=’utf-8′) as f: s = json.load(f) hooks = s.setdefault(‘hooks’, {}) pre = hooks.setdefault(‘PreToolUse’, []) if not any(e.get(‘matcher’) == ‘AskUserQuestion’ for e in pre): pre.insert(0, {‘matcher’: ‘AskUserQuestion’, ‘hooks’: [{‘type’: ‘command’, ‘command’: ‘python3 ~/.claude/hooks/desktop_notify.py AskUserQuestion’, ‘timeout’: 10}]}) stop_hooks = hooks.setdefault(‘Stop’, []) if not any(any(‘desktop_notify’ in h.get(‘command’, ”) for h in e.get(‘hooks’, [])) for e in stop_hooks): stop_hooks.append({‘hooks’: [{‘type’: ‘command’, ‘command’: ‘python3 ~/.claude/hooks/desktop_notify.py Stop’, ‘timeout’: 10}]}) with open(p, ‘w’, encoding=’utf-8′) as f: json.dump(s, f, indent=2, ensure_ascii=False) print(‘settings.json 更新完了’) PYEOF
【手順3】Windows PowerShell の通知バナーをON(Bashで実行)
mkdir -p /tmp/cdn curl -fsSL raw.githubusercontent.com/joshicrea/claude-desktop-notify/main/setup_registry.ps1 -o /tmp/cdn/setup_registry.ps1 powershell -NoProfile -ExecutionPolicy Bypass -File /tmp/cdn/setup_registry.ps1
【手順4】テスト通知(Bashで実行)
echo {} | python3 ~/.claude/hooks/desktop_notify.py AskUserQuestion
【手順5】完了報告
ここまで実行したら「セットアップ完了しました。CursorまたはVSCodeを Ctrl+Shift+P → Reload Window でリロードしてください。リロード後から通知が有効になります。タスク完了通知は2分以上かかる作業の完了時に、確認待ち通知はClaude Codeが確認ダイアログを出す瞬間に通知が届きます」と報告してください。
【補足】 – スクリプトのソースは github.com/joshicrea/claude-desktop-notify で公開しています – WSL2環境では別のセットアップが必要です(このプロンプトはWindowsネイティブ向け) – 動作ログは %TEMP%\claude_desktop_notify.log に追記されます “`
このプロンプトをClaude Codeに貼り付けて送信すると、5ステップを順番に実行してくれます。最後にCursorまたはVSCodeをリロードして、その後から通知が出ます。
うまく通知が出ないとき
CursorまたはVSCodeをリロードしていない
settings.jsonへの変更は、Claude Codeを起動し直すまで反映されません。CursorまたはVSCodeで Ctrl+Shift+P を開いて Reload Window を実行してください。
テスト通知が画面右下に出ない
トースト通知はWindowsの設定で「応答不可(Do Not Disturb)」がONになっていると、画面右下にバナーが出ず、アクションセンター(Win+N)にだけ溜まります。
設定 → システム → 通知 を開いて、「応答不可」がOFFになっているか確認してください。
ログでデバッグする
通知スクリプトは動作のたびに `%TEMP%` フォルダ内のログファイルに追記します。エクスプローラーのアドレスバーに `%TEMP%` と打って、claude_desktop_notify.log を確認してください。`[show_toast] rc=0 out=OK` という行があれば通知は正常に発行されています。
WSL2環境でClaude Codeを動かしている場合
WSL2環境ではこの設定方法とは別の仕組みが必要になります。toast64.exeというWindows側のツールを使ってWSL2のbashフックから呼び出すという手順になります。
タブ名表示で複数タブの識別ができる
今回のセットアップでは、通知のタイトル部分にClaude Codeの作業ディレクトリ名(タブ名)が含まれるようにしています。
たとえば動画制作のタブで作業完了したときは「タスク完了 — 動画制作/15_YouTube」、販売ツールのタブで確認が必要なときは「確認待ち — 販売ツール/AI動画クリエイター」のように、どのタブで何が起きたかが一目でわかります。
複数タブを同時に動かしているとき、「あれ、今鳴ったのはどっち?」となる問題を防げます。
承認待ち通知の仕組み
「承認待ち」の通知は、Claude Codeが `AskUserQuestion` というツールを呼び出す直前に発火する `PreToolUse` フックで実現しています。
`AskUserQuestion` はClaude Codeが選択肢や確認をユーザーに提示するときに使うツールです。このツールが呼ばれた瞬間、フックが即座に通知を発行します。セッションログの監視や常駐スクリプトを必要とせず、ツールの呼び出しタイミングに確実に連動するため、誤検知がありません。
通知が来るタイミングと頻度の話
タスク完了通知は「ある程度時間がかかった作業の完了時のみ」鳴る設計にしています。具体的には、直前にあなたが入力したメッセージから2分以上経過してから返答が終わったとき、はじめて通知が出ます。
「これチェックして」「ありがとう」のような短い対話が連続したときに通知が連発する問題を防ぐためです。AIエージェントが内部で複数ターンに渡って作業しているときも、ユーザー入力から2分未満の中間ターンでは通知しません。長い処理(動画生成・デプロイ・大量編集など)が終わった瞬間だけ鳴ります。
加えて2分のクールダウンも入れています。通知が連続で出る状況を多重に防いでいます。
ただし、Claude Codeの「CronCreate」機能でバックグラウンド監視ジョブを動かしている場合は注意が必要です。「5分ごとにVercelのデプロイ状態を確認する」といった定期ジョブが動き続けていると、その確認ターンが完了するたびにStopイベントが発火し、「タスク完了」の通知が届いてしまいます。これを防ぐには、監視対象のタスクが完了(またはエラー)したタイミングで、CronCreateで作ったジョブをCronDeleteで即座に削除するのがポイントです。
確認待ち通知のほうは抑制なしで、`AskUserQuestion` ツールが呼ばれるたびに毎回鳴ります。確認は見逃したくない場面なので、抑制しません。
通知発行時のPowerShellウィンドウは完全に非表示で動くため、画面に余計な窓がチラつくこともありません。
閾値を変えたい場合は `~/.claude/hooks/desktop_notify.py` の `LONG_TASK_THRESHOLD_SEC` と `NOTIFY_COOLDOWN_SEC` を編集してください。タスク完了通知を完全に止めたい場合は settings.json の Stop イベントから通知スクリプトの行を削除すれば、確認待ち通知だけ残せます。
離席中の安心感が変わる
通知のセットアップを終えてから、AIエージェントへの依頼の仕方が変わりました。長い作業を依頼してから、安心して別のことに集中できるようになったんです。
5分かかる作業を画面の前で待つストレスがなくなって、本当の意味で「任せる」ができるようになりました。確認が必要な場面も、通知ですぐ気付けるので、長時間放置することがなくなりました。
AIエージェントを業務に組み込む上で、完了通知と確認待ち通知の仕組みは、小さい変化に見えて大きな効果があります。今日紹介したセットアップは、Claude Codeに貼り付けるだけで完了します。AIエージェントを日常的に使う人ほど、効果を実感できると思います。

コメントを残す
コメントを投稿するにはログインしてください。