Gemini CLI の通知: 完了時やあなたが必要なときに音や通知を受け取る
あなたが別のものを読んでいる間も、Gemini CLI は「Waiting for confirmation」のまま平然と待ち続けます。実は Gemini CLI には知らせる機能があり、その設定がデフォルトでオフになっているだけです。そして Windows では、ドキュメントから想像するのとは違う動作をします。
要点
~/.gemini/settings.json で "general": { "enableNotifications": true } を設定します(または /settings → General → Enable Notifications)。これで Gemini CLI は、承認が必要なときとセッションが完了したときに通知します。Windows Terminal と VS Code のターミナルでは、自動モードはターミナルのベルを鳴らすだけなので、本物のデスクトップ通知が欲しい場合は notificationMethod: "osc9" を試してください。独自の音を鳴らすには、Notification フック(ツールの許可確認で発火)と AfterAgent フック(ターンの終了時に発火)を追加します。
始める前に: 使っている Gemini CLI を確認する
Gemini CLI のドキュメントのバナーによると、無料枠と Google One のユーザー向けには、2026 年 6 月 18 日に Gemini CLI が Antigravity CLI に置き換えられました。以下の内容はすべて Gemini CLI そのもの(gemini コマンドと ~/.gemini/settings.json)についてです。Antigravity に移行した場合、設定は別の場所にあります。
この機能は長く求められてきました。Gemini CLI リポジトリの音声通知の機能リクエスト(#4310)には 74 件の高評価が集まり、メンテナーが「どれだけ多くの人が関心を持っているかを反映して」優先度を上げました。その後のディスカッション(#13313)では、端的に「I can never tell when it is done.」(いつ終わったのかまったくわからない)と書かれています。
組み込みの通知を有効にする
Gemini CLI には試験的な通知機能があります。デフォルトでは無効です。CLI で /settings → General → Enable Notifications から有効にするか、設定ファイルに次のように書きます。
有効にすると、Gemini CLI は 2 つのイベントで通知します。
- 操作が必要: モデルがあなたの入力またはツールの承認を待っている。
- セッション完了: セッションが正常に終了した。
通知のタイトルは「Gemini CLI needs your attention」と「Gemini CLI session complete」です。Gemini CLI 自体は音を鳴らしません。ターミナルにエスケープシーケンスを送り、何が起こるかはターミナルが決めます。
通知の届き方(そして Windows が違う理由)
2 つ目の設定 general.notificationMethod で、通知の送り方を選びます。値は auto(デフォルト)、osc9、osc777、bell です。
通知のページには、CLI は OSC 9 エスケープシーケンスを使い、使えなければターミナルのベルにフォールバックすると書かれています。ソースコードはもっと具体的です。auto モードでは次のようになります(packages/cli/src/utils/terminalNotifications.ts)。
| ターミナル | auto で送られるもの |
|---|---|
| iTerm2 | OSC 9(デスクトップ通知) |
| Windows Terminal、VS Code のターミナル、Alacritty、Apple Terminal | ベル(BEL)のみ |
| その他すべてのターミナル | OSC 777 |
つまり Windows Terminal では、トースト通知ではなくベルが鳴ります。ベルで何が起こるかは Windows Terminal の設定で決まります。bellStyle には all、audible、window、taskbar、none を指定でき、デフォルトは audible です。all にすると、Windows Terminal は音を鳴らしてタスクバーのアイコンを点滅させます。音は bellSound で選べます。
ベルではなく本物のデスクトップ通知を試したい場合は、方式を強制します。
ターミナルが OSC 9 を Windows の通知に変換するかどうかは、ターミナルのバージョンによって異なります。何も表示されない場合は、auto または bell に戻して bellStyle: "all" を使ってください。ベルは、Gemini CLI 自身のコードが Windows Terminal 向けに選んだ方式です。
tmux や screen の中では、Gemini CLI はシーケンスをパススルー用のエスケープで包むので、外側のターミナルにも届きます。
フックで独自の音を鳴らす
特定の音、ポップアップ、スマートフォンへのメッセージが欲しい場合は、フックを使います。Gemini CLI は決まったタイミングでフックのコマンドを実行し、終了を待ちます。ここで重要なイベントは 2 つです。
Notificationは CLI がシステム通知を発するときに発火します。現在の種類はToolPermission(ツールがあなたの承認を待っている)だけです。このフックは何かを承認したりブロックしたりすることはできません。あくまで通知用です。AfterAgentはターンごとに 1 回、モデルの最終応答の後に発火します。Gemini 自身のベストプラクティスのページでは、「最終的な完了だけを確認すればよい」場合にこれを推奨しています。
フックはデフォルトで有効です(hooksConfig.enabled)。フックは stdout に JSON オブジェクトをちょうど 1 つだけ出力し、それ以外は何も出力しません(伝えることがなければ {} で構いません)。終了コード 0 は成功、2 はブロック(ブロック可能なイベントでのみ意味を持つ)、それ以外は警告で、CLI はそのまま続行します。デフォルトのタイムアウトは 60 秒です(timeout の単位はミリ秒)。
Windows(PowerShell)
Windows では、Gemini CLI はフックのコマンドを pwsh -NoProfile -Command で実行し、PowerShell 7 がインストールされていなければ powershell.exe で実行します。次のスクリプトを %USERPROFILE%\.gemini\hooks\ding.ps1 として保存します。
次に、両方のイベントからこのスクリプトを指定します。
-ExecutionPolicy Bypass で、最もよくある失敗、つまり PowerShell がスクリプトの実行を拒否する問題を回避できます。Gemini のドキュメントでは、恒久的な対策として Set-ExecutionPolicy RemoteSigned -Scope CurrentUser を推奨しています。
macOS と Linux
その他のシステムでは、フックは bash -c で実行されます。1 行のスクリプトで十分です。
実行可能にして(chmod +x ~/.gemini/hooks/ding.sh)、同じ 2 つのイベントで "command": "$HOME/.gemini/hooks/ding.sh" を使います。
「承認が必要」と「完了」で 2 種類の音を使い分けたい場合は、スクリプトを 2 つ作ります。フックは stdin からイベントを読み取ることもできます。Notification の入力には notification_type、message、details が含まれるので、ポップアップに実際のリクエスト内容を表示できます。
フックが実行されない理由
/hooks panelを確認します。 Gemini CLI が読み込んだすべてのフックが一覧表示されます。無効になっている場合は、/hooks enable-allで再び有効にできます。- 信頼されていないフォルダー。 信頼されていないフォルダーでは、Gemini CLI はプロジェクトの
.gemini/settings.jsonを無視するため、プロジェクトのフックは読み込まれません。通知用のフックはユーザー設定(~/.gemini/settings.json)に置けば、どこでも動作します。 - 変更されたフックは新しいフックとして扱われます。 Gemini CLI はプロジェクトのフックのフィンガープリントを記録しており、フックの名前やコマンドが変わると、新しい未信頼のフックとして扱います。
- stdout に別の出力がある。 JSON の前に紛れ込んだ
echoや PowerShell の警告があると、解析に失敗します。ログは stderr に送ってください。 - マッチャー。
NotificationとAfterAgentでは、すべてに一致させるために"*"(または空文字列)を使います。ライフサイクルイベントは完全一致の文字列マッチャーを、ツールイベントは正規表現を使います。
あるいは、確認の回数を減らす
通知は応答を早めるのに役立ちますが、Gemini CLI があなたを必要とする回数自体を減らすこともできます。general.defaultApprovalMode には default(確認する)、auto_edit(編集は承認され、それ以外は確認する)、plan(読み取り専用)を指定できます。Shift+Tab で切り替えられます。tools.allowed には確認ダイアログをスキップするツールを列挙し(例: run_shell_command(git))、tools.confirmationRequired には常に確認が必要なツールを列挙します。
YOLO モード(--yolo または Ctrl+Y)はすべてを承認し、デフォルトでサンドボックスを有効にします。コマンドラインからしか有効にできず、マシンを共有しているなら security.disableYoloMode で完全に無効にできます。
Pet Island の役割
ビープ音は何かが起きたことを教えてくれますが、どのターミナルなのか、Gemini が何を実行したいのかはわかりません。Pet Island は、Gemini CLI を他のエージェントと並べて画面上部の小さなアイランドに表示します。作業中、確認待ち、完了の状態がわかり、ワンクリックで該当のターミナルに移動できます。
Gemini CLI の場合、確認そのものは引き続き Gemini 内で行います。Pet Island はリクエストを表示してそこへ案内しますが、Gemini のツールを代わりに承認することはありません(これに対して、Claude Code と Codex のリクエストはアイランド上で直接応答できます)。
よくある質問
Gemini CLI に通知機能はありますか?
はい。デフォルトでオフの試験的な機能としてあります。~/.gemini/settings.json で general.enableNotifications を true に設定するか、/settings → General → Enable Notifications を使います。
Windows で Gemini CLI がビープ音しか鳴らさないのはなぜですか?
auto モードでは、Gemini CLI のコードは Windows Terminal と VS Code のターミナルにターミナルのベルだけを送ります。そのベルで音を鳴らすか、タスクバーを点滅させるか、その両方かは、Windows Terminal の bellStyle 設定で決まります。
Gemini CLI のフックでツールを自動承認できますか?
Notification フックではできません。ドキュメントによると、このフックは通知をブロックすることも許可を与えることもできません。ツールを事前に承認するには、代わりに tools.allowed かポリシーエンジンを使います。
Gemini CLI の完了時に発火するのはどのフックですか?
AfterAgent です。ターンごとに 1 回、モデルの最終応答の後に発火します。
すべてのプロジェクトで動作させるには、フックをどこに置けばよいですか?
ユーザー設定の ~/.gemini/settings.json です。信頼されていないフォルダーでは、プロジェクト設定は無視されます。
出典
このページの設定と動作はすべて、2026年10月26日 に以下のページと照らし合わせて確認しました。エージェントは変化が速いため、内容が一致しなくなった場合は公式ページの記述を優先してください。
- Gemini CLI ドキュメント: Notifications(試験的機能)
- Gemini CLI ドキュメント: Hooks
- Gemini CLI ドキュメント: Hooks reference
- Gemini CLI ドキュメント: Writing hooks(PowerShell の例)
- Gemini CLI ドキュメント: Configuration reference
- Gemini CLI ドキュメント: Trusted folders
- Gemini CLI ソース: terminalNotifications.ts
- Gemini CLI issue #4310: 音声通知
- Gemini CLI ディスカッション #13313: Gemini の完了時に音を鳴らす
- Microsoft Learn: Windows Terminal のプロファイル設定(bellStyle、bellSound)
- Microsoft Learn: Console.Beep