Notifiche di Gemini CLI: un suono o un avviso quando finisce o ha bisogno di te

Gemini CLI resta tranquillamente su “Waiting for confirmation” mentre leggi altro. Può avvisarti. Solo che l'opzione è disattivata di default, e su Windows si comporta in modo diverso da quanto lascia intendere la documentazione.

Di Aslan, team di Pet Island · Aggiornato il 26 ott 2026 · 5 min di lettura

RISPOSTA BREVE

Imposta "general": { "enableNotifications": true } in ~/.gemini/settings.json (oppure /settings → General → Enable Notifications). Gemini CLI ti avviserà quando ha bisogno di un'approvazione e quando una sessione si conclude. In Windows Terminal e nel terminale di VS Code la modalità automatica emette solo il segnale acustico del terminale, quindi se vuoi una vera notifica desktop prova notificationMethod: "osc9". Per un tuo suono, aggiungi un hook Notification (si attiva con le richieste di autorizzazione degli strumenti) e un hook AfterAgent (si attiva alla fine di un turno).

Prima di iniziare: quale Gemini CLI hai

Un banner nella documentazione di Gemini CLI indica che, per gli utenti del livello gratuito e di Google One, Gemini CLI è stato sostituito da Antigravity CLI il 18 giugno 2026. Tutto ciò che segue riguarda Gemini CLI vero e proprio (il comando gemini e ~/.gemini/settings.json). Se sei passato ad Antigravity, le sue impostazioni si trovano altrove.

