Workbranch › Guide
GuidaCome usare gli hook in Claude Code
Vuoi che qualcosa succeda ogni volta, come formattare un file dopo che Claude lo ha modificato o ricevere un avviso quando Claude ti sta aspettando, senza sperare che Claude se ne ricordi. Gli hook fanno esattamente questo. Questa guida spiega cosa sono, ti accompagna nella creazione di un primo hook e mostra dove metterli.
In breve: un hook è un comando di shell che Claude Code esegue automaticamente in un momento preciso, per esempio prima che venga eseguito uno strumento, dopo la modifica di un file o quando Claude ha bisogno di una tua risposta. Aggiungi gli hook sotto una chiave hooks in un file di impostazioni come ~/.claude/settings.json (tutti i progetti) o .claude/settings.json (un progetto), poi digita /hooks per verificare che Claude Code li veda.
Nomi degli eventi, posizioni dei file e comportamento descritti qui sotto provengono dalla documentazione di Claude Code di Anthropic a ottobre 2026. Claude Code si aggiorna spesso, quindi esegui claude update se manca qualcosa.
Cosa sono gli hook e perché aiutano
Le istruzioni in un prompt o in un file CLAUDE.md sono suggerimenti: Claude di solito le segue, ma decide lui. Un hook è diverso. È Claude Code stesso a eseguire il tuo comando ogni volta che si verifica l'evento, quindi l'azione è deterministica. Usi tipici dalla guida di Anthropic:
- Notifiche quando Claude aspetta un permesso o una tua risposta.
- Formattazione automatica di ogni file dopo che Claude lo modifica o lo scrive.
- Blocco delle modifiche a file sensibili come
.envo a qualsiasi cosa in.git/. - Aggiunta di contesto, per esempio ricordare a Claude le convenzioni del progetto dopo che la conversazione è stata compattata.
Tra gli eventi più usati ci sono SessionStart (una sessione inizia o riprende), UserPromptSubmit (invii un prompt), PreToolUse (prima di una chiamata a uno strumento, e può bloccarla), PostToolUse (dopo che una chiamata a uno strumento è riuscita), Notification, Stop (Claude finisce di rispondere), PreCompact e SessionEnd. L'elenco completo nella documentazione di riferimento degli hook è molto più lungo.
Configura il tuo primo hook: una notifica sul desktop
Questo esempio, adattato dalla guida passo passo di Anthropic, ti avvisa su macOS ogni volta che Claude Code ha bisogno della tua attenzione.
- Apri
~/.claude/settings.jsonin un editor di testo. Crea il file se non esiste. - Aggiungi un oggetto
hookscon una voceNotification. Al suo interno va un elenco di gruppi matcher; ognuno ha unmatcher(lascialo come stringa vuota per attivarlo a ogni notifica) e un elencohookscon un elemento di"type": "command". - Imposta il comando su
osascript -e 'display notification "Claude Code needs your attention" with title "Claude Code"'. Su Linux, l'esempio di Anthropic usa invecenotify-send. Ricordati di fare l'escape delle virgolette doppie interne nel JSON. - Se il file ha già una chiave
hooks, aggiungiNotificationaccanto agli eventi esistenti invece di sostituire l'intero oggetto. - In Claude Code, digita
/hooks. Il browser degli hook dovrebbe mostrare il nuovo hook sotto Notification. Premi Esc per tornare indietro. - Chiedi a Claude qualcosa che richiede un permesso e passa a un'altra finestra. Dovrebbe comparire una notifica.
Per attivarlo solo per alcune notifiche, imposta il matcher su un tipo come permission_prompt (una richiesta di permesso è in attesa da circa sei secondi) o idle_prompt (Claude ha finito e tu non scrivi da circa un minuto).
Un secondo esempio: formattare i file dopo le modifiche
Per un hook di progetto, metti la configurazione in .claude/settings.json nella radice del progetto. Usa l'evento PostToolUse con il matcher Edit|Write, così viene eseguito solo dopo gli strumenti che modificano i file. Il comando di esempio di Anthropic legge il percorso modificato dal JSON che Claude Code passa sullo standard input e lo passa a Prettier: jq -r '.tool_input.file_path' | xargs npx prettier --write. Richiede che jq sia installato. Un hook riuscito non mostra nulla nella conversazione; vedrai semplicemente il file riformattato.
Dove si configurano gli hook
| Posizione | Vale per | Condiviso? |
|---|---|---|
~/.claude/settings.json | Tutti i tuoi progetti | No, solo sul tuo computer |
.claude/settings.json | Un progetto | Sì, se ne può fare il commit |
.claude/settings.local.json | Un progetto | No, resta fuori da git |
| Impostazioni di policy gestite | Tutta l'organizzazione | Impostate dagli amministratori |
Il file hooks/hooks.json di un plugin | Finché il plugin è attivo | Incluso nel plugin |
| Frontmatter di una skill | Il resto della sessione dopo che la skill è stata richiamata | Nel file della skill |
| Frontmatter di un subagent | Mentre quel subagent è in esecuzione | Nel file del subagent |
Per disattivare gli hook, imposta "disableAllHooks": true in un file di impostazioni. Gli hook delle impostazioni gestite continuano a funzionare, a meno che non sia impostato anche lì.
Come risponde un hook
Quando si verifica un evento, Claude Code invia i dettagli dell'evento in JSON allo standard input del tuo comando. Il comando risponde con il suo exit code:
- Exit 0: si procede. Per alcuni eventi, come
SessionStart, il testo semplice stampato sullo standard output viene aggiunto al contesto di Claude. - Exit 2: blocca l'azione, dove l'evento lo consente. Scrivi il motivo sullo standard error; per
PreToolUse, Claude lo riceve e può cambiare strada. - Altri codici: di solito trattati come errore non bloccante; l'azione procede e la trascrizione mostra un errore dell'hook.
Per un controllo più preciso, esci con 0 e stampa invece un oggetto JSON. Scegli un solo approccio per ogni hook.
Da sapere
- Gli hook di tipo command non possono eseguire comandi slash né chiamare strumenti da soli.
- Il timeout predefinito degli hook di tipo command è di 10 minuti, più breve per alcuni eventi; imposta
timeout(in secondi) su ogni hook per cambiarlo. PostToolUsenon può annullare nulla, perché lo strumento è già stato eseguito. UsaPreToolUseper impedire un'azione.Stopsi attiva ogni volta che Claude finisce una risposta, non solo quando un compito è completato.
Se non funziona
- L'hook non si attiva mai: esegui
/hookse controlla che sia elencato sotto l'evento giusto. I matcher distinguono maiuscole e minuscole e devono corrispondere esattamente al nome dello strumento, per esempioEdit, nonedit. - "/hooks" non mostra nulla: controlla che il JSON sia valido (niente virgole finali né commenti) e che sia nel file giusto. Di solito le modifiche vengono recepite automaticamente; altrimenti riavvia la sessione.
- "hook error" nella trascrizione: prova lo script passandogli un JSON di esempio tramite pipe e controlla
echo $?. Usa percorsi assoluti o$CLAUDE_PROJECT_DIRper gli script, installajqse manca e rendi eseguibili gli script conchmod +x. - Nessuna notifica su macOS: esegui una volta il comando
osascriptnel Terminale, poi attiva Allow Notifications (consenti notifiche) per Script Editor in System Settings > Notifications (Impostazioni di Sistema > Notifiche).
Tieni traccia di ciò che ogni sessione lascia in sospeso
Il plugin Workbranch per Claude Code usa un riepilogo all'avvio della sessione: in una cartella collegata a un progetto Workbranch, mostra cosa è ancora aperto quando inizia una sessione, e se dici "save this to Workbranch" (salva questo su Workbranch) archivia in quel progetto i compiti, le decisioni e le domande aperte della sessione. Vedi Workbranch per Claude. Sei alle prime armi con Claude Code? Parti da come iniziare con Claude Code.
Fonti
- Use Claude Code with your Pro or Max plan (Claude Help Center, verificato il 30 ottobre 2026)
- Automate actions with hooks (Claude Code docs, verificato il 30 ottobre 2026)
Domande frequenti
Claude può scrivere un hook al posto mio?
Sì. La guida di Anthropic dice che puoi descrivere l'hook che vuoi nel prompt di Claude Code e chiedere a Claude di aggiungerlo alle tue impostazioni. Controlla poi il risultato con /hooks.
Un hook può fermare Claude anche in modalità bypass?
Un hook PreToolUse che restituisce una decisione deny blocca lo strumento in ogni modalità di permesso, compresa bypassPermissions. È questo che rende gli hook utili per regole che non si possono aggirare cambiando modalità.
Esistono hook che usano un modello invece di uno script?
Sì. Oltre ai comandi di shell, un hook può essere una richiesta HTTP, una chiamata a uno strumento MCP, un singolo prompt valutato da un modello Claude oppure un hook agente sperimentale con accesso agli strumenti.