Per ricevere una notifica quando Claude Code finisce, aggiungi un hook Stop a ~/.claude/settings.json che esegua il comando di notifica del tuo sistema. Stop scatta nel momento in cui Claude finisce di rispondere. Per "Claude ha bisogno di un mio input", aggiungi anche un hook Notification: scatta quando una richiesta di permesso è in attesa da circa sei secondi, o quando Claude è inattivo da circa un minuto. Funzionano entrambi su Mac, Windows e Linux, e un tool come Claude Code Notifier può inviare gli stessi avvisi al tuo telefono.
01Cosa fa Claude Code da solo
Claude Code prova già ad avvisarti quando sembri lontano dal terminal. Di default invia una notifica desktop in iTerm2, Ghostty e Kitty, può emettere un carattere bell in Apple Terminal e non fa nulla negli altri terminal. In iTerm2, inoltre, devi attivare le impostazioni degli avvisi prima che compaia qualcosa.
Quindi se usi il terminal di VS Code, Warp, Windows Terminal o la maggior parte dei terminal Linux, di solito non ricevi nulla. Puoi forzare il terminal bell con l'impostazione preferredNotifChannel, spiegata nella guida al terminal bell. Per una vera notifica desktop in qualsiasi terminal, ti serve un hook.
02I due hook che ti servono
Gli hook sono comandi che Claude Code esegue in momenti precisi di una sessione. Qui ne contano due:
StopQuando Claude finisce di rispondere (non quando lo interrompi)"Claude ha finito"Notification con matcher permission_promptUna richiesta di permesso è in attesa da circa sei secondi senza che tu abbia digitato nulla"Claude ha bisogno di un'approvazione"Notification con matcher idle_promptCirca 60 secondi dopo che Claude ha finito, se nel frattempo non hai digitato nullaUn promemoria che tocca a teStop è quello veloce: scatta subito alla fine di ogni turno. I tipi di Notification invece dipendono dal fatto che tu non stia guardando: ogni tasto premuto li rimanda, così non ricevi notifiche mentre sei lì davanti. Se vuoi un segnale nell'istante in cui Claude chiede un permesso, usa invece l'hook PermissionRequest, descritto nella guida a PermissionRequest.
Per capire come funzionano gli hook in generale (eventi, matcher, file di impostazioni, exit code), vedi Gli hook di Claude Code spiegati.
03Una configurazione funzionante su macOS
Apri ~/.claude/settings.json (crealo se non esiste) e aggiungi questo. Se il file ha già un oggetto hooks, aggiungi Stop e Notification come chiavi al suo interno invece di sostituirlo.
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\"'"
}
]
}
],
"Notification": [
{
"matcher": "permission_prompt|idle_prompt",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
Stop non ha matcher, quindi scatta a ogni turno. Il matcher di Notification lo limita ai due tipi che significano "torna qui".
Se non compare nulla, macOS potrebbe bloccare Script Editor, che osascript usa per mostrare le notifiche. Esegui una volta osascript -e 'display notification "test"' nel Terminale, poi apri Impostazioni di Sistema > Notifiche, trova Script Editor e attiva Consenti notifiche.
04La stessa configurazione su Linux e Windows
Mantieni la struttura JSON vista sopra e cambia solo le stringhe command.
Linux (serve un daemon per le notifiche desktop, quindi non funziona su un server headless):
"command": "notify-send 'Claude Code' 'Claude has finished'"
Se manca notify-send, installa libnotify-bin su Debian e Ubuntu, o il pacchetto equivalente della tua distribuzione. Per SSH e server, vedi notifiche via SSH.
Windows (PowerShell). L'esempio ufficiale di Anthropic apre una finestra di messaggio invece di un toast nell'angolo:
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude has finished', 'Claude Code')\""
La finestra può aprirsi dietro quella del terminale, quindi prova prima il comando in PowerShell. Sotto WSL, powershell.exe deve essere raggiungibile tramite l'interop di Windows. La guida per Windows descrive altre opzioni.
05Verifica che funzioni
- Digita
/hooksin Claude Code. I tuoi hook dovrebbero comparire sottoStopeNotification. - Fai a Claude una domanda breve. Quando risponde, dovrebbe comparire la notifica
Stop. - Chiedi qualcosa che richieda un permesso, passa a un'altra finestra e aspetta. La notifica
permission_promptarriva dopo circa sei secondi.
Di solito le modifiche a settings.json vengono applicate subito. Se un hook non compare in /hooks, controlla che il file sia JSON valido (niente virgole finali, niente commenti). Avvia Claude Code con claude --debug per vedere cosa ha fatto ogni hook. Altre soluzioni nella checklist di troubleshooting.
06Ricevere l'avviso sul telefono
Una notifica desktop serve solo se sei alla scrivania. Appena ti allontani, ti serve l'avviso da un'altra parte. Le strade più comuni sono tre:
- Un servizio push gestito da te, come ntfy, chiamato con
curldagli stessi hook. Economico e flessibile. Vedi la guida a ntfy. - Un webhook di chat per Telegram, Slack o Discord. Ottimo se passi già la giornata in chat. Vedi la guida ai webhook di chat.
- Claude Code Notifier, che configura gli hook al posto tuo e ti permette di rispondere dal telefono.
Le soluzioni fai-da-te vanno benissimo se ti basta un avviso. Il limite è che sono a senso unico: scopri che Claude ti sta aspettando, ma devi comunque tornare alla tastiera per approvare qualsiasi cosa.
Claude Code Notifier è uno strumento indipendente (non realizzato da Anthropic) composto da due parti: ccn, uno strumento da riga di comando gratuito per Mac, Windows e Linux, e le app per iPhone e Android. Si installa con una riga:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Su Windows, usa irm https://claudecodenotifier.com/install.ps1 | iex in PowerShell (il supporto a Windows è in beta). Le altre opzioni, tra cui Homebrew, npx @touchtap/ccn e il plugin per Claude Code, sono nella pagina di ccn.
L'installazione aggiunge sette hook che eseguono ciascuno ccn hook, lascia invariato il resto del tuo settings.json e salva una copia di backup una tantum accanto al file. Anche senza telefono, ccn mostra una notifica desktop sul computer quando Claude finisce, chiede un permesso o ti fa una domanda. Questa parte è gratuita e funziona senza rete.
Abbina un telefono con ccn pair e ottieni anche:
- una notifica push "Claude ha finito" appena termina un turno;
- richieste di permesso che puoi consentire una volta, consentire per tutta la sessione o negare;
- le domande a scelta multipla di Claude, a cui rispondi dal telefono;
- un campo per inviare a Claude la prossima istruzione appena ha finito.
Se hai digitato negli ultimi 30 secondi, non si aspetta il telefono e il terminale chiede come al solito. Le app richiedono un abbonamento o un acquisto a vita; vedi i prezzi. Abbinare un telefono ti guida nella configurazione.
07FAQ
Perché il mio Notification hook ci mette così tanto a scattare?
Il tipo permission_prompt aspetta che il prompt sia rimasto a schermo per circa sei secondi senza che tu digiti, e idle_prompt aspetta circa 60 secondi dopo che Claude ha finito. Il ritardo è voluto, così non ricevi avvisi mentre stai guardando. Usa un hook Stop per un avviso immediato di "finito" e un hook PermissionRequest per un avviso immediato di "serve approvazione".
Lo Stop hook scatta se premo Esc per interrompere Claude?
No. Stop non viene eseguito quando il turno termina perché l'hai interrotto tu. Non viene eseguito nemmeno quando il turno termina con un errore API, come un rate limit. In quel caso Claude Code genera un evento separato, StopFailure, che puoi agganciare allo stesso modo.
Uno Stop hook scatta dopo ogni messaggio o solo quando l'intero task è finito?
Dopo ogni turno. Claude Code non sa quando il tuo task complessivo è concluso, solo quando ha smesso di rispondere. Se fai un lungo botta e risposta, ricevi un avviso per ogni risposta. Se sono troppi, usa invece la notifica idle_prompt, che scatta solo dopo che sei via da circa un minuto.
Funziona nel terminale di VS Code o JetBrains?
Sì. Gli hook vengono eseguiti da Claude Code stesso, non dal terminale, quindi funzionano in qualsiasi terminale, compresi quelli degli IDE. Sono le notifiche integrate a dipendere dal terminale. Vedi la guida ai terminali degli IDE.
Posso ricevere notifiche sul telefono senza installarci niente?
In parte. Un hook che invia a ntfy o a un webhook di chat può raggiungere un'app che hai già. Però può solo dirti che è successo qualcosa. Per approvare o rispondere dal telefono ti serve qualcosa che rimandi la tua risposta all'hook, ed è proprio quello che fanno le app di Claude Code Notifier.