Notificaciones de Gemini CLI: recibe un sonido o una alerta cuando termina o te necesita

Gemini CLI se queda tan tranquilo en “Waiting for confirmation” mientras tú lees otra cosa. Puede avisarte. Lo que pasa es que el ajuste viene desactivado de forma predeterminada, y en Windows se comporta de forma distinta a lo que sugiere la documentación.

Por Aslan, equipo de Pet Island · Actualizado el 26 oct 2026 · 5 min de lectura

RESPUESTA CORTA

Establece "general": { "enableNotifications": true } en ~/.gemini/settings.json (o /settings → General → Enable Notifications). A partir de ahí, Gemini CLI te avisa cuando necesita aprobación y cuando se completa una sesión. En Windows Terminal y en la terminal de VS Code, el modo automático solo hace sonar la campana de la terminal, así que si quieres una notificación de escritorio de verdad prueba notificationMethod: "osc9". Para tu propio sonido, añade un hook Notification (se dispara en las solicitudes de permiso de herramientas) y un hook AfterAgent (se dispara al terminar un turno).

Antes de empezar: qué Gemini CLI tienes

Un aviso en la documentación de Gemini CLI indica que, para los usuarios del nivel gratuito y de Google One, Gemini CLI fue sustituido por Antigravity CLI el 18 de junio de 2026. Todo lo que sigue trata de Gemini CLI en sí (el comando gemini y ~/.gemini/settings.json). Si te pasaste a Antigravity, su configuración está en otro sitio.

