Уведомления Gemini CLI: звук или оповещение, когда он закончил или нужны вы
Gemini CLI спокойно стоит на «Waiting for confirmation», пока вы читаете что-то другое. Он умеет сообщать об этом. Просто настройка по умолчанию выключена, а в Windows она ведёт себя не так, как следует из документации.
КОРОТКО
Задайте "general": { "enableNotifications": true } в ~/.gemini/settings.json (или /settings → General → Enable Notifications). После этого Gemini CLI оповещает вас, когда ему нужно подтверждение и когда сессия завершена. В Windows Terminal и терминале VS Code автоматический режим только подаёт звонок терминала, поэтому если нужно настоящее уведомление на рабочем столе, попробуйте notificationMethod: "osc9". Для своего звука добавьте хук Notification (срабатывает на запросах разрешений для инструментов) и хук AfterAgent (срабатывает в конце хода).
Прежде чем начать: какой у вас Gemini CLI
Баннер в документации Gemini CLI сообщает, что для пользователей бесплатного уровня и Google One Gemini CLI заменили на Antigravity CLI 18 июня 2026 года. Всё, что ниже, относится к самому 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 оповещает вас о двух событиях:
- Action required: модель ждёт вашего ввода или подтверждения инструмента.
- Session complete: сессия успешно завершена.
Заголовки уведомлений: «Gemini CLI needs your attention» и «Gemini CLI session complete». Сам Gemini CLI звук не воспроизводит: он отправляет терминалу escape-последовательность, а что произойдёт, решает терминал.
Как уведомление доходит до вас (и почему в Windows иначе)
Вторая настройка, general.notificationMethod, определяет способ отправки оповещения. Возможные значения: auto (по умолчанию), osc9, osc777 и bell.
На странице об уведомлениях сказано, что CLI использует escape-последовательность 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". Именно звонок выбрал для Windows Terminal собственный код Gemini CLI.
Внутри tmux или screen Gemini CLI оборачивает последовательность в passthrough-escape, чтобы она всё равно дошла до внешнего терминала.
Свой звук с помощью хуков
Если нужен определённый звук, всплывающее окно или сообщение на телефон, используйте хуки. Gemini CLI запускает команды хуков в определённых точках и ждёт их завершения. Здесь важны два события:
Notificationсрабатывает, когда CLI выдаёт системное оповещение. Сейчас единственный тип —ToolPermission(инструмент ждёт вашего подтверждения). Хук не может ничего одобрить или заблокировать; он носит информационный характер.AfterAgentсрабатывает один раз за ход, после финального ответа модели. Страница рекомендаций самого Gemini советует его, когда «you only need to check the final completion» (нужно проверить только итоговое завершение).
Хуки включены по умолчанию (hooksConfig.enabled). Хук выводит в stdout ровно один объект JSON и ничего больше ({} подойдёт, если сказать нечего). Код выхода 0 означает успех; 2 блокирует (и имеет значение только для блокирующих событий); всё остальное считается предупреждением, и CLI продолжает работу. Тайм-аут по умолчанию — 60 секунд (timeout задаётся в миллисекундах).
Windows (PowerShell)
В Windows Gemini CLI запускает команды хуков через pwsh -NoProfile -Command или powershell.exe, если PowerShell 7 не установлен. Сохраните этот скрипт как %USERPROFILE%\.gemini\hooks\ding.ps1:
Затем направьте на него оба события:
-ExecutionPolicy Bypass предотвращает самый частый сбой: отказ PowerShell запускать скрипты. В качестве постоянного решения документация Gemini предлагает Set-ExecutionPolicy RemoteSigned -Scope CurrentUser.
macOS и Linux
В других системах хуки запускаются через bash -c. Хватит однострочного скрипта:
Сделайте его исполняемым (chmod +x ~/.gemini/hooks/ding.sh) и укажите "command": "$HOME/.gemini/hooks/ding.sh" в тех же двух событиях.
Хотите два разных звука, один для «нужно подтверждение», другой для «готово»? Сделайте два скрипта. Хук также может прочитать событие из stdin: входные данные Notification содержат notification_type, message и details, так что во всплывающем окне можно показать сам запрос.
Почему ваш хук не запускается
- Проверьте
/hooks panel. Там перечислены все хуки, которые загрузил Gemini CLI./hooks enable-allснова включает их, если они были отключены. - Недоверенная папка. В недоверенной папке Gemini CLI игнорирует
.gemini/settings.jsonпроекта, поэтому хуки проекта не загружаются. Размещайте хуки уведомлений в пользовательских настройках (~/.gemini/settings.json), чтобы они работали везде. - Изменённые хуки считаются новыми. Gemini CLI снимает отпечатки хуков проекта; если имя или команда хука меняется, он считается новым, недоверенным хуком.
- Что-то ещё в stdout. Случайный
echoили предупреждение PowerShell перед JSON ломает разбор. Пишите логи в stderr. - Matchers. Для
NotificationиAfterAgentиспользуйте"*"(или пустую строку), чтобы совпадало всё. События жизненного цикла используют matchers с точным совпадением строки, события инструментов используют регулярные выражения.
Или пусть спрашивает реже
Уведомления помогают отвечать быстрее; а ещё можно сделать так, чтобы 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 уведомления?
Да, как экспериментальная функция, выключенная по умолчанию. Задайте general.enableNotifications значение true в ~/.gemini/settings.json или используйте /settings → General → Enable Notifications.
Почему Gemini CLI в Windows только пищит?
В режиме auto код Gemini CLI отправляет в Windows Terminal и терминал VS Code только звонок терминала. Настройка bellStyle в Windows Terminal определяет, воспроизводит ли этот звонок звук, мигает ли панель задач или и то и другое.
Может ли хук Gemini CLI автоматически одобрить инструмент?
Хук Notification этого не умеет. В документации сказано, что он не может блокировать оповещения или выдавать разрешения. Чтобы заранее одобрить инструменты, используйте tools.allowed или движок политик.
Какой хук срабатывает, когда Gemini CLI закончил?
AfterAgent. Он срабатывает один раз за ход, после финального ответа модели.
Куда поместить хуки, чтобы они работали во всех проектах?
В пользовательские настройки, ~/.gemini/settings.json. В недоверенных папках настройки проекта игнорируются.
Источники
Все настройки и описанное поведение на этой странице сверены с этими источниками 26 октября 2026 г.. Агенты быстро меняются; если что-то уже не совпадает, приоритет за официальной страницей.
- Документация 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
- Issue Gemini CLI #4310: Audio notifications
- Обсуждение Gemini CLI #13313: Enable sound when Gemini is done
- Microsoft Learn: параметры профиля Windows Terminal (bellStyle, bellSound)
- Microsoft Learn: Console.Beep