claude-code-notifier
come funziona guide faq
◐Italiano
English العربية Deutsch Español Français עברית Italiano 日本語 한국어 Nederlands Polski Português (Brasil) Русский Türkçe Tiếng Việt 简体中文 繁體中文
Inizia
Tutte le guide

Gli hook di Claude Code spiegati: ogni evento e a cosa serve

Aggiornato il 31 ottobre 2026 · 7 min di lettura
in questa pagina 01Com'è fatto un hook 02Dove si trovano gli hook 03Tipi di handler 04Matcher 05Input: cosa riceve il tuo hook 06Output: exit code e JSON 07Tutti gli eventi hook 08Quali eventi contano per le notifiche 09Dove si inserisce Claude Code Notifier 10FAQ

Gli hook di Claude Code sono comandi (o chiamate HTTP, prompt e qualche altro tipo di handler) che Claude Code esegue automaticamente in punti precisi di una sessione, ad esempio prima che venga eseguito un tool, quando serve un permesso o quando Claude finisce di rispondere. Li definisci sotto la chiave hooks in un file di impostazioni come ~/.claude/settings.json. Ogni hook riceve su stdin un JSON con i dati dell'evento e può rispondere tramite l'exit code o un oggetto JSON su stdout: così può scrivere log, inviare notifiche, bloccare un'azione o rispondere al posto tuo.

01Com'è fatto un hook

La configurazione di un hook ha tre livelli:

  1. L'evento hook, ad esempio PreToolUse o Stop.
  2. Un gruppo matcher, che filtra quando scatta, ad esempio "solo per il tool Bash".
  3. Uno o più handler, cioè ciò che viene effettivamente eseguito.
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/lint-check.sh"
          }
        ]
      }
    ]
  }
}

Questo esegue uno script di lint dopo che Claude scrive o modifica un file. Per aggiungere un secondo evento, aggiungi una chiave allo stesso livello dentro lo stesso oggetto hooks.

02Dove si trovano gli hook

FileSi applica aCondiviso?
~/.claude/settings.jsonTutti i tuoi progettiNo, solo sulla tua macchina
.claude/settings.jsonUn progettoSì, si può fare commit
.claude/settings.local.jsonUn progettoNo
Impostazioni di policy gestiteLa tua organizzazioneImpostate dagli admin
Il file hooks/hooks.json di un pluginFinché il plugin è attivoSì

Gli hook di file diversi si sommano, non si sostituiscono. Digita /hooks in Claude Code per vedere tutti gli hook attivi e da dove arrivano.

In una sessione interattiva, Claude Code non esegue gli hook, nemmeno i tuoi, finché non accetti la finestra di fiducia del workspace per quella cartella.

03Tipi di handler

La maggior parte degli hook è "type": "command", che esegue un comando shell. Ce ne sono altri quattro:

  • http: invia il JSON dell'evento in POST a un URL e legge il body della risposta.
  • mcp_tool: chiama un tool su un server MCP che hai configurato.
  • prompt: fa una domanda singola a un modello Claude e legge una decisione in JSON.
  • agent: avvia un subagent che può leggere file prima di decidere (sperimentale).

Gli hook di tipo command girano con tutti i permessi del tuo utente, tramite sh -c su macOS e Linux e Git Bash (o PowerShell) su Windows. Aggiungi "async": true per eseguirne uno in background; in quel caso però non può più prendere decisioni.

04Matcher

Il matcher stabilisce quali occorrenze di un evento eseguono l'hook. Il valore confrontato dipende dall'evento: il nome del tool per gli eventi dei tool, il tipo di notifica per Notification, il modo in cui è partita la sessione per SessionStart e così via.

  • "*", "" o l'assenza di matcher corrispondono a tutto.
  • Lettere, cifre, _, -, spazi, | e , vengono trattati come nomi esatti. Edit|Write corrisponde a uno qualsiasi dei due tool.
  • Tutto il resto è un'espressione regolare JavaScript, quindi mcp__memory__.* corrisponde a tutti i tool di un server MCP.

I matcher distinguono maiuscole e minuscole. Alcuni eventi, tra cui Stop e UserPromptSubmit, ignorano i matcher. Per gli eventi dei tool, un campo if con una regola di permesso come "Bash(git *)" restringe ulteriormente un singolo handler.

05Input: cosa riceve il tuo hook