È una funzione richiesta da tempo. La richiesta di notifiche sonore nel repository di Gemini CLI (#4310) ha raccolto 74 voti positivi, e un maintainer ne ha alzato la priorità “to reflect how many people care” (per rispecchiare quante persone ci tengono). Una discussione successiva (#13313) l'ha detto in modo semplice: “I can never tell when it is done.” (non riesco mai a capire quando ha finito).

Attivare le notifiche integrate

Gemini CLI ha una funzione di notifica sperimentale. È disattivata per impostazione predefinita. Attivala nella CLI con /settings → General → Enable Notifications, oppure nel file di impostazioni:

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

Una volta attivata, Gemini CLI ti avvisa per due eventi:

  • Azione richiesta: il modello attende un tuo input o l'approvazione di uno strumento.
  • Sessione completata: una sessione è terminata correttamente.

I titoli delle notifiche sono “Gemini CLI needs your attention” e “Gemini CLI session complete”. Gemini CLI non riproduce suoni propri: invia al terminale una sequenza di escape, ed è il terminale a decidere cosa succede.

Come ti arriva la notifica (e perché Windows è diverso)

Una seconda impostazione, general.notificationMethod, sceglie come viene inviato l'avviso. I valori sono auto (predefinito), osc9, osc777 e bell.

La pagina delle notifiche dice che la CLI usa la sequenza di escape OSC 9 e ripiega sul segnale acustico del terminale. Il codice sorgente è più preciso. In modalità auto (packages/cli/src/utils/terminalNotifications.ts):

TerminaleCosa invia auto
iTerm2OSC 9 (una notifica desktop)
Windows Terminal, terminale di VS Code, Alacritty, Apple TerminalSolo il segnale acustico (BEL)
Tutti gli altri terminaliOSC 777

Quindi in Windows Terminal ottieni il segnale acustico, non una notifica popup. Cosa fa il segnale acustico è un'impostazione di Windows Terminal: bellStyle accetta all, audible, window, taskbar e none, e il valore predefinito è audible. Con all, Windows Terminal riproduce un suono e fa lampeggiare l'icona sulla barra delle applicazioni; puoi scegliere il suono con bellSound.

settings.json di Windows Terminal (profilo)Copia
{
"bellStyle": "all"
}

Se vuoi provare una vera notifica desktop invece del segnale acustico, forza il metodo:

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

Se un terminale trasforma OSC 9 in una notifica di Windows dipende dalla versione del terminale. Se non compare nulla, torna ad auto o bell e usa bellStyle: "all". Il segnale acustico è la strada che il codice stesso di Gemini CLI ha scelto per Windows Terminal.

Dentro tmux o screen, Gemini CLI racchiude la sequenza in un escape di passthrough, così raggiunge comunque il terminale esterno.

Un tuo suono con gli hook

Se vuoi un suono specifico, un popup o un messaggio sul telefono, usa gli hook. Gemini CLI esegue i comandi degli hook in punti precisi e attende che terminino. Qui contano due eventi:

  • Notification si attiva quando la CLI emette un avviso di sistema. Oggi l'unico tipo è ToolPermission (uno strumento attende la tua approvazione). L'hook non può approvare né bloccare nulla; è solo informativo.
  • AfterAgent si attiva una volta per turno, dopo la risposta finale del modello. La pagina delle best practice di Gemini lo consiglia quando “you only need to check the final completion” (devi solo verificare il completamento finale).

Gli hook sono attivi per impostazione predefinita (hooksConfig.enabled). Un hook stampa su stdout esattamente un oggetto JSON e nient'altro ({} va bene quando non hai nulla da dire). Il codice di uscita 0 indica successo; 2 blocca (e conta solo per gli eventi bloccanti); qualsiasi altro valore è un avviso e la CLI prosegue. Il timeout predefinito è di 60 secondi (timeout è in millisecondi).

Windows (PowerShell)

Su Windows, Gemini CLI esegue i comandi degli hook con pwsh -NoProfile -Command, oppure powershell.exe se PowerShell 7 non è installato. Salva questo script come %USERPROFILE%\.gemini\hooks\ding.ps1:

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

Poi associalo a entrambi gli eventi:

~/.gemini/settings.jsonCopia
{
"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 l'errore più comune: PowerShell che si rifiuta di eseguire gli script. La documentazione di Gemini suggerisce Set-ExecutionPolicy RemoteSigned -Scope CurrentUser come soluzione permanente.

macOS e Linux

Sugli altri sistemi gli hook vengono eseguiti con bash -c. Basta uno script di una riga:

~/.gemini/hooks/ding.shCopia
#!/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 '{}'

Rendilo eseguibile (chmod +x ~/.gemini/hooks/ding.sh) e usa "command": "$HOME/.gemini/hooks/ding.sh" negli stessi due eventi.

Vuoi due suoni diversi, uno per “ha bisogno di approvazione” e uno per “ha finito”? Crea due script. Un hook può anche leggere l'evento da stdin: l'input di Notification contiene notification_type, message e details, così puoi mostrare la richiesta effettiva nel popup.

Perché il tuo hook non viene eseguito

  1. Controlla /hooks panel. Elenca tutti gli hook caricati da Gemini CLI. /hooks enable-all li riattiva se erano stati disattivati.
  2. Cartella non attendibile. In una cartella non attendibile Gemini CLI ignora il .gemini/settings.json del progetto, quindi gli hook di progetto non vengono caricati. Metti gli hook di notifica nelle impostazioni utente (~/.gemini/settings.json) così funzionano ovunque.
  3. Un hook modificato conta come nuovo. Gemini CLI calcola un'impronta degli hook di progetto; se il nome o il comando di un hook cambia, viene trattato come un hook nuovo e non attendibile.
  4. Altro su stdout. Un echo di troppo o un avviso di PowerShell davanti al JSON rompe il parsing. Invia i log a stderr.
  5. Matcher. Per Notification e AfterAgent, usa "*" (o una stringa vuota) per far corrispondere tutto. Gli eventi del ciclo di vita usano matcher a stringa esatta, gli eventi degli strumenti espressioni regolari.

Oppure ricevi meno richieste

Le notifiche ti aiutano a rispondere più in fretta; puoi anche ridurre la frequenza con cui Gemini CLI ha bisogno di te. general.defaultApprovalMode può essere default (chiede), auto_edit (le modifiche vengono approvate, tutto il resto chiede) o plan (sola lettura). Shift+Tab passa dall'una all'altra. tools.allowed elenca gli strumenti che saltano la finestra di conferma (ad esempio run_shell_command(git)), e tools.confirmationRequired elenca gli strumenti che devono chiedere sempre.

La modalità YOLO (--yolo, o Ctrl+Y) approva tutto e attiva la sandbox per impostazione predefinita. Può essere attivata solo dalla riga di comando, e security.disableYoloMode la disattiva definitivamente se condividi la macchina.

Dove si inserisce Pet Island

Un bip ti dice che è successo qualcosa; non ti dice in quale terminale, né cosa vuole eseguire Gemini. Pet Island mette Gemini CLI su una piccola isola nella parte alta dello schermo, accanto agli altri tuoi agenti: vedi quando sta lavorando, quando attende la tua conferma e quando ha finito, e con un clic arrivi al terminale giusto.

Con Gemini CLI, la conferma vera e propria avviene comunque in Gemini. Pet Island mostra la richiesta e ti porta lì, ma non approva gli strumenti di Gemini al posto tuo. (Alle richieste di Claude Code e Codex, invece, puoi rispondere direttamente sull'isola.)

FAQ

Gemini CLI ha le notifiche?

Sì, come funzione sperimentale disattivata per impostazione predefinita. Imposta general.enableNotifications su true in ~/.gemini/settings.json, oppure usa /settings → General → Enable Notifications.

Perché Gemini CLI emette solo un bip su Windows?

In modalità auto, il codice di Gemini CLI invia a Windows Terminal e al terminale di VS Code solo il segnale acustico del terminale. L'impostazione bellStyle di Windows Terminal determina se quel segnale riproduce un suono, fa lampeggiare la barra delle applicazioni o entrambe le cose.

Un hook di Gemini CLI può approvare automaticamente uno strumento?

Non l'hook Notification. La documentazione dice che non può bloccare gli avvisi né concedere autorizzazioni. Usa invece tools.allowed o il motore dei criteri per pre-approvare gli strumenti.

Quale hook si attiva quando Gemini CLI ha finito?

AfterAgent. Si attiva una volta per turno, dopo la risposta finale del modello.

Dove metto gli hook perché funzionino in ogni progetto?

Nelle impostazioni utente, ~/.gemini/settings.json. Le impostazioni di progetto vengono ignorate nelle cartelle non attendibili.

Fonti

Ogni impostazione e comportamento descritti in questa pagina sono stati verificati su queste pagine il 26 ottobre 2026. Gli agenti cambiano in fretta: se qualcosa non corrisponde più, fa fede la pagina ufficiale.

CONTINUA A LEGGERE

Rispondi a tutti i tuoi agenti dalla parte alta dello schermo.

Windows e Mac · 7 giorni gratis, poi 8,99 $ una tantum · 1 $ di ogni vendita sfama gli animali randagi

Prova Pet Island gratis