La gente lleva mucho tiempo pidiendo esto. La solicitud de notificaciones sonoras en el repositorio de Gemini CLI (#4310) reunió 74 pulgares arriba, y un mantenedor subió su prioridad “para reflejar a cuánta gente le importa”. Una discusión posterior (#13313) lo resumía así: “I can never tell when it is done.” (nunca sé cuándo ha terminado).

Activa las notificaciones integradas

Gemini CLI tiene una función de notificaciones experimental. Está desactivada de forma predeterminada. Actívala en la CLI con /settings → General → Enable Notifications, o en tu archivo de configuración:

~/.gemini/settings.jsonCopiar
{
"general": {
"enableNotifications": true
}
}

Una vez activada, Gemini CLI te avisa en dos eventos:

  • Acción necesaria: el modelo espera tu respuesta o la aprobación de una herramienta.
  • Sesión completada: una sesión terminó correctamente.

Los títulos de las notificaciones son “Gemini CLI needs your attention” y “Gemini CLI session complete”. Gemini CLI no reproduce ningún sonido propio: envía a tu terminal una secuencia de escape, y la terminal decide qué ocurre.

Cómo te llega la notificación (y por qué Windows es distinto)

Un segundo ajuste, general.notificationMethod, elige cómo se envía la alerta. Los valores son auto (predeterminado), osc9, osc777 y bell.

La página de notificaciones dice que la CLI usa la secuencia de escape OSC 9 y recurre a la campana de la terminal como alternativa. El código fuente es más concreto. En modo auto (packages/cli/src/utils/terminalNotifications.ts):

TerminalQué envía auto
iTerm2OSC 9 (una notificación de escritorio)
Windows Terminal, terminal de VS Code, Alacritty, Apple TerminalSolo la campana (BEL)
Cualquier otra terminalOSC 777

Así que en Windows Terminal recibes la campana, no una notificación emergente. Lo que hace la campana es un ajuste de Windows Terminal: bellStyle acepta all, audible, window, taskbar y none, y el valor predeterminado es audible. Con all, Windows Terminal reproduce un sonido y hace parpadear el icono de la barra de tareas; puedes elegir el sonido con bellSound.

settings.json de Windows Terminal (perfil)Copiar
{
"bellStyle": "all"
}

Si quieres probar una notificación de escritorio de verdad en lugar de la campana, fuerza el método:

~/.gemini/settings.jsonCopiar
{
"general": {
"enableNotifications": true,
"notificationMethod": "osc9"
}
}

Que una terminal concreta convierta OSC 9 en una notificación de Windows depende de la versión de la terminal. Si no aparece nada, vuelve a auto o bell y usa bellStyle: "all". La campana es la vía que eligió el propio código de Gemini CLI para Windows Terminal.

Dentro de tmux o screen, Gemini CLI envuelve la secuencia en un escape de paso (passthrough) para que siga llegando a la terminal exterior.

Tu propio sonido con hooks

Si quieres un sonido concreto, una ventana emergente o un mensaje en el móvil, usa hooks. Gemini CLI ejecuta los comandos de los hooks en puntos fijos y espera a que terminen. Aquí importan dos eventos:

  • Notification se dispara cuando la CLI emite una alerta del sistema. Hoy el único tipo es ToolPermission (una herramienta espera tu aprobación). El hook no puede aprobar ni bloquear nada; es solo informativo.
  • AfterAgent se dispara una vez por turno, después de la respuesta final del modelo. La propia página de buenas prácticas de Gemini lo recomienda cuando “you only need to check the final completion” (solo necesitas comprobar que ha terminado del todo).

Los hooks están activados de forma predeterminada (hooksConfig.enabled). Un hook imprime en stdout exactamente un objeto JSON y nada más ({} vale cuando no tienes nada que decir). El código de salida 0 significa éxito; 2 bloquea (y solo importa en los eventos que pueden bloquear); cualquier otro es una advertencia y la CLI continúa. El tiempo de espera predeterminado es de 60 segundos (timeout se expresa en milisegundos).

Windows (PowerShell)

En Windows, Gemini CLI ejecuta los comandos de los hooks con pwsh -NoProfile -Command, o con powershell.exe si PowerShell 7 no está instalado. Guarda este script como %USERPROFILE%\.gemini\hooks\ding.ps1:

~/.gemini/hooks/ding.ps1Copiar
# Two short beeps: frequency in Hz, duration in ms
[Console]::Beep(880, 150)
[Console]::Beep(1320, 150)
 
# Hooks must print one JSON object
"{}"

Luego haz que ambos eventos apunten a él:

~/.gemini/settings.jsonCopiar
{
"general": { "enableNotifications": true },
"hooks": {
"Notification": [
{ "matcher": "*", "hooks": [ { "name": "ding-approval", "type": "command",
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File $HOME\\.gemini\\hooks\\ding.ps1" } ] }
],
"AfterAgent": [
{ "matcher": "*", "hooks": [ { "name": "ding-done", "type": "command",
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File $HOME\\.gemini\\hooks\\ding.ps1" } ] }
]
}
}

-ExecutionPolicy Bypass evita el fallo más común: que PowerShell se niegue a ejecutar scripts. La documentación de Gemini sugiere Set-ExecutionPolicy RemoteSigned -Scope CurrentUser como solución permanente.

macOS y Linux

En otros sistemas, los hooks se ejecutan con bash -c. Basta con un script de una línea:

~/.gemini/hooks/ding.shCopiar
#!/usr/bin/env bash
cat > /dev/null # drain the event JSON
afplay /System/Library/Sounds/Glass.aiff 2>/dev/null \
|| paplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null
echo '{}'

Hazlo ejecutable (chmod +x ~/.gemini/hooks/ding.sh) y usa "command": "$HOME/.gemini/hooks/ding.sh" en los mismos dos eventos.

¿Quieres dos sonidos distintos, uno para “necesita aprobación” y otro para “terminado”? Crea dos scripts. Un hook también puede leer el evento desde stdin: la entrada de Notification incluye notification_type, message y details, así que puedes mostrar la solicitud real en tu ventana emergente.

Por qué no se ejecuta tu hook

  1. Revisa /hooks panel. Muestra todos los hooks que cargó Gemini CLI. /hooks enable-all los vuelve a activar si estaban desactivados.
  2. Carpeta que no es de confianza. En una carpeta que no es de confianza, Gemini CLI ignora el .gemini/settings.json del proyecto, así que los hooks de proyecto no se cargan. Pon los hooks de notificación en tu configuración de usuario (~/.gemini/settings.json) para que funcionen en todas partes.
  3. Los hooks modificados cuentan como nuevos. Gemini CLI toma una huella de los hooks de proyecto; si cambia el nombre o el comando de un hook, se trata como un hook nuevo que no es de confianza.
  4. Hay algo más en stdout. Un echo perdido o una advertencia de PowerShell delante del JSON rompen el análisis. Envía los logs a stderr.
  5. Matchers. Para Notification y AfterAgent, usa "*" (o una cadena vacía) para que coincida con todo. Los eventos del ciclo de vida usan matchers de cadena exacta; los eventos de herramientas, expresiones regulares.

O haz que pregunte menos

Las notificaciones te ayudan a responder antes; también puedes reducir cuántas veces te necesita Gemini CLI. general.defaultApprovalMode puede ser default (pregunta), auto_edit (las ediciones se aprueban y todo lo demás pregunta) o plan (solo lectura). Shift+Tab alterna entre ellos. tools.allowed enumera las herramientas que se saltan el cuadro de confirmación (por ejemplo run_shell_command(git)), y tools.confirmationRequired enumera las que siempre deben preguntar.

El modo YOLO (--yolo o Ctrl+Y) lo aprueba todo y activa el sandbox de forma predeterminada. Solo se puede activar desde la línea de comandos, y security.disableYoloMode lo desactiva definitivamente si compartes la máquina.

Dónde encaja Pet Island

Un pitido te dice que algo ha pasado; no te dice en qué terminal ni qué quiere ejecutar Gemini. Pet Island pone Gemini CLI en una pequeña isla en la parte superior de la pantalla, junto a tus otros agentes: ves cuándo está trabajando, cuándo espera tu confirmación y cuándo ha terminado, con un clic para saltar a la terminal correcta.

Con Gemini CLI, la confirmación en sí sigue ocurriendo en Gemini. Pet Island muestra la solicitud y te lleva allí, pero no aprueba por ti las herramientas de Gemini. (Las solicitudes de Claude Code y Codex, en cambio, se pueden responder directamente en la isla.)

PREGUNTAS FRECUENTES

¿Tiene notificaciones Gemini CLI?

Sí, como función experimental desactivada de forma predeterminada. Establece general.enableNotifications en true en ~/.gemini/settings.json, o usa /settings → General → Enable Notifications.

¿Por qué Gemini CLI solo pita en Windows?

En modo auto, el código de Gemini CLI solo envía la campana de la terminal a Windows Terminal y a la terminal de VS Code. El ajuste bellStyle de Windows Terminal controla si esa campana reproduce un sonido, hace parpadear la barra de tareas o ambas cosas.

¿Puede un hook de Gemini CLI aprobar una herramienta automáticamente?

El hook Notification no. La documentación dice que no puede bloquear alertas ni conceder permisos. Para aprobar herramientas de antemano, usa tools.allowed o el motor de políticas.

¿Qué hook se dispara cuando Gemini CLI termina?

AfterAgent. Se dispara una vez por turno, después de la respuesta final del modelo.

¿Dónde pongo los hooks para que funcionen en todos los proyectos?

En tu configuración de usuario, ~/.gemini/settings.json. La configuración de proyecto se ignora en las carpetas que no son de confianza.

Fuentes

Cada ajuste y comportamiento de esta página se comprobó con estas páginas el 26 de octubre de 2026. Los agentes cambian rápido; si algo ya no coincide, manda la página oficial.

SIGUE LEYENDO

Responde a todos tus agentes desde la parte superior de la pantalla.

Windows y Mac · 7 días gratis, después un único pago de $8.99 · $1 de cada venta alimenta a animales callejeros

Prueba Pet Island gratis