Ogni hook riceve su stdin un JSON con alcuni campi comuni, tra cui session_id, transcript_path, cwd e hook_event_name, più i campi specifici dell'evento. Un hook PreToolUse per una chiamata Bash, ad esempio, riceve anche tool_name e tool_input.command. Leggilo con jq o con qualsiasi parser JSON:

#!/bin/bash
input=$(cat)
cmd=$(jq -r '.tool_input.command // empty' <<<"$input")
echo "Claude wants to run: $cmd" >> ~/claude-commands.log
exit 0

06Output: exit code e JSON

Un hook può rispondere in due modi.

Exit code. 0 indica successo. 2 è un errore bloccante: sugli eventi che possono bloccare, l'azione si ferma e il tuo stderr diventa la motivazione. Qualsiasi altro codice, compreso il classico 1, è un errore non bloccante: l'azione prosegue e vedi un avviso di errore dell'hook. Se un hook deve far rispettare una regola, esci con 2, non con 1.

JSON su stdout. Per un controllo più preciso, esci con 0 e stampa un singolo oggetto JSON. Alcuni campi funzionano ovunque, come continue: false per fermare del tutto Claude. Altri dipendono dall'evento: Stop usa decision: "block" con un reason, mentre PreToolUse e PermissionRequest mettono la decisione dentro hookSpecificOutput. Non stampare nient'altro su stdout: basta una riga di troppo dal profilo della shell perché Claude Code non riesca a leggere il JSON.

07Tutti gli eventi hook

