421 421
422* **[Command hooks](#command-hook-fields)** (`type: "command"`): esegui un comando shell. Il tuo script riceve l'[input JSON](#hook-input-and-output) dell'evento su stdin e comunica i risultati indietro attraverso codici di uscita e stdout.422* **[Command hooks](#command-hook-fields)** (`type: "command"`): esegui un comando shell. Il tuo script riceve l'[input JSON](#hook-input-and-output) dell'evento su stdin e comunica i risultati indietro attraverso codici di uscita e stdout.
423* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): invia l'input JSON dell'evento come richiesta HTTP POST a un URL. L'endpoint comunica i risultati indietro attraverso il corpo della risposta utilizzando lo stesso [formato di output JSON](#json-output) degli hook di comando.423* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): invia l'input JSON dell'evento come richiesta HTTP POST a un URL. L'endpoint comunica i risultati indietro attraverso il corpo della risposta utilizzando lo stesso [formato di output JSON](#json-output) degli hook di comando.
424* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): chiama un tool su un server [MCP](/docs/it/mcp) già connesso. L'output di testo del tool viene trattato come stdout di hook di comando.424* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): chiama un tool su un server [MCP](/docs/it/mcp) configurato. L'output di testo del tool viene trattato come stdout di hook di comando.
425* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): invia un prompt a un modello Claude per la valutazione a turno singolo. Il modello restituisce la sua decisione come JSON. Vedi [Prompt-based hooks](#prompt-based-hooks).425* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): invia un prompt a un modello Claude per la valutazione a turno singolo. Il modello restituisce la sua decisione come JSON. Vedi [Prompt-based hooks](#prompt-based-hooks).
426* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): genera un subagent che può utilizzare tool come Read, Grep, e Glob per verificare le condizioni prima di restituire una decisione. Gli agent hook sono sperimentali e potrebbero cambiare. Vedi [Agent-based hooks](#agent-based-hooks).426* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): genera un subagent che può utilizzare tool come Read, Grep, e Glob per verificare le condizioni prima di restituire una decisione. Gli agent hook sono sperimentali e potrebbero cambiare. Vedi [Agent-based hooks](#agent-based-hooks).
427 427
474| `command` | sì | Comando shell da eseguire. Con `args`, l'eseguibile da generare direttamente. Vedi [Exec form e shell form](#exec-form-and-shell-form) |474| `command` | sì | Comando shell da eseguire. Con `args`, l'eseguibile da generare direttamente. Vedi [Exec form e shell form](#exec-form-and-shell-form) |
475| `args` | no | Lista di argomenti. Quando presente, `command` viene risolto come un eseguibile e generato direttamente con `args` come vettore di argomenti, senza shell coinvolto. Vedi [Exec form e shell form](#exec-form-and-shell-form) |475| `args` | no | Lista di argomenti. Quando presente, `command` viene risolto come un eseguibile e generato direttamente con `args` come vettore di argomenti, senza shell coinvolto. Vedi [Exec form e shell form](#exec-form-and-shell-form) |
476| `async` | no | Se `true`, viene eseguito in background senza bloccare. Vedi [Run hooks in the background](#run-hooks-in-the-background) |476| `async` | no | Se `true`, viene eseguito in background senza bloccare. Vedi [Run hooks in the background](#run-hooks-in-the-background) |
477| `asyncRewake` | no | Se `true`, viene eseguito in background e riattiva Claude al codice di uscita 2. Lo stderr dell'hook, o stdout se stderr è vuoto, viene mostrato a Claude come un promemoria di sistema in modo che possa reagire a un fallimento di background di lunga durata |477| `asyncRewake` | no | Se `true`, viene eseguito in background e riattiva Claude al codice di uscita 2. Lo stderr dell'hook, o stdout se stderr è vuoto, viene mostrato a Claude come un [promemoria di sistema](/docs/it/glossary#system-reminder) in modo che possa reagire a un fallimento di background di lunga durata |
478| `shell` | no | Shell da utilizzare per questo hook. Accetta `"bash"` o `"powershell"`. Impostazione predefinita `"bash"`, o `"powershell"` su Windows quando Git Bash non è installato. L'impostazione di `"powershell"` esegue il comando tramite PowerShell su Windows. Non richiede `CLAUDE_CODE_USE_POWERSHELL_TOOL` poiché gli hook generano PowerShell direttamente. Ignorato quando `args` è impostato |478| `shell` | no | Shell da utilizzare per questo hook. Accetta `"bash"` o `"powershell"`. Impostazione predefinita `"bash"`, o `"powershell"` su Windows quando Git Bash non è installato. L'impostazione di `"powershell"` esegue il comando tramite PowerShell su Windows. Non richiede `CLAUDE_CODE_USE_POWERSHELL_TOOL` poiché gli hook generano PowerShell direttamente. Ignorato quando `args` è impostato |
479 479
480<a id="exec-form-and-shell-form" />480<a id="exec-form-and-shell-form" />
571 571
572| Campo | Obbligatorio | Descrizione |572| Campo | Obbligatorio | Descrizione |
573| :- | :- | :- |573| :- | :- | :- |
574| `server` | sì | Nome di un server MCP configurato. Per un [server fornito da plugin](/docs/it/mcp#plugin-provided-mcp-servers), questo è il nome con scope `plugin:<plugin-name>:<server-name>`, come `plugin:my-plugin:db`, non la chiave del server nudo. Il server deve essere già connesso; l'hook non attiva mai un flusso OAuth o di connessione |574| `server` | sì | Nome di un server MCP configurato. Per un [server fornito da plugin](/docs/it/mcp#plugin-provided-mcp-servers), questo è il nome con scope `plugin:<plugin-name>:<server-name>`, come `plugin:my-plugin:db`, non la chiave del server nudo |
575| `tool` | sì | Nome del tool da chiamare su quel server |575| `tool` | sì | Nome del tool da chiamare su quel server |
576| `input` | no | Argomenti passati al tool. I valori stringa supportano la sostituzione `${path}` dall'[input JSON](#hook-input-and-output) dell'hook, come `"${tool_input.file_path}"` |576| `input` | no | Argomenti passati al tool. I valori stringa supportano la sostituzione `${path}` dall'[input JSON](#hook-input-and-output) dell'hook, come `"${tool_input.file_path}"` |
577 577
578Claude Code legge il contenuto di testo del tool allo stesso modo in cui legge stdout di hook di comando, seguendo la [regola di analisi sotto il codice di uscita 0](#exit-code-0). Se il server denominato non è connesso, o il tool restituisce `isError: true`, l'hook produce un errore non bloccante e l'esecuzione continua.
579
580Questo esempio chiama il tool `security_scan` sul server MCP `my_server` dopo ogni `Write` o `Edit`, passando il percorso del file modificato:578Questo esempio chiama il tool `security_scan` sul server MCP `my_server` dopo ogni `Write` o `Edit`, passando il percorso del file modificato:
581 579
582```json theme={null}580```json theme={null}
599}597}
600```598```
601 599
602Un hook `mcp_tool` può essere eseguito solo dopo che Claude Code ha reso i server MCP della sessione disponibili agli hook. `SessionStart` e `Setup` possono attivarsi prima di quel punto:600<h5 id="how-the-tool’s-result-is-read">
601 Come viene letto il risultato del tool
602</h5>
603 603
604* **Al lancio**: `SessionStart` si attiva prima che i server siano disponibili, incluso quando avvii con `--continue` o `--resume`. Claude Code salta gli hook `mcp_tool` dell'evento senza chiamare i loro tool, e il [debug log](#debug-hooks) registra `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)`.604Claude Code legge il contenuto di testo del tool allo stesso modo in cui legge stdout di hook di comando, seguendo la [regola di analisi sotto il codice di uscita 0](#exit-code-0). Se il tool restituisce `isError: true`, l'hook produce un errore non bloccante e l'esecuzione continua.
605* **Più tardi in una sessione in esecuzione**: dopo `/clear` o una compattazione, `SessionStart` si attiva di nuovo con i server già disponibili, e i suoi hook `mcp_tool` vengono eseguiti.
606* **Su `Setup`**: `Setup` si attiva sempre prima che i server siano disponibili, quindi Claude Code salta i suoi hook `mcp_tool` ogni volta e registra lo stesso messaggio che nomina `Setup`.
607 605
608Ad esempio, questa configurazione chiama il tool `load_context` sul server MCP `my_server` da un hook `SessionStart` senza matcher, quindi si applica a ogni fonte `SessionStart`:606<h5 id="when-the-server-is-still-connecting">
607 Quando il server è ancora in connessione
608</h5>
609 609
610```json theme={null}610Su eventi dove un hook può bloccare o cambiare il risultato, come `PreToolUse` o `Stop`, Claude Code attende un server in connessione prima di chiamare il tool, per al massimo [`MCP_TIMEOUT`](/docs/it/env-vars) e entro il [`timeout`](#common-fields) dell'hook stesso. Su eventi osservazionali, come `Notification` o `SessionEnd`, non attende.
611{611
612 "hooks": {612Un server che mostra lo stato [`cached`](/docs/it/mcp#server-status-detail) si connette quando l'hook chiama il suo tool. Se il server non è connesso a quel punto, l'hook produce un errore non bloccante e l'esecuzione continua. L'hook non avvia mai un flusso OAuth, quindi [autentica il server da `/mcp`](/docs/it/mcp#authenticate-with-remote-mcp-servers) prima.
613 "SessionStart": [613
614 {614<h5 id="events-that-fire-before-mcp-servers-are-available">
615 "hooks": [615 Eventi che si attivano prima che i server MCP siano disponibili
616 {616</h5>
617 "type": "mcp_tool",
618 "server": "my_server",
619 "tool": "load_context"
620 }
621 ]
622 }
623 ]
624 }
625}
626```
627 617
628Quando esegui `claude`, Claude Code salta questo hook, non chiama mai `load_context`, e scrive il messaggio `no MCP client context` nel debug log. Esegui `/clear` in quella stessa sessione e l'hook viene eseguito e chiama `load_context`. Un hook `type: "command"` su `SessionStart` viene eseguito al lancio, quindi usane uno per qualsiasi cosa la sessione abbia bisogno dal suo primo turno.618`SessionStart` al lancio, incluso con `--continue` o `--resume`, e ogni evento `Setup` si attivano prima che i server MCP della sessione siano disponibili agli hook. Claude Code salta i loro hook `mcp_tool` senza chiamare il tool, e il [debug log](#debug-hooks) registra `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)`, o lo stesso messaggio che nomina `Setup`. Quando `SessionStart` si attiva di nuovo più tardi nella sessione, dopo `/clear` o una compattazione, i suoi hook `mcp_tool` vengono eseguiti. Per qualsiasi cosa la sessione abbia bisogno al lancio, utilizza un hook `type: "command"` su `SessionStart` invece.
629 619
630<h4 id="prompt-and-agent-hook-fields">620<h4 id="prompt-and-agent-hook-fields">
631 Campi prompt e agent hook621 Campi prompt e agent hook
636| Campo | Obbligatorio | Descrizione |626| Campo | Obbligatorio | Descrizione |
637| :- | :- | :- |627| :- | :- | :- |
638| `prompt` | sì | Testo del prompt da inviare al modello. Utilizza `$ARGUMENTS` come placeholder per l'input JSON dell'hook. Sfuggi con una barra rovesciata per includere testo letterale: `\$1.00` viene renderizzato come `$1.00` |628| `prompt` | sì | Testo del prompt da inviare al modello. Utilizza `$ARGUMENTS` come placeholder per l'input JSON dell'hook. Sfuggi con una barra rovesciata per includere testo letterale: `\$1.00` viene renderizzato come `$1.00` |
639| `model` | no | Modello da utilizzare per la valutazione. Impostazione predefinita a un modello veloce |629| `model` | no | Modello da utilizzare per la valutazione. Impostazione predefinita al modello che Claude Code utilizza per la [funzionalità di background](/docs/it/costs#background-token-usage) |
640 630
641<h3 id="reference-scripts-by-path">631<h3 id="reference-scripts-by-path">
642 Riferisci gli script per percorso632 Riferisci gli script per percorso
791| `prompt_id` | UUID che identifica il prompt dell'utente attualmente in elaborazione. Corrisponde all'attributo [`prompt.id` sugli eventi OpenTelemetry](/docs/it/monitoring-usage#event-correlation-attributes), quindi è possibile correlare l'output del hook con la telemetria per un singolo prompt. Assente fino al primo input dell'utente. Richiede Claude Code v2.1.196 o successivo |781| `prompt_id` | UUID che identifica il prompt dell'utente attualmente in elaborazione. Corrisponde all'attributo [`prompt.id` sugli eventi OpenTelemetry](/docs/it/monitoring-usage#event-correlation-attributes), quindi è possibile correlare l'output del hook con la telemetria per un singolo prompt. Assente fino al primo input dell'utente. Richiede Claude Code v2.1.196 o successivo |
792| `transcript_path` | Percorso al JSON della conversazione. Il file della trascrizione viene scritto in modo asincrono e potrebbe rimanere indietro rispetto alla conversazione in memoria, quindi potrebbe non includere ancora i messaggi più recenti del turno corrente quando un hook si attiva. Gli hook che necessitano del testo dell'assistente finale del turno corrente dovrebbero utilizzare `last_assistant_message` su [Stop](#stop) e [SubagentStop](#subagentstop) invece di leggere la trascrizione |782| `transcript_path` | Percorso al JSON della conversazione. Il file della trascrizione viene scritto in modo asincrono e potrebbe rimanere indietro rispetto alla conversazione in memoria, quindi potrebbe non includere ancora i messaggi più recenti del turno corrente quando un hook si attiva. Gli hook che necessitano del testo dell'assistente finale del turno corrente dovrebbero utilizzare `last_assistant_message` su [Stop](#stop) e [SubagentStop](#subagentstop) invece di leggere la trascrizione |
793| `cwd` | Directory di lavoro corrente quando l'hook viene invocato |783| `cwd` | Directory di lavoro corrente quando l'hook viene invocato |
794| `scratchpad_dir` | Percorso alla directory scratchpad della sessione, dove Claude mantiene i file di lavoro temporanei. Assente quando la sessione non ha uno scratchpad o la directory temporanea non è disponibile. Richiede Claude Code v2.1.257 o successivo |784| `scratchpad_dir` | Percorso alla [directory scratchpad della sessione](/docs/it/claude-directory#session-scratchpad-directory), dove Claude mantiene i file di lavoro temporanei. Assente quando la sessione non ha uno scratchpad o la directory temporanea non è disponibile. Richiede Claude Code v2.1.257 o successivo |
795| `permission_mode` | [Modalità di autorizzazione](/docs/it/permissions#permission-modes) corrente: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` o `"bypassPermissions"`. La modalità etichettata **Manual** arriva come `"default"`, mai come `"manual"`, quindi gli script che corrispondono a `"default"` continuano a funzionare. Non tutti gli eventi ricevono questo campo. Controllare l'esempio JSON in ogni sezione [hook event](#hook-events) |785| `permission_mode` | [Modalità di autorizzazione](/docs/it/permissions#permission-modes) corrente: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` o `"bypassPermissions"`. La modalità etichettata **Manual** arriva come `"default"`, mai come `"manual"`, quindi gli script che corrispondono a `"default"` continuano a funzionare. Non tutti gli eventi ricevono questo campo. Controllare l'esempio JSON in ogni sezione [hook event](#hook-events) |
796| `effort` | Oggetto con un campo `level` che contiene il [livello di effort](/docs/it/model-config#adjust-effort-level) in vigore quando l'hook viene eseguito: `"low"`, `"medium"`, `"high"`, `"xhigh"` o `"max"`. Se si imposta un livello che il modello attivo non supporta, `level` segnala il livello che Claude Code ha effettivamente eseguito; [Adjust effort level](/docs/it/model-config#adjust-effort-level) dice come lo sceglie. Ultracode non è un livello distinto e viene segnalato come `"xhigh"`. L'oggetto corrisponde al campo `effort` della [riga di stato](/docs/it/statusline#available-data). Presente per gli eventi che si attivano all'interno di un contesto di utilizzo dello strumento, come `PreToolUse`, `PostToolUse`, `Stop` e `SubagentStop`, quando il modello corrente supporta il parametro effort. Il livello è disponibile anche ai comandi hook e allo strumento Bash come variabile di ambiente `$CLAUDE_EFFORT`. |786| `effort` | Oggetto con un campo `level` che contiene il [livello di effort](/docs/it/model-config#adjust-effort-level) in vigore quando l'hook viene eseguito: `"low"`, `"medium"`, `"high"`, `"xhigh"` o `"max"`. Se si imposta un livello che il modello attivo non supporta, `level` segnala il livello che Claude Code ha effettivamente eseguito; [Adjust effort level](/docs/it/model-config#adjust-effort-level) dice come lo sceglie. L'oggetto corrisponde al campo `effort` della [riga di stato](/docs/it/statusline#available-data). Presente per gli eventi che si attivano all'interno di un contesto di utilizzo dello strumento, come `PreToolUse`, `PostToolUse`, `Stop` e `SubagentStop`, quando il modello corrente supporta il parametro effort. Il livello è disponibile anche ai comandi hook e allo strumento Bash come variabile di ambiente `$CLAUDE_EFFORT`. |
797| `hook_event_name` | Nome dell'evento che si è attivato |787| `hook_event_name` | Nome dell'evento che si è attivato |
798 788
799Quando si esegue con `--agent` o all'interno di un subagent, vengono inclusi due campi aggiuntivi:789Quando si esegue con `--agent` o all'interno di un subagent, vengono inclusi due campi aggiuntivi:
1057 Aggiungere contesto per Claude1047 Aggiungere contesto per Claude
1058</h4>1048</h4>
1059 1049
1060Il campo `additionalContext` passa una stringa dal tuo hook nel contesto della finestra di Claude. Claude Code avvolge la stringa in un promemoria di sistema e la inserisce nella conversazione nel punto in cui l'hook si è attivato. Claude legge il promemoria nella prossima richiesta del modello, ma non appare come messaggio di chat nell'interfaccia.1050Il campo `additionalContext` passa una stringa dal tuo hook nel contesto della finestra di Claude. Claude Code avvolge la stringa in un [promemoria di sistema](/docs/it/glossary#system-reminder) e la inserisce nella conversazione nel punto in cui l'hook si è attivato. Claude legge il promemoria nella prossima richiesta del modello, ma non appare come messaggio di chat nell'interfaccia.
1061 1051
1062Restituire `additionalContext` all'interno di `hookSpecificOutput` insieme al nome dell'evento:1052Restituire `additionalContext` all'interno di `hookSpecificOutput` insieme al nome dell'evento:
1063 1053
1176Per esempi estesi inclusa la convalida dei comandi Bash, il filtraggio dei prompt e gli script di approvazione automatica, consultare [What you can automate](/docs/it/hooks-guide#what-you-can-automate) nella guida e l'[implementazione di riferimento del validatore di comandi Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).1166Per esempi estesi inclusa la convalida dei comandi Bash, il filtraggio dei prompt e gli script di approvazione automatica, consultare [What you can automate](/docs/it/hooks-guide#what-you-can-automate) nella guida e l'[implementazione di riferimento del validatore di comandi Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).
1177 1167
1178<h2 id="hook-events">1168<h2 id="hook-events">
1179 Hook events1169 Eventi hook
1180</h2>1170</h2>
1181 1171
1182Ogni evento corrisponde a un punto nel ciclo di vita di Claude Code dove gli hook possono essere eseguiti. Le sezioni seguenti sono ordinate per corrispondere al ciclo di vita: dalla configurazione della sessione attraverso il loop agentico fino alla fine della sessione. Ogni sezione descrive quando l'evento si attiva, quali matcher supporta, quale input JSON riceve e come controllare il comportamento attraverso l'output.1172Ogni evento corrisponde a un punto nel ciclo di vita di Claude Code in cui gli hook possono essere eseguiti. Le sezioni seguenti sono ordinate per corrispondere al ciclo di vita: dalla configurazione della sessione attraverso il loop agentivo fino alla fine della sessione. Ogni sezione descrive quando l'evento si attiva, quali matcher supporta, l'input JSON che riceve e come controllare il comportamento attraverso l'output.
1183 1173
1184<h3 id="sessionstart">1174<h3 id="sessionstart">
1185 SessionStart1175 SessionStart
1187 1177
1188Si esegue quando Claude Code avvia una nuova sessione o riprende una sessione esistente. Utile per caricare il contesto di sviluppo come problemi esistenti o modifiche recenti al tuo codebase, o per configurare variabili di ambiente. Per il contesto statico che non richiede uno script, usa [CLAUDE.md](/docs/it/memory) invece.1178Si esegue quando Claude Code avvia una nuova sessione o riprende una sessione esistente. Utile per caricare il contesto di sviluppo come problemi esistenti o modifiche recenti al tuo codebase, o per configurare variabili di ambiente. Per il contesto statico che non richiede uno script, usa [CLAUDE.md](/docs/it/memory) invece.
1189 1179
1190SessionStart si esegue su ogni sessione, quindi mantieni questi hook veloci. Solo gli hook `type: "command"` e `type: "mcp_tool"` sono supportati. Vedi [MCP tool hook fields](#mcp-tool-hook-fields) per quando gli hook `mcp_tool` si eseguono.1180SessionStart si esegue su ogni sessione, quindi mantieni questi hook veloci. Solo gli hook `type: "command"` e `type: "mcp_tool"` sono supportati. Vedi [Campi hook MCP tool](#mcp-tool-hook-fields) per quando gli hook `mcp_tool` si eseguono.
1191 1181
1192Il valore del matcher corrisponde a come la sessione è stata avviata:1182Il valore del matcher corrisponde a come la sessione è stata avviata:
1193 1183
1201 1191
1202Prima della v2.1.214, le sessioni create da fork segnalano la sorgente `"resume"`.1192Prima della v2.1.214, le sessioni create da fork segnalano la sorgente `"resume"`.
1203 1193
1204Quando esegui un'esecuzione interattiva, riprendi una conversazione al lancio con `--continue` o `--resume`, o esegui `/clear`, gli hook SessionStart si eseguono in background. Puoi digitare subito, e una conversazione che hai ripreso appare senza aspettare gli hook. La prima risposta di Claude attende comunque che gli hook finiscano, quindi il loro contesto raggiunge Claude.1194Quando avvii una sessione interattiva, riprendi una conversazione al lancio con `--continue` o `--resume`, o esegui `/clear`, gli hook SessionStart si eseguono in background. Puoi digitare subito, e una conversazione che hai ripreso appare senza aspettare gli hook. La prima risposta di Claude attende comunque che gli hook finiscano, quindi il loro contesto raggiunge Claude.
1205 1195
1206Quando passi a conversazioni con `/resume` all'interno di una sessione, l'attesa del cambio per gli hook finiscano. Se esegui `/clear` o passi a un'altra conversazione mentre gli hook di background sono ancora in esecuzione, nulla di ciò che restituiscono si applica alla sessione.1196Quando cambi conversazione con `/resume` all'interno di una sessione, il cambio attende che gli hook finiscano. Se esegui `/clear` o cambi a un'altra conversazione mentre gli hook di background sono ancora in esecuzione, nulla di ciò che restituiscono si applica alla sessione.
1207 1197
1208Lo stesso attesa si applica al lancio, inclusa una sessione ripresa: un prompt che invii mentre gli hook SessionStart sono ancora in esecuzione non raggiunge Claude finché non finiscono.1198Lo stesso attesa si applica al lancio, inclusa una sessione ripresa: un prompt che invii mentre gli hook SessionStart sono ancora in esecuzione non raggiunge Claude fino a quando non finiscono.
1209 1199
1210Durante l'attesa, premi `Esc` per riprendere il prompt nell'input senza inviarlo. Gli hook continuano a essere eseguiti.1200Durante uno qualsiasi di questi attese, premi `Esc` per riprendere il prompt nell'input senza inviarlo. Gli hook continuano a eseguirsi.
1211 1201
1212<h4 id="sessionstart-input">1202<h4 id="sessionstart-input">
1213 SessionStart input1203 Input SessionStart
1214</h4>1204</h4>
1215 1205
1216Oltre ai [common input fields](#common-input-fields), gli hook SessionStart ricevono `source` e opzionalmente `model`, `agent_type`, e `session_title`:1206Oltre ai [campi di input comuni](#common-input-fields), gli hook SessionStart ricevono `source` e opzionalmente `model`, `agent_type`, e `session_title`:
1217 1207
1218| Field | Description |1208| Campo | Descrizione |
1219| :- | :- |1209| :- | :- |
1220| `source` | Come la sessione è stata avviata: `"startup"` per nuove sessioni, `"resume"` per sessioni riprese, `"clear"` dopo `/clear`, `"compact"` dopo la compattazione, o `"fork"` per una nuova sessione creata da una sessione esistente |1210| `source` | Come la sessione è stata avviata: `"startup"` per nuove sessioni, `"resume"` per sessioni riprese, `"clear"` dopo `/clear`, `"compact"` dopo compattazione, o `"fork"` per una nuova sessione creata da una sessione esistente |
1221| `model` | L'identificatore del modello attivo. Può essere omesso, ad esempio dopo `/clear` o quando una sessione viene ripristinata tramite il recupero della conversazione, quindi controlla il campo prima di leggerlo |1211| `model` | L'identificatore del modello attivo. Può essere omesso, ad esempio dopo `/clear` o quando una sessione viene ripristinata tramite il recupero della conversazione, quindi controlla il campo prima di leggerlo |
1222| `agent_type` | Il nome dell'agente, presente quando avvii Claude Code con `claude --agent <name>` |1212| `agent_type` | Il nome dell'agente, presente quando avvii Claude Code con `claude --agent <name>` |
1223| `session_title` | Il titolo della sessione corrente se già impostato, ad esempio tramite `--name` o `/rename`. Un hook che emette `sessionTitle` può controllare `session_title` prima per evitare di sovrascrivere un titolo impostato esplicitamente dall'utente |1213| `session_title` | Il titolo della sessione corrente se già impostato, ad esempio tramite `--name` o `/rename`. Un hook che emette `sessionTitle` può controllare `session_title` prima per evitare di sovrascrivere un titolo che l'utente ha impostato esplicitamente |
1224 1214
1225Quando `source` è `"resume"` o `"fork"` e la trascrizione contiene almeno una risposta da Claude, gli hook SessionStart ricevono anche i quattro campi seguenti. Il tuo hook può usarli per segnalare quale costo ha riprendere una conversazione obsoleta prima della prima richiesta, ad esempio in un [`systemMessage`](#json-output). Questi campi richiedono Claude Code v2.1.251 o successivo.1215Quando `source` è `"resume"` o `"fork"` e la trascrizione contiene almeno una risposta da Claude, gli hook SessionStart ricevono anche i quattro campi seguenti. Il tuo hook può usarli per segnalare quale costo ha riprendere una conversazione stantia prima della prima richiesta, ad esempio in un [`systemMessage`](#json-output). Questi campi richiedono Claude Code v2.1.251 o successivo.
1226 1216
1227| Field | Description |1217| Campo | Descrizione |
1228| :- | :- |1218| :- | :- |
1229| `seconds_since_last_response` | Secondi di tempo reale dal momento dell'ultima risposta nella trascrizione ripresa |1219| `seconds_since_last_response` | Secondi di tempo reale trascorsi dall'ultima risposta nella trascrizione ripresa |
1230| `context_tokens` | Token che la prima richiesta della sessione ripresa invia di nuovo come suo prompt |1220| `context_tokens` | Token che la prima richiesta della sessione ripresa reinvia come suo prompt |
1231| `prompt_cache_likely_expired` | `true` quando l'ultima risposta è più vecchia della [prompt cache lifetime](/docs/it/prompt-caching#cache-lifetime) della sessione o una compattazione successiva ha sostituito la conversazione memorizzata nella cache |1221| `prompt_cache_likely_expired` | `true` quando l'ultima risposta è più vecchia della [durata della cache del prompt](/docs/it/prompt-caching#cache-lifetime) della sessione o una compattazione successiva ha sostituito la conversazione in cache |
1232| `estimated_cache_write_usd` | Costo stimato in dollari USA della scrittura di `context_tokens` nella prompt cache sul modello della sessione, escludendo la risposta |1222| `estimated_cache_write_usd` | Costo stimato in dollari USA della scrittura di `context_tokens` nella cache del prompt sul modello della sessione, escludendo la risposta |
1233 1223
1234Questo esempio mostra l'input per una sessione ripresa 90 minuti dopo la sua ultima risposta:1224Questo esempio mostra l'input per una sessione ripresa 90 minuti dopo la sua ultima risposta:
1235 1225
1249```1239```
1250 1240
1251<h4 id="sessionstart-decision-control">1241<h4 id="sessionstart-decision-control">
1252 SessionStart decision control1242 Controllo decisionale SessionStart
1253</h4>1243</h4>
1254 1244
1255Claude Code aggiunge stdout che [tratta come testo semplice](#exit-code-0) al contesto di Claude. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, puoi restituire questi campi specifici dell'evento:1245Claude Code aggiunge stdout che [tratta come testo semplice](#exit-code-0) al contesto di Claude. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, puoi restituire questi campi specifici dell'evento:
1256 1246
1257| Field | Description |1247| Campo | Descrizione |
1258| :- | :- |1248| :- | :- |
1259| `additionalContext` | Stringa aggiunta al contesto di Claude all'inizio della conversazione, prima del primo prompt. Vedi [Add context for Claude](#add-context-for-claude) per come il testo viene consegnato e cosa metterci |1249| `additionalContext` | Stringa aggiunta al contesto di Claude all'inizio della conversazione, prima del primo prompt. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) per come il testo viene consegnato e cosa metterci |
1260| `initialUserMessage` | Stringa usata come primo messaggio utente della sessione. Si applica in [non-interactive mode](/docs/it/headless) con il flag `-p`, dove diventa il primo turno anche se non viene fornito alcun prompt. Se viene fornito un prompt, segue come turno successivo. A differenza di `additionalContext`, che si allega a un turno esistente, questo crea il turno |1250| `initialUserMessage` | Stringa usata come primo messaggio utente della sessione. Si applica in [modalità non interattiva](/docs/it/headless) con il flag `-p`, dove diventa il primo turno anche se non viene fornito alcun prompt. Se viene fornito un prompt, segue come turno successivo. A differenza di `additionalContext`, che si allega a un turno esistente, questo crea il turno |
1261| `sessionTitle` | Imposta il titolo della sessione, con lo stesso effetto di `/rename`. Usa per nominare le sessioni automaticamente dalla cartella di lancio, dal ramo git, o dal nome del worktree. Si applica quando `source` è `"startup"`, `"resume"`, o `"fork"`; ignorato su `"clear"` e `"compact"` |1251| `sessionTitle` | Imposta il titolo della sessione, con lo stesso effetto di `/rename`. Usa per nominare le sessioni automaticamente dalla cartella di lancio, dal ramo git, o dal nome del worktree. Si applica quando `source` è `"startup"`, `"resume"`, o `"fork"`; ignorato su `"clear"` e `"compact"` |
1262| `watchPaths` | Array di percorsi assoluti da osservare per gli eventi [FileChanged](#filechanged) durante questa sessione |1252| `watchPaths` | Array di percorsi assoluti da osservare per gli eventi [FileChanged](#filechanged) durante questa sessione |
1263| `reloadSkills` | Booleano. Quando `true`, Claude Code esegue nuovamente la scansione delle directory [skill](/docs/it/skills) e command dopo che gli hook SessionStart completano, quindi le skill che l'hook ha installato sono disponibili nella stessa sessione, a partire dal primo prompt |1253| `reloadSkills` | Booleano. Quando `true`, Claude Code ripete la scansione delle directory [skill](/docs/it/skills) e command dopo che gli hook SessionStart completano, quindi le skill che l'hook ha installato sono disponibili nella stessa sessione, a partire dal primo prompt |
1264 1254
1265```json theme={null}1255```json theme={null}
1266{1256{
1272}1262}
1273```1263```
1274 1264
1275Poiché lo stdout semplice raggiunge già Claude per questo evento, un hook che carica solo il contesto può stampare su stdout direttamente senza costruire JSON. Usa il modulo JSON quando hai bisogno di combinare il contesto con altri campi come `sessionTitle`.1265Poiché lo stdout semplice raggiunge già Claude per questo evento, un hook che carica solo contesto può stampare su stdout direttamente senza costruire JSON. Usa il modulo JSON quando hai bisogno di combinare il contesto con altri campi come `sessionTitle`.
1276 1266
1277Usa `reloadSkills` quando un hook SessionStart installa o aggiorna skill. La scoperta delle skill normalmente si esegue prima che gli hook SessionStart finiscano, quindi i file che l'hook scrive in `~/.claude/skills/` o `.claude/skills/` altrimenti apparirebbero solo nella sessione successiva. Questo esempio sincronizza un repository di skill condiviso e richiede la nuova scansione:1267Usa `reloadSkills` quando un hook SessionStart installa o aggiorna skill. La scoperta delle skill normalmente si esegue prima che gli hook SessionStart finiscano, quindi i file che l'hook scrive in `~/.claude/skills/` o `.claude/skills/` altrimenti apparirebbero solo nella sessione successiva. Questo esempio sincronizza un repository di skill condiviso e richiede la ripetizione della scansione:
1278 1268
1279```bash theme={null}1269```bash theme={null}
1280#!/bin/bash1270#!/bin/bash
1288L'URL del repository è un segnaposto; sostituiscilo con il tuo repository di skill. Con il segnaposto, il clone fallisce e stampa un messaggio `fatal:` su stderr. Stderr da un hook SessionStart che esce con 0 è solo informativo, quindi la richiesta `reloadSkills` si applica comunque.1278L'URL del repository è un segnaposto; sostituiscilo con il tuo repository di skill. Con il segnaposto, il clone fallisce e stampa un messaggio `fatal:` su stderr. Stderr da un hook SessionStart che esce con 0 è solo informativo, quindi la richiesta `reloadSkills` si applica comunque.
1289 1279
1290<h4 id="persist-environment-variables">1280<h4 id="persist-environment-variables">
1291 Persist environment variables1281 Persistere variabili di ambiente
1292</h4>1282</h4>
1293 1283
1294Gli hook SessionStart hanno accesso alla variabile di ambiente `CLAUDE_ENV_FILE`, che fornisce un percorso di file dove puoi persistere le variabili di ambiente per i comandi Bash successivi.1284Gli hook SessionStart hanno accesso alla variabile di ambiente `CLAUDE_ENV_FILE`, che fornisce un percorso di file dove puoi persistere variabili di ambiente per i comandi Bash successivi.
1295 1285
1296Per impostare singole variabili di ambiente, scrivi istruzioni `export` in `CLAUDE_ENV_FILE`. Usa append (`>>`) per preservare le variabili impostate da altri hook:1286Per impostare singole variabili di ambiente, scrivi istruzioni `export` su `CLAUDE_ENV_FILE`. Usa append (`>>`) per preservare le variabili impostate da altri hook:
1297 1287
1298```bash theme={null}1288```bash theme={null}
1299#!/bin/bash1289#!/bin/bash
1327```1317```
1328 1318
1329<Note>1319<Note>
1330 `CLAUDE_ENV_FILE` è disponibile per gli hook SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), e [FileChanged](#filechanged). Gli altri tipi di hook non hanno accesso a questa variabile.1320 `CLAUDE_ENV_FILE` è disponibile per gli hook SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), e [FileChanged](#filechanged). Altri tipi di hook non hanno accesso a questa variabile.
1331</Note>1321</Note>
1332 1322
1333<h3 id="setup">1323<h3 id="setup">
1334 Setup1324 Setup
1335</h3>1325</h3>
1336 1326
1337Si attiva solo quando avvii Claude Code con `--init-only`, o con `--init` o `--maintenance` in [non-interactive mode](/docs/it/headless) con il flag `-p`. Non si attiva all'avvio normale. Usalo per l'installazione di dipendenze una tantum o la pulizia programmata che attivi esplicitamente da CI o script, separato dall'avvio della sessione normale. Per l'inizializzazione per sessione, usa [SessionStart](#sessionstart) invece.1327Si attiva solo quando avvii Claude Code con `--init-only`, o con `--init` o `--maintenance` in [modalità non interattiva](/docs/it/headless) con il flag `-p`. Non si attiva all'avvio normale. Usalo per l'installazione di dipendenze una tantum o la pulizia programmata che attivi esplicitamente da CI o script, separato dall'avvio della sessione normale. Per l'inizializzazione per sessione, usa [SessionStart](#sessionstart) invece.
1338 1328
1339Il valore del matcher corrisponde al flag CLI che ha attivato l'hook:1329Il valore del matcher corrisponde al flag CLI che ha attivato l'hook:
1340 1330
1345 1335
1346Quando esegui `claude --init-only`, Claude Code esegue gli hook Setup e gli hook `SessionStart` con il matcher `startup`, quindi esce senza avviare una conversazione.1336Quando esegui `claude --init-only`, Claude Code esegue gli hook Setup e gli hook `SessionStart` con il matcher `startup`, quindi esce senza avviare una conversazione.
1347 1337
1348Quando avvii o continui una conversazione con `-p`, devi anche fornire un prompt, come argomento o tramite pipe su stdin. Puoi saltare il prompt quando un hook `SessionStart` fornisce [`initialUserMessage`](#sessionstart-decision-control) o quando riprendi una sessione con una [deferred tool call](#defer-a-tool-call-for-later).1338Quando avvii o continui una conversazione con `-p`, devi anche fornire un prompt, come argomento o tramite pipe su stdin. Puoi saltare il prompt quando un hook `SessionStart` fornisce [`initialUserMessage`](#sessionstart-decision-control) o quando riprendi una sessione con una [chiamata di tool differita](#defer-a-tool-call-for-later).
1349 1339
1350Al successo, `--init-only` non stampa nulla nel terminale. Per confermare che gli hook si sono eseguiti, inizia con `claude --debug-file <path> --init-only`, sostituendo `<path>` con una posizione di file di log, e controlla il log per le voci degli hook Setup e SessionStart.1340Al successo, `--init-only` non stampa nulla al terminale. Per confermare che gli hook si sono eseguiti, avvia con `claude --debug-file <path> --init-only`, sostituendo `<path>` con una posizione di file di log, e controlla il log per le voci degli hook Setup e SessionStart.
1351 1341
1352Poiché Setup non si attiva ad ogni lancio, un plugin che ha bisogno di una dipendenza installata non può fare affidamento solo su Setup. Il modello pratico è controllare la dipendenza al primo utilizzo e installare se assente, ad esempio un hook o una skill che testa per `${CLAUDE_PLUGIN_DATA}/node_modules` ed esegue `npm install` se assente. Vedi la [persistent data directory](/docs/it/plugins/components#path-variables-and-persistent-data) per dove archiviare le dipendenze installate. Se distribuisci il tuo plugin tramite un marketplace, potresti non aver bisogno di questo modello: Claude Code [installa automaticamente le dipendenze dei pacchetti Node.js idonei](/docs/it/plugins/loading#node-js-package-dependencies) quando memorizza il plugin nella cache.1342Poiché Setup non si attiva ad ogni lancio, un plugin che ha bisogno di una dipendenza installata non può fare affidamento solo su Setup. Il modello pratico è controllare la dipendenza al primo utilizzo e installare se assente, ad esempio un hook o una skill che testa per `${CLAUDE_PLUGIN_DATA}/node_modules` ed esegue `npm install` se assente. Vedi la [directory di dati persistenti](/docs/it/plugins/components#path-variables-and-persistent-data) per dove archiviare le dipendenze installate. Se distribuisci il tuo plugin tramite un marketplace, potresti non aver bisogno di questo modello: Claude Code [installa automaticamente le dipendenze del pacchetto Node.js idonee](/docs/it/plugins/loading#node-js-package-dependencies) quando memorizza il plugin nella cache.
1353 1343
1354<h4 id="setup-input">1344<h4 id="setup-input">
1355 Setup input1345 Input Setup
1356</h4>1346</h4>
1357 1347
1358Oltre ai [common input fields](#common-input-fields), gli hook Setup ricevono un campo `trigger` impostato su `"init"` o `"maintenance"`:1348Oltre ai [campi di input comuni](#common-input-fields), gli hook Setup ricevono un campo `trigger` impostato su `"init"` o `"maintenance"`:
1359 1349
1360```json theme={null}1350```json theme={null}
1361{1351{
1368```1358```
1369 1359
1370<h4 id="setup-decision-control">1360<h4 id="setup-decision-control">
1371 Setup decision control1361 Controllo decisionale Setup
1372</h4>1362</h4>
1373 1363
1374Gli hook Setup non possono bloccare; l'esecuzione continua su qualsiasi codice di uscita. Su ogni codice di uscita, Claude Code scarta i [JSON output fields](#json-output) di un hook Setup, come `systemMessage`, `continue`, e `hookSpecificOutput.additionalContext`. Con `-p`, stdout, stderr e il codice di uscita di un hook Setup appaiono nell'output dell'esecuzione solo come [`hook_response` events](/docs/it/headless#read-session-metadata) quando avvii con `--output-format stream-json --verbose`.1364Gli hook Setup non possono bloccare; l'esecuzione continua su qualsiasi codice di uscita. Su ogni codice di uscita, Claude Code scarta i [campi di output JSON](#json-output) di un hook Setup, come `systemMessage`, `continue`, e `hookSpecificOutput.additionalContext`. Con `-p`, lo stdout, stderr e il codice di uscita di un hook Setup appaiono nell'output dell'esecuzione solo come [eventi `hook_response`](/docs/it/headless#read-session-metadata) quando avvii con `--output-format stream-json --verbose`.
1375 1365
1376Gli hook Setup hanno accesso a `CLAUDE_ENV_FILE`. Le variabili scritte in quel file persistono nei comandi Bash successivi per la sessione, proprio come negli [hook SessionStart](#persist-environment-variables). Solo gli hook `type: "command"` si eseguono su `Setup`. Un hook `type: "mcp_tool"` su `Setup` viene sempre saltato, come descritto sotto [MCP tool hook fields](#mcp-tool-hook-fields).1366Gli hook Setup hanno accesso a `CLAUDE_ENV_FILE`. Le variabili scritte su quel file persistono nei comandi Bash successivi per la sessione, proprio come negli [hook SessionStart](#persist-environment-variables). Solo gli hook `type: "command"` si eseguono su `Setup`. Un hook `type: "mcp_tool"` su `Setup` viene sempre saltato, come descritto sotto [Campi hook MCP tool](#mcp-tool-hook-fields).
1377 1367
1378<h3 id="instructionsloaded">1368<h3 id="instructionsloaded">
1379 InstructionsLoaded1369 InstructionsLoaded
1380</h3>1370</h3>
1381 1371
1382Si attiva quando un file `CLAUDE.md` o `.claude/rules/*.md` viene caricato nel contesto. Questo evento si attiva all'avvio della sessione per i file caricati con entusiasmo e di nuovo più tardi quando i file vengono caricati pigrizia, ad esempio quando Claude accede a una sottodirectory che contiene un `CLAUDE.md` annidato o quando le regole condizionali con frontmatter `paths:` corrispondono. L'hook non supporta il blocco o il controllo delle decisioni. Si esegue in modo asincrono per scopi di osservabilità.1372Si attiva quando un file `CLAUDE.md` o `.claude/rules/*.md` viene caricato nel contesto. Questo evento si attiva all'avvio della sessione per i file caricati con entusiasmo e di nuovo più tardi quando i file vengono caricati pigrizia, ad esempio quando Claude accede a una sottodirectory che contiene un `CLAUDE.md` annidato o quando le regole condizionali con frontmatter `paths:` corrispondono. L'hook non supporta il blocco o il controllo decisionale. Si esegue in modo asincrono per scopi di osservabilità.
1383 1373
1384Questo evento non si attiva quando Claude [legge `AGENTS.md` direttamente](/docs/it/memory#agents-md) attraverso l'impostazione **Project instructions**. Si attiva quando un `CLAUDE.md` importa il tuo `AGENTS.md`, con `load_reason` impostato su `include` come per qualsiasi altro file importato, e quando `CLAUDE.md` è un symlink ad esso, come un caricamento `CLAUDE.md` normale.1374Questo evento non si attiva quando Claude [legge `AGENTS.md` direttamente](/docs/it/memory#agents-md) tramite l'impostazione **Project instructions**. Si attiva quando un `CLAUDE.md` importa il tuo `AGENTS.md`, con `load_reason` impostato su `include` come per qualsiasi altro file importato, e quando `CLAUDE.md` è un symlink ad esso, come un caricamento `CLAUDE.md` normale.
1385 1375
1386Il matcher viene eseguito su `load_reason`. Ad esempio, usa `"matcher": "session_start"` per attivarsi solo per i file caricati all'avvio della sessione, o `"matcher": "path_glob_match|nested_traversal"` per attivarsi solo per i caricamenti pigri.1376Il matcher viene eseguito su `load_reason`. Ad esempio, usa `"matcher": "session_start"` per attivarsi solo per i file caricati all'avvio della sessione, o `"matcher": "path_glob_match|nested_traversal"` per attivarsi solo per i caricamenti pigri.
1387 1377
1388<h4 id="instructionsloaded-input">1378<h4 id="instructionsloaded-input">
1389 InstructionsLoaded input1379 Input InstructionsLoaded
1390</h4>1380</h4>
1391 1381
1392Oltre ai [common input fields](#common-input-fields), gli hook InstructionsLoaded ricevono questi campi:1382Oltre ai [campi di input comuni](#common-input-fields), gli hook InstructionsLoaded ricevono questi campi:
1393 1383
1394| Field | Description |1384| Campo | Descrizione |
1395| :- | :- |1385| :- | :- |
1396| `file_path` | Percorso assoluto al file di istruzioni che è stato caricato |1386| `file_path` | Percorso assoluto al file di istruzioni che è stato caricato |
1397| `memory_type` | Ambito del file: `"User"`, `"Project"`, `"Local"`, o `"Managed"` |1387| `memory_type` | Ambito del file: `"User"`, `"Project"`, `"Local"`, o `"Managed"` |
1413```1403```
1414 1404
1415<h4 id="instructionsloaded-decision-control">1405<h4 id="instructionsloaded-decision-control">
1416 InstructionsLoaded decision control1406 Controllo decisionale InstructionsLoaded
1417</h4>1407</h4>
1418 1408
1419Gli hook InstructionsLoaded non hanno controllo delle decisioni. Non possono bloccare o modificare il caricamento delle istruzioni. Claude Code scarta i loro [JSON output fields](#json-output), come `systemMessage` e `continue`. Usa questo evento per il logging di audit, il tracciamento della conformità, o l'osservabilità.1409Gli hook InstructionsLoaded non hanno controllo decisionale. Non possono bloccare o modificare il caricamento delle istruzioni. Claude Code scarta i loro [campi di output JSON](#json-output), come `systemMessage` e `continue`. Usa questo evento per il logging di audit, il tracciamento della conformità, o l'osservabilità.
1420 1410
1421<h3 id="userpromptsubmit">1411<h3 id="userpromptsubmit">
1422 UserPromptSubmit1412 UserPromptSubmit
1424 1414
1425Si esegue quando l'utente invia un prompt, prima che Claude lo elabori. Questo ti consente di aggiungere contesto aggiuntivo basato sul prompt/conversazione, convalidare i prompt, o bloccare determinati tipi di prompt.1415Si esegue quando l'utente invia un prompt, prima che Claude lo elabori. Questo ti consente di aggiungere contesto aggiuntivo basato sul prompt/conversazione, convalidare i prompt, o bloccare determinati tipi di prompt.
1426 1416
1427Gli hook `UserPromptSubmit` hanno un timeout predefinito di 30 secondi per i tipi `command`, `http`, e `mcp_tool`, più breve del default di 600 secondi per quei tipi sulla maggior parte degli altri eventi. Poiché questo hook si esegue prima di ogni prompt e blocca l'elaborazione del modello finché non si completa, un hook bloccato blocca la sessione. Se il tuo hook ha bisogno di più tempo, imposta il campo `timeout` nella voce dell'hook.1417Gli hook `UserPromptSubmit` hanno un timeout predefinito di 30 secondi per i tipi `command`, `http`, e `mcp_tool`, più breve del default di 600 secondi per quei tipi sulla maggior parte degli altri eventi. Poiché questo hook si esegue prima di ogni prompt e blocca l'elaborazione del modello fino al completamento, un hook bloccato blocca la sessione. Se il tuo hook ha bisogno di più tempo, imposta il campo `timeout` nella voce dell'hook.
1428 1418
1429A parte un hook di comando che esegui con [`async: true`](#run-hooks-in-the-background), un hook `UserPromptSubmit` di comando, HTTP, o MCP tool che raggiunge il suo timeout viene annullato e il suo output, incluso qualsiasi `additionalContext`, viene scartato. Il prompt raggiunge comunque Claude senza quel contesto. La trascrizione mostra un avviso che nomina l'hook, il timeout che si è attivato, e che l'output è stato scartato.1419A parte un hook di comando che esegui con [`async: true`](#run-hooks-in-the-background), un hook UserPromptSubmit di comando, HTTP, o MCP tool che raggiunge il suo timeout viene annullato e il suo output, incluso qualsiasi `additionalContext`, viene scartato. Il prompt raggiunge comunque Claude senza quel contesto. La trascrizione mostra un avviso che nomina l'hook, il timeout che si è attivato, e che l'output è stato scartato.
1430 1420
1431Un [Agent SDK callback hook](/docs/it/agent-sdk/hooks) su `UserPromptSubmit` che raggiunge il suo timeout blocca il prompt con un messaggio che nomina l'hook e il timeout, perché un callback lì può agire come un gate di policy che non deve fallire in modo aperto. La sessione continua. Prima della v2.1.208, un timeout di callback su quell'evento terminava il turno con un errore di esecuzione.1421Un [hook di callback Agent SDK](/docs/it/agent-sdk/hooks) su `UserPromptSubmit` che raggiunge il suo timeout blocca il prompt con un messaggio che nomina l'hook e il timeout, perché un callback lì può agire come un gate di policy che non deve fallire aperto. La sessione continua. Prima della v2.1.208, un timeout di callback su quell'evento terminava il turno con un errore di esecuzione.
1432 1422
1433<h4 id="userpromptsubmit-input">1423<h4 id="userpromptsubmit-input">
1434 UserPromptSubmit input1424 Input UserPromptSubmit
1435</h4>1425</h4>
1436 1426
1437Oltre ai [common input fields](#common-input-fields), gli hook UserPromptSubmit ricevono il campo `prompt` contenente il testo che l'utente ha inviato. Il contenuto incollato che è crollato in un segnaposto `[Pasted text #N]` arriva espanso al suo posto. Nelle sessioni in cui Claude Code [contrassegna il testo incollato per Claude](/docs/it/terminal-config#how-claude-treats-pasted-text), quel contenuto espanso si trova tra una riga `<pasted_content id="…">` e una riga `</pasted_content id="…">`, quindi tieni conto di quelle righe se il tuo hook analizza il prompt.1427Oltre ai [campi di input comuni](#common-input-fields), gli hook UserPromptSubmit ricevono il campo `prompt` contenente il testo che l'utente ha inviato. Il contenuto incollato che è crollato in un segnaposto `[Pasted text #N]` arriva espanso al suo posto. Nelle sessioni in cui Claude Code [contrassegna il testo incollato per Claude](/docs/it/terminal-config#how-claude-treats-pasted-text), quel contenuto espanso si trova tra una riga `<pasted_content id="…">` e una riga `</pasted_content id="…">`, quindi tieni conto di quelle righe se il tuo hook analizza il prompt.
1438 1428
1439```json theme={null}1429```json theme={null}
1440{1430{
1448```1438```
1449 1439
1450<h4 id="userpromptsubmit-decision-control">1440<h4 id="userpromptsubmit-decision-control">
1451 UserPromptSubmit decision control1441 Controllo decisionale UserPromptSubmit
1452</h4>1442</h4>
1453 1443
1454Gli hook `UserPromptSubmit` possono controllare se un prompt utente viene elaborato e aggiungere contesto. Tutti i [JSON output fields](#json-output) sono disponibili.1444Gli hook `UserPromptSubmit` possono controllare se un prompt utente viene elaborato e aggiungere contesto. Tutti i [campi di output JSON](#json-output) sono disponibili.
1455 1445
1456Ci sono due modi per aggiungere contesto alla conversazione al codice di uscita 0:1446Ci sono due modi per aggiungere contesto alla conversazione all'uscita del codice 0:
1457 1447
1458* **Plain text stdout**: Claude Code aggiunge stdout che [tratta come testo semplice](#exit-code-0) al contesto di Claude1448* **Stdout di testo semplice**: Claude Code aggiunge stdout che [tratta come testo semplice](#exit-code-0) al contesto di Claude
1459* **JSON con `additionalContext`**: usa il formato JSON sottostante per più controllo. Il campo `additionalContext` viene aggiunto come contesto1449* **JSON con `additionalContext`**: usa il formato JSON sottostante per più controllo. Il campo `additionalContext` viene aggiunto come contesto
1460 1450
1461Nessuno dei due canali produce una voce di trascrizione visibile. Lo stdout semplice e il valore `additionalContext` vengono ciascuno iniettati come un promemoria di sistema che inizia con il nome dell'hook; Claude legge entrambi. Per confermare la consegna, controlla il [debug log](#debug-hooks).1451Nessuno dei due canali produce una voce di trascrizione visibile. Lo stdout semplice e il valore `additionalContext` vengono ciascuno iniettati come un promemoria di sistema che inizia con il nome dell'hook; Claude legge entrambi. Per confermare la consegna, controlla il [log di debug](#debug-hooks).
1462 1452
1463Per bloccare un prompt, restituisci un oggetto JSON con `decision` impostato su `"block"`:1453Per bloccare un prompt, restituisci un oggetto JSON con `decision` impostato su `"block"`:
1464 1454
1465| Field | Description |1455| Campo | Descrizione |
1466| :- | :- |1456| :- | :- |
1467| `decision` | `"block"` impedisce l'elaborazione del prompt e lo cancella dal contesto. Ometti per consentire al prompt di procedere |1457| `decision` | `"block"` impedisce l'elaborazione del prompt e lo cancella dal contesto. Ometti per consentire al prompt di procedere |
1468| `reason` | Mostrato all'utente quando `decision` è `"block"`. Non aggiunto al contesto |1458| `reason` | Mostrato all'utente quando `decision` è `"block"`. Non aggiunto al contesto |
1469| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al prompt inviato. Vedi [Add context for Claude](#add-context-for-claude) |1459| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al prompt inviato. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) |
1470| `sessionTitle` | Imposta il titolo della sessione. Usa per nominare le sessioni automaticamente in base al contenuto del prompt |1460| `sessionTitle` | Imposta il titolo della sessione. Usa per nominare le sessioni automaticamente in base al contenuto del prompt |
1471| `suppressOriginalPrompt` | Se `true` quando `decision` è `"block"`, omette il testo del prompt originale dal messaggio di blocco mostrato all'utente |1461| `suppressOriginalPrompt` | Se `true` quando `decision` è `"block"`, omette il testo del prompt originale dal messaggio di blocco mostrato all'utente |
1472 1462
1473Un hook che blocca uscendo con 2 si instrada nello stesso modo di `reason`: il messaggio di blocco mostra il testo stderr all'utente, e non viene aggiunto al contesto.1463Un hook che blocca uscendo con 2 si instrada allo stesso modo di `reason`: il messaggio di blocco mostra il testo stderr all'utente, e non viene aggiunto al contesto.
1474 1464
1475```json theme={null}1465```json theme={null}
1476{1466{
1488 UserPromptExpansion1478 UserPromptExpansion
1489</h3>1479</h3>
1490 1480
1491Si esegue quando un comando digitato dall'utente si espande in un prompt prima di raggiungere Claude. Usalo per bloccare comandi specifici dall'invocazione diretta, iniettare contesto per una skill particolare, o registrare quali comandi gli utenti invocano. Ad esempio, un hook che corrisponde a `deploy` può bloccare `/deploy` a meno che un file di approvazione sia presente, o un hook che corrisponde a una skill di revisione può aggiungere la lista di controllo di revisione del team come `additionalContext`.1481Si esegue quando un comando digitato dall'utente si espande in un prompt prima di raggiungere Claude. Usalo per bloccare comandi specifici dall'invocazione diretta, iniettare contesto per una skill particolare, o registrare quali comandi gli utenti invocano. Ad esempio, un hook che corrisponde a `deploy` può bloccare `/deploy` a meno che un file di approvazione non sia presente, o un hook che corrisponde a una skill di revisione può aggiungere la checklist di revisione del team come `additionalContext`.
1492 1482
1493Questo evento copre il percorso che `PreToolUse` non copre: un hook `PreToolUse` che corrisponde allo strumento `Skill` si attiva solo quando Claude chiama lo strumento, ma digitare `/skillname` direttamente bypassa `PreToolUse`. `UserPromptExpansion` si attiva su quel percorso diretto.1483Questo evento copre il percorso che `PreToolUse` non copre: un hook `PreToolUse` che corrisponde allo strumento `Skill` si attiva solo quando Claude chiama lo strumento, ma digitare `/skillname` direttamente bypassa `PreToolUse`. `UserPromptExpansion` si attiva su quel percorso diretto.
1494 1484
1495Corrisponde a `command_name`. Lascia il matcher vuoto per attivarsi su ogni comando di tipo prompt.1485Corrisponde a `command_name`. Lascia il matcher vuoto per attivarsi su ogni comando di tipo prompt.
1496 1486
1497<h4 id="userpromptexpansion-input">1487<h4 id="userpromptexpansion-input">
1498 UserPromptExpansion input1488 Input UserPromptExpansion
1499</h4>1489</h4>
1500 1490
1501Oltre ai [common input fields](#common-input-fields), gli hook UserPromptExpansion ricevono `expansion_type`, `command_name`, `command_args`, `command_source`, e la stringa `prompt` originale. Il campo `expansion_type` è `slash_command` per le skill e i comandi personalizzati, o `mcp_prompt` per i prompt del server MCP.1491Oltre ai [campi di input comuni](#common-input-fields), gli hook UserPromptExpansion ricevono `expansion_type`, `command_name`, `command_args`, `command_source`, e la stringa `prompt` originale. Il campo `expansion_type` è `slash_command` per skill e comandi personalizzati, o `mcp_prompt` per i prompt del server MCP.
1502 1492
1503```json theme={null}1493```json theme={null}
1504{1494{
1516```1506```
1517 1507
1518<h4 id="userpromptexpansion-decision-control">1508<h4 id="userpromptexpansion-decision-control">
1519 UserPromptExpansion decision control1509 Controllo decisionale UserPromptExpansion
1520</h4>1510</h4>
1521 1511
1522Gli hook `UserPromptExpansion` possono bloccare l'espansione o aggiungere contesto. Tutti i [JSON output fields](#json-output) sono disponibili.1512Gli hook `UserPromptExpansion` possono bloccare l'espansione o aggiungere contesto. Tutti i [campi di output JSON](#json-output) sono disponibili.
1523 1513
1524| Field | Description |1514| Campo | Descrizione |
1525| :- | :- |1515| :- | :- |
1526| `decision` | `"block"` impedisce l'espansione del comando. Ometti per consentire a esso di procedere |1516| `decision` | `"block"` impedisce l'espansione del comando. Ometti per consentire al comando di procedere |
1527| `reason` | Mostrato all'utente quando `decision` è `"block"` |1517| `reason` | Mostrato all'utente quando `decision` è `"block"` |
1528| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al prompt espanso. Vedi [Add context for Claude](#add-context-for-claude) |1518| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al prompt espanso. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) |
1529 1519
1530Un hook che blocca uscendo con 2 si instrada nello stesso modo di `reason`: il messaggio di blocco mostra il testo stderr all'utente.1520Un hook che blocca uscendo con 2 si instrada allo stesso modo di `reason`: il messaggio di blocco mostra il testo stderr all'utente.
1531 1521
1532```json theme={null}1522```json theme={null}
1533{1523{
1544 MessageDisplay1534 MessageDisplay
1545</h3>1535</h3>
1546 1536
1547Si esegue mentre un messaggio dell'assistente viene trasmesso sullo schermo. Claude Code visualizza il messaggio in incrementi: ogni volta che un batch di righe appena completate è pronto per il rendering, l'hook si esegue una volta con quelle righe e Claude Code esegue il rendering del testo di sostituzione dell'hook al loro posto. Un messaggio lungo produce diverse chiamate; un messaggio breve potrebbe produrne solo una.1537Si esegue mentre un messaggio dell'assistente scorre sullo schermo. Claude Code visualizza il messaggio in incrementi: ogni volta che un batch di righe appena completate è pronto per il rendering, l'hook si esegue una volta con quelle righe e Claude Code esegue il rendering del testo di sostituzione dell'hook al loro posto. Un messaggio lungo produce diverse chiamate; un messaggio breve potrebbe produrne solo una.
1548 1538
1549Usa MessageDisplay per:1539Usa MessageDisplay per:
1550 1540
1552* trasformare il testo che un'applicazione Agent SDK mostra ai suoi utenti1542* trasformare il testo che un'applicazione Agent SDK mostra ai suoi utenti
1553* redarre chiavi API o nomi host interni dalle risposte di Claude1543* redarre chiavi API o nomi host interni dalle risposte di Claude
1554 1544
1555Claude Code tiene ogni batch finché il tuo hook non ritorna, quindi mantieni l'hook veloce. Se l'hook fallisce o scade, Claude Code visualizza il testo originale. Il timeout predefinito per questo evento è 10 secondi; se il tuo hook ha bisogno di più tempo, imposta il campo `timeout` nella voce dell'hook.1545Claude Code tiene ogni batch fino a quando il tuo hook non ritorna, quindi mantieni l'hook veloce. Se l'hook fallisce o scade, Claude Code visualizza il testo originale. Il timeout predefinito per questo evento è 10 secondi; se il tuo hook ha bisogno di più tempo, imposta il campo `timeout` nella voce dell'hook.
1556 1546
1557MessageDisplay è solo per la visualizzazione: il testo di sostituzione cambia solo ciò che viene renderizzato sullo schermo. La trascrizione e ciò che Claude vede mantengono il testo originale, quindi Claude non vede mai la sostituzione, e la modalità verbose mostra l'originale. L'hook riceve solo il testo del messaggio dell'assistente, quindi i risultati degli strumenti e il testo che digiti vengono renderizzati invariati.1547MessageDisplay è solo per la visualizzazione: il testo di sostituzione cambia solo ciò che viene renderizzato sullo schermo. La trascrizione e ciò che Claude vede mantengono il testo originale, quindi Claude non vede mai la sostituzione, e la modalità verbose mostra l'originale. L'hook riceve solo il testo del messaggio dell'assistente, quindi i risultati degli strumenti e il testo che digiti vengono renderizzati invariati.
1558 1548
1559MessageDisplay non supporta i matcher e si attiva per ogni messaggio dell'assistente che trasmette testo; i messaggi senza testo, come le risposte solo con chiamate di strumenti, non lo attivano.1549MessageDisplay non supporta i matcher e si attiva per ogni messaggio dell'assistente che scorre il testo; i messaggi senza testo, come le risposte solo di chiamate di strumenti, non lo attivano.
1560 1550
1561Nelle esecuzioni non interattive, incluse le query Agent SDK e `claude -p`, MessageDisplay si esegue una volta per messaggio dell'assistente invece che una volta per batch di righe. La singola chiamata arriva dopo che il messaggio si completa e porta il testo del messaggio completo: `index` è `0`, `final` è `true`, e `delta` contiene l'intero messaggio. Un hook che raccoglie il testo `delta` per ogni messaggio riceve lo stesso testo totale in entrambe le modalità.1551Nelle esecuzioni non interattive, incluse le query Agent SDK e `claude -p`, MessageDisplay si esegue una volta per messaggio dell'assistente invece che una volta per batch di righe. La singola chiamata arriva dopo il completamento del messaggio e porta il testo completo del messaggio: `index` è `0`, `final` è `true`, e `delta` contiene l'intero messaggio. Un hook che raccoglie il testo `delta` per ogni messaggio riceve lo stesso testo totale in entrambe le modalità.
1562 1552
1563<h4 id="messagedisplay-input">1553<h4 id="messagedisplay-input">
1564 MessageDisplay input1554 Input MessageDisplay
1565</h4>1555</h4>
1566 1556
1567Oltre ai [common input fields](#common-input-fields), gli hook MessageDisplay ricevono identificatori per il turno e il messaggio, la posizione di questa chiamata all'interno del messaggio, e il nuovo testo in `delta`. I confini dei batch dipendono da come il testo viene trasmesso, quindi usa `index` e `final` per tracciare il progresso attraverso un messaggio piuttosto che aspettarsi che le righe siano raggruppate in un modo particolare.1557Oltre ai [campi di input comuni](#common-input-fields), gli hook MessageDisplay ricevono identificatori per il turno e il messaggio, la posizione di questa chiamata all'interno del messaggio, e il nuovo testo in `delta`. I confini dei batch dipendono da come il testo scorre, quindi usa `index` e `final` per tracciare il progresso attraverso un messaggio piuttosto che aspettarsi che le righe siano raggruppate in un modo particolare.
1568 1558
1569| Field | Description |1559| Campo | Descrizione |
1570| :- | :- |1560| :- | :- |
1571| `turn_id` | UUID del turno corrente |1561| `turn_id` | UUID del turno corrente |
1572| `message_id` | UUID del messaggio dell'assistente visualizzato. Stabile su ogni batch dello stesso messaggio. Questo non è l'ID API `msg_…`, quindi non può essere correlato con gli ID dei messaggi della trascrizione |1562| `message_id` | UUID del messaggio dell'assistente visualizzato. Stabile in ogni batch dello stesso messaggio. Questo non è l'ID API `msg_…`, quindi non può essere correlato con gli ID dei messaggi della trascrizione |
1573| `index` | Indice a base zero di questo batch all'interno del messaggio |1563| `index` | Indice a base zero di questo batch all'interno del messaggio |
1574| `final` | `true` sul batch finale del messaggio. Ogni messaggio ha esattamente un batch finale |1564| `final` | `true` sul batch finale del messaggio. Ogni messaggio ha esattamente un batch finale |
1575| `delta` | Le righe appena completate dall'ultimo batch, incluse le newline finali. Sempre righe intere, tranne il batch finale che potrebbe terminare a metà riga. Nelle esecuzioni interattive, il delta del batch finale è vuoto quando il messaggio termina su una newline, quindi tratta `final`, non un delta non vuoto, come il segnale di fine messaggio. Nelle esecuzioni Agent SDK e `claude -p`, la singola chiamata porta l'intero messaggio |1565| `delta` | Le righe appena completate dall'ultimo batch, incluse le newline finali. Sempre righe intere, tranne il batch finale che potrebbe terminare a metà riga. Nelle esecuzioni interattive, il delta del batch finale è vuoto quando il messaggio termina su una newline, quindi tratta `final`, non un delta non vuoto, come il segnale di fine messaggio. Nelle esecuzioni Agent SDK e `claude -p`, la singola chiamata porta l'intero messaggio |
1589```1579```
1590 1580
1591<h4 id="messagedisplay-output">1581<h4 id="messagedisplay-output">
1592 MessageDisplay output1582 Output MessageDisplay
1593</h4>1583</h4>
1594 1584
1595Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, gli hook MessageDisplay possono restituire `displayContent` per sostituire il delta sullo schermo:1585Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, gli hook MessageDisplay possono restituire `displayContent` per sostituire il delta sullo schermo:
1596 1586
1597| Field | Description |1587| Campo | Descrizione |
1598| :- | :- |1588| :- | :- |
1599| `displayContent` | Testo visualizzato al posto del delta. Omettilo per visualizzare l'originale |1589| `displayContent` | Testo visualizzato al posto del delta. Omettilo per visualizzare l'originale |
1600 1590
1601Gli hook MessageDisplay non hanno controllo delle decisioni. Non possono bloccare il messaggio o cambiare ciò che viene archiviato nella trascrizione o inviato a Claude. Claude Code agisce su `displayContent` dal loro output JSON e scarta `systemMessage` e `continue`.1591Gli hook MessageDisplay non hanno controllo decisionale. Non possono bloccare il messaggio o cambiare ciò che viene archiviato nella trascrizione o inviato a Claude. Claude Code agisce su `displayContent` dal loro output JSON e scarta `systemMessage` e `continue`.
1602 1592
1603Questo esempio rimuove la formattazione markdown dalle risposte di Claude per una visualizzazione in testo semplice. Lo script legge ogni batch da stdin, rimuove i marcatori di grassetto e i backtick di codice inline da `delta`, e restituisce il risultato come `displayContent`.1593Questo esempio rimuove la formattazione markdown dalle risposte di Claude per una visualizzazione di testo semplice. Lo script legge ogni batch da stdin, rimuove i marcatori di grassetto e i backtick di codice inline da `delta`, e restituisce il risultato come `displayContent`.
1604 1594
1605<Tabs>1595<Tabs>
1606 <Tab title="macOS/Linux">1596 <Tab title="macOS/Linux">
1682 PreToolUse1672 PreToolUse
1683</h3>1673</h3>
1684 1674
1685Si esegue dopo che Claude crea i parametri dello strumento e prima di elaborare la chiamata dello strumento. Corrisponde a qualsiasi nome di strumento tranne `EndConversation`: strumenti incorporati come `Bash`, `PowerShell`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `Workflow`, `WebFetch`, `WebSearch`, `AskUserQuestion`, e `ExitPlanMode`, e qualsiasi [MCP tool names](#match-mcp-tools).1675Si esegue dopo che Claude crea i parametri dello strumento e prima dell'elaborazione della chiamata dello strumento. Corrisponde a qualsiasi nome di strumento tranne `EndConversation`: strumenti incorporati come `Bash`, `PowerShell`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `Workflow`, `WebFetch`, `WebSearch`, `AskUserQuestion`, e `ExitPlanMode`, e qualsiasi [nome di strumento MCP](#match-mcp-tools).
1686 1676
1687Per eseguire un hook quando un file specifico cambia su disco, qualunque cosa l'abbia scritto, usa [FileChanged](#filechanged) invece di corrispondere ai file-editing tools per nome. A differenza di PreToolUse, Claude Code esegue gli hook FileChanged dopo il cambiamento, e non hanno controllo delle decisioni, quindi non possono bloccare la scrittura.1677Per eseguire un hook quando un file specifico cambia su disco, indipendentemente da chi lo ha scritto, usa [FileChanged](#filechanged) invece di corrispondere ai nomi degli strumenti di modifica dei file. A differenza di PreToolUse, Claude Code esegue gli hook FileChanged dopo il cambiamento, e non hanno controllo decisionale, quindi non possono bloccare la scrittura.
1688 1678
1689<Warning>1679<Warning>
1690 PreToolUse si esegue solo quando Claude chiama uno strumento. I file che [riferisci con `@` nel tuo prompt](/docs/it/common-workflows#reference-files-and-directories) vengono aggiunti senza alcuna chiamata di strumento: Claude Code inserisce i loro contenuti mentre costruisce il prompt, quindi nessun hook PreToolUse si attiva per loro, inclusi gli hook che corrispondono a `Read`. Per bloccare percorsi specifici dai riferimenti `@`, usa una [regola di negazione `Read`](/docs/it/permissions#read-and-edit) invece.1680 PreToolUse si esegue solo quando Claude chiama uno strumento. I file che [riferisci con `@` nel tuo prompt](/docs/it/common-workflows#reference-files-and-directories) vengono aggiunti senza alcuna chiamata di strumento: Claude Code inserisce i loro contenuti mentre costruisce il prompt, quindi nessun hook PreToolUse si attiva per loro, inclusi gli hook che corrispondono a `Read`. Per bloccare percorsi specifici dai riferimenti `@`, usa una [regola di negazione `Read`](/docs/it/permissions#read-and-edit) invece.
1692 PreToolUse inoltre non si attiva per [`EndConversation`](/docs/it/tools-reference#endconversation-tool-behavior).1682 PreToolUse inoltre non si attiva per [`EndConversation`](/docs/it/tools-reference#endconversation-tool-behavior).
1693</Warning>1683</Warning>
1694 1684
1695Usa [PreToolUse decision control](#pretooluse-decision-control) per consentire, negare, chiedere, o rinviare la chiamata dello strumento.1685Usa il [controllo decisionale PreToolUse](#pretooluse-decision-control) per consentire, negare, chiedere, o differire la chiamata dello strumento.
1696 1686
1697Un [Agent SDK callback hook](/docs/it/agent-sdk/hooks) su `PreToolUse` che supera il suo timeout blocca la chiamata dello strumento, e Claude riceve un risultato di errore che nomina il timeout. Un esplicito rifiuto restituito da un altro hook ha comunque la precedenza.1687Un [hook di callback Agent SDK](/docs/it/agent-sdk/hooks) su `PreToolUse` che supera il suo timeout blocca la chiamata dello strumento, e Claude riceve un risultato di errore che nomina il timeout. Un'esplicita negazione restituita da un altro hook ha ancora la precedenza.
1698 1688
1699<h4 id="pretooluse-input">1689<h4 id="pretooluse-input">
1700 PreToolUse input1690 Input PreToolUse
1701</h4>1691</h4>
1702 1692
1703Oltre ai [common input fields](#common-input-fields), gli hook PreToolUse ricevono `tool_name`, `tool_input`, e `tool_use_id`.1693Oltre ai [campi di input comuni](#common-input-fields), gli hook PreToolUse ricevono `tool_name`, `tool_input`, e `tool_use_id`.
1704 1694
1705Per uno [strumento MCP](#match-mcp-tools), l'input porta anche `mcp_server`, un oggetto con il `name` del server e una `source` che dice da dove proviene la definizione del server. I valori `source` includono `plugin`, `sdk`, e ambiti di configurazione come `user` e `project`. [`McpServerProvenance`](/docs/it/agent-sdk/typescript#mcpserverprovenance) nel riferimento Agent SDK li elenca tutti e dice come trattarne uno che non riconosci. Basa le decisioni di fiducia su `source` piuttosto che su `name` o il prefisso del nome dello strumento `mcp__<server>__`. Il campo `mcp_server` richiede Claude Code v2.1.274 o successivo.1695Per uno [strumento MCP](#match-mcp-tools), l'input porta anche `mcp_server`, un oggetto con il `name` del server e una `source` che dice da dove viene la definizione del server. I valori `source` includono `plugin`, `sdk`, e ambiti di configurazione come `user` e `project`. [`McpServerProvenance`](/docs/it/agent-sdk/typescript#mcpserverprovenance) nel riferimento Agent SDK li elenca tutti e dice come trattarne uno che non riconosci. Basa le decisioni di fiducia su `source` piuttosto che su `name` o il prefisso del nome dello strumento `mcp__<server>__`. Il campo `mcp_server` richiede Claude Code v2.1.274 o successivo.
1706 1696
1707Per gli strumenti di file `Write`, `Edit`, e `Read`, `tool_input.file_path` è sempre assoluto:1697Per gli strumenti di file `Write`, `Edit`, e `Read`, `tool_input.file_path` è sempre assoluto:
1708 1698
1709* Claude Code espande `~` e i percorsi relativi prima che gli hook si eseguano, quindi un hook che corrisponde ai percorsi non può essere bypassato tramite `~` o un'ortografia relativa dello stesso percorso1699* Claude Code espande `~` e i percorsi relativi prima che gli hook si eseguano, quindi un hook che corrisponde ai percorsi non può essere bypassato tramite `~` o un'ortografia relativa dello stesso percorso
1710* Su Windows, il percorso arriva con separatori backslash, anche quando il tuo hook si esegue sotto Git Bash dove `$PWD` sembra `/c/project`1700* Su Windows, il percorso arriva con separatori backslash, anche quando il tuo hook si esegue sotto Git Bash dove `$PWD` sembra `/c/project`
1711* Un confronto scritto con barre in avanti, come un controllo `/src/`, non corrisponde mai a un percorso con backslash, e la chiamata dello strumento procede come se l'hook non avesse nulla da bloccare1701* Un confronto scritto con barre in avanti, come un controllo `/src/`, non corrisponde mai a un percorso backslash, e la chiamata dello strumento procede come se l'hook non avesse nulla da bloccare
1712* Normalizza i separatori prima di confrontare: `FILE_PATH="${FILE_PATH//\\//}"` in Bash, o `file_path.replace("\\", "/")` in Python, quindi corrisponde a un segmento di percorso come `/src/` piuttosto che ancorare con `^`, poiché il percorso è assoluto1702* Normalizza i separatori prima di confrontare: `FILE_PATH="${FILE_PATH//\\//}"` in Bash, o `file_path.replace("\\", "/")` in Python, quindi corrisponde a un segmento di percorso come `/src/` piuttosto che ancorare con `^`, poiché il percorso è assoluto
1713 1703
1714Una chiamata `Write` su Windows consegna:1704Una chiamata `Write` su Windows consegna:
1735 1725
1736Esegue comandi shell.1726Esegue comandi shell.
1737 1727
1738| Field | Type | Example | Description |1728| Campo | Tipo | Esempio | Descrizione |
1739| :- | :- | :- | :- |1729| :- | :- | :- | :- |
1740| `command` | string | `"npm test"` | Il comando shell da eseguire |1730| `command` | string | `"npm test"` | Il comando shell da eseguire |
1741| `description` | string | `"Run test suite"` | Descrizione facoltativa di cosa fa il comando |1731| `description` | string | `"Run test suite"` | Descrizione facoltativa di cosa fa il comando |
1742| `timeout` | number | `120000` | Timeout facoltativo in millisecondi. I valori superiori al [massimo](/docs/it/tools-reference#bash-tool-behavior) vengono ridotti al massimo piuttosto che rifiutati |1732| `timeout` | number | `120000` | Timeout facoltativo in millisecondi. I valori superiori al [massimo](/docs/it/tools-reference#bash-tool-behavior) vengono ridotti al massimo piuttosto che rifiutati |
1743| `run_in_background` | boolean | `false` | Se eseguire il comando in background |1733| `run_in_background` | boolean | `false` | Se eseguire il comando in background |
1744 1734
1745Quando un comando Bash cambia file in un repository Git, Claude Code può registrare cosa è cambiato. Lo registra in ogni modo di permesso quando l'impostazione [`bashEditDiffEnabled`](/docs/it/settings-reference#basheditdiffenabled) attiva la registrazione; la voce di quell'impostazione dice quali file possono impostarla. Altrimenti la registra solo in modalità auto e modalità `bypassPermissions`, e solo quando Claude Code dirige Claude a modificare file tramite Bash. Imposta `bashEditDiffEnabled` su `false` per disattivare la registrazione. I comandi in background e i comandi di sola lettura non portano diff.1735Quando un comando Bash cambia i file in un repository Git, Claude Code può registrare cosa è cambiato. Registra i cambiamenti in ogni modalità di permesso quando l'impostazione [`bashEditDiffEnabled`](/docs/it/settings-reference#basheditdiffenabled) attiva la registrazione; la voce di quell'impostazione dice quali file possono impostarla. Altrimenti la registra solo in modalità auto e modalità `bypassPermissions`, e solo quando Claude Code dirige Claude a modificare i file tramite Bash. Imposta `bashEditDiffEnabled` su `false` per disattivare la registrazione. I comandi di background e i comandi di sola lettura non portano alcun diff.
1746 1736
1747Il tuo hook [PostToolUse](#posttooluse) riceve quindi i file modificati in `tool_response.bashEditDiff`. L'elenco copre ciò che è cambiato sotto il repository mentre il comando era in esecuzione. I file che Git ignora e i file nei submoduli non sono elencati. Richiede Claude Code v2.1.269 o successivo.1737Il tuo [hook PostToolUse](#posttooluse) riceve quindi i file modificati in `tool_response.bashEditDiff`. L'elenco copre ciò che è cambiato nel repository mentre il comando era in esecuzione. I file che Git ignora e i file nei submoduli non sono elencati. Richiede Claude Code v2.1.269 o successivo.
1748 1738
1749<Note>1739<Note>
1750 L'elenco è best effort e in beta pubblica. Claude Code può perdere un cambiamento, includere un file che un altro processo ha cambiato contemporaneamente, o fermarsi ai suoi limiti di dimensione. La forma del campo potrebbe cambiare. Usa l'elenco per trovare cosa rivedere, non per applicare una politica.1740 L'elenco è best effort e in beta pubblica. Claude Code può perdere un cambiamento, includere un file che un altro processo ha cambiato nello stesso momento, o fermarsi ai suoi limiti di dimensione. La forma del campo potrebbe cambiare. Usa l'elenco per trovare cosa rivedere, non per applicare una policy.
1751</Note>1741</Note>
1752 1742
1753`changedFiles` e `files` elencano ciò che il comando ha cambiato; i campi rimanenti dicono quanto è completo e quanto è affidabile quell'elenco.1743`changedFiles` e `files` elencano ciò che il comando ha cambiato; i campi rimanenti dicono quanto è completo e quanto è affidabile quell'elenco.
1754 1744
1755| Field | Type | Example | Description |1745| Campo | Tipo | Esempio | Descrizione |
1756| :- | :- | :- | :- |1746| :- | :- | :- | :- |
1757| `changedFiles` | array | `["/path/to/src/app.ts"]` | Percorsi assoluti dei file che il comando ha cambiato, al massimo 200. Presente ogni volta che `files` contiene un diff o `moreFiles` è superiore a zero |1747| `changedFiles` | array | `["/path/to/src/app.ts"]` | Percorsi assoluti dei file che il comando ha cambiato, al massimo 200. Presente ogni volta che `files` contiene un diff o `moreFiles` è superiore a zero |
1758| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diff di fino a 5 file modificati, per la visualizzazione. `created` o `deleted` è `true` per un file che il comando ha aggiunto o rimosso |1748| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diff di fino a 5 file modificati, per la visualizzazione. `created` o `deleted` è `true` per un file che il comando ha aggiunto o rimosso |
1759| `moreFiles` | number | `2` | Conteggio dei file modificati senza diff in `files` |1749| `moreFiles` | number | `2` | Conteggio dei file modificati senza diff in `files` |
1760| `unavailable` | boolean | `true` | Impostato quando il diff è incompleto o non potrebbe essere preso |1750| `unavailable` | boolean | `true` | Impostato quando il diff è incompleto o non poteva essere preso |
1761| `skipped` | boolean | `true` | Impostato per un comando Git che sposta l'albero di lavoro, come `git checkout` o `git stash`, quindi Claude Code non prende diff |1751| `skipped` | boolean | `true` | Impostato per un comando Git che sposta l'albero di lavoro, come `git checkout` o `git stash`, quindi Claude Code non prende alcun diff |
1762| `shared` | boolean | `true` | Impostato quando un'altra chiamata di strumento Bash, come quella di un subagent, si è eseguita nello stesso repository contemporaneamente, quindi alcuni cambiamenti elencati potrebbero essere di quel comando |1752| `shared` | boolean | `true` | Impostato quando un'altra chiamata dello strumento Bash, come quella di un subagente, si è eseguita nello stesso repository nello stesso momento, quindi alcuni cambiamenti elencati potrebbero essere di quel comando |
1763 1753
1764<a id="powershell" />1754<a id="powershell" />
1765 1755
1771 1761
1772I campi corrispondono allo strumento Bash, con la stringa di comando in `command`:1762I campi corrispondono allo strumento Bash, con la stringa di comando in `command`:
1773 1763
1774| Field | Type | Example | Description |1764| Campo | Tipo | Esempio | Descrizione |
1775| :- | :- | :- | :- |1765| :- | :- | :- | :- |
1776| `command` | string | `"Get-ChildItem -Recurse"` | Il comando PowerShell da eseguire |1766| `command` | string | `"Get-ChildItem -Recurse"` | Il comando PowerShell da eseguire |
1777| `description` | string | `"List files recursively"` | Descrizione facoltativa di cosa fa il comando |1767| `description` | string | `"List files recursively"` | Descrizione facoltativa di cosa fa il comando |
1790 1780
1791Crea o sovrascrive un file.1781Crea o sovrascrive un file.
1792 1782
1793| Field | Type | Example | Description |1783| Campo | Tipo | Esempio | Descrizione |
1794| :- | :- | :- | :- |1784| :- | :- | :- | :- |
1795| `file_path` | string | `"/path/to/file.txt"` | Percorso assoluto al file da scrivere |1785| `file_path` | string | `"/path/to/file.txt"` | Percorso assoluto al file da scrivere |
1796| `content` | string | `"file content"` | Contenuto da scrivere nel file |1786| `content` | string | `"file content"` | Contenuto da scrivere nel file |
1801 1791
1802Sostituisce una stringa in un file esistente.1792Sostituisce una stringa in un file esistente.
1803 1793
1804| Field | Type | Example | Description |1794| Campo | Tipo | Esempio | Descrizione |
1805| :- | :- | :- | :- |1795| :- | :- | :- | :- |
1806| `file_path` | string | `"/path/to/file.txt"` | Percorso assoluto al file da modificare |1796| `file_path` | string | `"/path/to/file.txt"` | Percorso assoluto al file da modificare |
1807| `old_string` | string | `"original text"` | Testo da trovare e sostituire |1797| `old_string` | string | `"original text"` | Testo da trovare e sostituire |
1812 Read1802 Read
1813</h5>1803</h5>
1814 1804
1815Legge i contenuti del file.1805Legge il contenuto dei file.
1816 1806
1817| Field | Type | Example | Description |1807| Campo | Tipo | Esempio | Descrizione |
1818| :- | :- | :- | :- |1808| :- | :- | :- | :- |
1819| `file_path` | string | `"/path/to/file.txt"` | Percorso assoluto al file da leggere |1809| `file_path` | string | `"/path/to/file.txt"` | Percorso assoluto al file da leggere |
1820| `offset` | number | `10` | Numero di riga facoltativo da cui iniziare la lettura |1810| `offset` | number | `10` | Numero di riga facoltativo da cui iniziare la lettura |
1826 1816
1827Trova file che corrispondono a un modello glob.1817Trova file che corrispondono a un modello glob.
1828 1818
1829| Field | Type | Example | Description |1819| Campo | Tipo | Esempio | Descrizione |
1830| :- | :- | :- | :- |1820| :- | :- | :- | :- |
1831| `pattern` | string | `"**/*.ts"` | Modello glob per corrispondere ai file |1821| `pattern` | string | `"**/*.ts"` | Modello glob per corrispondere ai file |
1832| `path` | string | `"/path/to/dir"` | Directory facoltativa in cui cercare. Predefinito alla directory di lavoro corrente |1822| `path` | string | `"/path/to/dir"` | Directory facoltativa da cercare. Predefinito alla directory di lavoro corrente |
1833 1823
1834<h5 id="grep">1824<h5 id="grep">
1835 Grep1825 Grep
1836</h5>1826</h5>
1837 1827
1838Cerca i contenuti dei file con espressioni regolari.1828Cerca il contenuto dei file con espressioni regolari.
1839 1829
1840| Field | Type | Example | Description |1830| Campo | Tipo | Esempio | Descrizione |
1841| :- | :- | :- | :- |1831| :- | :- | :- | :- |
1842| `pattern` | string | `"TODO.*fix"` | Modello di espressione regolare da cercare |1832| `pattern` | string | `"TODO.*fix"` | Modello di espressione regolare da cercare |
1843| `path` | string | `"/path/to/dir"` | File o directory facoltativo in cui cercare |1833| `path` | string | `"/path/to/dir"` | File o directory facoltativa da cercare |
1844| `glob` | string | `"*.ts"` | Modello glob facoltativo per filtrare i file |1834| `glob` | string | `"*.ts"` | Modello glob facoltativo per filtrare i file |
1845| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"`, o `"count"`. Predefinito a `"files_with_matches"` |1835| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"`, o `"count"`. Predefinito a `"files_with_matches"` |
1846| `-i` | boolean | `true` | Ricerca senza distinzione tra maiuscole e minuscole |1836| `-i` | boolean | `true` | Ricerca senza distinzione tra maiuscole e minuscole |
1852 1842
1853Recupera ed elabora il contenuto web.1843Recupera ed elabora il contenuto web.
1854 1844
1855| Field | Type | Example | Description |1845| Campo | Tipo | Esempio | Descrizione |
1856| :- | :- | :- | :- |1846| :- | :- | :- | :- |
1857| `url` | string | `"https://example.com/api"` | URL da cui recuperare il contenuto |1847| `url` | string | `"https://example.com/api"` | URL da cui recuperare il contenuto |
1858| `prompt` | string | `"Extract the API endpoints"` | Prompt da eseguire sul contenuto recuperato |1848| `prompt` | string | `"Extract the API endpoints"` | Prompt da eseguire sul contenuto recuperato |
1863 1853
1864Cerca il web.1854Cerca il web.
1865 1855
1866| Field | Type | Example | Description |1856| Campo | Tipo | Esempio | Descrizione |
1867| :- | :- | :- | :- |1857| :- | :- | :- | :- |
1868| `query` | string | `"react hooks best practices"` | Query di ricerca |1858| `query` | string | `"react hooks best practices"` | Query di ricerca |
1869| `allowed_domains` | array | `["docs.example.com"]` | Facoltativo: includi solo risultati da questi domini |1859| `allowed_domains` | array | `["docs.example.com"]` | Facoltativo: includi solo risultati da questi domini |
1873 Agent1863 Agent
1874</h5>1864</h5>
1875 1865
1876Genera un [subagent](/docs/it/sub-agents).1866Genera un [subagente](/docs/it/sub-agents).
1877 1867
1878| Field | Type | Example | Description |1868| Campo | Tipo | Esempio | Descrizione |
1879| :- | :- | :- | :- |1869| :- | :- | :- | :- |
1880| `prompt` | string | `"Find all API endpoints"` | Il compito per l'agente da eseguire |1870| `prompt` | string | `"Find all API endpoints"` | L'attività per l'agente da eseguire |
1881| `description` | string | `"Find API endpoints"` | Breve descrizione del compito |1871| `description` | string | `"Find API endpoints"` | Breve descrizione dell'attività |
1882| `subagent_type` | string | `"Explore"` | Tipo di agente specializzato da usare |1872| `subagent_type` | string | `"Explore"` | Tipo di agente specializzato da usare |
1883| `model` | string | `"sonnet"` | Alias del modello facoltativo per sovrascrivere il predefinito |1873| `model` | string | `"sonnet"` | Alias del modello facoltativo per sovrascrivere il predefinito |
1884 1874
1885Quando una chiamata Agent in primo piano si completa, il tuo hook [PostToolUse](#posttooluse) riceve il testo finale del subagent e la telemetria di esecuzione in `tool_response`. Leggi questi campi per ispezionare l'esecuzione; per i rollup di token e costi tra i subagent, usa i [token and cost counters](/docs/it/monitoring-usage#token-counter) filtrati a `query_source` `"subagent"`, poiché `totalTokens` e `usage` coprono solo la richiesta finale:1875Quando una chiamata Agent in primo piano si completa, il tuo [hook PostToolUse](#posttooluse) riceve il risultato del subagente e la telemetria di esecuzione in `tool_response`. Leggi questi campi per ispezionare l'esecuzione; per i rollup di token e costo tra i subagenti, usa i [contatori di token e costo](/docs/it/monitoring-usage#token-counter) filtrati a `query_source` `"subagent"`, poiché `totalTokens` e `usage` coprono solo la richiesta finale:
1886 1876
1887| Field | Type | Example | Description |1877| Campo | Tipo | Esempio | Descrizione |
1888| :- | :- | :- | :- |1878| :- | :- | :- | :- |
1889| `status` | string | `"completed"` | `"completed"` per i subagent in primo piano, `"async_launched"` per i subagent in background. A partire dalla v2.1.198, i subagent si eseguono in background per impostazione predefinita, quindi un `run_in_background` omesso produce anche `"async_launched"` |1879| `status` | string | `"completed"` | `"completed"` per i subagenti in primo piano, `"async_launched"` per i subagenti di background. A partire dalla v2.1.198, i subagenti si eseguono in background per impostazione predefinita, quindi un `run_in_background` omesso produce anche `"async_launched"` |
1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identificatore per l'esecuzione del subagent |1880| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identificatore per l'esecuzione del subagente |
1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | I blocchi di testo finali del subagent, o, per un subagent il cui rapporto passa attraverso `SubagentHandback`, una breve nota su quel hand-back al loro posto |1881| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | I blocchi di testo finali del subagente, o, per un subagente il cui rapporto passa attraverso `SubagentHandback`, una breve nota su quel hand-back al loro posto |
1892| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modello su cui il subagent ha iniziato, che potrebbe differire dal modello richiesto |1882| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modello su cui il subagente ha iniziato, che potrebbe differire dal modello richiesto |
1893| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | Modelli usati in ordine, con ripetizioni consecutive compresse; impostato solo quando il modello è stato scambiato durante l'esecuzione. Richiede Claude Code v2.1.212 o successivo |1883| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | Modelli usati in ordine, con ripetizioni consecutive compresse; impostato solo quando il modello è stato scambiato a metà esecuzione. Richiede Claude Code v2.1.212 o successivo |
1894| `totalTokens` | number | `12450` | Conteggio dei token dalla richiesta API finale del subagent: token di input, output, e cache combinati. Questo non è un totale su tutta l'esecuzione |1884| `totalTokens` | number | `12450` | Conteggio dei token dalla richiesta API finale del subagente: token di input, output, e cache combinati. Questo non è un totale su tutta l'esecuzione |
1895| `totalDurationMs` | number | `48211` | Durata di tempo reale dell'esecuzione del subagent |1885| `totalDurationMs` | number | `48211` | Durata di tempo reale dell'esecuzione del subagente |
1896| `totalToolUseCount` | number | `7` | Conteggio delle chiamate di strumenti che il subagent ha effettuato |1886| `totalToolUseCount` | number | `7` | Conteggio delle chiamate di strumenti che il subagente ha effettuato |
1897| `usage` | object | `{"input_tokens": 8320, ...}` | Suddivisione dei token per tipo della richiesta API finale: `input_tokens`, `output_tokens`, `cache_creation_input_tokens`, `cache_read_input_tokens` |1887| `usage` | object | `{"input_tokens": 8320, ...}` | Breakdown dei token per tipo della richiesta API finale: `input_tokens`, `output_tokens`, `cache_creation_input_tokens`, `cache_read_input_tokens` |
1898 1888
1899Su Claude Code v2.1.271 o successivo, un subagent che si esegue con lo strumento [`SubagentHandback`](/docs/it/tools-reference), che Claude Code fornisce in [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode), consegna il suo rapporto attraverso quello strumento piuttosto che restituirlo come testo. Il campo `content` del suo risultato `completed` porta quindi una breve nota su quel hand-back piuttosto che il rapporto stesso. Per leggere il rapporto, abbina un hook `PreToolUse` o `PostToolUse` su `SubagentHandback` e leggi `tool_input.message`.1889Su Claude Code v2.1.271 o successivo, un subagente che si esegue con lo strumento [`SubagentHandback`](/docs/it/tools-reference), che Claude Code fornisce in [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode), consegna il suo rapporto attraverso quello strumento piuttosto che restituirlo come testo. Il campo `content` del suo risultato `completed` porta quindi una breve nota su quel hand-back piuttosto che il rapporto stesso. Per leggere il rapporto, corrisponde a un hook `PreToolUse` o `PostToolUse` su `SubagentHandback` e leggi `tool_input.message`.
1900 1890
1901Per i subagent in background, lo strumento ritorna quando il compito si sposta in background, quindi `tool_response` non porta campi di utilizzo: un lancio in background ritorna immediatamente, e un compito in primo piano che Claude Code sposta in background durante l'esecuzione ritorna a quella transizione. Ha `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile`, e `resolvedModel`.1891Per i subagenti di background, lo strumento ritorna quando l'attività passa al background, quindi `tool_response` non porta campi di utilizzo: un lancio di background ritorna immediatamente, e un'attività in primo piano che Claude Code passa al background a metà esecuzione ritorna a quella transizione. Ha `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile`, e `resolvedModel`.
1902 1892
1903Su una risposta `completed`, `resolvedModel` nomina il modello su cui il subagent ha iniziato, che può differire dal valore `model` in `tool_input`, come quando `availableModels` o un altro override si applica. Su una risposta `async_launched`, `resolvedModel` nomina il modello in uso quando l'agente si è spostato in background, quindi uno scambio che è accaduto prima dello spostamento in background si riflette lì. `modelsUsed` e il comportamento di `resolvedModel` al momento dello spostamento in background richiedono Claude Code v2.1.212 o successivo.1893Su una risposta `completed`, `resolvedModel` nomina il modello su cui il subagente ha iniziato, che può differire dal valore `model` in `tool_input`, come quando `availableModels` o un altro override si applica. Su una risposta `async_launched`, `resolvedModel` nomina il modello in uso quando l'agente è passato al background, quindi uno scambio che è accaduto prima del passaggio al background si riflette lì. `modelsUsed` e il comportamento `resolvedModel` al momento del passaggio al background richiedono Claude Code v2.1.212 o successivo.
1904 1894
1905<a id="askuserquestion" />1895<a id="askuserquestion" />
1906 1896
1910 1900
1911Chiede all'utente da una a quattro domande a scelta multipla.1901Chiede all'utente da una a quattro domande a scelta multipla.
1912 1902
1913| Field | Type | Example | Description |1903| Campo | Tipo | Esempio | Descrizione |
1914| :- | :- | :- | :- |1904| :- | :- | :- | :- |
1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Domande da presentare, ciascuna con una stringa `question`, un breve `header`, un array `options`, e un flag `multiSelect` facoltativo |1905| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Domande da presentare, ciascuna con una stringa `question`, un breve `header`, un array `options`, e un flag `multiSelect` facoltativo |
1916| `answers` | object | `{"Which framework?": "React"}` | Facoltativo. Mappa il testo della domanda all'etichetta dell'opzione selezionata. Le risposte multi-select uniscono le etichette con virgole. Claude non imposta questo campo; forniscilo tramite `updatedInput` per rispondere programmaticamente |1906| `answers` | object | `{"Which framework?": "React"}` | Facoltativo. Mappa il testo della domanda all'etichetta dell'opzione selezionata. Le risposte multi-select uniscono le etichette con virgole. Claude non imposta questo campo; forniscilo tramite `updatedInput` per rispondere programmaticamente |
1919 ExitPlanMode1909 ExitPlanMode
1920</h5>1910</h5>
1921 1911
1922Presenta un piano e chiede all'utente di approvarlo prima che Claude lasci la [plan mode](/docs/it/permission-modes#analyze-before-you-edit-with-plan-mode). Claude scrive il piano in un file su disco prima di chiamare lo strumento, quindi il `tool_input` letterale dal modello è tipicamente vuoto. Claude Code inietta il contenuto del piano e il percorso del file prima di passare l'input agli hook.1912Presenta un piano e chiede all'utente di approvarlo prima che Claude lasci la [modalità piano](/docs/it/permission-modes#analyze-before-you-edit-with-plan-mode). Claude scrive il piano in un file su disco prima di chiamare lo strumento, quindi il `tool_input` letterale dal modello è tipicamente vuoto. Claude Code inietta il contenuto del piano e il percorso del file prima di passare l'input agli hook.
1923 1913
1924| Field | Type | Example | Description |1914| Campo | Tipo | Esempio | Descrizione |
1925| :- | :- | :- | :- |1915| :- | :- | :- | :- |
1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenuto del piano in Markdown. Iniettato dal file del piano su disco |1916| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenuto del piano in Markdown. Iniettato dal file del piano su disco |
1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Percorso al file del piano. Iniettato |1917| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Percorso al file del piano. Iniettato |
1930In `PostToolUse`, `tool_response` è un oggetto con campi `plan` e `filePath` che contengono il piano approvato, più flag di stato interni. Leggi `tool_response.plan` per il contenuto del piano piuttosto che rileggere il file da disco.1920In `PostToolUse`, `tool_response` è un oggetto con campi `plan` e `filePath` che contengono il piano approvato, più flag di stato interni. Leggi `tool_response.plan` per il contenuto del piano piuttosto che rileggere il file da disco.
1931 1921
1932<h4 id="pretooluse-decision-control">1922<h4 id="pretooluse-decision-control">
1933 PreToolUse decision control1923 Controllo decisionale PreToolUse
1934</h4>1924</h4>
1935 1925
1936Gli hook `PreToolUse` possono controllare se una chiamata di strumento procede. A differenza di altri hook che usano un campo `decision` di livello superiore, PreToolUse restituisce la sua decisione all'interno di un oggetto `hookSpecificOutput`. Questo gli dà un controllo più ricco: quattro risultati (consenti, nega, chiedi, o rinvia) più la capacità di modificare l'input dello strumento prima dell'esecuzione.1926Gli hook `PreToolUse` possono controllare se una chiamata di strumento procede. A differenza di altri hook che usano un campo `decision` di livello superiore, PreToolUse restituisce la sua decisione all'interno di un oggetto `hookSpecificOutput`. Questo gli dà un controllo più ricco: quattro risultati (consenti, nega, chiedi, o differisci) più la capacità di modificare l'input dello strumento prima dell'esecuzione.
1937 1927
1938| Field | Description |1928| Campo | Descrizione |
1939| :- | :- |1929| :- | :- |
1940| `permissionDecision` | `"allow"` salta il prompt di permesso, tranne per le [azioni che nessuna modalità auto-approva](/docs/it/permission-modes#actions-no-mode-auto-approves) e per `AskUserQuestion` e `ExitPlanMode`, che hanno bisogno di [`updatedInput` accoppiato con esso](#allow-with-updatedinput). `"deny"` impedisce la chiamata dello strumento. `"ask"` chiede all'utente di confermare. `"defer"` esce correttamente in modo che lo strumento possa essere ripreso più tardi. Le [regole di negazione e richiesta](/docs/it/permissions#manage-permissions) vengono comunque valutate indipendentemente da ciò che l'hook restituisce |1930| `permissionDecision` | `"allow"` salta il prompt di permesso, tranne per le [azioni che nessuna modalità auto-approva](/docs/it/permission-modes#actions-no-mode-auto-approves) e per `AskUserQuestion` e `ExitPlanMode`, che hanno bisogno di [`updatedInput` accoppiato con esso](#allow-with-updatedinput). `"deny"` impedisce la chiamata dello strumento. `"ask"` chiede all'utente di confermare. `"defer"` esce correttamente in modo che lo strumento possa essere ripreso in seguito. Le [regole di negazione e richiesta](/docs/it/permissions#manage-permissions) vengono comunque valutate indipendentemente da ciò che l'hook restituisce |
1941| `permissionDecisionReason` | Per `"allow"` e `"ask"`, mostrato all'utente ma non a Claude. Per `"deny"`, mostrato a Claude. Per `"defer"`, ignorato |1931| `permissionDecisionReason` | Per `"ask"`, mostrato all'utente ma non a Claude. Per `"deny"`, mostrato a Claude. Per `"allow"` e `"defer"`, scritto nel [log di debug](#debug-hooks) solo |
1942| `updatedInput` | Modifica i parametri di input dello strumento prima dell'esecuzione. Sostituisce l'intero oggetto di input, quindi includi i campi invariati insieme a quelli modificati. Claude Code valuta le regole di permesso e l'idoneità di [auto-background](/docs/it/tools-reference#background-commands) di un comando Bash rispetto all'input che il tuo hook restituisce, non l'input che Claude ha inviato. Combina con `"allow"` per auto-approvare, o `"ask"` per mostrare l'input modificato all'utente. Per `"defer"`, ignorato |1932| `updatedInput` | Modifica i parametri di input dello strumento prima dell'esecuzione. Sostituisce l'intero oggetto di input, quindi includi i campi invariati insieme a quelli modificati. Claude Code valuta le regole di permesso e l'idoneità [auto-background](/docs/it/tools-reference#background-commands) di un comando Bash rispetto all'input che il tuo hook restituisce, non l'input che Claude ha inviato. Combina con `"allow"` per auto-approvare, o `"ask"` per mostrare l'input modificato all'utente. Per `"defer"`, ignorato |
1943| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al risultato dello strumento. Ignorato quando `permissionDecision` è `"defer"`. Vedi [Add context for Claude](#add-context-for-claude) |1933| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al risultato dello strumento. Ignorato quando `permissionDecision` è `"defer"`. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) |
1944 1934
1945Quando più hook PreToolUse restituiscono decisioni diverse, la precedenza è `deny` > `defer` > `ask` > `allow`.1935Quando più hook PreToolUse restituiscono decisioni diverse, la precedenza è `deny` > `defer` > `ask` > `allow`.
1946 1936
1947Un hook che blocca uscendo con 2 si instrada nello stesso modo di `"deny"`: Claude vede il messaggio stderr come il motivo della negazione.1937Un hook che blocca uscendo con 2 si instrada allo stesso modo di `"deny"`: Claude vede il messaggio stderr come il motivo della negazione.
1948 1938
1949Quando un hook restituisce `"ask"`, il prompt di permesso visualizzato all'utente include un'etichetta che identifica da dove proviene l'hook: `[settings]` per un hook da qualsiasi file di impostazioni o dal frontmatter dell'agente, `[plugin:<name>]` per l'hook di un plugin, o `[skill]` per un hook dal frontmatter della skill. Questo aiuta gli utenti a capire quale fonte di configurazione sta richiedendo la conferma.1939Quando un hook restituisce `"ask"`, il prompt di permesso visualizzato all'utente include un'etichetta che identifica da dove viene l'hook: `[settings]` per un hook da qualsiasi file di impostazioni o dal frontmatter dell'agente, `[plugin:<name>]` per l'hook di un plugin, o `[skill]` per un hook dal frontmatter della skill. Questo aiuta gli utenti a capire quale fonte di configurazione sta richiedendo la conferma.
1950 1940
1951Un `"ask"` di un hook forza anche un prompt di permesso in [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode): il classificatore può comunque negare la chiamata dello strumento, ma non può approvare la chiamata silenziosamente. Prima della v2.1.211, il classificatore poteva approvare un comando Bash in esecuzione al di fuori della [sandbox](/docs/it/sandboxing) senza mostrare il prompt che l'hook ha richiesto; il classificatore ha comunque applicato le sue stesse regole di sicurezza a quel comando, e un `"deny"` dell'hook era sempre onorato.1941Un `"ask"` di un hook forza anche un prompt di permesso in [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode): il classificatore può comunque negare la chiamata dello strumento, ma non può approvare la chiamata silenziosamente. Prima della v2.1.211, il classificatore potrebbe approvare un comando Bash in esecuzione al di fuori della [sandbox](/docs/it/sandboxing) senza mostrare il prompt che l'hook ha richiesto; il classificatore ha comunque applicato le sue stesse regole di sicurezza a quel comando, e un `"deny"` dell'hook è sempre stato onorato.
1952 1942
1953```json theme={null}1943```json theme={null}
1954{1944{
1966 1956
1967<span id="allow-with-updatedinput" />1957<span id="allow-with-updatedinput" />
1968 1958
1969In [non-interactive mode](/docs/it/headless) con il flag `-p`, Claude Code offre `AskUserQuestion` e `ExitPlanMode` solo quando l'esecuzione ha un [permission host](/docs/it/headless#turn-off-permission-prompts-in-unattended-runs) per ricevere il prompt, come un callback `canUseTool` di Agent SDK. Questi strumenti richiedono l'interazione dell'utente. Restituire `permissionDecision: "allow"` insieme a `updatedInput` soddisfa quel requisito: l'hook legge l'input dello strumento da stdin, raccoglie la risposta attraverso la tua UI, e la restituisce in `updatedInput` in modo che lo strumento si esegua senza chiedere. Restituire `"allow"` da solo non è sufficiente per questi strumenti. Per `AskUserQuestion`, ripeti l'array `questions` originale e aggiungi un oggetto [`answers`](#askuserquestion) che mappa il testo di ogni domanda alla risposta scelta.1959In [modalità non interattiva](/docs/it/headless) con il flag `-p`, Claude Code offre `AskUserQuestion` e `ExitPlanMode` solo quando l'esecuzione ha un [host di permesso](/docs/it/headless#turn-off-permission-prompts-in-unattended-runs) per ricevere il prompt, come un callback `canUseTool` di Agent SDK. Questi strumenti richiedono l'interazione dell'utente. Restituire `permissionDecision: "allow"` insieme a `updatedInput` soddisfa quel requisito: l'hook legge l'input dello strumento da stdin, raccoglie la risposta attraverso la tua UI, e la restituisce in `updatedInput` in modo che lo strumento si esegua senza chiedere. Restituire `"allow"` da solo non è sufficiente per questi strumenti. Per `AskUserQuestion`, ripeti l'array `questions` originale e aggiungi un oggetto [`answers`](#askuserquestion) che mappa il testo di ogni domanda alla risposta scelta.
1970 1960
1971A partire dalla v2.1.199, uno strumento MCP il cui server lo contrassegna con [`_meta["anthropic/requiresUserInteraction"]`](/docs/it/mcp#require-approval-for-a-specific-tool) è più rigoroso: un hook non può saltare il suo prompt di approvazione con `"allow"`, con o senza `updatedInput`, perché Claude Code non può confermare che l'hook ha raccolto l'interazione di cui lo strumento ha bisogno.1961A partire dalla v2.1.199, uno strumento MCP il cui server lo contrassegna con [`_meta["anthropic/requiresUserInteraction"]`](/docs/it/mcp#require-approval-for-a-specific-tool) è più rigoroso: un hook non può saltare il suo prompt di approvazione con `"allow"`, con o senza `updatedInput`, perché Claude Code non può confermare che l'hook ha raccolto l'interazione di cui lo strumento ha bisogno.
1972 1962
1973<Note>1963<Note>
1974 PreToolUse ha precedentemente usato campi `decision` e `reason` di livello superiore, ma questi sono deprecati per questo evento. Usa `hookSpecificOutput.permissionDecision` e `hookSpecificOutput.permissionDecisionReason` invece. I valori deprecati `"approve"` e `"block"` si mappano a `"allow"` e `"deny"` rispettivamente. Altri eventi come PostToolUse e Stop continuano a usare `decision` e `reason` di livello superiore come loro formato attuale.1964 PreToolUse in precedenza usava campi `decision` e `reason` di livello superiore, ma questi sono deprecati per questo evento. Usa `hookSpecificOutput.permissionDecision` e `hookSpecificOutput.permissionDecisionReason` invece. I valori deprecati `"approve"` e `"block"` si mappano a `"allow"` e `"deny"` rispettivamente. Altri eventi come PostToolUse e Stop continuano a usare `decision` e `reason` di livello superiore come loro formato attuale.
1975</Note>1965</Note>
1976 1966
1977<h4 id="defer-a-tool-call-for-later">1967<h4 id="defer-a-tool-call-for-later">
1978 Defer a tool call for later1968 Differisci una chiamata di strumento per dopo
1979</h4>1969</h4>
1980 1970
1981`"defer"` è per le integrazioni che eseguono `claude -p` come un sottoprocesso e leggono il suo output JSON, come un'app Agent SDK o un'UI personalizzata costruita su Claude Code. Ti consente a quel processo di chiamata di mettere in pausa Claude a una chiamata di strumento, raccogliere input attraverso la sua interfaccia, e riprendere da dove si era fermato. Claude Code onora questo valore solo in [non-interactive mode](/docs/it/headless) con il flag `-p`. Nelle sessioni interattive registra un avviso e ignora il risultato dell'hook.1971`"defer"` è per le integrazioni che eseguono `claude -p` come un sottoprocesso e leggono il suo output JSON, come un'app Agent SDK o un'UI personalizzata costruita su Claude Code. Ti consente a quel processo di chiamata di mettere in pausa Claude a una chiamata di strumento, raccogliere l'input attraverso la sua interfaccia, e riprendere da dove si era fermato. Claude Code onora questo valore solo in [modalità non interattiva](/docs/it/headless) con il flag `-p`. Nelle sessioni interattive registra un avviso e ignora il risultato dell'hook.
1982 1972
1983Lo strumento `AskUserQuestion` è il caso tipico: Claude vuole chiedere qualcosa all'utente, ma non c'è un terminale per rispondere. Un'esecuzione `-p` offre `AskUserQuestion` solo quando ha un [permission host](/docs/it/headless#turn-off-permission-prompts-in-unattended-runs), come uno strumento MCP che passi con `--permission-prompt-tool`, quindi avvia l'esecuzione con uno. Il round trip funziona così:1973Lo strumento `AskUserQuestion` è il caso tipico: Claude vuole chiedere qualcosa all'utente, ma non c'è terminale per rispondere. Un'esecuzione `-p` offre `AskUserQuestion` solo quando ha un [host di permesso](/docs/it/headless#turn-off-permission-prompts-in-unattended-runs), come uno strumento MCP che passi con `--permission-prompt-tool`, quindi avvia l'esecuzione con uno. Il round trip funziona così:
1984 1974
19851. Claude chiama `AskUserQuestion`. L'hook `PreToolUse` si attiva.19751. Claude chiama `AskUserQuestion`. L'hook `PreToolUse` si attiva.
19862. L'hook restituisce `permissionDecision: "defer"`. Lo strumento non si esegue. Il processo esce con `stop_reason: "tool_deferred"` e la chiamata dello strumento in sospeso preservata nella trascrizione.19762. L'hook restituisce `permissionDecision: "defer"`. Lo strumento non si esegue. Il processo esce con `stop_reason: "tool_deferred"` e la chiamata dello strumento in sospeso preservata nella trascrizione.
19873. Il processo di chiamata legge `deferred_tool_use` dal risultato dell'SDK, visualizza la domanda nella sua UI, e attende una risposta.19773. Il processo di chiamata legge `deferred_tool_use` dal risultato dell'SDK, visualizza la domanda nella sua UI, e attende una risposta.
19884. Il processo di chiamata esegue `claude -p --resume <session-id>` con lo stesso permission host. La stessa chiamata dello strumento attiva `PreToolUse` di nuovo.19784. Il processo di chiamata esegue `claude -p --resume <session-id>` con lo stesso host di permesso. La stessa chiamata dello strumento attiva `PreToolUse` di nuovo.
19895. L'hook restituisce `permissionDecision: "allow"` con la risposta in `updatedInput`. Lo strumento si esegue e Claude continua.19795. L'hook restituisce `permissionDecision: "allow"` con la risposta in `updatedInput`. Lo strumento si esegue e Claude continua.
1990 1980
1991Il campo `deferred_tool_use` porta l'`id`, il `name`, e l'`input` dello strumento. L'`input` è i parametri che Claude ha generato per la chiamata dello strumento, catturati prima dell'esecuzione:1981Il campo `deferred_tool_use` porta l'`id` dello strumento, il `name`, e l'`input`. L'`input` è i parametri che Claude ha generato per la chiamata dello strumento, catturati prima dell'esecuzione:
1992 1982
1993```json theme={null}1983```json theme={null}
1994{1984{
2004}1994}
2005```1995```
2006 1996
2007Non c'è timeout o limite di tentativi. La sessione rimane su disco finché non la riprendi, soggetta alla pulizia [`cleanupPeriodDays`](/docs/it/settings-reference#cleanupperioddays), che elimina i file di sessione dopo 30 giorni per impostazione predefinita, seguendo le [regole di pulizia della conservazione](/docs/it/claude-directory#cleaned-up-automatically). Se la risposta non è pronta quando riprendi, l'hook può restituire `"defer"` di nuovo e il processo esce nello stesso modo. Il processo di chiamata controlla quando interrompere il ciclo restituendo infine `"allow"` o `"deny"` dall'hook.1997Non c'è timeout o limite di tentativi. La sessione rimane su disco fino a quando non la riprendi, soggetta alla spazzata di conservazione [`cleanupPeriodDays`](/docs/it/settings-reference#cleanupperioddays), che elimina i file di sessione dopo 30 giorni per impostazione predefinita, seguendo le [regole di spazzata di conservazione](/docs/it/claude-directory#cleaned-up-automatically). Se la risposta non è pronta quando riprendi, l'hook può restituire `"defer"` di nuovo e il processo esce allo stesso modo. Il processo di chiamata controlla quando interrompere il loop restituendo infine `"allow"` o `"deny"` dall'hook.
2008 1998
2009`"defer"` funziona solo quando Claude effettua una singola chiamata di strumento nel turno. Se Claude effettua diverse chiamate di strumenti contemporaneamente, `"defer"` viene ignorato con un avviso e lo strumento procede attraverso il flusso di permesso normale. Il vincolo esiste perché la ripresa può solo ri-eseguire uno strumento: non c'è modo di rinviare una chiamata da un batch senza lasciare le altre irrisolte.1999`"defer"` funziona solo quando Claude effettua una singola chiamata di strumento nel turno. Se Claude effettua diverse chiamate di strumenti contemporaneamente, `"defer"` viene ignorato con un avviso e lo strumento procede attraverso il flusso di permesso normale. Il vincolo esiste perché resume può solo rieseguire uno strumento: non c'è modo di differire una chiamata da un batch senza lasciare le altre irrisolte.
2010 2000
2011Se lo strumento rinviato non è più disponibile quando riprendi, il processo esce con `stop_reason: "tool_deferred_unavailable"` e `is_error: true` prima che l'hook si attivi. Questo accade quando un server MCP che ha fornito lo strumento non è connesso per la sessione ripresa. Il payload `deferred_tool_use` è comunque incluso in modo che tu possa identificare quale strumento è scomparso.2001Se lo strumento differito non è più disponibile quando riprendi, il processo esce con `stop_reason: "tool_deferred_unavailable"` e `is_error: true` prima che l'hook si attivi. Questo accade quando un server MCP che ha fornito lo strumento non è connesso per la sessione ripresa. Il payload `deferred_tool_use` è ancora incluso in modo che tu possa identificare quale strumento è scomparso.
2012 2002
2013<Note>2003<Note>
2014 Per riprendere una sessione rinviata in plan mode, passa [`--permission-prompt-tool`](/docs/it/cli-reference#cli-flags) insieme a `--resume` in modo che Claude Code possa presentare il piano per l'approvazione. Senza di esso, Claude Code non ripristina la plan mode. Richiede Claude Code v2.1.246 o successivo.2004 Per riprendere una sessione differita in modalità piano, passa [`--permission-prompt-tool`](/docs/it/cli-reference#cli-flags) insieme a `--resume` in modo che Claude Code possa presentare il piano per l'approvazione. Se passi certi altri flag di lancio, l'esecuzione ripresa non ritorna alla modalità piano; vedi [Riprendi in modalità piano con `-p`](/docs/it/sessions#resume-in-plan-mode-with-p). Richiede Claude Code v2.1.246 o successivo.
2015 2005
2016 Quando riprendi con `-p`, Claude Code non ripristina nessun altro modo di permesso archiviato. Avvia l'esecuzione nel modo di permesso che una nuova esecuzione `claude -p` avvierebbe, quindi passa `--permission-mode` o `--dangerously-skip-permissions` di nuovo se la sessione rinviata ne ha usato uno. Quando riprendi con `claude --resume <session-id>` senza `-p`, Claude Code ripristina il modo di permesso archiviato, con le eccezioni elencate in [permission mode on resume](/docs/it/sessions#permission-mode-on-resume).2006 Quando riprendi con `-p`, Claude Code non ripristina alcun'altra modalità di permesso archiviata. Avvia l'esecuzione nella modalità di permesso che una nuova esecuzione `claude -p` avvierebbe, quindi passa `--permission-mode` o `--dangerously-skip-permissions` di nuovo se la sessione differita ne ha usata una. Quando riprendi con `claude --resume <session-id>` senza `-p`, Claude Code ripristina la modalità di permesso archiviata, con le eccezioni elencate in [modalità di permesso su resume](/docs/it/sessions#permission-mode-on-resume).
2017</Note>2007</Note>
2018 2008
2019<h3 id="permissionrequest">2009<h3 id="permissionrequest">
2020 PermissionRequest2010 PermissionRequest
2021</h3>2011</h3>
2022 2012
2023Si esegue quando Claude Code sta per chiederti il permesso di usare uno strumento. Nelle sessioni che non possono mostrare un prompt, come i subagent in background in [non-interactive mode](/docs/it/headless), Claude Code esegue comunque questi hook, e se nessun hook restituisce una decisione, nega la chiamata dello strumento.2013Si esegue quando Claude Code sta per chiederti il permesso di usare uno strumento. Nelle sessioni che non possono mostrare un prompt, come i subagenti di background in [modalità non interattiva](/docs/it/headless), Claude Code esegue comunque questi hook, e se nessun hook restituisce una decisione, nega la chiamata dello strumento.
2024Usa [PermissionRequest decision control](#permissionrequest-decision-control) per consentire o negare per conto dell'utente.2014Usa il [controllo decisionale PermissionRequest](#permissionrequest-decision-control) per consentire o negare per conto dell'utente.
2025 2015
2026Usa questo evento quando hai bisogno di un segnale nel momento in cui Claude chiede il permesso di usare uno strumento. Claude Code esegue un hook [Notification](#notification) con il tipo `permission_prompt` solo dopo che il prompt ha atteso circa sei secondi.2016Usa questo evento quando hai bisogno di un segnale nel momento in cui Claude chiede il permesso di usare uno strumento. Claude Code esegue un hook [Notification](#notification) con il tipo `permission_prompt` solo dopo che il prompt ha atteso circa sei secondi.
2027 2017
2028Claude Code non esegue gli hook PermissionRequest per la [richiesta di rete](/docs/it/sandboxing#network-isolation) di un comando sandboxed. Per ottenere un segnale per quel prompt, usa il tipo di notifica `permission_prompt`.2018Claude Code non esegue hook PermissionRequest per la [richiesta di rete](/docs/it/sandboxing#network-isolation) di un comando in sandbox. Per ottenere un segnale per quel prompt, usa il tipo di notifica `permission_prompt`.
2029 2019
2030Corrisponde al nome dello strumento, gli stessi valori di PreToolUse.2020Corrisponde al nome dello strumento, gli stessi valori di PreToolUse.
2031 2021
2032<h4 id="permissionrequest-input">2022<h4 id="permissionrequest-input">
2033 PermissionRequest input2023 Input PermissionRequest
2034</h4>2024</h4>
2035 2025
2036Gli hook PermissionRequest ricevono i campi `tool_name` e `tool_input` come gli hook PreToolUse, ma senza `tool_use_id`. Per uno strumento MCP, ricevono anche l'oggetto [`mcp_server`](#pretooluse-input). Un array `permission_suggestions` facoltativo contiene gli [permission updates](#permission-update-entries) che Claude Code suggerisce per questa richiesta, come aggiungere una regola di consentimento o cambiare il modo di permesso.2026Gli hook PermissionRequest ricevono i campi `tool_name` e `tool_input` come gli hook PreToolUse, ma senza `tool_use_id`. Per uno strumento MCP, ricevono anche l'oggetto [`mcp_server`](#pretooluse-input). Un array `permission_suggestions` facoltativo contiene gli [aggiornamenti di permesso](#permission-update-entries) che Claude Code suggerisce per questa richiesta, come aggiungere una regola di consentimento o cambiare la modalità di permesso.
2037 2027
2038L'array `permission_suggestions` non è un elenco esatto delle opzioni che vedi, perché ogni dialogo di permesso costruisce le sue stesse opzioni. Alcuni dialoghi, come quello per le modifiche ai file, non leggono affatto l'array e derivano le loro opzioni dalla richiesta stessa. Un dialogo che lo legge può comunque trattenere un'opzione il cui suggerimento rimane nell'array, ad esempio quando [`allowManagedPermissionRulesOnly`](/docs/it/settings-reference#allowmanagedpermissionrulesonly) nasconde le opzioni di salvataggio delle regole. Può anche offrire opzioni che non hanno una voce di suggerimento, come [**Yes, and switch to auto mode**](/docs/it/permission-modes#switch-permission-modes), che cambia il modo di permesso direttamente piuttosto che attraverso un aggiornamento di permesso.2028L'array `permission_suggestions` non è un elenco esatto delle opzioni che vedi, perché ogni dialogo di permesso costruisce le sue stesse opzioni. Alcuni dialoghi, come quello per le modifiche ai file, non leggono affatto l'array e derivano le loro opzioni dalla richiesta stessa. Un dialogo che lo legge può comunque trattenere un'opzione il cui suggerimento rimane nell'array, ad esempio quando [`allowManagedPermissionRulesOnly`](/docs/it/settings-reference#allowmanagedpermissionrulesonly) nasconde le opzioni di salvataggio delle regole. Può anche offrire opzioni che non hanno voce di suggerimento, come [**Sì, e passa alla modalità auto**](/docs/it/permission-modes#switch-permission-modes), che cambia la modalità di permesso direttamente piuttosto che attraverso un aggiornamento di permesso.
2039 2029
2040Gli hook PreToolUse si eseguono prima di ogni chiamata di strumento, indipendentemente dal fatto che abbia bisogno di permesso. Gli hook PermissionRequest si eseguono solo quando Claude Code sta per chiederti il permesso, o quando altrimenti auto-negherebbe una chiamata che non può chiedere. Nessuno dei due eventi si attiva per [`EndConversation`](/docs/it/tools-reference#endconversation-tool-behavior).2030Gli hook PreToolUse si eseguono prima di ogni chiamata di strumento, indipendentemente dal fatto che abbia bisogno di permesso. Gli hook PermissionRequest si eseguono solo quando Claude Code sta per chiederti il permesso, o quando altrimenti auto-negherebbe una chiamata che non può chiedere. Nessuno dei due eventi si attiva per [`EndConversation`](/docs/it/tools-reference#endconversation-tool-behavior).
2041 2031
2063```2053```
2064 2054
2065<h4 id="permissionrequest-decision-control">2055<h4 id="permissionrequest-decision-control">
2066 PermissionRequest decision control2056 Controllo decisionale PermissionRequest
2067</h4>2057</h4>
2068 2058
2069Gli hook `PermissionRequest` possono consentire o negare le richieste di permesso. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire un oggetto `decision` con questi campi specifici dell'evento:2059Gli hook `PermissionRequest` possono consentire o negare le richieste di permesso. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire un oggetto `decision` con questi campi specifici dell'evento:
2070 2060
2071| Field | Description |2061| Campo | Descrizione |
2072| :- | :- |2062| :- | :- |
2073| `behavior` | `"allow"` concede il permesso, `"deny"` lo nega. Le [regole di negazione e richiesta](/docs/it/permissions#manage-permissions) vengono comunque valutate, quindi un hook che restituisce `"allow"` non sovrascrive una regola di negazione corrispondente |2063| `behavior` | `"allow"` concede il permesso, `"deny"` lo nega. Le [regole di negazione e richiesta](/docs/it/permissions#manage-permissions) vengono comunque valutate, quindi un hook che restituisce `"allow"` non sovrascrive una regola di negazione corrispondente |
2074| `updatedInput` | Solo per `"allow"`: modifica i parametri di input dello strumento prima dell'esecuzione. Sostituisce l'intero oggetto di input, quindi includi i campi invariati insieme a quelli modificati. L'input modificato viene rivalutato rispetto alle regole di negazione e richiesta |2064| `updatedInput` | Per `"allow"` solo: modifica i parametri di input dello strumento prima dell'esecuzione. Sostituisce l'intero oggetto di input, quindi includi i campi invariati insieme a quelli modificati. L'input modificato viene rivalutato rispetto alle regole di negazione e richiesta |
2075| `updatedPermissions` | Solo per `"allow"`: array di [permission update entries](#permission-update-entries) da applicare, come aggiungere una regola di consentimento o cambiare il modo di permesso della sessione |2065| `updatedPermissions` | Per `"allow"` solo: array di [voci di aggiornamento di permesso](#permission-update-entries) da applicare, come aggiungere una regola di consentimento o cambiare la modalità di permesso della sessione |
2076| `message` | Solo per `"deny"`: dice a Claude perché il permesso è stato negato |2066| `message` | Per `"deny"` solo: dice a Claude perché il permesso è stato negato |
2077| `interrupt` | Solo per `"deny"`: se `true`, ferma Claude |2067| `interrupt` | Per `"deny"` solo: se `true`, ferma Claude |
2078 2068
2079Un hook che esce con 2 senza un oggetto `decision` lascia il flusso di permesso invariato, e il suo stderr viene scartato. Solo l'oggetto `decision` può concedere o negare la richiesta.2069Un hook che esce con 2 senza un oggetto `decision` lascia il flusso di permesso invariato, e il suo stderr viene scartato. Solo l'oggetto `decision` può concedere o negare la richiesta.
2080 2070
2093```2083```
2094 2084
2095<h4 id="permission-update-entries">2085<h4 id="permission-update-entries">
2096 Permission update entries2086 Voci di aggiornamento di permesso
2097</h4>2087</h4>
2098 2088
2099Il campo di output `updatedPermissions` e il campo di input [`permission_suggestions`](#permissionrequest-input) usano entrambi lo stesso array di oggetti di voce. Ogni voce ha un `type` che determina i suoi altri campi, e una `destination` che controlla dove viene scritta la modifica.2089Il campo di output `updatedPermissions` e il campo di input [`permission_suggestions`](#permissionrequest-input) usano entrambi lo stesso array di oggetti di voce. Ogni voce ha un `type` che determina i suoi altri campi, e una `destination` che controlla dove viene scritto il cambiamento.
2100 2090
2101| `type` | Fields | Effect |2091| `type` | Campi | Effetto |
2102| :- | :- | :- |2092| :- | :- | :- |
2103| `addRules` | `rules`, `behavior`, `destination` | Aggiunge regole di permesso. `rules` è un array di oggetti `{toolName, ruleContent?}`. Ometti `ruleContent` per corrispondere all'intero strumento. `behavior` è `"allow"`, `"deny"`, o `"ask"` |2093| `addRules` | `rules`, `behavior`, `destination` | Aggiunge regole di permesso. `rules` è un array di oggetti `{toolName, ruleContent?}`. Ometti `ruleContent` per corrispondere all'intero strumento. `behavior` è `"allow"`, `"deny"`, o `"ask"` |
2104| `replaceRules` | `rules`, `behavior`, `destination` | Sostituisce tutte le regole del `behavior` dato alla `destination` con le `rules` fornite |2094| `replaceRules` | `rules`, `behavior`, `destination` | Sostituisce tutte le regole del `behavior` dato alla `destination` con le `rules` fornite |
2105| `removeRules` | `rules`, `behavior`, `destination` | Rimuove le regole corrispondenti del `behavior` dato |2095| `removeRules` | `rules`, `behavior`, `destination` | Rimuove le regole corrispondenti del `behavior` dato |
2106| `setMode` | `mode`, `destination` | Cambia il modo di permesso. I modi validi sono `default`, `auto`, `acceptEdits`, `dontAsk`, `bypassPermissions`, `plan`, e `manual` come alias per `default`. L'alias `manual` richiede Claude Code v2.1.200 o successivo |2096| `setMode` | `mode`, `destination` | Cambia la modalità di permesso. Le modalità valide sono `default`, `auto`, `acceptEdits`, `dontAsk`, `bypassPermissions`, `plan`, e `manual` come alias per `default`. L'alias `manual` richiede Claude Code v2.1.200 o successivo |
2107| `addDirectories` | `directories`, `destination` | Aggiunge directory di lavoro. `directories` è un array di stringhe di percorso |2097| `addDirectories` | `directories`, `destination` | Aggiunge directory di lavoro. `directories` è un array di stringhe di percorso |
2108| `removeDirectories` | `directories`, `destination` | Rimuove directory di lavoro |2098| `removeDirectories` | `directories`, `destination` | Rimuove directory di lavoro |
2109 2099
2110<Note>2100<Note>
2111 `setMode` con `bypassPermissions` ha effetto solo se hai avviato la sessione con il modo bypass già disponibile: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, o `permissions.defaultMode: "bypassPermissions"` nelle [impostazioni utente, `--settings`, o gestite](/docs/it/settings-reference#permissions-defaultmode). Altrimenti l'aggiornamento è un no-op. L'aggiornamento è anche un no-op quando [`permissions.disableBypassPermissionsMode`](/docs/it/permissions#managed-settings) disabilita il modo, o quando la sessione inizia in [restricted mode](/docs/it/cli-reference#cli-flags).2101 `setMode` con `bypassPermissions` ha effetto solo se hai avviato la sessione con la modalità bypass già disponibile: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, o `permissions.defaultMode: "bypassPermissions"` nelle [impostazioni utente, `--settings`, o gestite](/docs/it/settings-reference#permissions-defaultmode). Altrimenti l'aggiornamento è un no-op. L'aggiornamento è anche un no-op quando [`permissions.disableBypassPermissionsMode`](/docs/it/permissions#managed-settings) disabilita la modalità, o quando la sessione inizia in [modalità ristretta](/docs/it/cli-reference#cli-flags).
2112 2102
2113 `bypassPermissions` non viene mai persistito come `defaultMode` indipendentemente da `destination`.2103 `bypassPermissions` non viene mai persistito come `defaultMode` indipendentemente da `destination`.
2114</Note>2104</Note>
2115 2105
2116Il campo `destination` su ogni voce determina se la modifica rimane in memoria o persiste in un file di impostazioni.2106Il campo `destination` su ogni voce determina se il cambiamento rimane in memoria o persiste in un file di impostazioni.
2117 2107
2118| `destination` | Writes to |2108| `destination` | Scrive su |
2119| :- | :- |2109| :- | :- |
2120| `session` | solo in memoria, scartato quando la sessione termina |2110| `session` | solo in memoria, scartato quando la sessione termina |
2121| `localSettings` | `.claude/settings.local.json` |2111| `localSettings` | `.claude/settings.local.json` |
2135Corrisponde più ampiamente quando il nome dello strumento non è il filtro giusto:2125Corrisponde più ampiamente quando il nome dello strumento non è il filtro giusto:
2136 2126
2137* Per eseguire un hook dopo che qualsiasi strumento si completa con successo, ometti il `matcher` o impostalo su `"*"`. Il tuo hook può quindi scoprire cosa è cambiato da solo, ad esempio eseguendo `git status --porcelain`, che elenca anche i file non tracciati che `git diff` perde. Per le chiamate di strumenti che falliscono, aggiungi lo stesso hook sotto [PostToolUseFailure](#posttoolusefailure).2127* Per eseguire un hook dopo che qualsiasi strumento si completa con successo, ometti il `matcher` o impostalo su `"*"`. Il tuo hook può quindi scoprire cosa è cambiato da solo, ad esempio eseguendo `git status --porcelain`, che elenca anche i file non tracciati che `git diff` perde. Per le chiamate di strumenti che falliscono, aggiungi lo stesso hook sotto [PostToolUseFailure](#posttoolusefailure).
2138* Per eseguire un hook quando un file specifico cambia su disco, qualunque cosa l'abbia scritto, usa [FileChanged](#filechanged). Claude Code non esegue un hook `PostToolUse` che corrisponde a `Edit|Write` quando un comando `Bash` o un processo al di fuori di Claude Code riscrive lo stesso file.2128* Per eseguire un hook quando un file specifico cambia su disco, indipendentemente da chi lo ha scritto, usa [FileChanged](#filechanged). Claude Code non esegue un hook `PostToolUse` che corrisponde a `Edit|Write` quando un comando `Bash` o un processo al di fuori di Claude Code riscrive lo stesso file.
2139 2129
2140<h4 id="posttooluse-input">2130<h4 id="posttooluse-input">
2141 PostToolUse input2131 Input PostToolUse
2142</h4>2132</h4>
2143 2133
2144Gli hook `PostToolUse` si attivano dopo che uno strumento si è già eseguito con successo. L'input include sia `tool_input`, gli argomenti inviati allo strumento, che `tool_response`, il risultato che ha restituito. Lo schema esatto per entrambi dipende dallo strumento. I percorsi `tool_input` dello strumento di file arrivano nello stesso formato di [PreToolUse](#pretooluse-input): sempre assoluti, con i separatori nativi della piattaforma, quindi backslash su Windows. Per uno strumento MCP, l'input porta anche l'oggetto [`mcp_server`](#pretooluse-input).2134Gli hook `PostToolUse` si attivano dopo che uno strumento si è già eseguito con successo. L'input include sia `tool_input`, gli argomenti inviati allo strumento, che `tool_response`, il risultato che ha restituito. Lo schema esatto per entrambi dipende dallo strumento. I percorsi `tool_input` dello strumento di file arrivano nello stesso formato di [PreToolUse](#pretooluse-input): sempre assoluti, con i separatori nativi della piattaforma, quindi backslash su Windows. Per uno strumento MCP, l'input porta anche l'oggetto [`mcp_server`](#pretooluse-input).
2164}2154}
2165```2155```
2166 2156
2167| Field | Description |2157| Campo | Descrizione |
2168| :- | :- |2158| :- | :- |
2169| `duration_ms` | Facoltativo. Tempo di esecuzione dello strumento in millisecondi. Esclude il tempo trascorso nei prompt di permesso e negli hook PreToolUse |2159| `duration_ms` | Facoltativo. Tempo di esecuzione dello strumento in millisecondi. Esclude il tempo trascorso nei prompt di permesso e negli hook PreToolUse |
2170 2160
2171<h4 id="posttooluse-decision-control">2161<h4 id="posttooluse-decision-control">
2172 PostToolUse decision control2162 Controllo decisionale PostToolUse
2173</h4>2163</h4>
2174 2164
2175Gli hook `PostToolUse` possono fornire feedback a Claude dopo l'esecuzione dello strumento. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:2165Gli hook `PostToolUse` possono fornire feedback a Claude dopo l'esecuzione dello strumento. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:
2176 2166
2177| Field | Description |2167| Campo | Descrizione |
2178| :- | :- |2168| :- | :- |
2179| `decision` | `"block"` aggiunge il `reason` accanto al risultato dello strumento. Claude vede comunque l'output originale; per sostituirlo, usa `updatedToolOutput` |2169| `decision` | `"block"` aggiunge il `reason` accanto al risultato dello strumento. Claude vede comunque l'output originale; per sostituirlo, usa `updatedToolOutput` |
2180| `reason` | Spiegazione mostrata a Claude quando `decision` è `"block"` |2170| `reason` | Spiegazione mostrata a Claude quando `decision` è `"block"` |
2181| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al risultato dello strumento. Vedi [Add context for Claude](#add-context-for-claude) |2171| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al risultato dello strumento. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) |
2182| `classifierContext` | Breve nota su questo risultato della chiamata per il classificatore [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) piuttosto che per Claude. Vedi [Annotate a result for the auto mode classifier](#annotate-a-result-for-the-auto-mode-classifier). Richiede Claude Code v2.1.236 o successivo |2172| `classifierContext` | Breve nota su questo risultato della chiamata per il classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) piuttosto che per Claude. Vedi [Annota un risultato per il classificatore della modalità auto](#annotate-a-result-for-the-auto-mode-classifier). Richiede Claude Code v2.1.236 o successivo |
2183| `updatedToolOutput` | Sostituisce l'output dello strumento con il valore fornito prima che venga inviato a Claude. Il valore deve corrispondere alla forma di output dello strumento |2173| `updatedToolOutput` | Sostituisce l'output dello strumento con il valore fornito prima che venga inviato a Claude. Il valore deve corrispondere alla forma di output dello strumento |
2184| `updatedMCPToolOutput` | Sostituisce l'output solo per gli [strumenti MCP](#match-mcp-tools). Preferisci `updatedToolOutput`, che funziona per tutti gli strumenti |2174| `updatedMCPToolOutput` | Sostituisce l'output per gli [strumenti MCP](#match-mcp-tools) solo. Preferisci `updatedToolOutput`, che funziona per tutti gli strumenti |
2185 2175
2186L'esempio seguente sostituisce l'output di una chiamata `Bash`. Il valore di sostituzione corrisponde alla forma di output dello strumento `Bash`:2176L'esempio sottostante sostituisce l'output di una chiamata `Bash`. Il valore di sostituzione corrisponde alla forma di output dello strumento `Bash`:
2187 2177
2188```json theme={null}2178```json theme={null}
2189{2179{
2203<Warning>2193<Warning>
2204 `updatedToolOutput` cambia solo ciò che Claude vede. Lo strumento si è già eseguito nel momento in cui l'hook si attiva, quindi tutti i file scritti, i comandi eseguiti, o le richieste di rete inviate hanno già avuto effetto. La telemetria come gli span degli strumenti OpenTelemetry e gli eventi di analisi catturano anche l'output originale prima che l'hook si esegua. Per prevenire o modificare una chiamata di strumento prima che si esegua, usa un hook [PreToolUse](#pretooluse) invece.2194 `updatedToolOutput` cambia solo ciò che Claude vede. Lo strumento si è già eseguito nel momento in cui l'hook si attiva, quindi tutti i file scritti, i comandi eseguiti, o le richieste di rete inviate hanno già avuto effetto. La telemetria come gli span degli strumenti OpenTelemetry e gli eventi di analisi catturano anche l'output originale prima che l'hook si esegua. Per prevenire o modificare una chiamata di strumento prima che si esegua, usa un hook [PreToolUse](#pretooluse) invece.
2205 2195
2206 Il valore di sostituzione deve corrispondere alla forma di output dello strumento. Gli strumenti incorporati restituiscono oggetti strutturati piuttosto che stringhe semplici. Ad esempio, `Bash` restituisce un oggetto con campi `stdout`, `stderr`, `interrupted`, e `isImage`. Per gli strumenti incorporati, un valore che non corrisponde allo schema di output dello strumento viene ignorato e viene usato l'output originale. L'output dello strumento MCP viene passato senza convalida dello schema. Rimuovere i dettagli di errore di cui Claude ha bisogno può causare che proceda su un'ipotesi falsa.2196 Il valore di sostituzione deve corrispondere alla forma di output dello strumento. Gli strumenti incorporati restituiscono oggetti strutturati piuttosto che stringhe semplici. Ad esempio, `Bash` restituisce un oggetto con campi `stdout`, `stderr`, `interrupted`, e `isImage`. Per gli strumenti incorporati, un valore che non corrisponde allo schema di output dello strumento viene ignorato e viene usato l'output originale. L'output dello strumento MCP viene passato senza convalida dello schema. Rimuovere i dettagli di errore di cui Claude ha bisogno può causare che proceda su un'assunzione falsa.
2207</Warning>2197</Warning>
2208 2198
2209<h4 id="annotate-a-result-for-the-auto-mode-classifier">2199<h4 id="annotate-a-result-for-the-auto-mode-classifier">
2210 Annotate a result for the auto mode classifier2200 Annota un risultato per il classificatore della modalità auto
2211</h4>2201</h4>
2212 2202
2213Restituisci `classifierContext` per inviare una breve nota sul risultato della chiamata dello strumento al classificatore [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) piuttosto che a Claude. Il classificatore [non riceve mai i risultati degli strumenti stessi](/docs/it/permission-modes#how-the-classifier-evaluates-actions), quindi questo campo è il modo supportato per dirgli qualcosa su ciò che una chiamata ha restituito prima che riveda le azioni successive. Il campo richiede Claude Code v2.1.236 o successivo.2203Restituisci `classifierContext` per inviare una breve nota sul risultato della chiamata dello strumento al classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) piuttosto che a Claude. Il classificatore [non riceve mai i risultati degli strumenti stessi](/docs/it/permission-modes#how-the-classifier-evaluates-actions), quindi questo campo è il modo supportato per dirgli qualcosa su ciò che una chiamata ha restituito prima che riveda le azioni successive. Il campo richiede Claude Code v2.1.236 o successivo.
2214 2204
2215L'esempio seguente dice al classificatore da dove proviene l'output di una query:2205L'esempio sottostante dice al classificatore da dove proviene l'output di una query:
2216 2206
2217```json theme={null}2207```json theme={null}
2218{2208{
2225 2215
2226Quanto peso il classificatore dà alla nota dipende da dove hai configurato l'hook:2216Quanto peso il classificatore dà alla nota dipende da dove hai configurato l'hook:
2227 2217
2228* **Hook configurati in Claude Code**: per gli hook da file di impostazioni, plugin, skill, e frontmatter dell'agente, il classificatore tratta la nota come contesto non verificato fornito dall'applicazione. La nota non stabilisce mai l'intento dell'utente, e se afferma che hai approvato o richiesto qualcosa, il classificatore controlla quella affermazione rispetto ai tuoi stessi messaggi nella conversazione2218* **Hook configurati in Claude Code**: per gli hook dai file di impostazioni, dai plugin, dalle skill, e dal frontmatter dell'agente, il classificatore tratta la nota come contesto non verificato fornito dall'applicazione. La nota non stabilisce mai l'intento dell'utente, e se afferma che hai approvato o richiesto qualcosa, il classificatore controlla quell'affermazione rispetto ai tuoi stessi messaggi nella conversazione
2229* **Callback Agent SDK in-process**: quando un'applicazione che incorpora Claude Code registra l'hook come un [callback TypeScript SDK](/docs/it/agent-sdk/hooks) e restituisce la nota durante la sessione dal vivo, il classificatore può pesare un'affermazione dell'utente inoltrata nella nota come intento dell'utente. Tale affermazione può soddisfare un requisito di consenso che il classificatore accetterebbe da un messaggio che invii, ma non solleva mai un blocco che il tuo stesso messaggio non potrebbe sollevare neanche. Dopo che una sessione riprende, Claude Code tratta le note ripristinate come contesto non verificato. Quando gli hook di entrambi i gruppi annotano la stessa chiamata, il classificatore tratta la nota combinata come non verificata2219* **Callback Agent SDK in-process**: quando un'applicazione che incorpora Claude Code registra l'hook come un [callback SDK TypeScript](/docs/it/agent-sdk/hooks) e restituisce la nota durante la sessione dal vivo, il classificatore potrebbe pesare un'affermazione dell'utente trasmessa nella nota come intento dell'utente. Tale affermazione può soddisfare un requisito di consenso che il classificatore accetterebbe da un messaggio che invii, ma non solleva mai un blocco che il tuo stesso messaggio non potrebbe sollevare neanche. Dopo che una sessione riprende, Claude Code tratta le note ripristinate come contesto non verificato. Quando gli hook di entrambi i gruppi annotano la stessa chiamata, il classificatore tratta la nota combinata come non verificata
2230 2220
2231Claude Code applica questi limiti quando consegna la nota:2221Claude Code applica questi limiti quando consegna la nota:
2232 2222
2233* **Lunghezza**: Claude Code limita le note per una chiamata di strumento a 2.000 caratteri e tronca il resto. Il limite è condiviso su ogni hook che risponde a quella chiamata2223* **Lunghezza**: Claude Code limita le note per una chiamata di strumento a 2.000 caratteri e tronca il resto. Il limite è condiviso tra ogni hook che risponde a quella chiamata
2234* **Solo risposte sincrone**: Claude Code ignora il campo nella risposta di un hook che [si esegue in background](#run-hooks-in-the-background), perché quella risposta arriva dopo che Claude Code registra il risultato dello strumento2224* **Solo risposte sincrone**: Claude Code ignora il campo nella risposta di un hook che [si esegue in background](#run-hooks-in-the-background), perché quella risposta arriva dopo che Claude Code registra il risultato dello strumento
2235* **Chiamate che il classificatore non registra**: la trascrizione del classificatore omette le ricerche di sola lettura come le letture di file e le ricerche. Claude Code scarta una nota allegata a una di quelle chiamate2225* **Chiamate che il classificatore non registra**: la trascrizione del classificatore omette le ricerche di sola lettura come le letture di file e le ricerche. Claude Code scarta una nota allegata a una di quelle chiamate
2236* **Interazione con le riscritture**: quando la nota descrive l'output che stai sostituendo con `updatedToolOutput`, restituisci entrambi i campi nella stessa risposta dell'hook. Claude Code scarta la nota se quella riscrittura viene rifiutata o la riscrittura di un altro hook la sostituisce. Claude Code consegna una nota che restituisci senza una riscrittura anche quando un altro hook riscrive l'output2226* **Interazione con le riscritture**: quando la nota descrive l'output che stai sostituendo con `updatedToolOutput`, restituisci entrambi i campi nella stessa risposta dell'hook. Claude Code scarta la nota se quella riscrittura viene rifiutata o un'altra riscrittura dell'hook la sostituisce. Claude Code consegna una nota che restituisci senza una riscrittura anche quando un altro hook riscrive l'output
2237 2227
2238<Warning>2228<Warning>
2239 Il classificatore legge il contenuto che metti in `classifierContext` come informazioni dall'applicazione che ospita la sessione, quindi non copiare l'output dello strumento non attendibile o il testo di terze parti in esso. Mantieni la nota a una breve affermazione su questa sola chiamata, come un fatto sulla sua origine o un'affermazione dell'utente su di essa; non usare il campo per consegnare messaggi non correlati o un flusso di eventi.2229 Il classificatore legge il contenuto che metti in `classifierContext` come informazioni dall'applicazione che ospita la sessione, quindi non copiare l'output dello strumento non attendibile o il testo di terze parti in esso. Mantieni la nota a una breve affermazione su questa una chiamata, come un fatto sulla sua origine o un'affermazione dell'utente su di essa; non usare il campo per consegnare messaggi non correlati o un flusso di eventi.
2240</Warning>2230</Warning>
2241 2231
2242<h3 id="posttoolusefailure">2232<h3 id="posttoolusefailure">
2252</Note>2242</Note>
2253 2243
2254<h4 id="posttoolusefailure-input">2244<h4 id="posttoolusefailure-input">
2255 PostToolUseFailure input2245 Input PostToolUseFailure
2256</h4>2246</h4>
2257 2247
2258Gli hook PostToolUseFailure ricevono gli stessi campi `tool_name` e `tool_input` di PostToolUse, insieme alle informazioni di errore come campi di livello superiore. Per uno strumento MCP, ricevono anche l'oggetto [`mcp_server`](#pretooluse-input). Ad esempio, un comando `npm test` fallito potrebbe consegnare:2248Gli hook PostToolUseFailure ricevono gli stessi campi `tool_name` e `tool_input` di PostToolUse, insieme alle informazioni di errore come campi di livello superiore. Per uno strumento MCP, ricevono anche l'oggetto [`mcp_server`](#pretooluse-input). Ad esempio, un comando `npm test` fallito potrebbe consegnare:
2276}2266}
2277```2267```
2278 2268
2279| Field | Description |2269| Campo | Descrizione |
2280| :- | :- |2270| :- | :- |
2281| `error` | Stringa che descrive cosa è andato storto. Il formato dipende dallo strumento che ha fallito |2271| `error` | Stringa che descrive cosa è andato male. Il formato dipende dallo strumento che ha fallito |
2282| `is_interrupt` | Booleano facoltativo. True quando il fallimento ha raggiunto Claude Code come un'interruzione piuttosto che come un errore che lo strumento ha segnalato. L'annullamento di uno strumento in esecuzione non attiva questo hook; il risultato dello strumento porta il messaggio di interruzione invece |2272| `is_interrupt` | Booleano facoltativo. True quando il fallimento ha raggiunto Claude Code come un'interruzione piuttosto che come un errore che lo strumento ha segnalato. L'annullamento di uno strumento in esecuzione non attiva questo hook; il risultato dello strumento porta il messaggio di interruzione invece |
2283| `duration_ms` | Facoltativo. Tempo di esecuzione dello strumento in millisecondi. Esclude il tempo trascorso nei prompt di permesso e negli hook PreToolUse |2273| `duration_ms` | Facoltativo. Tempo di esecuzione dello strumento in millisecondi. Esclude il tempo trascorso nei prompt di permesso e negli hook PreToolUse |
2284 2274
2285La stringa `error` è generalmente lo stesso testo che Claude riceve come risultato dello strumento fallito. Il suo formato varia per strumento e fallimento. Chiavi il tuo hook su `tool_name`, `is_interrupt`, e la prima riga `Exit code N`; tratta il resto della stringa come testo di visualizzazione, non come un formato stabile.2275La stringa `error` è generalmente lo stesso testo che Claude riceve come risultato dello strumento fallito. Il suo formato varia per strumento e fallimento. Chiavi il tuo hook su `tool_name`, `is_interrupt`, e la prima riga `Exit code N`; tratta il resto della stringa come testo di visualizzazione, non un formato stabile.
2286 2276
2287* Per Bash e PowerShell, un comando che si è eseguito e ha uscito produce una prima riga `Exit code N`, quindi qualsiasi output che il comando ha prodotto come un blocco con stdout e stderr intercalati2277* Per Bash e PowerShell, un comando che si è eseguito e ha uscito produce una prima riga `Exit code N`, quindi qualsiasi output che il comando ha prodotto come un blocco con stdout e stderr intercalati
2288* Un payload può anche portare un messaggio di fallimento nudo senza una riga di codice di uscita, quando Claude Code non potrebbe avviare il processo shell stesso2278* Un payload potrebbe anche portare un messaggio di fallimento nudo senza una riga di codice di uscita, quando Claude Code non poteva avviare il processo shell stesso
2289* Claude Code tronca nel mezzo le stringhe lunghe intorno a un marcatore `... [N characters truncated] ...`, e può inserire righe proprie, come `Command timed out after 2m 0s`2279* Claude Code tronca nel mezzo le stringhe lunghe intorno a un marcatore `... [N characters truncated] ...`, e può inserire righe proprie, come `Command timed out after 2m 0s`
2290 2280
2291<h4 id="posttoolusefailure-decision-control">2281<h4 id="posttoolusefailure-decision-control">
2292 PostToolUseFailure decision control2282 Controllo decisionale PostToolUseFailure
2293</h4>2283</h4>
2294 2284
2295Gli hook `PostToolUseFailure` possono fornire contesto a Claude dopo un fallimento dello strumento. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:2285Gli hook `PostToolUseFailure` possono fornire contesto a Claude dopo un fallimento dello strumento. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:
2296 2286
2297| Field | Description |2287| Campo | Descrizione |
2298| :- | :- |2288| :- | :- |
2299| `additionalContext` | Stringa aggiunta al contesto di Claude insieme all'errore. Vedi [Add context for Claude](#add-context-for-claude) |2289| `additionalContext` | Stringa aggiunta al contesto di Claude insieme all'errore. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) |
2300 2290
2301```json theme={null}2291```json theme={null}
2302{2292{
2314Si esegue una volta dopo che ogni chiamata di strumento in un batch si è risolta, prima che Claude Code invii la richiesta successiva al modello. `PostToolUse` si attiva una volta per strumento, il che significa che si attiva contemporaneamente quando Claude effettua chiamate di strumenti parallele. `PostToolBatch` si attiva esattamente una volta con il batch completo, quindi è il posto giusto per iniettare contesto che dipende dall'insieme di strumenti che si sono eseguiti piuttosto che da qualsiasi singolo strumento. Non c'è matcher per questo evento.2304Si esegue una volta dopo che ogni chiamata di strumento in un batch si è risolta, prima che Claude Code invii la richiesta successiva al modello. `PostToolUse` si attiva una volta per strumento, il che significa che si attiva contemporaneamente quando Claude effettua chiamate di strumenti parallele. `PostToolBatch` si attiva esattamente una volta con il batch completo, quindi è il posto giusto per iniettare contesto che dipende dall'insieme di strumenti che si sono eseguiti piuttosto che da qualsiasi singolo strumento. Non c'è matcher per questo evento.
2315 2305
2316<h4 id="posttoolbatch-input">2306<h4 id="posttoolbatch-input">
2317 PostToolBatch input2307 Input PostToolBatch
2318</h4>2308</h4>
2319 2309
2320Oltre ai [common input fields](#common-input-fields), gli hook PostToolBatch ricevono `tool_calls`, un array che descrive ogni chiamata di strumento nel batch:2310Oltre ai [campi di input comuni](#common-input-fields), gli hook PostToolBatch ricevono `tool_calls`, un array che descrive ogni chiamata di strumento nel batch:
2321 2311
2322```json theme={null}2312```json theme={null}
2323{2313{
2331 "tool_name": "Read",2321 "tool_name": "Read",
2332 "tool_input": {"file_path": "/.../ledger/accounts.py"},2322 "tool_input": {"file_path": "/.../ledger/accounts.py"},
2333 "tool_use_id": "toolu_01...",2323 "tool_use_id": "toolu_01...",
2334 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."2324 "tool_response": "1\tfrom __future__ import annotations\n2\t..."
2335 },2325 },
2336 {2326 {
2337 "tool_name": "Read",2327 "tool_name": "Read",
2338 "tool_input": {"file_path": "/.../ledger/transactions.py"},2328 "tool_input": {"file_path": "/.../ledger/transactions.py"},
2339 "tool_use_id": "toolu_02...",2329 "tool_use_id": "toolu_02...",
2340 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."2330 "tool_response": "1\tfrom __future__ import annotations\n2\t..."
2341 }2331 }
2342 ]2332 ]
2343}2333}
2344```2334```
2345 2335
2346`tool_response` contiene lo stesso contenuto che il modello riceve nel blocco `tool_result` corrispondente. Il valore è una stringa serializzata o un array di blocchi di contenuto, esattamente come lo strumento l'ha emesso. Per `Read`, ciò significa testo con prefisso numero di riga piuttosto che contenuti di file grezzi. Le risposte possono essere grandi, quindi analizza solo i campi di cui hai bisogno.2336`tool_response` contiene lo stesso contenuto che il modello riceve nel blocco `tool_result` corrispondente. Il valore è una stringa serializzata o un array di blocchi di contenuto, esattamente come lo strumento lo ha emesso. Per `Read`, questo significa testo con prefisso numero di riga piuttosto che contenuti di file grezzi. Le risposte possono essere grandi, quindi analizza solo i campi di cui hai bisogno.
2347 2337
2348<Note>2338<Note>
2349 La forma `tool_response` differisce da quella di `PostToolUse`. `PostToolUse` passa l'oggetto `Output` strutturato dello strumento, come `{filePath: "...", type: "create"}` per `Write`; `PostToolBatch` passa il contenuto `tool_result` serializzato che il modello vede.2339 La forma `tool_response` differisce da quella di `PostToolUse`. `PostToolUse` passa l'oggetto `Output` strutturato dello strumento, come `{filePath: "...", type: "create"}` per `Write`; `PostToolBatch` passa il contenuto `tool_result` serializzato che il modello vede.
2350</Note>2340</Note>
2351 2341
2352<h4 id="posttoolbatch-decision-control">2342<h4 id="posttoolbatch-decision-control">
2353 PostToolBatch decision control2343 Controllo decisionale PostToolBatch
2354</h4>2344</h4>
2355 2345
2356Gli hook `PostToolBatch` possono iniettare contesto per Claude. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:2346Gli hook `PostToolBatch` possono iniettare contesto per Claude. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:
2357 2347
2358| Field | Description |2348| Campo | Descrizione |
2359| :- | :- |2349| :- | :- |
2360| `additionalContext` | Stringa di contesto iniettata una volta prima della prossima chiamata del modello. Vedi [Add context for Claude](#add-context-for-claude) per i dettagli di consegna, cosa metterci, e come le sessioni riprese gestiscono i valori passati |2350| `additionalContext` | Stringa di contesto iniettata una volta prima della richiesta del modello successivo. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) per i dettagli di consegna, cosa metterci, e come le sessioni riprese gestiscono i valori passati |
2361 2351
2362```json theme={null}2352```json theme={null}
2363{2353{
2368}2358}
2369```2359```
2370 2360
2371Restituire `decision: "block"` o `continue: false` ferma il loop agentico prima della prossima chiamata del modello. Il messaggio di blocco viene dal `reason` JSON o `stopReason`, o da stderr all'uscita 2. Lo vedi come un avviso nella trascrizione, e rimane nella conversazione, quindi Claude lo vede quando la conversazione continua.2361Restituire `decision: "block"` o `continue: false` ferma il loop agentivo prima della richiesta del modello successivo. Il messaggio di blocco viene da `reason` JSON o `stopReason`, o da stderr all'uscita 2. Lo vedi come un avviso nella trascrizione, e rimane nella conversazione, quindi Claude lo vede quando la conversazione continua.
2372 2362
2373<h3 id="permissiondenied">2363<h3 id="permissiondenied">
2374 PermissionDenied2364 PermissionDenied
2375</h3>2365</h3>
2376 2366
2377Si esegue quando [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) nega una chiamata di strumento, incluso quando nega senza un verdetto del classificatore perché [un controllo di sicurezza separato da auto mode ha rifiutato la richiesta del classificatore stesso](/docs/it/errors#auto-mode-cannot-determine-the-safety-of-an-action) o la sua risposta non ha analizzato. Questo hook si attiva solo in auto mode: non si esegue quando neghi manualmente un dialogo di permesso, quando un hook `PreToolUse` blocca una chiamata, o quando una regola `deny` corrisponde. Usalo per registrare le negazioni, regolare la configurazione, o dire al modello che potrebbe riprovare la chiamata dello strumento.2367Si esegue quando la [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) nega una chiamata di strumento, incluso quando nega senza un verdetto del classificatore perché [un controllo di sicurezza separato dalla modalità auto ha rifiutato la richiesta del classificatore stesso](/docs/it/errors#auto-mode-cannot-determine-the-safety-of-an-action) o la sua risposta non ha analizzato. Questo hook si attiva solo in modalità auto: non si esegue quando neghi manualmente un dialogo di permesso, quando un hook `PreToolUse` blocca una chiamata, o quando una regola `deny` corrisponde. Usalo per registrare le negazioni, regolare la configurazione, o dire al modello che potrebbe riprovare la chiamata dello strumento.
2378 2368
2379Corrisponde al nome dello strumento, gli stessi valori di PreToolUse.2369Corrisponde al nome dello strumento, gli stessi valori di PreToolUse.
2380 2370
2381<h4 id="permissiondenied-input">2371<h4 id="permissiondenied-input">
2382 PermissionDenied input2372 Input PermissionDenied
2383</h4>2373</h4>
2384 2374
2385Oltre ai [common input fields](#common-input-fields), gli hook PermissionDenied ricevono `tool_name`, `tool_input`, `tool_use_id`, e `reason`. Per uno strumento MCP, ricevono anche l'oggetto [`mcp_server`](#pretooluse-input).2375Oltre ai [campi di input comuni](#common-input-fields), gli hook PermissionDenied ricevono `tool_name`, `tool_input`, `tool_use_id`, e `reason`. Per uno strumento MCP, ricevono anche l'oggetto [`mcp_server`](#pretooluse-input).
2386 2376
2387```json theme={null}2377```json theme={null}
2388{2378{
2401}2391}
2402```2392```
2403 2393
2404| Field | Description |2394| Campo | Descrizione |
2405| :- | :- |2395| :- | :- |
2406| `reason` | Il motivo della negazione. Per un verdetto del classificatore, nella maggior parte delle sessioni nomina la regola corrispondente tra parentesi quadre, come `[Data Exfiltration]`; vedi [Review denials](/docs/it/auto-mode-config#review-denials) per le altre forme. Per una [negazione senza verdetto](#permissiondenied-decision-control), inizia con `Auto mode could not evaluate this action and is blocking it for safety`. Per una negazione perché il modello del classificatore non era disponibile, è il testo fisso `Classifier unavailable` |2396| `reason` | Il motivo della negazione. Per un verdetto del classificatore, nella maggior parte delle sessioni nomina la regola corrispondente tra parentesi quadre, come `[Data Exfiltration]`; vedi [Rivedi le negazioni](/docs/it/auto-mode-config#review-denials) per le altre forme. Per una [negazione senza verdetto](#permissiondenied-decision-control), inizia con `Auto mode could not evaluate this action and is blocking it for safety`. Per una negazione perché il modello del classificatore non era disponibile, è il testo fisso `Classifier unavailable` |
2407 2397
2408<h4 id="permissiondenied-decision-control">2398<h4 id="permissiondenied-decision-control">
2409 PermissionDenied decision control2399 Controllo decisionale PermissionDenied
2410</h4>2400</h4>
2411 2401
2412Gli hook PermissionDenied possono dire al modello che potrebbe riprovare la chiamata dello strumento negato. Restituisci un oggetto JSON con `hookSpecificOutput.retry` impostato su `true`:2402Gli hook PermissionDenied possono dire al modello che potrebbe riprovare la chiamata dello strumento negata. Restituisci un oggetto JSON con `hookSpecificOutput.retry` impostato su `true`:
2413 2403
2414```json theme={null}2404```json theme={null}
2415{2405{
2422 2412
2423Quando `retry` è `true`, Claude Code aggiunge un messaggio alla conversazione dicendo al modello che potrebbe riprovare la chiamata dello strumento. Claude Code non inverte la negazione stessa. Se il tuo hook non restituisce JSON, o restituisce `retry: false`, la negazione rimane e il modello riceve il messaggio di rifiuto originale.2413Quando `retry` è `true`, Claude Code aggiunge un messaggio alla conversazione dicendo al modello che potrebbe riprovare la chiamata dello strumento. Claude Code non inverte la negazione stessa. Se il tuo hook non restituisce JSON, o restituisce `retry: false`, la negazione rimane e il modello riceve il messaggio di rifiuto originale.
2424 2414
2425Claude Code ignora `retry: true` quando il classificatore ha prodotto [nessun verdetto sull'azione](/docs/it/errors#auto-mode-cannot-determine-the-safety-of-an-action): la sua risposta non ha analizzato, o un controllo di sicurezza separato da auto mode ha rifiutato la richiesta del classificatore. Per quelle negazioni, Claude Code già dice al modello nel messaggio di rifiuto se riprovare più tardi o procedere.2415Claude Code ignora `retry: true` quando il classificatore ha prodotto [nessun verdetto sull'azione](/docs/it/errors#auto-mode-cannot-determine-the-safety-of-an-action): la sua risposta non ha analizzato, o un controllo di sicurezza separato dalla modalità auto ha rifiutato la richiesta del classificatore. Per quelle negazioni, Claude Code già dice al modello nel messaggio di rifiuto se riprovare più tardi o andare avanti.
2426 2416
2427<h3 id="notification">2417<h3 id="notification">
2428 Notification2418 Notification
2430 2420
2431Si esegue quando Claude Code invia notifiche. Corrisponde al tipo di notifica. Ometti il matcher per eseguire gli hook per tutti i tipi di notifica.2421Si esegue quando Claude Code invia notifiche. Corrisponde al tipo di notifica. Ometti il matcher per eseguire gli hook per tutti i tipi di notifica.
2432 2422
2433Ricevi questi eventi hook anche con le notifiche desktop disattivate: l'impostazione `preferredNotifChannel`, incluso `notifications_disabled`, cambia solo come sei avvisato, non se il tuo hook si esegue.2423Ricevi questi eventi di hook anche con le notifiche desktop disattivate: l'impostazione `preferredNotifChannel`, incluso `notifications_disabled`, cambia solo come sei avvisato, non se il tuo hook si esegue.
2434 2424
2435| Matcher | Quando si attiva |2425| Matcher | Quando si attiva |
2436| :- | :- |2426| :- | :- |
2437| `permission_prompt` | Claude ha bisogno della tua approvazione per usare uno strumento o la [richiesta di rete](/docs/it/sandboxing#network-isolation) di un comando sandboxed, e il prompt ha atteso circa sei secondi |2427| `permission_prompt` | Claude ha bisogno della tua approvazione per usare uno strumento o la [richiesta di rete](/docs/it/sandboxing#network-isolation) di un comando in sandbox, e il prompt ha atteso circa sei secondi |
2438| `idle_prompt` | Claude ha finito di rispondere circa 60 secondi fa e non hai digitato da allora |2428| `idle_prompt` | Claude ha finito di rispondere circa 60 secondi fa e non hai digitato da allora |
2439| `auth_success` | L'autenticazione si completa |2429| `auth_success` | L'autenticazione si completa |
2440| `elicitation_dialog` | Un server MCP apre un modulo di elicitazione e non hai digitato per circa sei secondi |2430| `elicitation_dialog` | Un server MCP apre un modulo di elicitazione e non hai digitato per circa sei secondi |
2441| `elicitation_url_dialog` | Un server MCP ti chiede di aprire un URL del browser e non hai digitato per circa sei secondi |2431| `elicitation_url_dialog` | Un server MCP ti chiede di aprire un URL del browser e non hai digitato per circa sei secondi |
2442| `elicitation_complete` | Un server MCP segnala che un'[elicitazione in modalità URL](#elicitation-input) è completa |2432| `elicitation_complete` | Un server MCP segnala che un'[elicitazione in modalità URL](#elicitation-input) è completa |
2443| `elicitation_response` | Una risposta di elicitazione MCP viene inviata di nuovo al server |2433| `elicitation_response` | Una risposta di elicitazione MCP viene inviata al server |
2444| `agent_needs_input` | Una sessione in background inizia ad aspettare il tuo input mentre la [agent view](/docs/it/agent-view) è aperta in un terminale, o la sessione corrente ti chiede una domanda di configurazione del terminale del [teammate del team dell'agente](/docs/it/agent-teams#choose-a-display-mode) e non hai digitato per circa sei secondi |2434| `agent_needs_input` | Una sessione di background inizia ad aspettare il tuo input mentre la [vista agente](/docs/it/agent-view) è aperta in un terminale, o la sessione corrente ti chiede una domanda di configurazione del terminale di un [compagno di squadra del team agente](/docs/it/agent-teams#choose-a-display-mode) e non hai digitato per circa sei secondi |
2445| `agent_completed` | Una sessione in background finisce o fallisce. Si attiva solo mentre la [agent view](/docs/it/agent-view) è aperta in un terminale |2435| `agent_completed` | Una sessione di background finisce o fallisce. Si attiva solo mentre la [vista agente](/docs/it/agent-view) è aperta in un terminale |
2446| `quota_auto_resume_fired` | Claude Code continua il tuo compito dopo che un limite di utilizzo di claude.ai l'ha messo in pausa: al reset, o prima quando qualcosa che fai in Claude Code durante l'attesa, come aggiungere crediti di utilizzo, aggiornare il tuo piano, o cambiare modelli, rende l'utilizzo disponibile di nuovo, con l'[eccezione dell'impostazione del modello](/docs/it/interactive-mode#wait-for-a-usage-limit-to-reset) |2436| `quota_auto_resume_fired` | Claude Code continua il tuo compito dopo che un limite di utilizzo di claude.ai lo ha messo in pausa: al reset, o prima quando qualcosa che fai in Claude Code durante l'attesa, come aggiungere crediti di utilizzo, aggiornare il tuo piano, o cambiare modelli, rende l'utilizzo disponibile di nuovo, con l'[eccezione dell'impostazione del modello](/docs/it/interactive-mode#wait-for-a-usage-limit-to-reset) |
2447| `quota_auto_resume_stale` | Un limite di utilizzo di claude.ai si è ripristinato mentre il tuo computer dormiva per più di circa 30 minuti. Claude Code attende che tu prema `Enter` invece di continuare. Dopo un sonno più breve continua e attiva `quota_auto_resume_fired` invece |2437| `quota_auto_resume_stale` | Un limite di utilizzo di claude.ai si è resettato mentre il tuo computer dormiva per più di circa 30 minuti. Claude Code attende che tu prema `Enter` invece di continuare. Dopo un sonno più breve continua e attiva `quota_auto_resume_fired` invece |
2448| `quota_auto_resume_disabled` | Claude Code termina la sua attesa per un limite di utilizzo di claude.ai senza continuare il tuo compito: [`autoContinueAtUsageLimit`](/docs/it/settings-reference#autocontinueatusagelimit) si è spento o il reset si è spostato più di 24 ore lontano durante un'attesa che Claude Code ha avviato da solo, il compito continuato ha continuato a colpire il limite, o la continuazione è stata bloccata prima di raggiungere il modello. Non si attiva quando premi `Esc` o `Ctrl+C`, o scegli **Don't continue automatically** |2438| `quota_auto_resume_disabled` | Claude Code termina l'attesa per un limite di utilizzo di claude.ai senza continuare il tuo compito: [`autoContinueAtUsageLimit`](/docs/it/settings-reference#autocontinueatusagelimit) è stato disattivato o il reset si è spostato più di 24 ore lontano durante un'attesa che Claude Code ha avviato da solo, il compito continuato ha continuato a colpire il limite, o la continuazione è stata bloccata prima di raggiungere il modello. Non si attiva quando premi `Esc` o `Ctrl+C`, o scegli **Non continuare automaticamente** |
2449 2439
2450I tipi `agent_needs_input` e `agent_completed` richiedono Claude Code v2.1.198 o successivo.2440I tipi `agent_needs_input` e `agent_completed` richiedono Claude Code v2.1.198 o successivo.
2451 2441
2452I tipi `quota_auto_resume_fired`, `quota_auto_resume_stale`, e `quota_auto_resume_disabled` richiedono Claude Code v2.1.234 o successivo.2442I tipi `quota_auto_resume_fired`, `quota_auto_resume_stale`, e `quota_auto_resume_disabled` richiedono Claude Code v2.1.234 o successivo.
2453 2443
2454Nelle sessioni di terminale, `permission_prompt` per la richiesta di rete di un comando sandboxed richiede Claude Code v2.1.246 o successivo.2444Nelle sessioni di terminale, `permission_prompt` per la richiesta di rete di un comando in sandbox richiede Claude Code v2.1.246 o successivo.
2455 2445
2456`agent_needs_input` per una domanda di configurazione del terminale del teammate richiede Claude Code v2.1.248 o successivo.2446`agent_needs_input` per la domanda di configurazione del terminale di un compagno di squadra richiede Claude Code v2.1.248 o successivo.
2457 2447
2458<Note>2448<Note>
2459 I tipi `permission_prompt`, `idle_prompt`, `elicitation_dialog`, e `elicitation_url_dialog` condividono il loro timing con le notifiche desktop, quindi nelle sessioni di terminale li vedi solo quando sembri essere lontano dal terminale:2449 I tipi `permission_prompt`, `idle_prompt`, `elicitation_dialog`, e `elicitation_url_dialog` condividono il loro timing con le notifiche desktop, quindi nelle sessioni di terminale li vedi solo quando sembri essere lontano dal terminale:
2460 2450
2461 * Aspettati `permission_prompt` una volta che non hai digitato per circa sei secondi. Il timer inizia quando il prompt di permesso appare, e ogni pressione di tasto lo rinvia. Per eseguire un hook immediatamente quando Claude chiede il permesso di usare uno strumento, usa [PermissionRequest](#permissionrequest) invece.2451 * Aspettati `permission_prompt` una volta che non hai digitato per circa sei secondi. Il timer inizia quando il prompt di permesso appare, e ogni pressione di tasto lo rinvia. Per eseguire un hook immediatamente quando Claude chiede il permesso di usare uno strumento, usa [PermissionRequest](#permissionrequest) invece.
2462 * Aspettati `idle_prompt` circa 60 secondi dopo che Claude finisce di rispondere, e solo se non hai digitato da allora. Claude Code non invia `idle_prompt` mentre attende che un limite di utilizzo di claude.ai si ripristini. Quando l'attesa termina da sola, uno dei tipi `quota_auto_resume_*` si attiva invece.2452 * Aspettati `idle_prompt` circa 60 secondi dopo che Claude finisce di rispondere, e solo se non hai digitato da allora. Claude Code non invia `idle_prompt` mentre attende che un limite di utilizzo di claude.ai si resetti. Quando l'attesa termina da sola, uno dei tipi `quota_auto_resume_*` si attiva invece.
2463 * Aspettati `elicitation_dialog` per un modulo di elicitazione, o `elicitation_url_dialog` per una richiesta di URL del browser, una volta che non hai digitato per circa sei secondi. Entrambi condividono lo stesso gate di sei secondi di `permission_prompt`: il timer inizia quando il dialogo appare, e ogni pressione di tasto lo rinvia.2453 * Aspettati `elicitation_dialog` per un modulo di elicitazione, o `elicitation_url_dialog` per una richiesta di URL del browser, una volta che non hai digitato per circa sei secondi. Entrambi condividono lo stesso gate di sei secondi di `permission_prompt`: il timer inizia quando il dialogo appare, e ogni pressione di tasto lo rinvia.
2464 2454
2465 Una richiesta di permesso o elicitazione che arriva mentre un altro dialogo è sullo schermo mantiene lo stesso gate di sei secondi, cronometrato da quando la richiesta arriva. La sua notifica può raggiungerti mentre la richiesta attende ancora dietro il dialogo aperto.2455 Una richiesta di permesso o elicitazione che arriva mentre un altro dialogo è sullo schermo mantiene lo stesso gate di sei secondi, cronometrato da quando la richiesta arriva. La sua notifica può raggiungerti mentre la richiesta attende ancora dietro il dialogo aperto.
2466</Note>2456</Note>
2467 2457
2468Claude Code cronometra `permission_prompt` diversamente nelle sessioni in cui invia richieste di permesso al callback [`canUseTool`](/docs/it/agent-sdk/user-input) di Agent SDK, che è come Claude Desktop e l'estensione VS Code ospitano Claude Code:2458Claude Code cronometra `permission_prompt` diversamente nelle sessioni in cui invia richieste di permesso al callback [`canUseTool`](/docs/it/agent-sdk/user-input) dell'Agent SDK, che è come Claude Desktop e l'estensione VS Code ospitano Claude Code:
2469 2459
2470* Aspettati `permission_prompt` circa sei secondi dopo che Claude chiede il permesso. Claude Code non lo rinvia mentre digiti.2460* Aspettati `permission_prompt` circa sei secondi dopo che Claude chiede il permesso. Claude Code non lo rinvia mentre digiti.
2471* Se tu o un hook [PermissionRequest](#permissionrequest) rispondete prima, Claude Code non esegue `permission_prompt`.2461* Se tu o un hook [PermissionRequest](#permissionrequest) rispondi prima, Claude Code non esegue `permission_prompt`.
2472* Imposta [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/it/env-vars) su `1` per disattivare `permission_prompt` in queste sessioni.2462* Imposta [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/it/env-vars) su `1` per disattivare `permission_prompt` in queste sessioni.
2473 2463
2474Prima della v2.1.233, `permission_prompt` non si attivava in queste sessioni.2464Prima della v2.1.233, `permission_prompt` non si attivava in queste sessioni.
2475 2465
2476Usa matcher separati per eseguire diversi gestori a seconda del tipo di notifica. Questa configurazione attiva uno script di avviso specifico del permesso quando Claude ha bisogno dell'approvazione del permesso e una notifica diversa quando Claude è stato inattivo:2466Usa matcher separati per eseguire diversi gestori a seconda del tipo di notifica. Questa configurazione attiva uno script di avviso specifico per il permesso quando Claude ha bisogno dell'approvazione del permesso e una notifica diversa quando Claude è stato inattivo:
2477 2467
2478```json theme={null}2468```json theme={null}
2479{2469{
2503```2493```
2504 2494
2505<h4 id="notification-input">2495<h4 id="notification-input">
2506 Notification input2496 Input Notification
2507</h4>2497</h4>
2508 2498
2509Oltre ai [common input fields](#common-input-fields), gli hook Notification ricevono `message` con il testo della notifica, un `title` facoltativo, e `notification_type` che indica quale tipo si è attivato.2499Oltre ai [campi di input comuni](#common-input-fields), gli hook Notification ricevono `message` con il testo della notifica, un `title` facoltativo, e `notification_type` che indica quale tipo si è attivato.
2510 2500
2511```json theme={null}2501```json theme={null}
2512{2502{
2526 SubagentStart2516 SubagentStart
2527</h3>2517</h3>
2528 2518
2529Si esegue quando Claude genera un subagent con lo strumento Agent, quando Claude [riprende un subagent](/docs/it/sub-agents#resume-subagents), e ogni volta che un [team dell'agente](/docs/it/agent-teams) in-process teammate gestisce un nuovo messaggio. Supporta i matcher per filtrare per nome del tipo di agente. Per gli agenti incorporati, questo è il nome dell'agente come `general-purpose`, `Explore`, o `Plan`. Per i [subagent personalizzati](/docs/it/sub-agents), questo è il campo `name` dal frontmatter dell'agente, non il nome del file.2519Si esegue quando Claude genera un subagente con lo strumento Agent, quando Claude [riprende un subagente](/docs/it/sub-agents#resume-subagents), e ogni volta che un compagno di squadra del [team agente](/docs/it/agent-teams) in-process gestisce un nuovo messaggio. Supporta i matcher per filtrare per nome del tipo di agente. Per gli agenti incorporati, questo è il nome dell'agente come `general-purpose`, `Explore`, o `Plan`. Per gli [agenti personalizzati](/docs/it/sub-agents), questo è il campo `name` dal frontmatter dell'agente, non il nome del file.
2530 2520
2531Per i subagent spediti da un [plugin](/docs/it/plugins), il tipo di agente è l'identificatore con ambito del plugin come `my-plugin:reviewer`, non il nome del frontmatter nudo. I due punti mettono un nome con ambito del plugin sul percorso dell'espressione regolare, quindi ancora il matcher con `^` e `$` per una corrispondenza esatta: `^my-plugin:reviewer$`.2521Per i subagenti spediti da un [plugin](/docs/it/plugins/overview), il tipo di agente è l'identificatore con ambito del plugin come `my-plugin:reviewer`, non il nome del frontmatter nudo. I due punti mettono un nome con ambito del plugin sul percorso dell'espressione regolare, quindi ancora il matcher con `^` e `$` per una corrispondenza esatta: `^my-plugin:reviewer$`.
2532 2522
2533<h4 id="subagentstart-input">2523<h4 id="subagentstart-input">
2534 SubagentStart input2524 Input SubagentStart
2535</h4>2525</h4>
2536 2526
2537Oltre ai [common input fields](#common-input-fields), gli hook SubagentStart ricevono `agent_id` con l'identificatore univoco per il subagent e `agent_type` con il nome dell'agente che il matcher filtra.2527Oltre ai [campi di input comuni](#common-input-fields), gli hook SubagentStart ricevono `agent_id` con l'identificatore univoco per il subagente e `agent_type` con il nome dell'agente che il matcher filtra.
2538 2528
2539```json theme={null}2529```json theme={null}
2540{2530{
2547}2537}
2548```2538```
2549 2539
2550Gli hook SubagentStart non possono bloccare la creazione del subagent, ma possono iniettare contesto nel subagent. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, puoi restituire:2540Gli hook SubagentStart non possono bloccare la creazione del subagente, ma possono iniettare contesto nel subagente. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, puoi restituire:
2551 2541
2552| Field | Description |2542| Campo | Descrizione |
2553| :- | :- |2543| :- | :- |
2554| `additionalContext` | Stringa aggiunta al contesto del subagent all'inizio della sua conversazione, prima del suo primo prompt. Vedi [Add context for Claude](#add-context-for-claude) |2544| `additionalContext` | Stringa aggiunta al contesto del subagente all'inizio della sua conversazione, prima del suo primo prompt. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) |
2555 2545
2556```json theme={null}2546```json theme={null}
2557{2547{
2562}2552}
2563```2553```
2564 2554
2565Quando l'hook si esegue di nuovo per lo stesso subagent, Claude Code inietta il contesto restituito solo quando il contesto del subagent non contiene già la copia da un'esecuzione precedente. La copia iniettata al lancio rimane in posizione, lasciando intatta la [prompt cache](/docs/it/prompt-caching#subagents-and-the-cache) del subagent. Dopo che la [auto-compaction](/docs/it/sub-agents#auto-compaction) scarta quella copia, Claude Code inietta il contesto dell'esecuzione successiva di nuovo.2555Quando l'hook si esegue di nuovo per lo stesso subagente, Claude Code inietta il contesto restituito solo quando il contesto del subagente non contiene già la copia da un'esecuzione precedente. La copia iniettata al lancio rimane al suo posto, lasciando intatta la [cache del prompt](/docs/it/prompt-caching#subagents-and-the-cache) del subagente. Dopo che la [compattazione automatica](/docs/it/sub-agents#auto-compaction) scarta quella copia, Claude Code inietta il contesto dell'esecuzione successiva di nuovo.
2566 2556
2567<h3 id="subagentstop">2557<h3 id="subagentstop">
2568 SubagentStop2558 SubagentStop
2569</h3>2559</h3>
2570 2560
2571Si esegue quando un subagent di Claude Code ha finito di rispondere. Corrisponde al tipo di agente, gli stessi valori di SubagentStart.2561Si esegue quando un subagente di Claude Code ha finito di rispondere. Corrisponde al tipo di agente, gli stessi valori di SubagentStart.
2572 2562
2573<h4 id="subagentstop-input">2563<h4 id="subagentstop-input">
2574 SubagentStop input2564 Input SubagentStop
2575</h4>2565</h4>
2576 2566
2577Oltre ai [common input fields](#common-input-fields), gli hook SubagentStop ricevono `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path`, e `last_assistant_message`. Il campo `agent_type` è il valore usato per il filtraggio del matcher. Il `transcript_path` è la trascrizione della sessione principale, mentre `agent_transcript_path` è la trascrizione propria del subagent archiviata in una cartella `subagents/` annidato. Il campo `last_assistant_message` contiene il contenuto di testo della risposta finale del subagent, quindi gli hook possono accedervi senza analizzare il file della trascrizione.2567Oltre ai [campi di input comuni](#common-input-fields), gli hook SubagentStop ricevono `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path`, e `last_assistant_message`. Il campo `agent_type` è il valore usato per il filtraggio del matcher. Il `transcript_path` è la trascrizione della sessione principale, mentre `agent_transcript_path` è la trascrizione propria del subagente archiviata in una cartella `subagents/` annidato. Il campo `last_assistant_message` contiene il contenuto di testo della risposta finale del subagente, quindi gli hook possono accedervi senza analizzare il file della trascrizione.
2578 2568
2579Non ogni evento SubagentStop proviene da un subagent che Claude ha generato. Claude Code esegue anche agenti interni per alcune delle sue stesse funzioni, come i [suggerimenti di prompt](/docs/it/interactive-mode#prompt-suggestions) e le [domande laterali `/btw`](/docs/it/interactive-mode#side-questions-with-%2Fbtw), e SubagentStop si attiva quando uno di quelli finisce anche. Per questi eventi, `agent_type` è il nome dell'agente che la sessione stessa esegue, come uno impostato con [`--agent`](/docs/it/cli-reference#cli-flags) o l'impostazione [`agent`](/docs/it/settings-reference#agent), e una stringa vuota quando la sessione si esegue senza uno.2569Non ogni evento SubagentStop proviene da un subagente che Claude ha generato. Claude Code esegue anche agenti interni per alcune delle sue stesse funzionalità, come i [suggerimenti di prompt](/docs/it/interactive-mode#prompt-suggestions) e le [domande laterali `/btw`](/docs/it/interactive-mode#side-questions-with-%2Fbtw), e SubagentStop si attiva quando uno di quelli finisce anche. Per quegli eventi, `agent_type` è il nome dell'agente che la sessione stessa esegue, come uno impostato con [`--agent`](/docs/it/cli-reference#cli-flags) o l'[impostazione `agent`](/docs/it/settings-reference#agent), e una stringa vuota quando la sessione si esegue senza uno.
2580 2570
2581Un `matcher` che nomina i tipi di agente non corrisponde a un `agent_type` vuoto. Un hook il cui matcher è omesso, `""`, o `"*"`, o è un'espressione regolare che corrisponde a una stringa vuota, si esegue anche per gli eventi con un `agent_type` vuoto.2571Un `matcher` che nomina i tipi di agente non corrisponde a un `agent_type` vuoto. Un hook il cui matcher è omesso, `""`, o `"*"`, o è un'espressione regolare che corrisponde a una stringa vuota, si esegue anche per gli eventi con un `agent_type` vuoto.
2582 2572
2583Su Claude Code v2.1.271 o successivo, un subagent che si esegue con lo strumento [`SubagentHandback`](/docs/it/tools-reference) consegna il suo rapporto attraverso quello strumento prima che si fermi. Il campo `last_assistant_message` porta quindi il testo di chiusura del subagent, se presente, che non è il rapporto consegnato. Il rapporto è l'input `message` di quella chiamata, che un hook `PreToolUse` o `PostToolUse` abbinato su `SubagentHandback` riceve come `tool_input.message`.2573Su Claude Code v2.1.271 o successivo, un subagente che si esegue con lo strumento [`SubagentHandback`](/docs/it/tools-reference) consegna il suo rapporto attraverso quello strumento prima che si fermi. Il campo `last_assistant_message` contiene quindi il testo di chiusura del subagente, se presente, che non è il rapporto consegnato. Il rapporto è l'input `message` di quella chiamata, che un hook `PreToolUse` o `PostToolUse` che corrisponde a `SubagentHandback` riceve come `tool_input.message`.
2584 2574
2585Gli hook SubagentStop ricevono anche gli array `background_tasks` e `session_crons` descritti sotto [Stop input](#stop-input). Entrambi gli array hanno ambito alla sessione genitore, non al subagent.2575Gli hook SubagentStop ricevono anche gli array `background_tasks` e `session_crons` descritti sotto [Input Stop](#stop-input). Entrambi gli array sono limitati alla sessione genitore, non al subagente.
2586 2576
2587```json theme={null}2577```json theme={null}
2588{2578{
2601}2591}
2602```2592```
2603 2593
2604Gli hook SubagentStop usano lo stesso formato di controllo delle decisioni degli hook [Stop](#stop-decision-control), incluso `hookSpecificOutput.additionalContext` con `hookEventName` impostato su `"SubagentStop"`, per il feedback non di errore che mantiene il subagent in esecuzione. Restituire `decision: "block"` con un `reason` mantiene il subagent in esecuzione e consegna `reason` al subagent come sua prossima istruzione. Un hook che blocca uscendo con 2 consegna il suo messaggio stderr nello stesso modo. Per iniettare contesto nella sessione genitore dopo che un subagent ritorna, usa un hook [`PostToolUse`](#posttooluse) sullo strumento `Agent` invece.2594Gli hook SubagentStop usano lo stesso formato di controllo decisionale degli [hook Stop](#stop-decision-control), incluso `hookSpecificOutput.additionalContext` con `hookEventName` impostato su `"SubagentStop"`, per il feedback non di errore che mantiene il subagente in esecuzione. Restituire `decision: "block"` con un `reason` mantiene il subagente in esecuzione e consegna `reason` al subagente come sua istruzione successiva. Un hook che blocca uscendo con 2 consegna il suo messaggio stderr allo stesso modo. Per iniettare contesto nella sessione genitore dopo che un subagente ritorna, usa un hook [`PostToolUse`](#posttooluse) su lo strumento `Agent` invece.
2605 2595
2606<h3 id="taskcreated">2596<h3 id="taskcreated">
2607 TaskCreated2597 TaskCreated
2608</h3>2598</h3>
2609 2599
2610Si esegue quando un compito viene creato tramite lo strumento `TaskCreate`. Usalo per applicare convenzioni di denominazione, richiedere descrizioni di compiti, o prevenire la creazione di determinati compiti. In una [sessione senza gli strumenti Task](/docs/it/tools-reference#task-tool-availability), questo evento non si attiva.2600Si esegue quando un'attività viene creata tramite lo strumento `TaskCreate`. Usalo per applicare convenzioni di denominazione, richiedere descrizioni di attività, o prevenire la creazione di determinate attività. In una [sessione senza gli strumenti Task](/docs/it/tools-reference#task-tool-availability), questo evento non si attiva.
2611 2601
2612Gli hook TaskCreated non supportano i matcher e si attivano su ogni occorrenza.2602Gli hook TaskCreated non supportano i matcher e si attivano su ogni occorrenza.
2613 2603
2614<h4 id="taskcreated-input">2604<h4 id="taskcreated-input">
2615 TaskCreated input2605 Input TaskCreated
2616</h4>2606</h4>
2617 2607
2618Oltre ai [common input fields](#common-input-fields), gli hook TaskCreated ricevono `task_id`, `task_subject`, e opzionalmente `task_description`, `teammate_name`, e `team_name`.2608Oltre ai [campi di input comuni](#common-input-fields), gli hook TaskCreated ricevono `task_id`, `task_subject`, e opzionalmente `task_description`, `teammate_name`, e `team_name`.
2619 2609
2620```json theme={null}2610```json theme={null}
2621{2611{
2631}2621}
2632```2622```
2633 2623
2634| Field | Description |2624| Campo | Descrizione |
2635| :- | :- |2625| :- | :- |
2636| `task_id` | Identificatore del compito che viene creato |2626| `task_id` | Identificatore dell'attività in fase di creazione |
2637| `task_subject` | Titolo del compito |2627| `task_subject` | Titolo dell'attività |
2638| `task_description` | Descrizione dettagliata del compito. Potrebbe essere assente |2628| `task_description` | Descrizione dettagliata dell'attività. Potrebbe essere assente |
2639| `teammate_name` | Nome del teammate che crea il compito. Potrebbe essere assente |2629| `teammate_name` | Nome del compagno di squadra che crea l'attività. Potrebbe essere assente |
2640| `team_name` | Deprecato. Nome del team derivato dalla sessione; verrà rimosso in una versione futura |2630| `team_name` | Deprecato. Nome del team derivato dalla sessione; verrà rimosso in una versione futura |
2641 2631
2642<h4 id="taskcreated-decision-control">2632<h4 id="taskcreated-decision-control">
2643 TaskCreated decision control2633 Controllo decisionale TaskCreated
2644</h4>2634</h4>
2645 2635
2646Un hook TaskCreated può bloccare la creazione in due modi. In entrambi i casi, Claude Code elimina il compito e restituisce il tuo messaggio a Claude come errore dello strumento. Claude Code ignora `continue: false` da questo evento e Claude continua a lavorare.2636Un hook TaskCreated può bloccare la creazione in due modi. In entrambi i casi, Claude Code elimina l'attività e restituisce il tuo messaggio a Claude come errore dello strumento. Claude Code ignora `continue: false` da questo evento e Claude continua a lavorare.
2647 2637
2648* **Codice di uscita 2**: Claude Code restituisce il testo stderr come messaggio.2638* **Codice di uscita 2**: Claude Code restituisce il testo stderr come messaggio.
2649* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code restituisce `reason` come messaggio.2639* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code restituisce `reason` come messaggio.
2650 2640
2651Questo esempio blocca i compiti i cui soggetti non seguono il formato richiesto:2641Questo esempio blocca le attività i cui soggetti non seguono il formato richiesto:
2652 2642
2653```bash theme={null}2643```bash theme={null}
2654#!/bin/bash2644#!/bin/bash
2667 TaskCompleted2657 TaskCompleted
2668</h3>2658</h3>
2669 2659
2670Si esegue quando un compito viene contrassegnato come completato. Questo si attiva in due situazioni: quando qualsiasi agente contrassegna esplicitamente un compito come completato tramite lo strumento TaskUpdate, o quando un [team dell'agente](/docs/it/agent-teams) teammate finisce il suo turno con compiti in corso. Usalo per applicare criteri di completamento come il passaggio dei test o dei controlli di lint prima che un compito possa chiudersi.2660Si esegue quando un'attività viene contrassegnata come completata. Questo si attiva in due situazioni: quando qualsiasi agente contrassegna esplicitamente un'attività come completata tramite lo strumento TaskUpdate, o quando un compagno di squadra del [team agente](/docs/it/agent-teams) finisce il suo turno con attività in corso. Usalo per applicare criteri di completamento come il passaggio dei test o dei controlli di lint prima che un'attività possa chiudersi.
2671 2661
2672Gli hook TaskCompleted non supportano i matcher e si attivano su ogni occorrenza.2662Gli hook TaskCompleted non supportano i matcher e si attivano su ogni occorrenza.
2673 2663
2674<h4 id="taskcompleted-input">2664<h4 id="taskcompleted-input">
2675 TaskCompleted input2665 Input TaskCompleted
2676</h4>2666</h4>
2677 2667
2678Oltre ai [common input fields](#common-input-fields), gli hook TaskCompleted ricevono `task_id`, `task_subject`, e opzionalmente `task_description`, `teammate_name`, e `team_name`.2668Oltre ai [campi di input comuni](#common-input-fields), gli hook TaskCompleted ricevono `task_id`, `task_subject`, e opzionalmente `task_description`, `teammate_name`, e `team_name`.
2679 2669
2680```json theme={null}2670```json theme={null}
2681{2671{
2692}2682}
2693```2683```
2694 2684
2695| Field | Description |2685| Campo | Descrizione |
2696| :- | :- |2686| :- | :- |
2697| `task_id` | Identificatore del compito che viene completato |2687| `task_id` | Identificatore dell'attività in fase di completamento |
2698| `task_subject` | Titolo del compito |2688| `task_subject` | Titolo dell'attività |
2699| `task_description` | Descrizione dettagliata del compito. Potrebbe essere assente |2689| `task_description` | Descrizione dettagliata dell'attività. Potrebbe essere assente |
2700| `teammate_name` | Nome del teammate che completa il compito. Potrebbe essere assente |2690| `teammate_name` | Nome del compagno di squadra che completa l'attività. Potrebbe essere assente |
2701| `team_name` | Deprecato. Nome del team derivato dalla sessione; verrà rimosso in una versione futura |2691| `team_name` | Deprecato. Nome del team derivato dalla sessione; verrà rimosso in una versione futura |
2702 2692
2703<h4 id="taskcompleted-decision-control">2693<h4 id="taskcompleted-decision-control">
2704 TaskCompleted decision control2694 Controllo decisionale TaskCompleted
2705</h4>2695</h4>
2706 2696
2707Gli hook TaskCompleted supportano due modi per controllare il completamento del compito:2697Gli hook TaskCompleted supportano due modi per controllare il completamento dell'attività:
2708 2698
2709* **Codice di uscita 2**: il compito non viene contrassegnato come completato e il messaggio stderr viene restituito al modello come feedback.2699* **Codice di uscita 2**: l'attività non viene contrassegnata come completata e il messaggio stderr viene restituito al modello come feedback.
2710* **JSON `{"continue": false, "stopReason": "..."}`**: quando un teammate che finisce il suo turno ha attivato l'evento, ferma completamente il teammate, corrispondendo al comportamento dell'hook `Stop`. Il `stopReason` viene mostrato all'utente. Quando lo strumento `TaskUpdate` ha attivato l'evento, Claude Code ignora `continue: false`; il codice di uscita 2 blocca comunque il completamento.2700* **JSON `{"continue": false, "stopReason": "..."}`**: quando un compagno di squadra che finisce il suo turno ha attivato l'evento, ferma completamente il compagno di squadra, corrispondendo al comportamento dell'hook `Stop`. Il `stopReason` viene mostrato all'utente. Quando lo strumento `TaskUpdate` ha attivato l'evento, Claude Code ignora `continue: false`; il codice di uscita 2 blocca comunque il completamento.
2711 2701
2712Questo esempio esegue i test e blocca il completamento del compito se falliscono:2702Questo esempio esegue i test e blocca il completamento dell'attività se falliscono:
2713 2703
2714```bash theme={null}2704```bash theme={null}
2715#!/bin/bash2705#!/bin/bash
2729 Stop2719 Stop
2730</h3>2720</h3>
2731 2721
2732Si esegue quando l'agente Claude Code principale ha finito di rispondere. Non si esegue se l'arresto si è verificato a causa di un'interruzione dell'utente. Gli errori API attivano [StopFailure](#stopfailure) invece.2722Si esegue quando l'agente Claude Code principale ha finito di rispondere. Non si esegue se l'arresto è avvenuto a causa di un'interruzione dell'utente. Gli errori API attivano [StopFailure](#stopfailure) invece.
2733 2723
2734<Tip>2724<Tip>
2735 Il comando [`/goal`](/docs/it/goal) è una scorciatoia incorporata per un hook Stop basato su prompt con ambito di sessione. Usalo quando vuoi che Claude continui a lavorare verso una condizione senza scrivere la configurazione dell'hook.2725 Il comando [`/goal`](/docs/it/goal) è una scorciatoia incorporata per un hook Stop con ambito di sessione basato su prompt. Usalo quando vuoi che Claude continui a lavorare verso una condizione senza scrivere la configurazione dell'hook.
2736</Tip>2726</Tip>
2737 2727
2738<h4 id="stop-input">2728<h4 id="stop-input">
2739 Stop input2729 Input Stop
2740</h4>2730</h4>
2741 2731
2742Oltre ai [common input fields](#common-input-fields), gli hook Stop ricevono `stop_hook_active`, `last_assistant_message`, `background_tasks`, e `session_crons`. Il campo `stop_hook_active` è `true` quando Claude Code sta già continuando come risultato di un hook stop. Controlla questo valore o elabora la trascrizione per evitare di bloccarsi su una condizione che non si risolverà mai. Claude Code sovrascrive l'hook e termina il turno dopo 8 blocchi consecutivi.2732Oltre ai [campi di input comuni](#common-input-fields), gli hook Stop ricevono `stop_hook_active`, `last_assistant_message`, `background_tasks`, e `session_crons`. Il campo `stop_hook_active` è `true` quando Claude Code sta già continuando come risultato di un hook stop. Controlla questo valore o elabora la trascrizione per evitare di bloccarsi su una condizione che non si risolverà mai. Claude Code applica un limite di 8 continuazioni consecutive: dopo che gli hook stop hanno continuato il turno otto volte di fila, Claude Code sovrascrive il blocco successivo e termina il turno. Per aumentare il limite, imposta [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/it/env-vars).
2743 2733
2744Il campo `last_assistant_message` contiene il contenuto di testo della risposta finale di Claude, quindi gli hook possono accedervi senza analizzare il file della trascrizione. Per gli hook che agiscono sul turno appena completato, come gli hook di lettura ad alta voce o notifica, usa questo campo piuttosto che leggere `transcript_path`: il file della trascrizione non è garantito che includa il messaggio finale al momento di Stop su tutte le versioni.2734Il campo `last_assistant_message` contiene il contenuto di testo della risposta finale di Claude, quindi gli hook possono accedervi senza analizzare il file della trascrizione. Per gli hook che agiscono sul turno appena completato, come gli hook di lettura ad alta voce o notifica, usa questo campo piuttosto che leggere `transcript_path`: il file della trascrizione non è garantito che includa il messaggio finale al momento di Stop su tutte le versioni.
2745 2735
2746Gli array `background_tasks` e `session_crons` consentono agli hook di distinguere "la sessione è finita" da "la sessione è in pausa in attesa che il lavoro in background la risvegli di nuovo". Entrambi gli array sono presenti quando il registro dei compiti è raggiungibile e sono vuoti quando nulla è in volo o programmato.2736Gli array `background_tasks` e `session_crons` consentono agli hook di distinguere "la sessione è finita" da "la sessione è in pausa in attesa che il lavoro di background la risvegli". Entrambi gli array sono presenti quando il registro delle attività è raggiungibile e sono vuoti quando nulla è in volo o programmato.
2747 2737
2748Ogni voce in `background_tasks` descrive un compito in volo e usa questi campi:2738Ogni voce in `background_tasks` descrive un'attività in volo e usa questi campi:
2749 2739
2750| Field | Description |2740| Campo | Descrizione |
2751| :- | :- |2741| :- | :- |
2752| `id` | Identificatore del compito |2742| `id` | Identificatore dell'attività |
2753| `type` | Etichetta del tipo di compito amichevole come `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session`, o `MCP task`. Ogni etichetta identifica quale funzione di Claude Code ha creato il compito. Ritorna al discriminante grezzo per i tipi non riconosciuti |2743| `type` | Etichetta del tipo di attività amichevole come `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session`, o `MCP task`. Ogni etichetta identifica quale funzionalità di Claude Code ha creato l'attività. Ritorna al discriminante grezzo per i tipi non riconosciuti |
2754| `status` | Stato del compito corrente |2744| `status` | Stato attuale dell'attività |
2755| `description` | Descrizione in testo libero, limitata a 1000 caratteri con un marcatore `… [+N chars]` in-stringa quando ritagliato |2745| `description` | Descrizione in testo libero, limitata a 1000 caratteri con un marcatore `… [+N chars]` in-stringa quando ritagliato |
2756| `command` | Riga di comando shell, limitata a 1000 caratteri. Presente solo per i compiti `shell` |2746| `command` | Riga di comando shell, limitata a 1000 caratteri. Presente solo per le attività `shell` |
2757| `agent_type` | Nome del tipo di subagent. Presente solo per i compiti `subagent` |2747| `agent_type` | Nome del tipo di subagente. Presente solo per le attività `subagent` |
2758| `server` | Nome del server MCP. Presente solo per i compiti `monitor` e `MCP task` |2748| `server` | Nome del server MCP. Presente solo per le attività `monitor` e `MCP task` |
2759| `tool` | Nome dello strumento MCP. Presente solo per i compiti `monitor` e `MCP task` |2749| `tool` | Nome dello strumento MCP. Presente solo per le attività `monitor` e `MCP task` |
2760| `name` | Nome del workflow. Presente solo per i compiti `workflow` |2750| `name` | Nome del workflow. Presente solo per le attività `workflow` |
2761 2751
2762Ogni voce in `session_crons` descrive un risveglio programmato con ambito di sessione, proveniente da `CronCreate`, `ScheduleWakeup`, e `/loop`:2752Ogni voce in `session_crons` descrive un risveglio programmato con ambito di sessione, proveniente da `CronCreate`, `ScheduleWakeup`, e `/loop`:
2763 2753
2764| Field | Description |2754| Campo | Descrizione |
2765| :- | :- |2755| :- | :- |
2766| `id` | Identificatore del compito cron |2756| `id` | Identificatore dell'attività cron |
2767| `schedule` | Espressione cron, ad esempio `0 9 * * 1-5` |2757| `schedule` | Espressione cron, ad esempio `0 9 * * 1-5` |
2768| `recurring` | `false` per i risvegli una tantum il cui programma codifica un sing olo tempo di attivazione, `true` per i compiti che si riattivano su ogni corrispondenza |2758| `recurring` | `false` per i risvegli una tantum il cui programma codifica un singolo tempo di attivazione, `true` per le attività che si riattivano su ogni corrispondenza |
2769| `prompt` | Prompt inviato quando il cron si attiva, limitato a 1000 caratteri con lo stesso marcatore `… [+N chars]` |2759| `prompt` | Prompt inviato quando il cron si attiva, limitato a 1000 caratteri con lo stesso marcatore `… [+N chars]` |
2770 2760
2771Questo esempio mostra un input Stop con un compito shell in volo e un cron ricorrente:2761Questo esempio mostra un input Stop con un'attività shell in volo e un cron ricorrente:
2772 2762
2773```json theme={null}2763```json theme={null}
2774{2764{
2800```2790```
2801 2791
2802<h4 id="stop-decision-control">2792<h4 id="stop-decision-control">
2803 Stop decision control2793 Controllo decisionale Stop
2804</h4>2794</h4>
2805 2795
2806Gli hook `Stop` e `SubagentStop` possono controllare se Claude continua. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:2796Gli hook `Stop` e `SubagentStop` possono controllare se Claude continua. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, il tuo script hook può restituire questi campi specifici dell'evento:
2807 2797
2808| Field | Description |2798| Campo | Descrizione |
2809| :- | :- |2799| :- | :- |
2810| `decision` | `"block"` impedisce a Claude di fermarsi. Ometti per consentire a Claude di fermarsi |2800| `decision` | `"block"` impedisce a Claude di fermarsi. Ometti per consentire a Claude di fermarsi |
2811| `reason` | Richiesto quando `decision` è `"block"`. Dice a Claude perché dovrebbe continuare |2801| `reason` | Richiesto quando `decision` è `"block"`. Dice a Claude perché dovrebbe continuare |
2812| `hookSpecificOutput.additionalContext` | Feedback non di errore per Claude. La conversazione continua in modo che Claude possa agire su di esso, ma a differenza di `decision: "block"` viene mostrato nella trascrizione come feedback dell'hook piuttosto che come errore dell'hook |2802| `hookSpecificOutput.additionalContext` | Feedback non di errore per Claude. La conversazione continua in modo che Claude possa agire su di esso, ma a differenza di `decision: "block"` viene mostrato nella trascrizione come feedback dell'hook piuttosto che un errore dell'hook |
2813 2803
2814Un hook che blocca uscendo con 2 si instrada nello stesso modo di `reason`: Claude riceve il messaggio stderr come spiegazione per cui dovrebbe continuare.2804Un hook che blocca uscendo con 2 si instrada allo stesso modo di `reason`: Claude riceve il messaggio stderr come spiegazione del perché dovrebbe continuare.
2815 2805
2816```json theme={null}2806```json theme={null}
2817{2807{
2820}2810}
2821```2811```
2822 2812
2823Usa `additionalContext` quando l'hook funziona come progettato e dà a Claude una guida, come "esegui la suite di test prima di finire". Mantiene la conversazione attraverso gli stessi loop protections di `decision: "block"`, vale a dire l'input `stop_hook_active` e il limite di continuazione di 8 consecutivi, ma la trascrizione lo etichetta come `Stop hook feedback` e nessuna notifica di errore dell'hook viene mostrata:2813Usa `additionalContext` quando l'hook funziona come progettato e dà a Claude una guida, come "esegui la suite di test prima di finire". Mantiene la conversazione in corso attraverso le stesse protezioni di loop di `decision: "block"`, vale a dire l'input `stop_hook_active` e il limite di 8 continuazioni consecutive, ma la trascrizione lo etichetta come `Stop hook feedback` e nessuna notifica di errore dell'hook viene mostrata:
2824 2814
2825```json theme={null}2815```json theme={null}
2826{2816{
2835 StopFailure2825 StopFailure
2836</h3>2826</h3>
2837 2827
2838Si esegue invece di [Stop](#stop) quando il turno termina a causa di un errore API. Claude Code ignora l'output e il codice di uscita dell'hook, a parte [`terminalSequence`](#emit-terminal-notifications). Usalo per registrare i fallimenti, inviare avvisi, o intraprendere azioni di recupero quando Claude non può completare una risposta a causa di limiti di velocità, problemi di autenticazione, o altri errori API.2828Si esegue al posto di [Stop](#stop) quando il turno termina a causa di un errore API. Claude Code ignora l'output e il codice di uscita dell'hook, a parte [`terminalSequence`](#emit-terminal-notifications). Usalo per registrare i fallimenti, inviare avvisi, o intraprendere azioni di recupero quando Claude non può completare una risposta a causa di limiti di velocità, problemi di autenticazione, o altri errori API.
2839 2829
2840<h4 id="stopfailure-input">2830<h4 id="stopfailure-input">
2841 StopFailure input2831 Input StopFailure
2842</h4>2832</h4>
2843 2833
2844Oltre ai [common input fields](#common-input-fields), gli hook StopFailure ricevono `error`, `error_details` facoltativo, e `last_assistant_message` facoltativo. Il campo `error` identifica il tipo di errore ed è usato per il filtraggio del matcher.2834Oltre ai [campi di input comuni](#common-input-fields), gli hook StopFailure ricevono `error`, `error_details` facoltativo, e `last_assistant_message` facoltativo. Il campo `error` identifica il tipo di errore ed è usato per il filtraggio del matcher.
2845 2835
2846| Field | Description |2836| Campo | Descrizione |
2847| :- | :- |2837| :- | :- |
2848| `error` | Tipo di errore: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, o `unknown` |2838| `error` | Tipo di errore: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, o `unknown` |
2849| `error_details` | Dettagli aggiuntivi sull'errore, quando disponibili |2839| `error_details` | Dettagli aggiuntivi sull'errore, quando disponibili |
2861}2851}
2862```2852```
2863 2853
2864Gli hook StopFailure non hanno controllo delle decisioni. Si eseguono solo per scopi di notifica e logging.2854Gli hook StopFailure non hanno controllo decisionale. Si eseguono solo per scopi di notifica e logging.
2865 2855
2866<h3 id="teammateidle">2856<h3 id="teammateidle">
2867 TeammateIdle2857 TeammateIdle
2868</h3>2858</h3>
2869 2859
2870Si esegue quando un [team dell'agente](/docs/it/agent-teams) teammate sta per andare inattivo dopo aver finito il suo turno. Usalo per applicare gate di qualità prima che un teammate smetta di lavorare, come richiedere il passaggio dei controlli di lint o verificare che i file di output esistano.2860Si esegue quando un compagno di squadra del [team agente](/docs/it/agent-teams) sta per andare inattivo dopo aver finito il suo turno. Usalo per applicare gate di qualità prima che un compagno di squadra smetta di lavorare, come richiedere il passaggio dei controlli di lint o verificare che i file di output esistano.
2871 2861
2872Gli hook TeammateIdle non supportano i matcher e si attivano su ogni occorrenza.2862Gli hook TeammateIdle non supportano i matcher e si attivano su ogni occorrenza.
2873 2863
2874<h4 id="teammateidle-input">2864<h4 id="teammateidle-input">
2875 TeammateIdle input2865 Input TeammateIdle
2876</h4>2866</h4>
2877 2867
2878Oltre ai [common input fields](#common-input-fields), gli hook TeammateIdle ricevono `teammate_name` e `team_name`.2868Oltre ai [campi di input comuni](#common-input-fields), gli hook TeammateIdle ricevono `teammate_name` e `team_name`.
2879 2869
2880```json theme={null}2870```json theme={null}
2881{2871{
2889}2879}
2890```2880```
2891 2881
2892| Field | Description |2882| Campo | Descrizione |
2893| :- | :- |2883| :- | :- |
2894| `teammate_name` | Nome del teammate che sta per andare inattivo |2884| `teammate_name` | Nome del compagno di squadra che sta per andare inattivo |
2895| `team_name` | Deprecato. Nome del team derivato dalla sessione; verrà rimosso in una versione futura |2885| `team_name` | Deprecato. Nome del team derivato dalla sessione; verrà rimosso in una versione futura |
2896 2886
2897<h4 id="teammateidle-decision-control">2887<h4 id="teammateidle-decision-control">
2898 TeammateIdle decision control2888 Controllo decisionale TeammateIdle
2899</h4>2889</h4>
2900 2890
2901Gli hook TeammateIdle supportano due modi per controllare il comportamento del teammate:2891Gli hook TeammateIdle supportano due modi per controllare il comportamento del compagno di squadra:
2902 2892
2903* **Codice di uscita 2**: il teammate riceve il messaggio stderr come feedback e continua a lavorare invece di andare inattivo.2893* **Codice di uscita 2**: il compagno di squadra riceve il messaggio stderr come feedback e continua a lavorare invece di andare inattivo.
2904* **JSON `{"continue": false, "stopReason": "..."}`**: ferma completamente il teammate, corrispondendo al comportamento dell'hook `Stop`. Il `stopReason` viene mostrato all'utente.2894* **JSON `{"continue": false, "stopReason": "..."}`**: ferma completamente il compagno di squadra, corrispondendo al comportamento dell'hook `Stop`. Il `stopReason` viene mostrato all'utente.
2905 2895
2906Questo esempio controlla che un artefatto di build esista prima di consentire a un teammate di andare inattivo:2896Questo esempio controlla che un artefatto di build esista prima di consentire a un compagno di squadra di andare inattivo:
2907 2897
2908```bash theme={null}2898```bash theme={null}
2909#!/bin/bash2899#!/bin/bash
2920 ConfigChange2910 ConfigChange
2921</h3>2911</h3>
2922 2912
2923Si esegue quando un file di configurazione cambia durante una sessione. Usalo per controllare i cambiamenti delle impostazioni, applicare politiche di sicurezza, o bloccare modifiche non autorizzate ai file di configurazione.2913Si esegue quando un file di configurazione cambia durante una sessione. Usalo per controllare i cambiamenti delle impostazioni, applicare policy di sicurezza, o bloccare modifiche non autorizzate ai file di configurazione.
2924 2914
2925Claude Code esegue gli hook ConfigChange quando un file di impostazioni, un file di politica gestita, o un file di skill cambia. Per la politica gestita, li esegue solo quando `managed-settings.json` o un file in `managed-settings.d/` cambia. Applica le [impostazioni gestite dal server](/docs/it/server-managed-settings) e i cambiamenti alle preferenze gestite di macOS o alla politica del registro di Windows senza eseguirli. Su WSL con [`wslInheritsWindowsSettings`](/docs/it/settings-reference#wslinheritswindowssettings), applica anche un file di impostazioni gestite di Windows modificato sul suo sondaggio di politica senza eseguirli.2915Claude Code esegue gli hook ConfigChange quando un file di impostazioni, un file di policy gestito, o un file di skill cambia. Per la policy gestita, li esegue solo quando `managed-settings.json` o un file in `managed-settings.d/` cambia. Applica le [impostazioni gestite dal server](/docs/it/server-managed-settings) e i cambiamenti alle preferenze gestite di macOS o alla policy del registro di Windows senza eseguirli. Su WSL con [`wslInheritsWindowsSettings`](/docs/it/settings-reference#wslinheritswindowssettings), applica anche un file di impostazioni gestite di Windows modificato sul suo sondaggio di policy senza eseguirli.
2926 2916
2927Il matcher filtra sulla fonte di configurazione:2917Il matcher filtra sulla fonte di configurazione:
2928 2918
2955```2945```
2956 2946
2957<h4 id="configchange-input">2947<h4 id="configchange-input">
2958 ConfigChange input2948 Input ConfigChange
2959</h4>2949</h4>
2960 2950
2961Oltre ai [common input fields](#common-input-fields), gli hook ConfigChange ricevono `source` e opzionalmente `file_path`. Il campo `source` indica quale tipo di configurazione è cambiato, e `file_path` fornisce il percorso al file specifico che è stato modificato.2951Oltre ai [campi di input comuni](#common-input-fields), gli hook ConfigChange ricevono `source` e opzionalmente `file_path`. Il campo `source` indica quale tipo di configurazione è cambiato, e `file_path` fornisce il percorso al file specifico che è stato modificato.
2962 2952
2963```json theme={null}2953```json theme={null}
2964{2954{
2972```2962```
2973 2963
2974<h4 id="configchange-decision-control">2964<h4 id="configchange-decision-control">
2975 ConfigChange decision control2965 Controllo decisionale ConfigChange
2976</h4>2966</h4>
2977 2967
2978Gli hook ConfigChange possono bloccare i cambiamenti di configurazione dal prendere effetto. Usa il codice di uscita 2 o un JSON `decision` per prevenire il cambiamento. Quando bloccato, le nuove impostazioni non vengono applicate alla sessione in esecuzione.2968Gli hook ConfigChange possono bloccare i cambiamenti di configurazione dall'avere effetto. Usa il codice di uscita 2 o un JSON `decision` per prevenire il cambiamento. Quando bloccato, le nuove impostazioni non vengono applicate alla sessione in esecuzione.
2979 2969
2980| Field | Description |2970| Campo | Descrizione |
2981| :- | :- |2971| :- | :- |
2982| `decision` | `"block"` impedisce l'applicazione del cambiamento di configurazione. Ometti per consentire il cambiamento |2972| `decision` | `"block"` impedisce l'applicazione del cambiamento di configurazione. Ometti per consentire il cambiamento |
2983| `reason` | Accettato ma mai mostrato |2973| `reason` | Accettato ma mai mostrato |
2989}2979}
2990```2980```
2991 2981
2992I cambiamenti `policy_settings` non possono essere bloccati. Gli hook si attivano comunque per le fonti `policy_settings` quando un file di impostazioni gestite sulla macchina cambia, in modo che tu possa registrare quelle modifiche, ma qualsiasi decisione di blocco viene ignorata. Questo assicura che le impostazioni gestite dall'azienda abbiano sempre effetto. Claude Code non esegue gli hook `ConfigChange` quando le [impostazioni gestite dal server](/docs/it/server-managed-settings) arrivano o si aggiornano.2982I cambiamenti `policy_settings` non possono essere bloccati. Gli hook si attivano comunque per le fonti `policy_settings` quando un file di impostazioni gestite sulla macchina cambia, quindi puoi usarli per registrare quelle modifiche, ma qualsiasi decisione di blocco viene ignorata. Questo assicura che le impostazioni gestite dall'azienda abbiano sempre effetto. Claude Code non esegue gli hook `ConfigChange` quando le [impostazioni gestite dal server](/docs/it/server-managed-settings) arrivano o si aggiornano.
2993 2983
2994Claude Code agisce sulla decisione di blocco dall'output JSON di un hook ConfigChange e scarta `systemMessage` e `continue`. Un cambiamento bloccato non mostra alcun messaggio a te o a Claude, indipendentemente dal fatto che tu blocchi con `reason` o con stderr all'uscita 2. Claude Code scrive solo una riga nel log di debug.2984Claude Code agisce sulla decisione di blocco dall'output JSON di un hook ConfigChange e scarta `systemMessage` e `continue`. Un cambiamento bloccato non mostra alcun messaggio a te o a Claude, indipendentemente dal fatto che blocchi con `reason` o con stderr all'uscita 2. Claude Code scrive solo una riga nel log di debug.
2995 2985
2996<h3 id="cwdchanged">2986<h3 id="cwdchanged">
2997 CwdChanged2987 CwdChanged
2998</h3>2988</h3>
2999 2989
3000Si esegue quando un comando shell nella conversazione principale cambia la directory di lavoro, ad esempio quando Claude esegue un comando `cd`. Usalo per reagire ai cambiamenti di directory: ricaricare le variabili di ambiente, attivare toolchain specifiche del progetto, o eseguire script di configurazione automaticamente. Si accoppia con [FileChanged](#filechanged) per strumenti come [direnv](https://direnv.net/) che gestiscono l'ambiente per directory.2990Si esegue quando un comando shell nella conversazione principale cambia la directory di lavoro, ad esempio quando Claude esegue un comando `cd`. Usalo per reagire ai cambiamenti di directory: ricaricare le variabili di ambiente, attivare i toolchain specifici del progetto, o eseguire script di configurazione automaticamente. Si accoppia con [FileChanged](#filechanged) per strumenti come [direnv](https://direnv.net/) che gestiscono l'ambiente per directory.
3001 2991
3002Gli hook CwdChanged hanno accesso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Le variabili scritte in quel file persistono nei comandi Bash successivi fino al prossimo evento CwdChanged, quando Claude Code le cancella.2992Gli hook CwdChanged hanno accesso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Le variabili scritte su quel file persistono nei comandi Bash successivi fino al prossimo evento [CwdChanged](#cwdchanged), quando Claude Code le cancella.
3003 2993
3004CwdChanged non supporta i matcher e si attiva su ogni occorrenza.2994CwdChanged non supporta i matcher e si attiva su ogni occorrenza.
3005 2995
3006<h4 id="cwdchanged-input">2996<h4 id="cwdchanged-input">
3007 CwdChanged input2997 Input CwdChanged
3008</h4>2998</h4>
3009 2999
3010Oltre ai [common input fields](#common-input-fields), gli hook CwdChanged ricevono `old_cwd` e `new_cwd`.3000Oltre ai [campi di input comuni](#common-input-fields), gli hook CwdChanged ricevono `old_cwd` e `new_cwd`.
3011 3001
3012```json theme={null}3002```json theme={null}
3013{3003{
3021```3011```
3022 3012
3023<h4 id="cwdchanged-output">3013<h4 id="cwdchanged-output">
3024 CwdChanged output3014 Output CwdChanged
3025</h4>3015</h4>
3026 3016
3027Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, gli hook CwdChanged possono restituire `watchPaths` per impostare dinamicamente quali percorsi di file [FileChanged](#filechanged) osserva:3017Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, gli hook CwdChanged possono restituire `watchPaths` per impostare dinamicamente quali percorsi di file [FileChanged](#filechanged) osserva:
3028 3018
3029| Field | Description |3019| Campo | Descrizione |
3030| :- | :- |3020| :- | :- |
3031| `watchPaths` | Array di percorsi assoluti. Sostituisce l'elenco di osservazione dinamico corrente. I percorsi dalla tua configurazione `matcher` vengono sempre osservati. Restituire un array vuoto cancella l'elenco dinamico, che è tipico quando si entra in una nuova directory |3021| `watchPaths` | Array di percorsi assoluti. Sostituisce l'elenco di osservazione dinamico corrente. I percorsi dalla tua configurazione `matcher` vengono sempre osservati. Restituire un array vuoto cancella l'elenco dinamico, che è tipico quando si entra in una nuova directory |
3032 3022
3033Gli hook CwdChanged non hanno controllo delle decisioni. Non possono bloccare il cambiamento di directory.3023Gli hook CwdChanged non hanno controllo decisionale. Non possono bloccare il cambiamento di directory.
3034 3024
3035Claude Code legge `watchPaths` e `systemMessage` dal loro output JSON e scarta `continue`. Nelle sessioni interattive, mostra il `systemMessage` come una breve notifica di terminale. Il messaggio non raggiunge il flusso di messaggi dell'SDK.3025Claude Code legge `watchPaths` e `systemMessage` dal loro output JSON e scarta `continue`. Nelle sessioni interattive, mostra il `systemMessage` come una breve notifica di terminale. Il messaggio non raggiunge il flusso di messaggi dell'SDK.
3036 3026
3046* Aggiungi una directory sulla scheda Workspace `/permissions`3036* Aggiungi una directory sulla scheda Workspace `/permissions`
3047* Aggiungi una directory che è già una directory di lavoro o dentro una3037* Aggiungi una directory che è già una directory di lavoro o dentro una
3048 3038
3049Claude Code attiva DirectoryAdded dopo aver aggiornato lo stato della sandbox e del permesso, quindi gli strumenti sandboxed vedono già la nuova directory quando il tuo hook si esegue. I comandi dell'hook stessi si eseguono non sandboxed.3039Claude Code attiva DirectoryAdded dopo aver aggiornato lo stato della sandbox e del permesso, quindi gli strumenti in sandbox vedono già la nuova directory quando il tuo hook si esegue. I comandi dell'hook stessi si eseguono non in sandbox.
3050 3040
3051Claude Code non attende l'hook: l'aggiunta si completa immediatamente, e l'hook si esegue in background con il timeout predefinito di 600 secondi.3041Claude Code non attende l'hook: l'aggiunta si completa immediatamente, e l'hook si esegue in background con il timeout predefinito di 600 secondi.
3052 3042
3058| `register_repo_root` | Un client SDK aggiunge una directory con la richiesta di controllo `register_repo_root` |3048| `register_repo_root` | Un client SDK aggiunge una directory con la richiesta di controllo `register_repo_root` |
3059 3049
3060<h4 id="directoryadded-input">3050<h4 id="directoryadded-input">
3061 DirectoryAdded input3051 Input DirectoryAdded
3062</h4>3052</h4>
3063 3053
3064Oltre ai [common input fields](#common-input-fields), gli hook DirectoryAdded ricevono `directory` e `source`.3054Oltre ai [campi di input comuni](#common-input-fields), gli hook DirectoryAdded ricevono `directory` e `source`.
3065 3055
3066| Field | Description |3056| Campo | Descrizione |
3067| :- | :- |3057| :- | :- |
3068| `directory` | Percorso assoluto della directory che è stata aggiunta |3058| `directory` | Percorso assoluto della directory che è stata aggiunta |
3069| `source` | Come la directory è stata aggiunta, `"slash_command"` per `/add-dir` o `"register_repo_root"` per la richiesta di controllo dell'SDK |3059| `source` | Come la directory è stata aggiunta, `"slash_command"` per `/add-dir` o `"register_repo_root"` per la richiesta di controllo dell'SDK |
3079}3069}
3080```3070```
3081 3071
3082Gli hook DirectoryAdded non hanno controllo delle decisioni. Non possono bloccare l'aggiunta, che si è già completata quando l'hook si esegue. Claude Code scarta il campo `continue` dal loro output JSON e visualizza il resto diversamente per fonte:3072Gli hook DirectoryAdded non hanno controllo decisionale. Non possono bloccare l'aggiunta, che si è già completata quando l'hook si esegue. Claude Code scarta il campo `continue` dal loro output JSON e visualizza il resto diversamente per fonte:
3083 3073
3084* `slash_command`: Claude Code consegna il `systemMessage` dell'hook a Claude come contesto sul prossimo turno della conversazione, piuttosto che mostrarlo a te. Un conteggio degli hook falliti appare nella trascrizione. L'output di fallimento completo va al log di debug3074* `slash_command`: Claude Code consegna il `systemMessage` dell'hook a Claude come contesto sul turno di conversazione successivo, piuttosto che mostrartelo. Un conteggio degli hook falliti appare nella trascrizione. L'output di fallimento completo va al log di debug
3085* `register_repo_root`: Claude Code scrive l'output `systemMessage` e l'output di fallimento solo nel log di debug3075* `register_repo_root`: Claude Code scrive l'output `systemMessage` e l'output di fallimento nel log di debug solo
3086 3076
3087<h3 id="filechanged">3077<h3 id="filechanged">
3088 FileChanged3078 FileChanged
3092 3082
3093Il `matcher` per questo evento serve due ruoli:3083Il `matcher` per questo evento serve due ruoli:
3094 3084
3095* **Costruire l'elenco di osservazione**: il valore viene diviso su `|` e ogni segmento viene registrato come un nome di file letterale nella directory di lavoro, quindi `".envrc|.env"` osserva esattamente quei due file. I modelli regex non sono utili qui: un valore come `^\.env` osserverebbe un file letteralmente denominato `^\.env`.3085* **Costruisci l'elenco di osservazione**: il valore è diviso su `|` e ogni segmento è registrato come un nome di file letterale nella directory di lavoro, quindi `".envrc|.env"` osserva esattamente quei due file. I modelli regex non sono utili qui: un valore come `^\.env` osserverebbe un file letteralmente denominato `^\.env`.
3096* **Filtrare quali hook si eseguono**: quando un file osservato cambia, lo stesso valore filtra quali gruppi di hook si eseguono usando le [regole di matcher](#matcher-patterns) standard rispetto al nome di base del file modificato.3086* **Filtra quali hook si eseguono**: quando un file osservato cambia, lo stesso valore filtra quali gruppi di hook si eseguono usando le [regole di matcher](#matcher-patterns) standard rispetto al basename del file modificato.
3097 3087
3098Questo esempio normalizza le terminazioni di riga in `data.csv` dopo qualsiasi cambiamento, incluso un comando `Bash` o uno script esterno che riscrive il file:3088Questo esempio normalizza le terminazioni di riga in `data.csv` dopo qualsiasi cambiamento, incluso un comando `Bash` o uno script esterno che riscrive il file:
3099 3089
3115}3105}
3116```3106```
3117 3107
3118L'hook legge il percorso assoluto del file modificato dal campo `file_path` dell'[input JSON](#filechanged-input) su stdin. La sua guardia `grep` testa la stessa cosa che `perl` rimuove, un CR alla fine di una riga, quindi l'esecuzione dopo una normalizzazione esce senza toccare il file. Una guardia più sciolta si cicla per sempre, perché `perl -i` riscrive il file anche quando non sostituisce nulla e Claude Code esegue l'hook di nuovo dopo ogni riscrittura. Salva questo script in `/path/to/normalize-line-endings.sh` e rendilo eseguibile:3108L'hook legge il percorso assoluto del file modificato dal campo `file_path` dell'[input JSON](#filechanged-input) su stdin. La sua guardia `grep` testa la stessa cosa che `perl` rimuove, un CR alla fine di una riga, quindi l'esecuzione dopo una normalizzazione esce senza toccare il file. Una guardia più sciatta si ripete per sempre, perché `perl -i` riscrive il file anche quando non sostituisce nulla e Claude Code esegue l'hook di nuovo dopo ogni riscrittura. Salva questo script in `/path/to/normalize-line-endings.sh` e rendilo eseguibile:
3119 3109
3120```bash theme={null}3110```bash theme={null}
3121#!/bin/bash3111#!/bin/bash
3127 3117
3128Per confermare che l'hook funziona, chiedi a Claude di aggiungere una riga CRLF a `data.csv` con un comando `Bash`. Claude Code esegue l'hook e il file finisce con terminazioni LF.3118Per confermare che l'hook funziona, chiedi a Claude di aggiungere una riga CRLF a `data.csv` con un comando `Bash`. Claude Code esegue l'hook e il file finisce con terminazioni LF.
3129 3119
3130Per osservare file che non puoi nominare in anticipo, restituisci [`watchPaths`](#filechanged-output) da un hook per aggiornare l'elenco di osservazione dinamicamente. Claude Code avvia l'osservatore solo quando qualcosa nomina un file da osservare, quindi semina l'elenco con un gruppo FileChanged il cui matcher nomina almeno un file, o con un hook [SessionStart](#sessionstart-decision-control) o [CwdChanged](#cwdchanged) che restituisce `watchPaths`. Il matcher filtra comunque quali gruppi di hook si eseguono quando un file osservato cambia, quindi dai al gruppo che gestisce i percorsi dinamici un matcher omesso, che corrisponde a ogni file osservato e non aggiunge nulla all'elenco di osservazione. Un matcher `"*"` corrisponde anche a ogni file, ma Claude Code lo registra nell'elenco di osservazione come un file letterale denominato `*`.3120Per osservare i file che non puoi nominare in anticipo, restituisci [`watchPaths`](#filechanged-output) da un hook per aggiornare l'elenco di osservazione dinamicamente. Claude Code avvia l'osservatore solo quando qualcosa nomina un file da osservare, quindi semina l'elenco con un gruppo FileChanged il cui matcher nomina almeno un file, o con un hook [SessionStart](#sessionstart-decision-control) o [CwdChanged](#cwdchanged) che restituisce `watchPaths`. Il matcher filtra comunque quali gruppi di hook si eseguono quando un file osservato cambia, quindi dai al gruppo che gestisce i percorsi dinamici un matcher omesso, che corrisponde a ogni file osservato e non aggiunge nulla all'elenco di osservazione. Un matcher `"*"` corrisponde anche a ogni file, ma Claude Code lo registra nell'elenco di osservazione come un file letterale denominato `*`.
3131 3121
3132Gli hook FileChanged hanno accesso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Le variabili scritte in quel file persistono nei comandi Bash successivi fino al prossimo evento [CwdChanged](#cwdchanged), quando Claude Code le cancella.3122Gli hook FileChanged hanno accesso a [`CLAUDE_ENV_FILE`](#persist-environment-variables). Le variabili scritte su quel file persistono nei comandi Bash successivi fino al prossimo evento [CwdChanged](#cwdchanged), quando Claude Code le cancella.
3133 3123
3134<h4 id="filechanged-input">3124<h4 id="filechanged-input">
3135 FileChanged input3125 Input FileChanged
3136</h4>3126</h4>
3137 3127
3138Oltre ai [common input fields](#common-input-fields), gli hook FileChanged ricevono `file_path` e `event`.3128Oltre ai [campi di input comuni](#common-input-fields), gli hook FileChanged ricevono `file_path` e `event`.
3139 3129
3140| Field | Description |3130| Campo | Descrizione |
3141| :- | :- |3131| :- | :- |
3142| `file_path` | Percorso assoluto al file che è cambiato |3132| `file_path` | Percorso assoluto al file che è cambiato |
3143| `event` | Cosa è accaduto: `"change"` per un file modificato, `"add"` per un file creato, o `"unlink"` per un file eliminato |3133| `event` | Cosa è accaduto: `"change"` per un file modificato, `"add"` per un file creato, o `"unlink"` per un file eliminato |
3154```3144```
3155 3145
3156<h4 id="filechanged-output">3146<h4 id="filechanged-output">
3157 FileChanged output3147 Output FileChanged
3158</h4>3148</h4>
3159 3149
3160Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, gli hook FileChanged possono restituire `watchPaths` per aggiornare dinamicamente quali percorsi di file vengono osservati:3150Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, gli hook FileChanged possono restituire `watchPaths` per aggiornare dinamicamente quali percorsi di file sono osservati:
3161 3151
3162| Field | Description |3152| Campo | Descrizione |
3163| :- | :- |3153| :- | :- |
3164| `watchPaths` | Array di percorsi assoluti. Sostituisce l'elenco di osservazione dinamico corrente. I percorsi dalla tua configurazione `matcher` vengono sempre osservati. Usalo quando il tuo script hook scopre file aggiuntivi da osservare in base al file modificato |3154| `watchPaths` | Array di percorsi assoluti. Sostituisce l'elenco di osservazione dinamico corrente. I percorsi dalla tua configurazione `matcher` vengono sempre osservati. Usalo quando il tuo script hook scopre file aggiuntivi da osservare in base al file modificato |
3165 3155
3166Gli hook FileChanged non hanno controllo delle decisioni. Non possono bloccare il cambiamento del file dal verificarsi.3156Gli hook FileChanged non hanno controllo decisionale. Non possono bloccare il cambiamento del file dall'occorrenza.
3167 3157
3168Claude Code legge `watchPaths` e `systemMessage` dal loro output JSON e scarta `continue`. Nelle sessioni interattive, mostra il `systemMessage` come una breve notifica di terminale. Il messaggio non raggiunge il flusso di messaggi dell'SDK.3158Claude Code legge `watchPaths` e `systemMessage` dal loro output JSON e scarta `continue`. Nelle sessioni interattive, mostra il `systemMessage` come una breve notifica di terminale. Il messaggio non raggiunge il flusso di messaggi dell'SDK.
3169 3159
3171 WorktreeCreate3161 WorktreeCreate
3172</h3>3162</h3>
3173 3163
3174Si esegue quando un worktree viene creato, sia da `claude --worktree`, da un [subagent che usa `isolation: "worktree"`](/docs/it/sub-agents#choose-the-subagent-scope), o per una [sessione in background](/docs/it/agent-view#how-file-edits-are-isolated) che Claude Code isola nel suo proprio worktree. Per impostazione predefinita Claude Code crea la copia di lavoro isolata con `git worktree`. Configurare un hook WorktreeCreate sostituisce quel comportamento git predefinito, consentendoti di usare un sistema di controllo della versione diverso come SVN, Perforce, o Mercurial.3164Si esegue quando un worktree viene creato, sia da `claude --worktree`, da un [subagente che usa `isolation: "worktree"`](/docs/it/sub-agents#choose-the-subagent-scope), o per una [sessione di background](/docs/it/agent-view#how-file-edits-are-isolated) che Claude Code isola nel suo proprio worktree. Per impostazione predefinita Claude Code crea la copia di lavoro isolata con `git worktree`. Configurare un hook WorktreeCreate sostituisce quel comportamento git predefinito, permettendoti di usare un sistema di controllo della versione diverso come SVN, Perforce, o Mercurial.
3175 3165
3176Poiché l'hook sostituisce completamente il comportamento predefinito, [`.worktreeinclude`](/docs/it/worktrees#copy-gitignored-files-into-worktrees) non viene elaborato. Se hai bisogno di copiare file di configurazione locale come `.env` nel nuovo worktree, fallo dentro il tuo script hook.3166Poiché l'hook sostituisce completamente il comportamento predefinito, [`.worktreeinclude`](/docs/it/worktrees#copy-gitignored-files-into-worktrees) non viene elaborato. Se hai bisogno di copiare file di configurazione locale come `.env` nel nuovo worktree, fallo dentro il tuo script hook.
3177 3167
3178L'hook deve restituire il percorso alla directory del worktree creato. Claude Code usa questo percorso come directory di lavoro per la sessione isolata. Vedi [WorktreeCreate output](#worktreecreate-output) per come ogni tipo di hook restituisce il percorso.3168L'hook deve restituire il percorso alla directory del worktree creato. Claude Code usa questo percorso come directory di lavoro per la sessione isolata. Vedi [Output WorktreeCreate](#worktreecreate-output) per come ogni tipo di hook restituisce il percorso.
3179
3180Claude Code agisce sul successo dell'hook e sul percorso restituito, e scarta `systemMessage` e `continue`.
3181 3169
3182Questo esempio crea una copia di lavoro SVN e stampa il percorso per Claude Code da usare. Sostituisci l'URL del repository con il tuo:3170Questo esempio crea una copia di lavoro SVN e stampa il percorso per Claude Code da usare. Sostituisci l'URL del repository con il tuo:
3183 3171
3201L'hook legge il `name` del worktree dall'input JSON su stdin, controlla una copia fresca in una nuova directory, e stampa il percorso della directory. L'`echo` sull'ultima riga è ciò che Claude Code legge come percorso del worktree. Reindirizza qualsiasi altro output a stderr in modo che non interferisca con il percorso.3189L'hook legge il `name` del worktree dall'input JSON su stdin, controlla una copia fresca in una nuova directory, e stampa il percorso della directory. L'`echo` sull'ultima riga è ciò che Claude Code legge come percorso del worktree. Reindirizza qualsiasi altro output a stderr in modo che non interferisca con il percorso.
3202 3190
3203<h4 id="worktreecreate-input">3191<h4 id="worktreecreate-input">
3204 WorktreeCreate input3192 Input WorktreeCreate
3205</h4>3193</h4>
3206 3194
3207Oltre ai [common input fields](#common-input-fields), gli hook WorktreeCreate ricevono il campo `name`. Questo è un identificatore slug per il nuovo worktree, specificato dall'utente o auto-generato, ad esempio `bold-oak-a3f2`.3195Oltre ai [campi di input comuni](#common-input-fields), gli hook WorktreeCreate ricevono il campo `name`. Questo è un identificatore slug per il nuovo worktree, specificato dall'utente o auto-generato, ad esempio `bold-oak-a3f2`.
3208 3196
3209```json theme={null}3197```json theme={null}
3210{3198{
3217```3205```
3218 3206
3219<h4 id="worktreecreate-output">3207<h4 id="worktreecreate-output">
3220 WorktreeCreate output3208 Output WorktreeCreate
3221</h4>3209</h4>
3222 3210
3223Gli hook WorktreeCreate non usano il modello di decisione di consentimento/blocco standard. Invece, il successo o il fallimento dell'hook determina il risultato. L'hook deve restituire il percorso alla directory del worktree creato:3211Gli hook WorktreeCreate non usano il modello di decisione di consentimento/blocco standard. Invece, il successo o il fallimento dell'hook determina il risultato. L'hook deve restituire il percorso alla directory del worktree creato:
3225* **Hook di comando** (`type: "command"`): stampa il percorso come l'ultima riga non vuota di stdout. Claude Code rimuove i codici di escape ANSI prima di leggere quella riga, quindi i banner di avvio della shell stampati prima del tuo `echo` vengono ignorati. Reindirizza qualsiasi altro output dell'hook a stderr.3213* **Hook di comando** (`type: "command"`): stampa il percorso come l'ultima riga non vuota di stdout. Claude Code rimuove i codici di escape ANSI prima di leggere quella riga, quindi i banner di avvio della shell stampati prima del tuo `echo` vengono ignorati. Reindirizza qualsiasi altro output dell'hook a stderr.
3226* **Hook HTTP** (`type: "http"`): restituisci `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` nel corpo della risposta.3214* **Hook HTTP** (`type: "http"`): restituisci `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` nel corpo della risposta.
3227 3215
3228Se l'hook fallisce o non produce alcun percorso, la creazione del worktree fallisce con un errore.3216Se l'hook fallisce o non produce un percorso, la creazione del worktree fallisce con un errore.
3229 3217
3230Claude Code risolve un percorso relativo rispetto alla directory in cui l'hook si è eseguito, collassando qualsiasi segmento `.` o `..` in esso. Se il percorso risultante non è una directory in cui Claude Code può entrare, la sessione stampa un errore che nomina il percorso ed esce con il codice 1.3218Claude Code risolve un percorso relativo rispetto alla directory in cui l'hook si è eseguito, comprimendo qualsiasi segmento `.` o `..` in esso. Se il percorso risultante non è una directory in cui Claude Code può entrare, la sessione stampa un errore che nomina il percorso ed esce con codice 1.
3231 3219
3232Claude Code rifiuta un percorso assoluto che contiene segmenti `.` o `..`, e qualsiasi percorso che passa attraverso un symlink al di sotto della radice del repository, perché un symlink impegnato nel repository potrebbe reindirizzare il worktree al di fuori di esso. L'errore nomina il componente rifiutato. Restituisci un percorso normalizzato che non passa attraverso un symlink all'interno del repository. Prima della v2.1.216, la creazione del worktree seguiva il percorso dell'hook senza questo screening.3220Claude Code rifiuta un percorso assoluto che contiene segmenti `.` o `..`, e qualsiasi percorso che passa attraverso un symlink al di sotto della radice del repository, perché un symlink impegnato nel repository potrebbe reindirizzare il worktree al di fuori di esso. L'errore nomina il componente rifiutato. Restituisci un percorso normalizzato che non passa attraverso un symlink dentro il repository. Prima della v2.1.216, la creazione del worktree seguiva il percorso dell'hook senza questo screening.
3233 3221
3234<h3 id="worktreeremove">3222<h3 id="worktreeremove">
3235 WorktreeRemove3223 WorktreeRemove
3236</h3>3224</h3>
3237 3225
3238Si esegue quando un worktree viene rimosso. Questo è l'equivalente di pulizia di [WorktreeCreate](#worktreecreate). L'evento si attiva quando:3226Si esegue quando un worktree viene rimosso. Questo è la controparte di pulizia di [WorktreeCreate](#worktreecreate). L'evento si attiva quando:
3239 3227
3240* esci da una sessione `--worktree` e scegli di rimuoverla3228* esci da una sessione `--worktree` e scegli di rimuoverla
3241* un subagent con `isolation: "worktree"` finisce3229* un subagente con `isolation: "worktree"` finisce
3242* elimini una [sessione in background](/docs/it/agent-view#what-deleting-a-session-removes) il cui worktree l'hook ha creato3230* elimini una [sessione di background](/docs/it/agent-view#what-deleting-a-session-removes) il cui worktree l'hook ha creato
3231
3232Per i worktree basati su git, Claude Code gestisce la pulizia automaticamente con `git worktree remove`. Se hai configurato un hook WorktreeCreate, accoppialo con un hook WorktreeRemove per controllare la pulizia dei worktree che crea:
3233
3234* **Nessun hook WorktreeRemove**: quando esci da una sessione `--worktree` e scegli la rimozione, Claude Code ritorna a `git worktree remove --force` sul percorso che il tuo hook WorktreeCreate ha restituito, quindi un worktree che git riconosce viene rimosso. Un worktree che git non riconosce, ad esempio uno che il tuo hook ha creato con un sistema di controllo della versione non git, rimane su disco. Per cosa elimina una [sessione di background](/docs/it/agent-view#what-deleting-a-session-removes) con un worktree creato da hook, vedi le regole di eliminazione della vista agente.
3235* **L'hook esce con 0**: il worktree conta come rimosso. Claude Code non legge nient'altro dall'hook, quindi assicurati che il tuo hook abbia eliminato la directory.
3236* **L'hook esce con non-zero**: la rimozione fallisce se la directory in `worktree_path` esiste ancora dopo, e il worktree rimane su disco senza fallback git. Un hook che ha eliminato la directory prima di uscire con non-zero conta come rimosso. Per come il fallimento viene segnalato, vedi [Input WorktreeRemove](#worktreeremove-input).
3243 3237
3244Per i worktree basati su git, Claude Code gestisce la pulizia automaticamente con `git worktree remove`. Se hai configurato un hook WorktreeCreate per un sistema di controllo della versione non git, accoppialo con un hook WorktreeRemove per gestire la pulizia. Senza uno, la directory del worktree viene lasciata su disco.3238Claude Code non elimina mai un ramo appartenente a un worktree creato da hook, perché conosce solo il percorso che il tuo hook WorktreeCreate ha restituito. Se il tuo hook WorktreeCreate crea un ramo, eliminalo nel tuo hook WorktreeRemove.
3245 3239
3246Claude Code scarta i [JSON output fields](#json-output) di un hook WorktreeRemove, come `systemMessage` e `continue`.3240Claude Code scarta i [campi di output JSON](#json-output) di un hook WorktreeRemove, come `systemMessage` e `continue`.
3247 3241
3248Per un'eliminazione di sessione in background, Claude Code verifica il percorso del worktree archiviato prima di eseguire l'hook e rifiuta un percorso che è un symlink o passa attraverso uno al di sotto della radice del repository. L'hook si esegue per un worktree che contiene ancora file solo quando confermi l'eliminazione nella [agent view](/docs/it/agent-view#what-deleting-a-session-removes); per un tale worktree, [`claude rm`](/docs/it/agent-view#manage-sessions-from-the-shell) mantiene la sessione e il worktree invece. Prima della v2.1.216, l'hook si eseguiva sul percorso archiviato senza questi controlli.3242Per un'eliminazione di sessione di background, Claude Code verifica il percorso del worktree archiviato prima di eseguire l'hook e rifiuta un percorso che è un symlink o passa attraverso uno al di sotto della radice del repository. L'hook si esegue per un worktree che contiene ancora file solo quando confermi l'eliminazione nella [vista agente](/docs/it/agent-view#what-deleting-a-session-removes); per un worktree di questo tipo, [`claude rm`](/docs/it/agent-view#manage-sessions-from-the-shell) mantiene la sessione e il worktree invece. Prima della v2.1.216, l'hook si eseguiva sul percorso archiviato senza questi controlli.
3249 3243
3250Claude Code passa il percorso restituito da WorktreeCreate come `worktree_path` nell'input dell'hook. Questo esempio legge quel percorso e rimuove la directory:3244Claude Code passa il percorso restituito da WorktreeCreate come `worktree_path` nell'input dell'hook. Questo esempio legge quel percorso e rimuove la directory:
3251 3245
3267```3261```
3268 3262
3269<h4 id="worktreeremove-input">3263<h4 id="worktreeremove-input">
3270 WorktreeRemove input3264 Input WorktreeRemove
3271</h4>3265</h4>
3272 3266
3273Oltre ai [common input fields](#common-input-fields), gli hook WorktreeRemove ricevono il campo `worktree_path`, che è il percorso assoluto al worktree che viene rimosso.3267Oltre ai [campi di input comuni](#common-input-fields), gli hook WorktreeRemove ricevono il campo `worktree_path`, che è il percorso assoluto al worktree in fase di rimozione.
3274 3268
3275```json theme={null}3269```json theme={null}
3276{3270{
3284 3278
3285Il codice di uscita di un hook WorktreeRemove decide il risultato. Quando un hook esce con non-zero e la directory in `worktree_path` esiste ancora dopo, la rimozione fallisce:3279Il codice di uscita di un hook WorktreeRemove decide il risultato. Quando un hook esce con non-zero e la directory in `worktree_path` esiste ancora dopo, la rimozione fallisce:
3286 3280
3287* Il worktree rimane su disco, e il comando dell'hook e stderr vanno al [debug log](#debug-hooks).3281* Il worktree rimane su disco, e il comando dell'hook e stderr vanno al [log di debug](#debug-hooks).
3288* Se stavi eliminando una sessione in background, la sessione rimane anche. Il messaggio di rifiuto nella [agent view](/docs/it/agent-view#what-deleting-a-session-removes) segnala come l'hook è terminato, come `exited 1`, cita l'inizio del suo stderr, e dice se eliminare la sessione di nuovo rimuove la directory comunque.3282* Se stavi eliminando una sessione di background, la sessione rimane anche. Il messaggio di rifiuto nella [vista agente](/docs/it/agent-view#what-deleting-a-session-removes) segnala come l'hook è terminato, come `exited 1`, cita l'inizio del suo stderr, e dice se eliminare la sessione di nuovo rimuove comunque la directory.
3289 3283
3290<h3 id="precompact">3284<h3 id="precompact">
3291 PreCompact3285 PreCompact
3298| Matcher | Quando si attiva |3292| Matcher | Quando si attiva |
3299| :- | :- |3293| :- | :- |
3300| `manual` | `/compact` |3294| `manual` | `/compact` |
3301| `auto` | Auto-compact quando la conversazione raggiunge la [finestra di auto-compact](/docs/it/model-config#set-the-auto-compact-window) |3295| `auto` | Compattazione automatica quando la conversazione raggiunge la [finestra di compattazione automatica](/docs/it/model-config#set-the-auto-compact-window) |
3302 3296
3303Esci con il codice 2 per bloccare la compattazione. Per un `/compact` manuale, il messaggio stderr viene mostrato all'utente. Puoi anche bloccare restituendo JSON con `"decision": "block"`.3297Esci con codice 2 per bloccare la compattazione. Per un `/compact` manuale, il messaggio stderr viene mostrato all'utente. Puoi anche bloccare restituendo JSON con `"decision": "block"`.
3304 3298
3305Bloccare la compattazione automatica ha effetti diversi a seconda di quando si attiva. Se la compattazione è stata attivata in modo proattivo prima del limite di contesto, Claude Code la salta e la conversazione continua non compattata. Se la compattazione è stata attivata per recuperare da un errore di limite di contesto già restituito dall'API, l'errore sottostante emerge e la richiesta corrente fallisce.3299Bloccare la compattazione automatica ha effetti diversi a seconda di quando si attiva. Se la compattazione è stata attivata in modo proattivo prima del limite di contesto, Claude Code la salta e la conversazione continua non compattata. Se la compattazione è stata attivata per recuperare da un errore di limite di contesto già restituito dall'API, l'errore sottostante emerge e la richiesta corrente fallisce.
3306 3300
3307Claude Code scarta i campi `systemMessage` e `continue` di un hook PreCompact.3301Claude Code scarta i campi `systemMessage` e `continue` di un hook PreCompact.
3308 3302
3309<h4 id="precompact-input">3303<h4 id="precompact-input">
3310 PreCompact input3304 Input PreCompact
3311</h4>3305</h4>
3312 3306
3313Oltre ai [common input fields](#common-input-fields), gli hook PreCompact ricevono `trigger` e `custom_instructions`. Per `manual`, `custom_instructions` contiene ciò che l'utente passa in `/compact` ed è `null` quando non passa nulla. Per `auto`, `custom_instructions` è `null`.3307Oltre ai [campi di input comuni](#common-input-fields), gli hook PreCompact ricevono `trigger` e `custom_instructions`. Per `manual`, `custom_instructions` contiene ciò che l'utente passa in `/compact` ed è `null` quando non passa nulla. Per `auto`, `custom_instructions` è `null`.
3314 3308
3315```json theme={null}3309```json theme={null}
3316{3310{
3334| Matcher | Quando si attiva |3328| Matcher | Quando si attiva |
3335| :- | :- |3329| :- | :- |
3336| `manual` | Dopo `/compact` |3330| `manual` | Dopo `/compact` |
3337| `auto` | Dopo auto-compact quando la conversazione raggiunge la [finestra di auto-compact](/docs/it/model-config#set-the-auto-compact-window) |3331| `auto` | Dopo la compattazione automatica quando la conversazione raggiunge la [finestra di compattazione automatica](/docs/it/model-config#set-the-auto-compact-window) |
3338 3332
3339<h4 id="postcompact-input">3333<h4 id="postcompact-input">
3340 PostCompact input3334 Input PostCompact
3341</h4>3335</h4>
3342 3336
3343Oltre ai [common input fields](#common-input-fields), gli hook PostCompact ricevono `trigger` e `compact_summary`. Il campo `compact_summary` contiene il riepilogo della conversazione generato dall'operazione di compattazione.3337Oltre ai [campi di input comuni](#common-input-fields), gli hook PostCompact ricevono `trigger` e `compact_summary`. Il campo `compact_summary` contiene il riepilogo della conversazione generato dall'operazione di compattazione.
3344 3338
3345```json theme={null}3339```json theme={null}
3346{3340{
3353}3347}
3354```3348```
3355 3349
3356Gli hook PostCompact non hanno controllo delle decisioni. Non possono influenzare il risultato della compattazione ma possono eseguire compiti di follow-up.3350Gli hook PostCompact non hanno controllo decisionale. Non possono influenzare il risultato della compattazione ma possono eseguire attività di follow-up.
3357 3351
3358<h3 id="premodelswitch">3352<h3 id="premodelswitch">
3359 PreModelSwitch3353 PreModelSwitch
3363 3357
3364PreModelSwitch richiede Claude Code v2.1.251 o successivo. Claude Code lo esegue per queste richieste:3358PreModelSwitch richiede Claude Code v2.1.251 o successivo. Claude Code lo esegue per queste richieste:
3365 3359
3366* `/model <name>` e il picker `/model`3360* `/model <name>` e il selettore `/model`
3367* Il picker del modello `Option+P` o `Alt+P`3361* Il selettore del modello `Option+P` o `Alt+P`
3368* L'impostazione Model in `/config`3362* L'impostazione Model in `/config`
3369* Attivare la [fast mode](/docs/it/fast-mode) quando ciò cambia il modello della sessione3363* Attivare la [modalità veloce](/docs/it/fast-mode) quando questo cambia il modello della sessione
3370* Una richiesta `set_model`, o un cambiamento di modello in una richiesta `apply_flag_settings`, da un host [Agent SDK](/docs/it/agent-sdk/typescript#query-object) o [Remote Control](/docs/it/remote-control)3364* Una richiesta `set_model`, o un cambiamento di modello in una richiesta `apply_flag_settings`, da un host [Agent SDK](/docs/it/agent-sdk/typescript#query-object) o [Remote Control](/docs/it/remote-control)
3371 3365
3372Claude Code non esegue gli hook PreModelSwitch per i cambi che fa da solo, come un [fallback automatico del modello](/docs/it/model-config#automatic-model-fallback) o il ripristino del modello quando riprendi una sessione. Quei cambi raggiungono [PostModelSwitch](#postmodelswitch) solo.3366Claude Code non esegue gli hook PreModelSwitch per i cambi che fa da solo, come un [fallback di modello automatico](/docs/it/model-config#automatic-model-fallback) o il ripristino del modello quando riprendi una sessione. Quei cambi raggiungono [PostModelSwitch](#postmodelswitch) solo.
3373 3367
3374Claude Code confronta il matcher rispetto al nome canonico del modello a cui la sessione sta passando, ignorando qualsiasi suffisso `[1m]`. Un alias come `opus`, un ID di modello datato, e un ID specifico del provider come un ID di modello Amazon Bedrock corrispondono tutti al nome canonico unico a cui si risolvono, quindi `claude-opus-5` copre ogni ortografia di Opus 5.3368Claude Code confronta il matcher rispetto al nome canonico del modello a cui la sessione sta passando, ignorando qualsiasi suffisso `[1m]`. Un alias come `opus`, un ID di modello datato, e un ID specifico del provider come un ID di modello Amazon Bedrock corrispondono tutti al nome canonico unico a cui si risolvono, quindi `claude-opus-5` copre ogni ortografia di Opus 5.
3375 3369
3376Quando Claude Code non può determinare un nome canonico per il target, ad esempio un ID di modello personalizzato che solo il tuo [LLM gateway](/docs/it/llm-gateway) conosce, esegue ogni hook PreModelSwitch indipendentemente dal matcher. Un hook che blocca dovrebbe quindi controllare `to_model` dal suo input piuttosto che fare affidamento solo sul matcher.3370Quando Claude Code non può determinare un nome canonico per il target, ad esempio un ID di modello personalizzato che solo il tuo [gateway LLM](/docs/it/llm-gateway) conosce, esegue ogni hook PreModelSwitch indipendentemente dal matcher. Un hook che blocca dovrebbe quindi controllare `to_model` dal suo input piuttosto che fare affidamento solo sul matcher.
3377 3371
3378Scrivi il matcher come un nome esatto, un elenco separato da `|` come `claude-opus-4-6|claude-opus-5`, o un'espressione regolare come `.*opus.*`. Questo esempio usa un matcher di nome esatto e controlla anche `to_model` dall'input dell'hook, quindi rifiuta un cambio a Opus 4.6 uscendo con il codice 2 e consente qualsiasi altro target:3372Scrivi il matcher come un nome esatto, un elenco separato da `|` come `claude-opus-4-6|claude-opus-5`, o un'espressione regolare come `.*opus.*`. Questo esempio usa un matcher di nome esatto e controlla anche `to_model` dall'input dell'hook, quindi rifiuta un cambio a Opus 4.6 uscendo con codice 2 e consente qualsiasi altro target:
3379 3373
3380<Tabs>3374<Tabs>
3381 <Tab title="macOS/Linux">3375 <Tab title="macOS/Linux">
3444Per confermare che l'hook funziona, esegui `/model claude-opus-4-6` da una sessione che esegue un modello diverso. Claude Code mantiene il modello corrente e segnala che un hook PreModelSwitch ha bloccato il cambio, con il tuo messaggio come motivo.3438Per confermare che l'hook funziona, esegui `/model claude-opus-4-6` da una sessione che esegue un modello diverso. Claude Code mantiene il modello corrente e segnala che un hook PreModelSwitch ha bloccato il cambio, con il tuo messaggio come motivo.
3445 3439
3446<h4 id="premodelswitch-input">3440<h4 id="premodelswitch-input">
3447 PreModelSwitch input3441 Input PreModelSwitch
3448</h4>3442</h4>
3449 3443
3450Oltre ai [common input fields](#common-input-fields), gli hook PreModelSwitch ricevono i campi in questa tabella. Gli ultimi cinque descrivono quale costo ha l'invio della conversazione al nuovo modello, quindi un hook può mostrare quella cifra prima che il cambio accada.3444Oltre ai [campi di input comuni](#common-input-fields), gli hook PreModelSwitch ricevono i campi in questa tabella. Gli ultimi cinque descrivono quale costo ha reinviare la conversazione al nuovo modello, quindi un hook può mostrare quella cifra prima che il cambio accada.
3451 3445
3452| Field | Type | Description |3446| Campo | Tipo | Descrizione |
3453| :- | :- | :- |3447| :- | :- | :- |
3454| `from_model` | string | ID del modello da cui il cambio cambia |3448| `from_model` | string | ID del modello da cui il cambio cambia |
3455| `to_model` | string | ID del modello a cui il cambio cambia. Il matcher confronta rispetto al nome canonico di questo modello |3449| `to_model` | string | ID del modello a cui il cambio cambia. Il matcher confronta rispetto al nome canonico di questo modello |
3456| `requested_model` | string or `null` | Il modello che la richiesta ha nominato: un alias come `opus`, un ID di modello completo, o `null` quando la richiesta era per il modello predefinito |3450| `requested_model` | string o `null` | Il modello che la richiesta ha nominato: un alias come `opus`, un ID di modello completo, o `null` quando la richiesta era per il modello predefinito |
3457| `source` | string | Da dove proviene la richiesta: `"command"` per `/model <name>`, l'impostazione Model in `/config`, o l'attivazione della fast mode; `"picker"` per un picker di modello; `"sdk"` per una richiesta `set_model`, o un cambiamento di modello in una richiesta `apply_flag_settings`, da un host Agent SDK o Remote Control |3451| `source` | string | Da dove proviene la richiesta: `"command"` per `/model <name>`, l'impostazione Model in `/config`, o l'attivazione della modalità veloce; `"picker"` per un selettore di modello; `"sdk"` per una richiesta `set_model`, o un cambiamento di modello in una richiesta `apply_flag_settings`, da un host Agent SDK o Remote Control |
3458| `context_tokens` | number | Token che la prossima richiesta invia di nuovo come suo prompt: i token di input, lettura della cache, creazione della cache, e output dell'ultima risposta nella conversazione principale, combinati. `0` prima della prima risposta |3452| `context_tokens` | number | Token che la richiesta successiva reinvia come suo prompt: l'input, la lettura della cache, la creazione della cache, e i token di output dell'ultima risposta nella conversazione principale, combinati. `0` prima della prima risposta |
3459| `prompt_cache_warm` | boolean | Se la prompt cache del modello corrente è probabilmente ancora calda, il che significa che il cambio la perde |3453| `prompt_cache_warm` | boolean | Se la cache del prompt del modello corrente è probabilmente ancora calda, il che significa che il cambio la perde |
3460| `cache_ttl` | string | [Prompt cache lifetime](/docs/it/prompt-caching#cache-lifetime) che Claude Code richiede per questa sessione: `"5m"` o `"1h"` |3454| `cache_ttl` | string | [Durata della cache del prompt](/docs/it/prompt-caching#cache-lifetime) che Claude Code richiede per questa sessione: `"5m"` o `"1h"` |
3461| `estimated_cache_write_usd` | number | Costo stimato in dollari USA della scrittura di `context_tokens` nella prompt cache su `to_model` al tasso `cache_ttl`, escludendo la prossima risposta. Il server potrebbe non aver bisogno di ri-memorizzare l'intero contesto, quindi trattalo come una stima |3455| `estimated_cache_write_usd` | number | Costo stimato in dollari USA della scrittura di `context_tokens` nella cache del prompt su `to_model` al tasso `cache_ttl`, escludendo la risposta successiva. Il server potrebbe non aver bisogno di ri-memorizzare l'intero contesto, quindi trattalo come una stima |
3462| `pricing` | string | Come Claude Code ha prezzato `estimated_cache_write_usd`: `"configured"` ai tassi della tua organizzazione quando li ha configurati, `"catalog"` al prezzo di listino, o `"default"` quando `to_model` non ha un prezzo noto e Claude Code ha assunto un tasso predefinito |3456| `pricing` | string | Come Claude Code ha prezzato `estimated_cache_write_usd`: `"configured"` ai tuoi tassi organizzativi quando li ha configurati, `"catalog"` al prezzo di listino, o `"default"` quando `to_model` non ha un prezzo noto e Claude Code ha assunto un tasso predefinito |
3463 3457
3464Questo esempio mostra l'input per `/model opus` in una sessione che esegue Sonnet 5:3458Questo esempio mostra l'input per `/model opus` in una sessione che esegue Sonnet 5:
3465 3459
3482```3476```
3483 3477
3484<h4 id="premodelswitch-decision-control">3478<h4 id="premodelswitch-decision-control">
3485 PreModelSwitch decision control3479 Controllo decisionale PreModelSwitch
3486</h4>3480</h4>
3487 3481
3488Gli hook `PreModelSwitch` possono annullare il cambio, chiedere all'utente di confermarlo, o consentirgli di procedere. Il codice di uscita 2 o un `decision: "block"` di livello superiore annulla il cambio.3482Gli hook `PreModelSwitch` possono annullare il cambio, chiedere all'utente di confermarlo, o consentirgli di procedere. Il codice di uscita 2 o un `decision: "block"` di livello superiore annulla il cambio.
3489 3483
3490Per un controllo più fine, restituisci `permissionDecision` e `permissionDecisionReason` in un oggetto `hookSpecificOutput`, come su [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` accetta `"allow"`, `"deny"`, e `"ask"`. Non accetta `"defer"`, `updatedInput`, o `additionalContext`. La tabella seguente descrive entrambi i campi:3484Per un controllo più fine, restituisci `permissionDecision` e `permissionDecisionReason` in un oggetto `hookSpecificOutput`, come su [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` accetta `"allow"`, `"deny"`, e `"ask"`. Non accetta `"defer"`, `updatedInput`, o `additionalContext`. La tabella sottostante descrive entrambi i campi:
3491 3485
3492| Field | Description |3486| Campo | Descrizione |
3493| :- | :- |3487| :- | :- |
3494| `permissionDecision` | `"allow"` procede e salta la [conferma che Claude Code mostra mentre la prompt cache è calda](/docs/it/prompt-caching#switching-models). `"deny"` annulla il cambio. `"ask"` chiede all'utente di confermarlo |3488| `permissionDecision` | `"allow"` procede e salta la [conferma che Claude Code mostra mentre la cache del prompt è calda](/docs/it/prompt-caching#switching-models). `"deny"` annulla il cambio. `"ask"` chiede all'utente di confermarlo |
3495| `permissionDecisionReason` | Per `"deny"`, mostrato all'utente come motivo per cui il cambio è stato bloccato, o restituito come errore per una richiesta `set_model`. Per `"ask"`, mostrato nel prompt di conferma. Ignorato per `"allow"` |3489| `permissionDecisionReason` | Per `"deny"`, mostrato all'utente come il motivo per cui il cambio è stato bloccato, o restituito come errore per una richiesta `set_model`. Per `"ask"`, mostrato nel prompt di conferma. Ignorato per `"allow"` |
3496 3490
3497Solo `/model` in una sessione interattiva può mostrare il prompt `"ask"`. Su ogni altra superficie, inclusa la modalità non interattiva con il flag `-p`, `/config`, e le richieste `set_model`, Claude Code tratta `"ask"` come un rifiuto.3491Solo `/model` in una sessione interattiva può mostrare il prompt `"ask"`. Su ogni altra superficie, inclusa la modalità non interattiva con il flag `-p`, `/config`, e le richieste `set_model`, Claude Code tratta `"ask"` come un rifiuto.
3498 3492
3510 3504
3511Quando più hook PreModelSwitch restituiscono decisioni diverse, la precedenza è `deny` > `ask` > `allow`.3505Quando più hook PreModelSwitch restituiscono decisioni diverse, la precedenza è `deny` > `ask` > `allow`.
3512 3506
3513Claude Code mostra all'utente qualsiasi `systemMessage` che il tuo hook restituisce indipendentemente dalla decisione, quindi un hook di rapporto dei costi può restituire `{"systemMessage": "..."}` e uscire 0.3507Claude Code mostra all'utente qualsiasi `systemMessage` che il tuo hook restituisce indipendentemente dalla decisione, quindi un hook di rapporto dei costi può restituire `{"systemMessage": "..."}` e uscire con 0.
3514 3508
3515Un hook PreModelSwitch che non risponde prima del suo timeout blocca il cambio. Su [PreToolUse](#timeouts), al contrario, un hook di comando che scade consente alla chiamata dello strumento di continuare. Il timeout predefinito per questo evento è 30 secondi. `PreModelSwitch` esegue solo gli hook `command`, `http`, e `mcp_tool`, quindi i default `prompt` e `agent` non si applicano.3509Un hook PreModelSwitch che non risponde prima del suo timeout blocca il cambio. Su [PreToolUse](#timeouts), al contrario, un hook di comando che scade consente alla chiamata dello strumento di continuare. Il timeout predefinito per questo evento è 30 secondi. `PreModelSwitch` esegue solo gli hook `command`, `http`, e `mcp_tool`, quindi i default `prompt` e `agent` non si applicano.
3516 3510
3517Un hook che esce con un codice diverso da 0 o 2 e non stampa alcuna decisione JSON non blocca: Claude Code mostra il suo stderr e applica il cambio, come descritto sotto [Other exit codes](#other-exit-codes).3511Un hook che esce con un codice diverso da 0 o 2 e non stampa alcuna decisione JSON non blocca: Claude Code mostra il suo stderr e applica il cambio, come descritto sotto [Altri codici di uscita](#other-exit-codes).
3518 3512
3519<h3 id="postmodelswitch">3513<h3 id="postmodelswitch">
3520 PostModelSwitch3514 PostModelSwitch
3522 3516
3523Si esegue dopo che il modello della sessione cambia. Usalo per dare a Claude una guida specifica del modello senza modificare ogni CLAUDE.md, ad esempio un'istruzione a livello di organizzazione che si applica su determinati modelli.3517Si esegue dopo che il modello della sessione cambia. Usalo per dare a Claude una guida specifica del modello senza modificare ogni CLAUDE.md, ad esempio un'istruzione a livello di organizzazione che si applica su determinati modelli.
3524 3518
3525PostModelSwitch richiede Claude Code v2.1.251 o successivo. Non può bloccare, perché il modello è già cambiato. Claude Code esegue gli hook PostModelSwitch dopo qualsiasi di questi cambi:3519PostModelSwitch richiede Claude Code v2.1.251 o successivo. Non può bloccare, perché il modello è già cambiato. Claude Code esegue gli hook PostModelSwitch dopo uno qualsiasi di questi cambi:
3526 3520
3527* Un cambio che hai richiesto tu o un client3521* Un cambio che hai richiesto tu o un client
3528* Un [fallback automatico del modello](/docs/it/model-config#automatic-model-fallback), che cambia il modello della sessione3522* Un [fallback di modello automatico](/docs/it/model-config#automatic-model-fallback), che cambia il modello della sessione
3529* Un'impostazione come [`opusplan`](/docs/it/model-config#opusplan-model-setting) che entra o esce dalla plan mode3523* Un'impostazione come [`opusplan`](/docs/it/model-config#opusplan-model-setting) che entra o esce dalla modalità piano
3530* Claude Code che ripristina il modello quando riprendi una sessione3524* Claude Code che ripristina il modello quando riprendi una sessione
3531 3525
3532Claude Code non esegue gli hook PostModelSwitch quando un modello da una [catena di fallback del modello](/docs/it/model-config#fallback-model-chains) serve un turno, perché quella sostituzione dura un turno e lascia il modello della sessione invariato.3526Claude Code non esegue gli hook PostModelSwitch quando un modello da una [catena di modelli di fallback](/docs/it/model-config#fallback-model-chains) serve un turno, perché quella sostituzione dura un turno e lascia il modello della sessione invariato.
3533 3527
3534Il matcher segue le stesse regole di [PreModelSwitch](#premodelswitch): Claude Code confronta il matcher rispetto al nome canonico del modello a cui la sessione è passata.3528Il matcher segue le stesse regole di [PreModelSwitch](#premodelswitch): Claude Code lo confronta rispetto al nome canonico del modello a cui la sessione è passata.
3535 3529
3536Questo esempio aggiunge una guida ogni volta che il modello della sessione cambia a qualsiasi modello Opus:3530Questo esempio aggiunge una guida ogni volta che il modello della sessione cambia a qualsiasi modello Opus:
3537 3531
3556Per confermare che l'hook funziona, passa a un modello Opus da una sessione che esegue un modello diverso, ad esempio esegui `/model opus` da una sessione Sonnet, quindi chiedi a Claude quale guida ha sul modello corrente.3550Per confermare che l'hook funziona, passa a un modello Opus da una sessione che esegue un modello diverso, ad esempio esegui `/model opus` da una sessione Sonnet, quindi chiedi a Claude quale guida ha sul modello corrente.
3557 3551
3558<h4 id="postmodelswitch-input">3552<h4 id="postmodelswitch-input">
3559 PostModelSwitch input3553 Input PostModelSwitch
3560</h4>3554</h4>
3561 3555
3562Gli hook PostModelSwitch ricevono gli stessi campi di [PreModelSwitch](#premodelswitch-input), con `hook_event_name` impostato su `"PostModelSwitch"` e due valori `source` in più: `"auto"` per un fallback automatico o un altro cambiamento che Claude Code ha fatto da solo, e `"resume"` per il modello ripristinato quando riprendi una sessione.3556Gli hook PostModelSwitch ricevono gli stessi campi di [PreModelSwitch](#premodelswitch-input), con `hook_event_name` impostato su `"PostModelSwitch"` e due valori `source` aggiuntivi: `"auto"` per un fallback automatico o un altro cambiamento che Claude Code ha fatto da solo, e `"resume"` per il modello ripristinato quando riprendi una sessione.
3563 3557
3564`requested_model` è `null` quando `source` è `"auto"`. Quando `source` è `"resume"`, è l'impostazione del modello salvato che Claude Code ha ripristinato.3558`requested_model` è `null` quando `source` è `"auto"`. Quando `source` è `"resume"`, è l'impostazione del modello salvato che Claude Code ha ripristinato.
3565 3559
3566<h4 id="postmodelswitch-decision-control">3560<h4 id="postmodelswitch-decision-control">
3567 PostModelSwitch decision control3561 Controllo decisionale PostModelSwitch
3568</h4>3562</h4>
3569 3563
3570Claude Code prende il tuo stdout in testo semplice dell'hook [plain-text stdout](#exit-code-0) all'uscita 0, o `additionalContext` dall'output JSON, e lo consegna a Claude con la richiesta successiva dopo il cambio. Oltre ai [JSON output fields](#json-output) disponibili per tutti gli hook, puoi restituire:3564Claude Code prende il tuo stdout in testo semplice dell'hook all'uscita 0, o `additionalContext` dall'output JSON, e lo consegna a Claude con la richiesta successiva dopo il cambio. Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, puoi restituire:
3571 3565
3572| Field | Description |3566| Campo | Descrizione |
3573| :- | :- |3567| :- | :- |
3574| `additionalContext` | Stringa aggiunta al contesto di Claude con la richiesta successiva. Vedi [Add context for Claude](#add-context-for-claude) |3568| `additionalContext` | Stringa aggiunta al contesto di Claude con la richiesta successiva. Vedi [Aggiungi contesto per Claude](#add-context-for-claude) |
3575 3569
3576Se l'hook non finisce entro cinque secondi dopo che invii la richiesta successiva, Claude Code invia quella richiesta senza l'output e lo allega alla richiesta seguente invece. Se il modello cambia diverse volte prima della richiesta successiva, Claude Code consegna solo l'output per il modello target dell'ultimo cambio.3570Se l'hook non finisce entro cinque secondi dopo che invii la richiesta successiva, Claude Code invia quella richiesta senza l'output e lo allega alla richiesta successiva. Se il modello cambia più volte prima della richiesta successiva, Claude Code consegna solo l'output per il modello target dell'ultimo cambio.
3577 3571
3578<h3 id="sessionend">3572<h3 id="sessionend">
3579 SessionEnd3573 SessionEnd
3580</h3>3574</h3>
3581 3575
3582Si esegue quando una sessione di Claude Code termina. Utile per i compiti di pulizia, la registrazione delle statistiche della sessione, o il salvataggio dello stato della sessione. Supporta i matcher per filtrare per motivo di uscita.3576Si esegue quando una sessione di Claude Code termina. Utile per le attività di pulizia, la registrazione delle statistiche della sessione, o il salvataggio dello stato della sessione. Supporta i matcher per filtrare per motivo di uscita.
3583 3577
3584Il campo `reason` nell'input dell'hook indica perché la sessione è terminata:3578Il campo `reason` nell'input dell'hook indica perché la sessione è terminata:
3585 3579
3586| Reason | Description |3580| Motivo | Descrizione |
3587| :- | :- |3581| :- | :- |
3588| `clear` | Sessione cancellata con il comando `/clear` |3582| `clear` | Sessione cancellata con il comando `/clear` |
3589| `resume` | Sessione passata tramite `/resume` interattivo |3583| `resume` | Sessione cambiata tramite `/resume` interattivo |
3590| `logout` | Utente disconnesso |3584| `logout` | L'utente ha effettuato il logout |
3591| `prompt_input_exit` | Utente uscito mentre l'input del prompt era visibile |3585| `prompt_input_exit` | L'utente è uscito mentre l'input del prompt era visibile |
3592| `other` | Altri motivi di uscita |3586| `other` | Altri motivi di uscita |
3593| `bypass_permissions_disabled` | Rimosso nella v2.1.234; Claude Code non lo invia. Elimina dai tuoi matcher `SessionEnd` |3587| `bypass_permissions_disabled` | Rimosso nella v2.1.234; Claude Code non lo invia. Rimuovilo dai tuoi matcher `SessionEnd` |
3594 3588
3595<h4 id="sessionend-input">3589<h4 id="sessionend-input">
3596 SessionEnd input3590 Input SessionEnd
3597</h4>3591</h4>
3598 3592
3599Oltre ai [common input fields](#common-input-fields), gli hook SessionEnd ricevono un campo `reason` che indica perché la sessione è terminata. Vedi la [tabella dei motivi](#sessionend) sopra per tutti i valori.3593Oltre ai [campi di input comuni](#common-input-fields), gli hook SessionEnd ricevono un campo `reason` che indica perché la sessione è terminata. Vedi la [tabella dei motivi](#sessionend) sopra per tutti i valori.
3600 3594
3601```json theme={null}3595```json theme={null}
3602{3596{
3608}3602}
3609```3603```
3610 3604
3611Gli hook SessionEnd non hanno controllo delle decisioni. Non possono bloccare la terminazione della sessione ma possono eseguire compiti di pulizia. Claude Code scarta i loro [JSON output fields](#json-output), come `systemMessage`.3605Gli hook SessionEnd non hanno controllo decisionale. Non possono bloccare la terminazione della sessione ma possono eseguire attività di pulizia. Claude Code scarta i loro [campi di output JSON](#json-output), come `systemMessage`.
3606
3607Gli hook SessionEnd hanno un timeout predefinito di 1,5 secondi. Si applica quando esci, esegui `/clear`, o cambi sessioni con `/resume` interattivo. Puoi dare a un hook più tempo in due modi:
3612 3608
3613Gli hook SessionEnd hanno un timeout predefinito di 1,5 secondi. Questo si applica all'uscita della sessione, a `/clear`, e al passaggio di sessioni tramite `/resume` interattivo. Se un hook ha bisogno di più tempo, imposta un `timeout` per hook nella configurazione dei file di impostazioni. Il budget complessivo viene automaticamente aumentato al timeout per hook più alto configurato nei file di impostazioni, fino a 60 secondi. I timeout impostati su hook forniti da plugin non aumentano il budget.3609* **`timeout` per hook**: imposta `timeout` nella configurazione di quell'hook. Il budget complessivo aumenta automaticamente per corrispondere al `timeout` per hook più alto nei tuoi file di impostazioni, fino a 60 secondi. Se aumenti il budget in questo modo, un hook senza il suo `timeout` mantiene comunque il default. I timeout impostati su hook forniti da plugin non aumentano il budget.
3610* **`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS`**: imposta questa variabile di ambiente in millisecondi per sovrascrivere il budget esplicitamente. Il valore che imposti diventa anche il timeout per ogni hook senza il suo `timeout`.
3614 3611
3615Questo esempio imposta il budget a 5 secondi:3612Questo esempio imposta il budget a 5 secondi:
3616 3613
3618CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude3615CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude
3619```3616```
3620 3617
3621Prima della v2.1.268, `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` aumentava solo il budget complessivo, e un hook senza il suo `timeout` era comunque annullato dopo 1,5 secondi.3618Prima della v2.1.268, `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` aumentava solo il budget complessivo, e un hook senza il suo `timeout` veniva comunque annullato dopo 1,5 secondi.
3622 3619
3623<h3 id="elicitation">3620<h3 id="elicitation">
3624 Elicitation3621 Elicitation
3625</h3>3622</h3>
3626 3623
3627Si esegue quando un server MCP richiede input dell'utente a metà compito. Per impostazione predefinita, Claude Code mostra un dialogo interattivo per l'utente per rispondere. Gli hook possono intercettare questa richiesta e rispondere programmaticamente, saltando completamente il dialogo.3624Si esegue quando un server MCP richiede l'input dell'utente a metà attività. Per impostazione predefinita, Claude Code mostra un dialogo interattivo per l'utente per rispondere. Gli hook possono intercettare questa richiesta e rispondere programmaticamente, saltando completamente il dialogo.
3628 3625
3629Il campo matcher corrisponde al nome del server MCP.3626Il campo matcher corrisponde al nome del server MCP.
3630 3627
3631<h4 id="elicitation-input">3628<h4 id="elicitation-input">
3632 Elicitation input3629 Input Elicitation
3633</h4>3630</h4>
3634 3631
3635Oltre ai [common input fields](#common-input-fields), gli hook Elicitation ricevono `mcp_server_name`, `message`, e campi facoltativi `mode`, `url`, `elicitation_id`, e `requested_schema`.3632Oltre ai [campi di input comuni](#common-input-fields), gli hook Elicitation ricevono `mcp_server_name`, `message`, e i campi facoltativi `mode`, `url`, `elicitation_id`, e `requested_schema`.
3636 3633
3637Per l'elicitazione in modalità modulo, il caso più comune:3634Per l'elicitazione in modalità modulo, il caso più comune:
3638 3635
3670```3667```
3671 3668
3672<h4 id="elicitation-output">3669<h4 id="elicitation-output">
3673 Elicitation output3670 Output Elicitation
3674</h4>3671</h4>
3675 3672
3676Per rispondere programmaticamente senza mostrare il dialogo, restituisci un oggetto JSON con `hookSpecificOutput`:3673Per rispondere programmaticamente senza mostrare il dialogo, restituisci un oggetto JSON con `hookSpecificOutput`:
3687}3684}
3688```3685```
3689 3686
3690| Field | Values | Description |3687| Campo | Valori | Descrizione |
3691| :- | :- | :- |3688| :- | :- | :- |
3692| `action` | `accept`, `decline`, `cancel` | Se accettare, rifiutare, o annullare la richiesta |3689| `action` | `accept`, `decline`, `cancel` | Se accettare, rifiutare, o annullare la richiesta |
3693| `content` | object | Valori dei campi del modulo da inviare. Usato solo quando `action` è `accept` |3690| `content` | object | Valori dei campi del modulo da inviare. Usato solo quando `action` è `accept` |
3694 3691
3695L'uscita con il codice 2 nega l'elicitazione. Claude Code non mostra il tuo messaggio stderr da nessuna parte.3692L'uscita con codice 2 nega l'elicitazione. Claude Code non mostra il tuo messaggio stderr da nessuna parte.
3696 3693
3697Claude Code agisce su `hookSpecificOutput` dall'output JSON di un hook Elicitation e scarta `systemMessage` e `continue`.3694Claude Code agisce su `hookSpecificOutput` dall'output JSON di un hook Elicitation e scarta `systemMessage` e `continue`.
3698 3695
3700 ElicitationResult3697 ElicitationResult
3701</h3>3698</h3>
3702 3699
3703Si esegue dopo che un utente risponde a un'elicitazione MCP. Gli hook possono osservare, modificare, o bloccare la risposta prima che venga inviata di nuovo al server MCP.3700Si esegue dopo che un utente risponde a un'elicitazione MCP. Gli hook possono osservare, modificare, o bloccare la risposta prima che venga inviata al server MCP.
3704 3701
3705Il campo matcher corrisponde al nome del server MCP.3702Il campo matcher corrisponde al nome del server MCP.
3706 3703
3707<h4 id="elicitationresult-input">3704<h4 id="elicitationresult-input">
3708 ElicitationResult input3705 Input ElicitationResult
3709</h4>3706</h4>
3710 3707
3711Oltre ai [common input fields](#common-input-fields), gli hook ElicitationResult ricevono `mcp_server_name`, `action`, e campi facoltativi `mode`, `elicitation_id`, e `content`.3708Oltre ai [campi di input comuni](#common-input-fields), gli hook ElicitationResult ricevono `mcp_server_name`, `action`, e i campi facoltativi `mode`, `elicitation_id`, e `content`.
3712 3709
3713```json theme={null}3710```json theme={null}
3714{3711{
3725```3722```
3726 3723
3727<h4 id="elicitationresult-output">3724<h4 id="elicitationresult-output">
3728 ElicitationResult output3725 Output ElicitationResult
3729</h4>3726</h4>
3730 3727
3731Per sovrascrivere la risposta dell'utente, restituisci un oggetto JSON con `hookSpecificOutput`:3728Per sovrascrivere la risposta dell'utente, restituisci un oggetto JSON con `hookSpecificOutput`:
3740}3737}
3741```3738```
3742 3739
3743| Field | Values | Description |3740| Campo | Valori | Descrizione |
3744| :- | :- | :- |3741| :- | :- | :- |
3745| `action` | `accept`, `decline`, `cancel` | Sovrascrive l'azione dell'utente |3742| `action` | `accept`, `decline`, `cancel` | Sovrascrive l'azione dell'utente |
3746| `content` | object | Sovrascrive i valori dei campi del modulo. Significativo solo quando `action` è `accept` |3743| `content` | object | Sovrascrive i valori dei campi del modulo. Significativo solo quando `action` è `accept` |
3747 3744
3748L'uscita con il codice 2 blocca la risposta, cambiando l'azione effettiva a `decline`. Claude Code non mostra il tuo messaggio stderr da nessuna parte.3745L'uscita con codice 2 blocca la risposta, cambiando l'azione effettiva a `decline`. Claude Code non mostra il tuo messaggio stderr da nessuna parte.
3749 3746
3750Claude Code agisce su `hookSpecificOutput` dall'output JSON di un hook ElicitationResult e scarta `systemMessage` e `continue`.3747Claude Code agisce su `hookSpecificOutput` dall'output JSON di un hook ElicitationResult e scarta `systemMessage` e `continue`.
3751 3748
3801 3798
3802Invece di eseguire un comando Bash, gli hook basati su prompt:3799Invece di eseguire un comando Bash, gli hook basati su prompt:
3803 3800
38041. Inviano l'input del hook e il prompt a un modello Claude, Haiku per impostazione predefinita38011. Inviano l'input del hook e il prompt a un modello Claude, per impostazione predefinita quello che Claude Code utilizza per la [funzionalità in background](/docs/it/costs#background-token-usage)
38052. L'LLM risponde con JSON strutturato contenente una decisione38022. L'LLM risponde con JSON strutturato contenente una decisione
38063. Claude Code elabora automaticamente la decisione38033. Claude Code elabora automaticamente la decisione
3807 3804
3834| :- | :- | :- |3831| :- | :- | :- |
3835| `type` | sì | Deve essere `"prompt"` |3832| `type` | sì | Deve essere `"prompt"` |
3836| `prompt` | sì | Il testo del prompt da inviare all'LLM. Utilizzare `$ARGUMENTS` come segnaposto per l'input JSON del hook. Se `$ARGUMENTS` non è presente, l'input JSON viene aggiunto al prompt |3833| `prompt` | sì | Il testo del prompt da inviare all'LLM. Utilizzare `$ARGUMENTS` come segnaposto per l'input JSON del hook. Se `$ARGUMENTS` non è presente, l'input JSON viene aggiunto al prompt |
3837| `model` | no | Modello da utilizzare per la valutazione. Impostazione predefinita: un modello veloce |3834| `model` | no | Modello da utilizzare per la valutazione. Impostazione predefinita: il modello che Claude Code utilizza per la [funzionalità in background](/docs/it/costs#background-token-usage) |
3838| `timeout` | no | Timeout in secondi. Impostazione predefinita: 30 |3835| `timeout` | no | Timeout in secondi. Impostazione predefinita: 30 |
3839| `continueOnBlock` | no | Sugli eventi a cui si applica, `true` reinvia un motivo `ok: false` a Claude e continua invece di terminare il turno. Impostazione predefinita: `false`. Vedere [Schema di risposta](#response-schema) per il comportamento per evento |3836| `continueOnBlock` | no | Sugli eventi a cui si applica, `true` reinvia un motivo `ok: false` a Claude e continua invece di terminare il turno. Impostazione predefinita: `false`. Vedere [Schema di risposta](#response-schema) per il comportamento per evento |
3840 3837