Gemini CLI 通知:完成或需要你時發出音效或提醒
你在看別的東西時,Gemini CLI 會一直停在「Waiting for confirmation」。它其實可以通知你,只是這項設定預設關閉,而且在 Windows 上的行為和文件描述的不同。
簡答
在 ~/.gemini/settings.json 中設定 "general": { "enableNotifications": true }(或使用 /settings → General → Enable Notifications)。之後 Gemini CLI 會在需要核准和工作階段完成時提醒你。在 Windows Terminal 和 VS Code 終端機上,自動模式只會讓終端機響鈴,所以如果你想要真正的桌面通知,可以試試 notificationMethod: "osc9"。若要使用自己的音效,請新增 Notification hook(在工具權限提示時觸發)和 AfterAgent hook(在回合結束時觸發)。
開始之前:確認你用的是哪個 Gemini CLI
Gemini CLI 文件上的橫幅寫道,對免費方案和 Google One 使用者而言,Gemini CLI 已於 2026 年 6 月 18 日由 Antigravity CLI 取代。以下內容都是關於 Gemini CLI 本身(gemini 指令和 ~/.gemini/settings.json)。如果你已改用 Antigravity,它的設定位於其他地方。
大家想要這個功能已經很久了。Gemini CLI 儲存庫中音效通知的功能請求(#4310)累積了 74 個讚,一位維護者提高了它的優先順序,「to reflect how many people care」(以反映有多少人在意)。後來的一則討論(#13313)說得很直接:「I can never tell when it is done.」(我永遠不知道它什麼時候完成。)
開啟內建通知
Gemini CLI 有一項實驗性的通知功能,預設為停用。你可以在 CLI 中透過 /settings → General → Enable Notifications 開啟,或在設定檔中開啟:
開啟後,Gemini CLI 會在兩種事件發生時提醒你:
- 需要處理:模型正在等待你的輸入或工具核准。
- 工作階段完成:工作階段已成功結束。
通知標題分別是「Gemini CLI needs your attention」和「Gemini CLI session complete」。Gemini CLI 本身不會播放音效:它會傳送跳脫序列給你的終端機,由終端機決定要做什麼。
通知如何傳到你面前(以及 Windows 為何不同)
第二項設定 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 會把序列包在穿透跳脫序列中,讓它仍能傳到外層終端機。
用 hook 播放自己的音效
如果你想要特定的音效、彈出視窗或傳到手機的訊息,請使用 hook。Gemini CLI 會在固定時間點執行 hook 指令並等待它們完成。這裡有兩個重要事件:
Notification會在 CLI 發出系統提醒時觸發。目前唯一的類型是ToolPermission(有工具正在等待你核准)。這個 hook 無法核准或封鎖任何東西;它僅供參考。AfterAgent在每個回合觸發一次,時間點是模型最終回應之後。Gemini 自己的最佳做法頁面建議在「you only need to check the final completion」(只需要確認最終完成)時使用它。
hook 預設開啟(hooksConfig.enabled)。hook 只能在 stdout 印出剛好一個 JSON 物件,不能有其他內容(沒有要回應的內容時用 {} 即可)。結束代碼 0 表示成功;2 會封鎖(只對可封鎖的事件有意義);其他任何代碼都是警告,CLI 會繼續執行。預設逾時為 60 秒(timeout 的單位是毫秒)。
Windows(PowerShell)
在 Windows 上,Gemini CLI 會用 pwsh -NoProfile -Command 執行 hook 指令;若未安裝 PowerShell 7,則使用 powershell.exe。請把這個指令碼存為 %USERPROFILE%\.gemini\hooks\ding.ps1:
然後把兩個事件都指向它:
-ExecutionPolicy Bypass 可以避免最常見的失敗:PowerShell 拒絕執行指令碼。Gemini 文件建議以 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 作為永久解法。
macOS 與 Linux
在其他系統上,hook 會用 bash -c 執行。一行指令碼就能搞定:
讓它可執行(chmod +x ~/.gemini/hooks/ding.sh),並在同樣的兩個事件中使用 "command": "$HOME/.gemini/hooks/ding.sh"。
想要兩種不同的音效,一種代表「需要核准」、一種代表「已完成」?那就寫兩個指令碼。hook 也可以從 stdin 讀取事件:Notification 的輸入帶有 notification_type、message 和 details,所以你可以在彈出視窗中顯示實際的請求內容。
為什麼你的 hook 沒有執行
- 檢查
/hooks panel。 它會列出 Gemini CLI 載入的每個 hook。如果它們被停用了,/hooks enable-all可以重新開啟。 - 未受信任的資料夾。 在未受信任的資料夾中,Gemini CLI 會忽略專案的
.gemini/settings.json,所以專案 hook 不會載入。請把通知 hook 放在你的使用者設定(~/.gemini/settings.json)中,讓它們在任何地方都能運作。 - 變更過的 hook 會被視為新的 hook。 Gemini CLI 會為專案 hook 建立指紋;如果 hook 的名稱或指令改變,就會被視為新的、未受信任的 hook。
- stdout 上有其他內容。 JSON 前面多出來的
echo或 PowerShell 警告都會導致解析失敗。請把記錄送到 stderr。 - Matcher。 對
Notification和AfterAgent,請使用"*"(或空字串)來符合所有項目。生命週期事件使用完全相符的字串 matcher,工具事件則使用規則運算式。
或者讓它少問一點
通知能幫你更快回應;你也可以減少 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。
為什麼 Gemini CLI 在 Windows 上只會嗶一聲?
在 auto 模式下,Gemini CLI 的程式碼對 Windows Terminal 和 VS Code 終端機只會傳送終端機響鈴。Windows Terminal 的 bellStyle 設定決定這個響鈴是播放音效、讓工作列閃爍,或兩者皆有。
Gemini CLI 的 hook 可以自動核准工具嗎?
Notification hook 不行。文件說明它無法封鎖提醒或授予權限。請改用 tools.allowed 或原則引擎預先核准工具。
Gemini CLI 完成時會觸發哪個 hook?
AfterAgent。它在每個回合觸發一次,時間點是模型最終回應之後。
hook 要放在哪裡才能在每個專案中運作?
放在你的使用者設定 ~/.gemini/settings.json 中。在未受信任的資料夾中,專案設定會被忽略。
資料來源
本頁所有設定與行為均已於 2026年10月26日 對照下列頁面確認。代理程式更新很快;若內容不再相符,請以官方頁面為準。
- Gemini CLI 文件:Notifications(通知,實驗性)
- Gemini CLI 文件:Hooks
- Gemini CLI 文件:Hooks reference(Hooks 參考)
- Gemini CLI 文件:Writing hooks(撰寫 hook,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