EventoQuando scattaPuò bloccare?
SessionStartUna sessione inizia o riprendeNo (aggiunge contesto)
SetupAvvio con --init-only, oppure --init / --maintenance con -pNo
InstructionsLoadedViene caricato un file CLAUDE.md o .claude/rules/*.mdNo
UserPromptSubmitInvii un prompt, prima che Claude lo vedaSì
UserPromptExpansionUn comando digitato si espande in un promptSì
PreToolUsePrima di ogni chiamata a un toolSì
PermissionRequestUna chiamata a un tool richiede una decisione sui permessiConsente o nega tramite JSON
PermissionDeniedLa modalità auto nega una chiamata a un toolNo
PostToolUseDopo che una chiamata a un tool va a buon fineNo (il tool è già stato eseguito)
PostToolUseFailureDopo che una chiamata a un tool fallisceNo
PostToolBatchDopo un gruppo di chiamate parallele ai tool, prima della chiamata successiva al modelloSì
NotificationClaude Code invia una notificaNo
MessageDisplayMentre viene mostrato il testo della risposta di ClaudeNo (può modificare ciò che viene mostrato)
SubagentStart / SubagentStopUn subagent si avvia o terminaSolo SubagentStop
TaskCreated / TaskCompletedUn task viene creato o segnato come completatoSì
StopClaude finisce di rispondereSì (fa continuare Claude)
StopFailureIl turno termina con un errore dell'APINo
TeammateIdleUn membro di un agent team sta per andare in idleSì
ConfigChangeUn file di impostazioni cambia durante una sessioneSì
CwdChangedLa directory di lavoro cambiaNo
DirectoryAddedViene aggiunta una directory con /add-dirNo
FileChangedUn file monitorato cambia su discoNo
WorktreeCreate / WorktreeRemoveUn worktree viene creato o rimossoSì
PreCompact / PostCompactPrima e dopo la compattazione del contestoSolo PreCompact
PreModelSwitch / PostModelSwitchPrima e dopo il cambio di modelloSolo PreModelSwitch
Elicitation / ElicitationResultUn server MCP ti chiede un input, e dopo che hai rispostoSì
SessionEndUna sessione terminaNo

Anthropic aggiunge eventi di tanto in tanto, quindi consulta il riferimento sugli hook per l'elenco aggiornato e i campi di input di ogni evento.

08Quali eventi contano per le notifiche

Quattro eventi coprono quasi tutto ciò di cui vuoi essere avvisato:

  • Stop per "Claude ha finito". Vedi la guida allo Stop hook.
  • Notification per "Claude ti sta aspettando", con tipi come permission_prompt e idle_prompt. Vedi la guida al Notification hook.
  • PermissionRequest per essere avvisato, o rispondere, nell'istante in cui serve un permesso. Vedi la guida a PermissionRequest.
  • PreToolUse sul tool AskUserQuestion, per vedere o rispondere alle domande a scelta multipla di Claude. Vedi come rispondere alle domande dal telefono.

Per una configurazione desktop pronta da incollare, parti da come ricevere una notifica quando Claude Code finisce.

09Dove si inserisce Claude Code Notifier

Claude Code Notifier è costruito interamente su questi hook. Il suo tool da riga di comando gratuito, ccn, funziona su Mac, Windows e Linux. L'installazione aggiunge sette voci di hook a ~/.claude/settings.json, ognuna delle quali esegue ccn hook, e crea un backup una tantum del file. ccn gira per pochi millisecondi a ogni evento e poi termina, quindi non resta nulla in esecuzione.

Da solo mostra notifiche desktop. Con l'app per iPhone o Android abbinata, gli stessi hook riportano indietro le tue risposte: consentire o negare un permesso, rispondere a una domanda o inviare l'istruzione successiva quando Claude si ferma. È indipendente e non è realizzato da Anthropic. Se ti serve solo un log o un passaggio di lint, qualche riga scritta da te è più semplice. Trovi i dettagli nella pagina di ccn.

10FAQ

Come provo un hook senza aspettare Claude?

Passa un JSON di esempio allo script tramite pipe e controlla l'exit code: echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh; echo $?. Poi esegui /hooks in Claude Code per verificare che sia registrato sull'evento giusto.

Perché il mio hook non parte?

Le cause tipiche sono JSON non valido in settings.json (virgole finali, commenti), un matcher che non corrisponde esattamente (distingue maiuscole e minuscole), uno script non eseguibile o una cartella che non hai ancora segnato come attendibile. Avvia Claude Code con claude --debug e leggi il log di debug per vedere cosa è stato eseguito. L'elenco completo è nella checklist di troubleshooting.

Come disattivo tutti gli hook per un po'?

Imposta "disableAllHooks": true in un file di impostazioni. Per saltarli in una sola esecuzione, avvia Claude Code con --settings '{"disableAllHooks": true}'. Non esiste un interruttore per un singolo hook: devi rimuoverne la voce. Nessuno dei due metodi disattiva gli hook impostati dalla tua organizzazione nelle impostazioni gestite.

Qual è il timeout predefinito degli hook?

Dieci minuti (600 secondi) per gli hook di tipo command, HTTP e tool MCP, 30 secondi per gli hook di tipo prompt e 60 per quelli di tipo agent. Alcuni eventi usano valori predefiniti più brevi, e puoi impostare timeout in secondi su qualsiasi handler.

Claude Code Notifier Ricevi una push sul telefono quando Claude Code finisce o ha bisogno di te, poi approva, rifiuta o rispondi direttamente da lì. Il tool da riga di comando ccn è gratuito su Mac, Windows e Linux.
Scarica per iOS Scarica per Android Installa ccn

Guide correlate

  • Come ricevere una notifica quando Claude Code finisceUsa uno Stop hook per "ha finito" e un Notification hook per "serve un tuo input". Configurazioni pronte da copiare per Mac, Windows e Linux, più gli avvisi sul telefono.
  • Il Notification hook di Claude Code: quando scatta e come usarloQuando scatta il Notification hook di Claude Code, cosa significano permission_prompt e idle_prompt, l'input che riceve e perché aspetta prima di scattare.
  • Lo Stop hook di Claude Code: esegui qualcosa quando Claude finisceCome funziona lo Stop hook di Claude Code, quale input riceve, come eseguire un comando quando Claude finisce e come far continuare Claude in sicurezza.
  • Rispondere alle richieste di permesso da un hook (PermissionRequest)Come funziona lo hook PermissionRequest di Claude Code, come consentire o negare da uno script e perché spesso le regole di permesso sono lo strumento migliore.
claude-code-notifier

Claude Code Notifier è un'applicazione indipendente di terze parti. Non è affiliata, approvata o sponsorizzata da Anthropic, PBC. "Claude" e "Claude Code" sono marchi di Anthropic, PBC.

app App iOS App Android ccn per macOS, Windows e Linux Tutte le guide
note legali Informativa sulla privacy Termini di servizio Altre lingue © 2026 touchtap. Tutti i diritti riservati. TouchTap Ltd è registrata in Inghilterra e Galles, numero di società 13942589.