Vai al contenuto principale
Ogni evento hook viene attivato in un punto specifico del ciclo di vita dell’agente. Usa il campo matcher (una regex confrontata con il tool_name dell’evento hook) per filtrare quali invocazioni di tool attivano il tuo hook.

PreToolUse

Si attiva prima dell’esecuzione di un tool. Usalo per bloccare, modificare o aggiungere contesto alle chiamate ai tool. Dati stdin: Esempio — Bloccare i comandi distruttivi:
Esempio — Richiedere conferma per le operazioni di scrittura al di fuori di src/: Usa uno script che esamina l’input del tool e restituisce una decisione:
Esempio — Riscrivere i comandi prima dell’esecuzione: Un hook può riscrivere in modo trasparente l’input del tool stampando hookSpecificOutput.updatedInput nello stdout (vedi Formato di output). Per esempio, uno script hook che inoltra i comandi della shell tramite un wrapper:
Gli argomenti riscritti vengono integrati nella chiamata al tool prima dell’esecuzione: l’agent esegue il comando aggiornato invece di quello originale.

PostToolUse

Si attiva dopo il completamento dell’esecuzione di un tool. Usalo per la registrazione, la convalida o per attivare azioni successive. Dati stdin: Esempio — Registra tutti i comandi shell:

PermissionRequest

Si attiva quando l’agente richiede una decisione sull’autorizzazione. Usalo per implementare una logica di approvazione personalizzata. Dati stdin: Esempio — approvazione automatica dei comandi git:

UserPromptSubmit

Si attiva quando l’utente invia un messaggio. Usalo per aggiungere contesto o attivare flussi di lavoro. Dati stdin: Esempio — Inserisci contesto in ogni prompt:
Il comando stampa additionalContext all’interno di un oggetto hookSpecificOutput su stdout, etichettato con il nome dell’evento. Questo testo viene inserito nel contesto dell’agente:

Stop

Si attiva quando l’agente decide di fermarsi (concludendo il proprio turno). Usalo per aggiungere istruzioni successive o per evitare che si fermi troppo presto. Dati stdin: Esempio — Ricorda all’agente di eseguire i test:
Fai attenzione agli hook di arresto che bloccano: possono far entrare l’agente in un loop se la condizione non viene soddisfatta prima o poi.

PostCompaction

Si attiva dopo il completamento corretto della compattazione del contesto. Usalo per registrare eventi nei log, attivare azioni successive o reinserire il contesto che potrebbe essere andato perso durante la compattazione. Dati stdin: Esempio — Registra gli eventi di compattazione nei log:

SessionStart

Si attiva quando inizia una nuova sessione. Usalo per l’inizializzazione, la registrazione o la configurazione dell’ambiente. Dati stdin: Esempio — Esegui lo script di configurazione:
Un comando SessionStart può anche iniettare contesto stampando additionalContext all’interno di un oggetto hookSpecificOutput su stdout:

SessionEnd

Si attiva quando termina una sessione. Usalo per la pulizia o per la registrazione finale. Dati stdin:

Corrispondenza di più eventi

Un singolo file di hook può definire hook per più eventi:

Uso del matcher

Il campo matcher è una regex applicata al tool_name dell’evento hook. È disponibile per gli eventi relativi ai tool: PreToolUse, PostToolUse e PermissionRequest. Per gli eventi non relativi ai tool (UserPromptSubmit, Stop, PostCompaction, SessionStart e SessionEnd), tool_name non è presente; usa "" oppure ometti il matcher per eseguire l’hook per ogni evento di quel tipo.
Il matcher non è un glob di autorizzazione. Pattern come mcp__github__* sono utili nelle autorizzazioni, ma i matcher degli hook sono regex. In un matcher di hook, usa mcp__github__.*.

Nomi di tool che puoi usare per la corrispondenza

I matcher degli hook vengono eseguiti sugli stessi nomi di tool esposti esternamente che gli script degli hook ricevono tramite stdin come tool_name. I nomi esatti dei tool disponibili possono variare in base alla modalità CLI, al modello e alle integrazioni abilitate. I nomi più comuni dei tool core pubblici sono:
  • read
  • edit
  • grep
  • glob
  • exec
I tool dei server MCP hanno il formato mcp__<server>__<tool>. Per esempio, un tool di un server MCP github denominato create_issue appare come mcp__github__create_issue. Per gli altri tool, fai corrispondere esattamente il tool_name mostrato nello stdin dell’hook. Per confermare l’insieme completo disponibile nella sessione corrente, aggiungi temporaneamente un hook PostToolUse con matcher: "" e registra il payload ricevuto su stdin.