SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +188 −76. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

165 Chiamare uno strumento personalizzato165 Chiamare uno strumento personalizzato

166</h3>166</h3>

167 167 

168Passate il server MCP che avete creato a `query` tramite l'opzione `mcpServers`. La chiave in `mcpServers` diventa il segmento `{server_name}` nel nome completamente qualificato di ogni strumento: `mcp__{server_name}__{tool_name}`. Elencate quel nome in `allowedTools` in modo che lo strumento venga eseguito senza un prompt di autorizzazione.168Passa il server MCP che hai creato a `query` tramite l'opzione `mcpServers`. Il [nome completamente qualificato](/docs/it/agent-sdk/mcp#tool-naming-convention) di ogni strumento è `mcp__{server_name}__{tool_name}`, dove `{server_name}` è la chiave che assegni al server in `mcpServers`. Se la chiave contiene caratteri come `.` o spazi, sostituiscili con `_` quando scrivi `{server_name}`. Elenca il nome completamente qualificato in `allowedTools` in modo che lo strumento venga eseguito senza una richiesta di permesso.

169 169 

170Questi snippet riutilizzano il `weatherServer` dall'[esempio di strumento meteo](#weather-tool-example) per chiedere a Claude qual è il meteo in una posizione specifica.170Questi snippet riutilizzano il `weatherServer` dall'[esempio di strumento meteo](#weather-tool-example) per chiedere a Claude qual è il meteo in una posizione specifica.

171 171 

Details

235 235 

236| Opzione | Tipo | Predefinito | Descrizione |236| Opzione | Tipo | Predefinito | Descrizione |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | Modello abbinato al campo di filtro dell'evento, seguendo le [regole per i matcher nei file di impostazioni](/docs/it/hooks#matcher-patterns). Per gli hook degli strumenti, questo è il nome dello strumento. Gli strumenti incorporati includono `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` e altri (consulta [Tipi di input degli strumenti](/docs/it/agent-sdk/typescript#tool-input-types) per l'elenco completo). Gli strumenti MCP utilizzano il modello `mcp__<server>__<action>`, dove `<server>` è la chiave che utilizzi nella configurazione `mcpServers`. |238| `matcher` | `string` | `undefined` | Modello abbinato al campo di filtro dell'evento, seguendo le [regole per i matcher nei file di impostazioni](/docs/it/hooks#matcher-patterns). Per gli hook degli strumenti, quel campo è il nome dello strumento. Gli strumenti incorporati includono `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` e altri. Consulta [Tipi di input degli strumenti](/docs/it/agent-sdk/typescript#tool-input-types) per l'elenco completo. Gli strumenti MCP utilizzano il modello `mcp__<server>__<action>`, dove `<server>` è la chiave che utilizzi nella configurazione `mcpServers`, scritta come descrive la [convenzione di denominazione degli strumenti](/docs/it/agent-sdk/mcp#tool-naming-convention). |

239| `hooks` | `HookCallback[]` | - | Obbligatorio. Array di funzioni di callback da eseguire quando il modello corrisponde |239| `hooks` | `HookCallback[]` | - | Obbligatorio. Array di funzioni di callback da eseguire quando il modello corrisponde |

240| `timeout` | `number` | `undefined` | Timeout in secondi. Quando omesso, Claude Code applica il [timeout predefinito dell'evento](#hook-timeout). I tuoi callback SDK seguono i valori predefiniti dell'hook `command` |240| `timeout` | `number` | `undefined` | Timeout in secondi. Quando omesso, Claude Code applica il [timeout predefinito dell'evento](#hook-timeout). I tuoi callback SDK seguono i valori predefiniti dell'hook `command` |

241 241 

agent-sdk/mcp.md +10 −1

Details

196 Convenzione di denominazione degli strumenti196 Convenzione di denominazione degli strumenti

197</h3>197</h3>

198 198 

199Gli strumenti MCP seguono il modello di denominazione `mcp__<server-name>__<tool-name>`. Ad esempio, un server GitHub denominato `"github"` con uno strumento `list_issues` diventa `mcp__github__list_issues`.199Gli strumenti MCP sono denominati `mcp__<server-name>__<tool-name>`, dove `<server-name>` è il nome con cui registri il server, ad esempio la sua chiave in `mcpServers`.

200 

201I caratteri nel nome del server come `.` e gli spazi vengono sostituiti da `_`. Questa tabella mostra il nome completo di uno strumento `list_issues` per due chiavi di server:

202 

203| Chiave in `mcpServers` | Nome completo dello strumento |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208Usa i nomi completi degli strumenti in `allowedTools` e nelle [regole di permesso MCP](/docs/it/permissions#mcp). Per un server fornito da un [plugin](/docs/it/agent-sdk/plugins), `<server-name>` assume la [forma con ambito del plugin](/docs/it/mcp#plugin-provided-mcp-servers) e inizia con `plugin_`.

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 Auto-approvazione con allowedTools211 Auto-approvazione con allowedTools

Details

15Quando Claude richiede uno strumento, l'SDK controlla le autorizzazioni in questo ordine:15Quando Claude richiede uno strumento, l'SDK controlla le autorizzazioni in questo ordine:

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hook">

19 Eseguire prima gli [hooks](/docs/it/agent-sdk/hooks). Un hook può negare la chiamata completamente o lasciarla passare. Un hook che restituisce `allow` non salta le regole di negazione e richiesta di seguito; quelle vengono valutate indipendentemente dal risultato dell'hook. Un hook `PreToolUse` allow inoltre non può approvare una rimozione `rm` o `rmdir` che prende di mira un [percorso critico](/docs/it/permission-modes#critical-paths).19 Eseguire prima gli [hook](/docs/it/agent-sdk/hooks). Un hook può negare la chiamata completamente o lasciarla passare. Un hook che restituisce `allow` non salta le regole di negazione e di richiesta riportate di seguito; quelle vengono valutate indipendentemente dal risultato dell'hook. Un hook `PreToolUse` che restituisce `allow` inoltre non può approvare una rimozione `rm` o `rmdir` che prende di mira un [percorso critico](/docs/it/permission-modes#critical-paths). Per sapere cosa fa quell'`allow` nel plan mode, consulta [Approvazioni degli hook nel plan mode](/docs/it/permissions#hook-approvals-in-plan-mode).

20 </Step>20 </Step>

21 21 

22 <Step title="Regole di negazione">22 <Step title="Regole di negazione">


24 </Step>24 </Step>

25 25 

26 <Step title="Regole di richiesta">26 <Step title="Regole di richiesta">

27 Controllare le regole `ask` da [settings.json](/docs/it/settings-reference#permission-settings). Se una regola di richiesta corrisponde, la chiamata passa al vostro callback [`canUseTool`](/docs/it/agent-sdk/user-input) per la conferma, anche in modalità `bypassPermissions`.27 Controllare le regole `ask` da [settings.json](/docs/it/settings-reference#permission-settings). Se una regola di richiesta corrisponde, la chiamata passa al tuo [callback `canUseTool`](/docs/it/agent-sdk/user-input) per la conferma, anche in modalità `bypassPermissions`.

28 28 

29 Gli strumenti che richiedono l'interazione dell'utente si comportano allo stesso modo: `AskUserQuestion` e gli strumenti MCP il cui server imposta [`_meta["anthropic/requiresUserInteraction"]`](/docs/it/mcp#require-approval-for-a-specific-tool) passano sempre al callback, anche quando una regola di autorizzazione corrisponde. In modalità `dontAsk` entrambi i casi vengono negati, perché quella modalità non richiede mai. L'annotazione MCP richiede Claude Code v2.1.199 o successivo.29 Gli strumenti che richiedono l'interazione dell'utente si comportano allo stesso modo: `AskUserQuestion` e gli strumenti MCP il cui server imposta [`_meta["anthropic/requiresUserInteraction"]`](/docs/it/mcp#require-approval-for-a-specific-tool) passano sempre al callback, anche quando una regola di autorizzazione corrisponde. In modalità `dontAsk` entrambi i casi vengono negati, perché quella modalità non richiede mai. L'annotazione MCP richiede Claude Code v2.1.199 o successivo.

30 30 


161 161 

162<Tabs>162<Tabs>

163 <Tab title="Al momento della query">163 <Tab title="Al momento della query">

164 Passare `permission_mode` (Python) o `permissionMode` (TypeScript) quando si crea una query. Questa modalità si applica per l'intera sessione a meno che non venga modificata dinamicamente.164 Passa `permission_mode` (Python) o `permissionMode` (TypeScript) quando crei una query.

165 165 

166 <CodeGroup>166 <CodeGroup>

167 ```python Python theme={null}167 ```python Python theme={null}


314 314 

315Claude esplora la base di codice e produce un piano senza modificare i file sorgente. Gli strumenti di sola lettura vengono eseguiti come nella modalità di autorizzazione `default`.315Claude esplora la base di codice e produce un piano senza modificare i file sorgente. Gli strumenti di sola lettura vengono eseguiti come nella modalità di autorizzazione `default`.

316 316 

317Le modifiche ai file non vengono mai approvate automaticamente in modalità plan, anche quando una regola di autorizzazione corrisponde. Invece, richiedono il callback `canUseTool`. Su Claude Code v2.1.212 o successivo, i comandi shell che modificano i file, come `touch` e `rm`, raggiungono il callback `canUseTool` allo stesso modo.317Le modifiche ai file non vengono mai approvate automaticamente nel plan mode, anche quando una regola di permesso corrisponde o un hook `PreToolUse` restituisce `allow`. Passano invece per il tuo callback `canUseTool`. Su Claude Code v2.1.212 o successivo, i comandi shell che modificano i file, come `touch` e `rm`, raggiungono il tuo callback `canUseTool` allo stesso modo.

318 318 

319Se si imposta `allowDangerouslySkipPermissions: true` insieme a `permissionMode: 'plan'`, le modifiche ai file e i comandi shell che modificano i file raggiungono comunque il callback `canUseTool`. L'opzione consente di passare a `bypassPermissions` in seguito con `setPermissionMode()`.319Se si imposta `allowDangerouslySkipPermissions: true` insieme a `permissionMode: 'plan'`, le modifiche ai file e i comandi shell che modificano i file raggiungono comunque il callback `canUseTool`. L'opzione consente di passare a `bypassPermissions` in seguito con `setPermissionMode()`.

320 320 


322 322 

323**Utilizzare quando:** si desidera che Claude proponga modifiche senza eseguirle, ad esempio durante la revisione del codice o quando è necessario approvare le modifiche prima che vengano apportate.323**Utilizzare quando:** si desidera che Claude proponga modifiche senza eseguirle, ad esempio durante la revisione del codice o quando è necessario approvare le modifiche prima che vengano apportate.

324 324 

325<h4 id="auto-mode-auto">

326 Modalità auto (`auto`)

327</h4>

328 

329Un modello classificatore esamina azioni come comandi shell e richieste di rete prima che vengano eseguite, e consente o blocca ciascuna di quelle che esamina. Per i modelli e i provider richiesti dalla modalità auto e l'ordine in cui valuta le azioni, consulta [Eliminare le richieste di permesso con la modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode).

330 

331Se passi una sessione in modalità auto a un modello che la modalità auto non supporta, usando [`set_model()`](/docs/it/agent-sdk/python#claudesdkclient), [`setModel()`](/docs/it/agent-sdk/typescript#query-object) o [`applyFlagSettings()`](/docs/it/agent-sdk/typescript#applyflagsettings), la sessione passa alla modalità `default`:

332 

333* **Cosa vedi**: un messaggio `system` con sottotipo `status` e `permissionMode` impostato su `"default"`, che il TypeScript SDK tipizza come [`SDKStatusMessage`](/docs/it/agent-sdk/typescript#sdkstatusmessage). Da quel momento, le chiamate che richiedono approvazione e non corrispondono a nessuna regola di permesso raggiungono il tuo callback `canUseTool`.

334* **Per tornare alla modalità auto**: passa a un modello supportato, quindi chiama `set_permission_mode("auto")` o `setPermissionMode("auto")`. Se ripristini il modello senza effettuare quella chiamata, la sessione rimane in modalità `default`. Mentre il modello non supportato è attivo, la chiamata non riesce con `Cannot set permission mode to auto: auto mode unavailable for this model`.

335 

336Il passaggio alla modalità `default` dopo una chiamata a `set_model()`, `setModel()` o `applyFlagSettings()` richiede Claude Code v2.1.299 o successivo.

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 Risorse correlate339 Risorse correlate

327</h2>340</h2>

Details

610| `receive_response()` | Ricevi messaggi fino a e incluso un ResultMessage |610| `receive_response()` | Ricevi messaggi fino a e incluso un ResultMessage |

611| `interrupt()` | Invia segnale di interruzione (funziona solo in modalità streaming) |611| `interrupt()` | Invia segnale di interruzione (funziona solo in modalità streaming) |

612| `set_permission_mode(mode)` | Cambia la modalità di autorizzazione per la sessione corrente |612| `set_permission_mode(mode)` | Cambia la modalità di autorizzazione per la sessione corrente |

613| `set_model(model)` | Cambia il modello per la sessione corrente. Passa `None` per ripristinare il [modello predefinito di Claude Code](/docs/it/model-config) |613| `set_model(model)` | Cambia il modello per la sessione corrente. Passa `None` per ripristinare il [modello predefinito di Claude Code](/docs/it/model-config). Una sessione in modalità `auto` [passa alla modalità `default`](/docs/it/agent-sdk/permissions#auto-mode-auto) se il nuovo modello non supporta la modalità auto |

614| `rewind_files(user_message_id)` | Ripristina i file al loro stato al messaggio utente specificato. Richiede `enable_file_checkpointing=True`. Vedi [File checkpointing](/docs/it/agent-sdk/file-checkpointing) |614| `rewind_files(user_message_id)` | Ripristina i file al loro stato al messaggio utente specificato. Richiede `enable_file_checkpointing=True`. Vedi [File checkpointing](/docs/it/agent-sdk/file-checkpointing) |

615| `get_mcp_status()` | Ottieni lo stato di tutti i server MCP configurati. Restituisce [`McpStatusResponse`](#mcpstatusresponse) |615| `get_mcp_status()` | Ottieni lo stato di tutti i server MCP configurati. Restituisce [`McpStatusResponse`](#mcpstatusresponse) |

616| `get_context_usage()` | Ottieni una suddivisione dell'utilizzo della finestra di contesto per categoria, skill e strumento. Gli stessi dati che `/context` mostra in una sessione interattiva. Restituisce [`ContextUsageResponse`](#contextusageresponse). Per calcolare la suddivisione, Claude Code effettua diverse richieste API di conteggio dei token che non compaiono nel flusso di messaggi; vedi [come vengono gestite queste richieste](#contextusageresponse) |616| `get_context_usage()` | Ottieni una suddivisione dell'utilizzo della finestra di contesto per categoria, skill e strumento. Gli stessi dati che `/context` mostra in una sessione interattiva. Restituisce [`ContextUsageResponse`](#contextusageresponse). Per calcolare la suddivisione, Claude Code effettua diverse richieste API di conteggio dei token che non compaiono nel flusso di messaggi; vedi [come vengono gestite queste richieste](#contextusageresponse) |


3884 Imposta `"failIfUnavailable": True` nelle impostazioni della sandbox per interrompere invece. L'SDK inoltra `failIfUnavailable` a Claude Code insieme ai campi dichiarati di `SandboxSettings`. `query()` quindi segnala un `ResultMessage` con `subtype="error_during_execution"` e il motivo in `errors`. Poiché si tratta di una singola chiamata `query()`, l'SDK genera un'eccezione dopo aver ceduto quel risultato di errore, quindi racchiudi il ciclo in un blocco try per continuare oltre. Vedi [Gestire il risultato](/docs/it/agent-sdk/agent-loop#handle-the-result) per il contratto di errore.3884 Imposta `"failIfUnavailable": True` nelle impostazioni della sandbox per interrompere invece. L'SDK inoltra `failIfUnavailable` a Claude Code insieme ai campi dichiarati di `SandboxSettings`. `query()` quindi segnala un `ResultMessage` con `subtype="error_during_execution"` e il motivo in `errors`. Poiché si tratta di una singola chiamata `query()`, l'SDK genera un'eccezione dopo aver ceduto quel risultato di errore, quindi racchiudi il ciclo in un blocco try per continuare oltre. Vedi [Gestire il risultato](/docs/it/agent-sdk/agent-loop#handle-the-result) per il contratto di errore.

3885</Note>3885</Note>

3886 3886 

3887Per impedire ai comandi in sandbox di scrivere su un file, elenca il suo percorso assoluto in [`denyWrite`](/docs/it/settings-reference#sandbox-filesystem-denywrite) nelle impostazioni della sandbox, ad esempio `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. L'SDK inoltra `filesystem` a Claude Code insieme ai campi dichiarati di `SandboxSettings`. Una volta avviata, la sandbox blocca le scritture su ciascun percorso elencato. Se elenchi `.env` o `./.env`, i comandi in sandbox possono scrivere nel file `.env` nella directory di lavoro della sessione.3887Per impedire ai comandi in sandbox di scrivere su un file, elenca il suo percorso assoluto in [`denyWrite`](/docs/it/settings-reference#sandbox-filesystem-denywrite) nelle impostazioni della sandbox, ad esempio `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. L'SDK inoltra `filesystem` a Claude Code insieme ai campi dichiarati di `SandboxSettings`. Una volta avviata, la sandbox blocca le scritture su ciascun percorso assoluto elencato.

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 Utilizzo di esempio3890 Utilizzo di esempio

Details

736| `interrupt()` | Interrompe la query. Disponibile solo in modalità di input in streaming. Quando la CLI dichiara la capacità `interrupt_receipt_v1` in [`SDKSystemMessage.capabilities`](#sdksystemmessage), si risolve con un [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) che elenca i messaggi in sospeso al momento dell'arrivo dell'interruzione. Si risolve con `undefined` sulle CLI precedenti alla v2.1.205 |736| `interrupt()` | Interrompe la query. Disponibile solo in modalità di input in streaming. Quando la CLI dichiara la capacità `interrupt_receipt_v1` in [`SDKSystemMessage.capabilities`](#sdksystemmessage), si risolve con un [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) che elenca i messaggi in sospeso al momento dell'arrivo dell'interruzione. Si risolve con `undefined` sulle CLI precedenti alla v2.1.205 |

737| `rewindFiles(userMessageId, options?)` | Ripristina i file allo stato in cui si trovavano al messaggio utente specificato. Passa `{ dryRun: true }` per visualizzare un'anteprima delle modifiche. Richiede `enableFileCheckpointing: true`. Consulta [Checkpointing dei file](/docs/it/agent-sdk/file-checkpointing) |737| `rewindFiles(userMessageId, options?)` | Ripristina i file allo stato in cui si trovavano al messaggio utente specificato. Passa `{ dryRun: true }` per visualizzare un'anteprima delle modifiche. Richiede `enableFileCheckpointing: true`. Consulta [Checkpointing dei file](/docs/it/agent-sdk/file-checkpointing) |

738| `setPermissionMode()` | Cambia la modalità di permesso (disponibile solo in modalità di input in streaming) |738| `setPermissionMode()` | Cambia la modalità di permesso (disponibile solo in modalità di input in streaming) |

739| `setModel()` | Cambia il modello (disponibile solo in modalità di input in streaming). Passare `undefined` o la stringa `"default"` ripristina il [modello predefinito di Claude Code](/docs/it/model-config) |739| `setModel()` | Cambia il modello (disponibile solo in modalità di input in streaming). Passare `undefined` o la stringa `"default"` ripristina il [modello predefinito di Claude Code](/docs/it/model-config). Una sessione in modalità `auto` [passa alla modalità `default`](/docs/it/agent-sdk/permissions#auto-mode-auto) se il nuovo modello non supporta la modalità auto |

740| `setMaxThinkingTokens()` | *Deprecato:* usa invece l'opzione `thinking`. Cambia il numero massimo di token di ragionamento. Passare `null` ripristina il ragionamento al valore predefinito della sessione: un override impostato a metà sessione viene rimosso, e il ragionamento resta disattivato per le sessioni in cui è disabilitato |740| `setMaxThinkingTokens()` | *Deprecato:* usa invece l'opzione `thinking`. Cambia il numero massimo di token di ragionamento. Passare `null` ripristina il ragionamento al valore predefinito della sessione: un override impostato a metà sessione viene rimosso, e il ragionamento resta disattivato per le sessioni in cui è disabilitato |

741| `applyFlagSettings(settings)` | Esegue il merge delle impostazioni nel livello delle impostazioni da flag della sessione in fase di esecuzione (disponibile solo in modalità di input in streaming). Consulta [`applyFlagSettings()`](#applyflagsettings) |741| `applyFlagSettings(settings)` | Esegue il merge delle impostazioni nel livello delle impostazioni da flag della sessione in fase di esecuzione (disponibile solo in modalità di input in streaming). Consulta [`applyFlagSettings()`](#applyflagsettings) |

742| `updateSettings(source, settings)` | Scrive una chiave consentita nel file di impostazioni locali del progetto o nel tuo file di impostazioni utente, così che il valore persista per le sessioni successive. Consulta [`updateSettings()`](#updatesettings). Richiede TypeScript SDK v0.3.257 o successivo, che include Claude Code v2.1.257 |742| `updateSettings(source, settings)` | Scrive una chiave consentita nel file di impostazioni locali del progetto o nel tuo file di impostazioni utente, così che il valore persista per le sessioni successive. Consulta [`updateSettings()`](#updatesettings). Richiede TypeScript SDK v0.3.257 o successivo, che include Claude Code v2.1.257 |


6370| Proprietà | Tipo | Predefinito | Descrizione |6370| Proprietà | Tipo | Predefinito | Descrizione |

6371| :- | :- | :- | :- |6371| :- | :- | :- | :- |

6372| `allowWrite` | `string[]` | `[]` | Pattern di percorso file per consentire l'accesso in scrittura a |6372| `allowWrite` | `string[]` | `[]` | Pattern di percorso file per consentire l'accesso in scrittura a |

6373| `denyWrite` | `string[]` | `[]` | Pattern di percorso file per negare l'accesso in scrittura a. Per bloccare le scritture in sandbox su un file nella directory di lavoro della sessione, elenca il suo percorso assoluto. Se elenchi `.env` o `./.env`, i comandi in sandbox possono scrivere nel file `.env` nella directory di lavoro della sessione |6373| `denyWrite` | `string[]` | `[]` | Pattern di percorso file per negare l'accesso in scrittura a. Per bloccare le scritture in sandbox su un file nella directory di lavoro della sessione, elenca il suo percorso assoluto. |

6374| `denyRead` | `string[]` | `[]` | Pattern di percorso file per negare l'accesso in lettura a |6374| `denyRead` | `string[]` | `[]` | Pattern di percorso file per negare l'accesso in lettura a |

6375 6375 

6376<h3 id="permissions-fallback-for-unsandboxed-commands">6376<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738La [modalità di permesso](/docs/it/permissions) dipende da come hai avviato la sessione:738La [modalità di permesso](/docs/it/permissions) dipende da come hai avviato la sessione:

739 739 

740* **Inviata in background con `/bg` o `←`**: Claude Code mantiene la modalità di permesso in cui si trovava la sessione, quindi una sessione che hai passato ad `acceptEdits` o `auto` rimane tale dopo il distacco740* **Inviata in background con `/bg` o `←`**: Claude Code mantiene la modalità di permesso in cui si trovava la sessione, quindi una sessione che hai passato ad `acceptEdits` o `auto` rimane tale dopo il distacco

741* **Inviata da una vista agente che hai aperto con `←`**: la configurazione del target viene per prima, e la modalità di permesso della sessione da cui provieni si applica quando nient'altro ne imposta una741* **Inviata da una vista agente che hai aperto con `←`**: Claude Code prende la modalità di permesso della nuova sessione prima dalla configurazione della directory target, poi dalla sessione da cui provieni

742* **Inviata da `claude agents` avviato in una shell, o con `claude --bg`**: la nuova sessione inizia come farebbe una nuova sessione `claude` in quella directory, a meno che tu non l'abbia inviata da una vista agente aperta con [valori predefiniti di invio](#dispatch-defaults). [In quale modalità di permesso inizia una sessione](/docs/it/permission-modes#which-mode-a-session-starts-in) elenca l'ordine742* **Inviata da `claude agents` avviato in una shell, o con `claude --bg`**: la nuova sessione inizia come farebbe una nuova sessione `claude` in quella directory, a meno che tu non l'abbia inviata da una vista agente aperta con [valori predefiniti di invio](#dispatch-defaults). [In quale modalità di permesso inizia una sessione](/docs/it/permission-modes#which-mode-a-session-starts-in) elenca l'ordine

743 743 

744Per una sessione che invii da una vista agente aperta con `←`, Claude Code prende la modalità di permesso dalla prima di queste che si applica:744Per una sessione che invii da una vista agente aperta con `←`, Claude Code prende la modalità di permesso dalla prima di queste che si applica:


7461. La [`permissions.defaultMode`](/docs/it/settings-reference#permissions-defaultmode) della directory target. Si applicano due regole sull'origine:7461. La [`permissions.defaultMode`](/docs/it/settings-reference#permissions-defaultmode) della directory target. Si applicano due regole sull'origine:

747 * `auto` e `bypassPermissions` [hanno effetto solo da impostazioni gestite, da un file `--settings` o da `~/.claude/settings.json`](/docs/it/settings-reference#permissions-defaultmode).747 * `auto` e `bypassPermissions` [hanno effetto solo da impostazioni gestite, da un file `--settings` o da `~/.claude/settings.json`](/docs/it/settings-reference#permissions-defaultmode).

748 * Claude Code rifiuta una `defaultMode` proveniente dal `.claude/settings.json` o `.claude/settings.local.json` del progetto che seleziona una modalità più permissiva di quella in cui si trovava la sessione da cui provieni.748 * Claude Code rifiuta una `defaultMode` proveniente dal `.claude/settings.json` o `.claude/settings.local.json` del progetto che seleziona una modalità più permissiva di quella in cui si trovava la sessione da cui provieni.

7492. La modalità di permesso della sessione da cui provieni7492. La modalità di permesso della sessione da cui provieni. Se quella sessione era in modalità `bypassPermissions`, la nuova sessione può invece iniziare in modalità Manual, con l'avviso `Bypass permissions was requested at launch and ignored`. Questo accade quando la tua accettazione del disclaimer di bypass si trova solo in `.claude/settings.local.json` o in un file `--settings`. Continua in modalità Manual, oppure [aggiungi quell'accettazione a `~/.claude/settings.json`](/docs/it/permission-modes#bypass-permissions-acceptance).

750 750 

751Quando Claude Code rifiuta la modalità di una fonte perché troppo permissiva, decide la fonte successiva nell'elenco. Ad esempio, se invii da una sessione in plan mode in una directory le cui impostazioni sotto controllo di versione chiedono `acceptEdits`, la nuova sessione inizia in plan mode. Se sposti quella `defaultMode` in `~/.claude/settings.json`, si applica indipendentemente dalla modalità di permesso della sessione da cui provieni.751Quando Claude Code rifiuta la modalità di una fonte perché troppo permissiva, decide la fonte successiva nell'elenco. Ad esempio, se invii da una sessione in plan mode in una directory le cui impostazioni sotto controllo di versione chiedono `acceptEdits`, la nuova sessione inizia in plan mode. Se sposti quella `defaultMode` in `~/.claude/settings.json`, si applica indipendentemente dalla modalità di permesso della sessione da cui provieni.

752 752 

Details

84| `--continue`, `-c` | Carica la conversazione più recente nella directory corrente, inclusa una [sessione in background che è terminata](/docs/it/sessions#where-the-session-picker-looks); l'apertura di sessioni in background terminate richiede Claude Code v2.1.257 o successivo. Salta le sessioni create con `claude -p` o l'Agent SDK, e le sessioni il cui primo prompt era `/loop`. `claude -p --continue` include sessioni `-p`, SDK e `/loop`. Include le sessioni che hanno aggiunto questa directory con `/add-dir` | `claude --continue` |84| `--continue`, `-c` | Carica la conversazione più recente nella directory corrente, inclusa una [sessione in background che è terminata](/docs/it/sessions#where-the-session-picker-looks); l'apertura di sessioni in background terminate richiede Claude Code v2.1.257 o successivo. Salta le sessioni create con `claude -p` o l'Agent SDK, e le sessioni il cui primo prompt era `/loop`. `claude -p --continue` include sessioni `-p`, SDK e `/loop`. Include le sessioni che hanno aggiunto questa directory con `/add-dir` | `claude --continue` |

85| `--dangerously-load-development-channels` | Abilita i [canali](/docs/it/channels-reference#test-during-the-research-preview) che non sono nell'allowlist approvata, per lo sviluppo locale. Accetta voci `plugin:<name>@<marketplace>` e `server:<name>`. Chiede una conferma, quindi ha effetto nelle sessioni interattive. Con `-p`, Claude Code ignora il flag | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | Abilita i [canali](/docs/it/channels-reference#test-during-the-research-preview) che non sono nell'allowlist approvata, per lo sviluppo locale. Accetta voci `plugin:<name>@<marketplace>` e `server:<name>`. Chiede una conferma, quindi ha effetto nelle sessioni interattive. Con `-p`, Claude Code ignora il flag | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | Salta i prompt di permesso. Equivalente a `--permission-mode bypassPermissions`. Vedi [modalità di permesso](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) per quello che questo fa e non salta. Per le sessioni avviate con `--bg`, la modalità [persiste quando il supervisore riavvia la sessione](/docs/it/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | Salta i prompt di permesso. Equivalente a `--permission-mode bypassPermissions`. Vedi [modalità di permesso](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) per quello che questo fa e non salta. Per le sessioni avviate con `--bg`, la modalità [persiste quando il supervisore riavvia la sessione](/docs/it/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | Abilita la modalità debug con filtro di categoria opzionale, come `--debug='mcp,startup'` o `--debug='!1p'`. Il filtro si lega solo nella forma `=`; un filtro separato da spazi abilita la modalità debug senza filtrare | `claude --debug='mcp,startup'` |87| `--debug` | Abilita la modalità debug con filtro di categoria opzionale, come `--debug='mcp,startup'` o `--debug='!mcp'`. Il filtro si lega solo nella forma `=`; un filtro separato da spazi abilita la modalità debug senza filtrare | `claude --debug='mcp,startup'` |

88| `--debug-file <path>` | Scrivi i log di debug in un percorso di file specifico. Abilita implicitamente la modalità debug. Ha la precedenza su `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | Scrivi i log di debug in un percorso di file specifico. Abilita implicitamente la modalità debug. Ha la precedenza su `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | Apri l'[app Claude Desktop](/docs/it/desktop) nella directory corrente e esci senza avviare una sessione nel terminale. Aggiungi `--continue`, o `--resume` con un ID di sessione, per [aprire quella sessione in Desktop](/docs/it/desktop#coming-from-the-cli) invece. `--resume` qui accetta solo un ID di sessione, non un nome o un percorso di trascrizione. Non accetta prompt e nessun altro flag tranne `--verbose` e i flag `--debug`, poiché l'app avvia la sessione stessa. Disponibile su macOS e Windows x64 quando sei connesso con un abbonamento Claude. Richiede Claude Code v2.1.285 o successivo | `claude --desktop` |89| `--desktop` | Apri l'[app Claude Desktop](/docs/it/desktop) nella directory corrente e esci senza avviare una sessione nel terminale. Aggiungi `--continue`, o `--resume` con un ID di sessione, per [aprire quella sessione in Desktop](/docs/it/desktop#coming-from-the-cli) invece. `--resume` qui accetta solo un ID di sessione, non un nome o un percorso di trascrizione. Non accetta prompt e nessun altro flag tranne `--verbose` e i flag `--debug`, poiché l'app avvia la sessione stessa. Disponibile su macOS e Windows x64 quando sei connesso con un abbonamento Claude. Richiede Claude Code v2.1.285 o successivo | `claude --desktop` |

90| `--disable-slash-commands` | Disabilita tutte le skills e i comandi per questa sessione | `claude --disable-slash-commands` |90| `--disable-slash-commands` | Disabilita tutte le skills e i comandi per questa sessione | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429Una sessione che è rimasta aperta per ore può utilizzare molto più dei limiti del vostro piano di quanto l'attività suggerisca, solitamente per uno di questi motivi:429Una sessione che è rimasta aperta per ore può utilizzare molto più dei limiti del vostro piano di quanto l'attività suggerisca, solitamente per uno di questi motivi:

430 430 

431* **Contesto lungo**: Claude Code invia la vostra conversazione completa con ogni richiesta, e ogni volta che Claude utilizza gli strumenti invia un'altra richiesta contenente quel batch di risultati degli strumenti. Con [prompt caching](/docs/it/prompt-caching), Claude Code rilegge quella cronologia alla [cached token rate](https://platform.claude.com/docs/en/about-claude/pricing), quindi una domanda di una sola riga in una sessione che è rimasta aperta tutto il giorno consuma comunque utilizzo per l'intera conversazione. Consultate [Manage context proactively](#manage-context-proactively) per i modi di mantenere il vostro contesto piccolo431* **Contesto lungo**: Claude Code invia la vostra conversazione completa con ogni richiesta, e ogni volta che Claude utilizza gli strumenti invia un'altra richiesta contenente quel batch di risultati degli strumenti. Con [prompt caching](/docs/it/prompt-caching), Claude Code rilegge quella cronologia alla [cached token rate](https://platform.claude.com/docs/en/about-claude/pricing), quindi una domanda di una sola riga in una sessione che è rimasta aperta tutto il giorno consuma comunque utilizzo per l'intera conversazione. Consultate [Manage context proactively](#manage-context-proactively) per i modi di mantenere il vostro contesto piccolo

432* **Cache misses**: il vostro primo messaggio dopo una pausa più lunga della [cache lifetime](/docs/it/prompt-caching#cache-lifetime) manca la cache e rielabora il vostro contesto completo. La durata è di un'ora su un abbonamento e scende a cinque minuti una volta che state utilizzando [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); su una chiave API o provider cloud, è cinque minuti per impostazione predefinita. Per mantenere la durata di un'ora mentre utilizzate usage credits, [scegliete il TTL voi stessi](/docs/it/prompt-caching#choose-the-ttl-yourself). Sui piani Pro e Max, quando riprendete una sessione grande dopo una lunga pausa, Claude Code [offre di riprendere da un riepilogo](/docs/it/sessions#resume-from-a-summary) in modo che le richieste successive non portino la cronologia completa432* **Cache miss**: il tuo primo messaggio dopo una pausa più lunga della [durata della cache](/docs/it/prompt-caching#cache-lifetime) non trova la cache e rielabora il tuo contesto completo. La durata è di un'ora con un abbonamento e scende a cinque minuti quando inizi ad attingere ai [crediti di utilizzo](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); con una chiave API o un provider cloud, è di cinque minuti per impostazione predefinita. Per mantenere la durata di un'ora mentre attingi ai crediti di utilizzo, [scegli tu il TTL](/docs/it/prompt-caching#choose-the-ttl-yourself)

433* **Scheduled tasks**: un [scheduled task](/docs/it/scheduled-tasks) si attiva al suo intervallo anche mentre la sessione è inattiva, inviando il vostro contesto completo ogni volta433* **Scheduled tasks**: un [scheduled task](/docs/it/scheduled-tasks) si attiva al suo intervallo anche mentre la sessione è inattiva, inviando il vostro contesto completo ogni volta

434* **Cross-session messages**: Claude Code consegna un [message from another of your sessions](/docs/it/cross-session-messaging) come un nuovo turno quando questa sessione rimane inattiva, inviando il vostro contesto completo ogni volta. Per trattenere i messaggi in entrata invece di consegnarli, impostate [`crossSessionInbound`](/docs/it/settings-reference#crosssessioninbound) su `hold`434* **Cross-session messages**: Claude Code consegna un [message from another of your sessions](/docs/it/cross-session-messaging) come un nuovo turno quando questa sessione rimane inattiva, inviando il vostro contesto completo ogni volta. Per trattenere i messaggi in entrata invece di consegnarli, impostate [`crossSessionInbound`](/docs/it/settings-reference#crosssessioninbound) su `hold`

435* **Goal check-ins**: mentre il lavoro in background mantiene un [goal](/docs/it/goal) attivo in attesa, Claude Code [chiede a Claude di controllare quel lavoro](/docs/it/goal#background-work-defers-evaluation) anche quando la sessione rimane inattiva, avviando un nuovo turno che invia il vostro contesto completo. Claude Code avvia al massimo tre check-in inattivi per goal tra i vostri prompt. Prima della v2.1.246, i check-in inattivi erano illimitati. Per disattivare i check-in, impostate [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/it/env-vars) su `0`. I check-in inattivi richiedono Claude Code v2.1.236 o successivo435* **Goal check-ins**: mentre il lavoro in background mantiene un [goal](/docs/it/goal) attivo in attesa, Claude Code [chiede a Claude di controllare quel lavoro](/docs/it/goal#background-work-defers-evaluation) anche quando la sessione rimane inattiva, avviando un nuovo turno che invia il vostro contesto completo. Claude Code avvia al massimo tre check-in inattivi per goal tra i vostri prompt. Prima della v2.1.246, i check-in inattivi erano illimitati. Per disattivare i check-in, impostate [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/it/env-vars) su `0`. I check-in inattivi richiedono Claude Code v2.1.236 o successivo

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID del progetto GCP a cui sono indirizzate le richieste di Google Cloud's Agent Platform. Consulta [Configurare le credenziali GCP](/docs/it/google-vertex-ai#3-configure-gcp-credentials) |196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID del progetto GCP a cui sono indirizzate le richieste di Google Cloud's Agent Platform. Consulta [Configurare le credenziali GCP](/docs/it/google-vertex-ai#3-configure-gcp-credentials) |

197| `ANTHROPIC_WORKSPACE_ID` | ID del workspace per la [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Impostala quando la tua regola di federazione è limitata a più di un workspace, in modo che lo scambio di token sappia quale workspace usare |197| `ANTHROPIC_WORKSPACE_ID` | ID del workspace per la [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Impostala quando la tua regola di federazione è limitata a più di un workspace, in modo che lo scambio di token sappia quale workspace usare |

198| `API_FORCE_IDLE_TIMEOUT` | Sovrascrive il timeout di inattività del corpo di 5 minuti che interrompe una risposta del modello in streaming quando non arrivano byte. Imposta `0` per disattivare il timeout, ad esempio quando un [gateway](/docs/it/llm-gateway) lento o un modello locale resta in pausa per più di 5 minuti tra un chunk e l'altro, oppure `1` per mantenerlo attivo per ogni provider. Se non è impostata, il timeout è attivo sui provider diversi dall'API Anthropic diretta, da [Claude Platform on AWS](/docs/it/claude-platform-on-aws) e da Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` impostata. I [watchdog dello stream](/docs/it/network-config#streaming-idle-watchdogs) funzionano indipendentemente da esso e interrompono una lunga pausa silenziosa anche quando imposti `0` qui |198| `API_FORCE_IDLE_TIMEOUT` | Sovrascrive il timeout di inattività del corpo di 5 minuti che interrompe una risposta del modello in streaming quando non arrivano byte. Imposta `0` per disattivare il timeout, ad esempio quando un [gateway](/docs/it/llm-gateway) lento o un modello locale resta in pausa per più di 5 minuti tra un chunk e l'altro, oppure `1` per mantenerlo attivo per ogni provider. Se non è impostata, il timeout è attivo sui provider diversi dall'API Anthropic diretta, da [Claude Platform on AWS](/docs/it/claude-platform-on-aws) e da Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` impostata. I [watchdog dello stream](/docs/it/network-config#streaming-idle-watchdogs) funzionano indipendentemente da esso e interrompono una lunga pausa silenziosa anche quando imposti `0` qui |

199| `API_TIMEOUT_MS` | Timeout per le richieste API in millisecondi (predefinito: 600000, ovvero 10 minuti; massimo: 2147483647). Aumentalo quando le richieste vanno in timeout su reti lente o quando instradi le richieste attraverso un proxy. I valori superiori al massimo causano l'overflow del timer sottostante e fanno fallire immediatamente le richieste |199| `API_TIMEOUT_MS` | Timeout per le richieste API in millisecondi (predefinito: 600000, ovvero 10 minuti; massimo: 2147483647). Una richiesta in streaming deve ricevere gli header della risposta entro questo tempo. Aumentalo quando le richieste vanno in timeout su reti lente o quando instradi le richieste attraverso un proxy |

200| `AWS_BEARER_TOKEN_BEDROCK` | Chiave API di Amazon Bedrock per l'autenticazione (consulta [Chiavi API di Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |200| `AWS_BEARER_TOKEN_BEDROCK` | Chiave API di Amazon Bedrock per l'autenticazione (consulta [Chiavi API di Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

201| `BASH_DEFAULT_TIMEOUT_MS` | Timeout predefinito per un comando dello strumento Bash o PowerShell in primo piano, in millisecondi (predefinito: 120000, ovvero 2 minuti). Un valore superiore al [limite di tempo predefinito per i comandi in background](/docs/it/tools-reference#time-limit-for-background-commands) sostituisce tale valore predefinito nelle sessioni non presidiate. Il limite di tempo in background richiede Claude Code v2.1.285 o versioni successive |201| `BASH_DEFAULT_TIMEOUT_MS` | Timeout predefinito per un comando dello strumento Bash o PowerShell in primo piano, in millisecondi (predefinito: 120000, ovvero 2 minuti). Un valore superiore al [limite di tempo predefinito per i comandi in background](/docs/it/tools-reference#time-limit-for-background-commands) sostituisce tale valore predefinito nelle sessioni non presidiate. Il limite di tempo in background richiede Claude Code v2.1.285 o versioni successive |

202| `BASH_MAX_OUTPUT_LENGTH` | Numero massimo di caratteri dell'output bash che Claude Code rilegge nel risultato di un comando (predefinito: 30000; massimo: 150000). Se imposti l'impostazione [`bashOutputMaxChars`](/docs/it/settings-reference#bashoutputmaxchars), Claude Code ignora questa variabile. Consulta [Limiti di output](/docs/it/tools-reference#output-limits) |202| `BASH_MAX_OUTPUT_LENGTH` | Numero massimo di caratteri dell'output bash che Claude Code rilegge nel risultato di un comando (predefinito: 30000; massimo: 150000). Se imposti l'impostazione [`bashOutputMaxChars`](/docs/it/settings-reference#bashoutputmaxchars), Claude Code ignora questa variabile. Consulta [Limiti di output](/docs/it/tools-reference#output-limits) |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [Errori della sessione in background](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [Errori della sessione in background](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [Errori della sessione in background](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [Errori della sessione in background](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [Errori della sessione in background](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [Errori della sessione in background](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [Salta tutti i controlli con la modalità bypassPermissions](/docs/it/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [Errori della sessione in background](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [Errori della sessione in background](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [Errori della sessione in background](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [Errori della sessione in background](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [Errori della sessione in background](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [Errori della sessione in background](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* Connessioni interrotte. Quando una connessione si interrompe a metà di una richiesta prima che Claude abbia completato una qualsiasi parte della sua risposta, incluso il suo ragionamento, Claude Code invia nuovamente la richiesta con lo stesso backoff e il turno continua, anche se del testo aveva già iniziato a essere trasmesso. Quando si interrompe dopo che Claude ha finito di pensare ma prima di aver iniziato un testo o una chiamata a uno strumento, Claude Code invece invia nuovamente la richiesta fino a due volte in rapida successione, e termina il turno con `Connection lost before a response was produced` se la connessione continua a interrompersi a quel punto.419* Connessioni interrotte. Quando una connessione si interrompe a metà di una richiesta prima che Claude abbia completato una qualsiasi parte della sua risposta, incluso il suo ragionamento, Claude Code invia nuovamente la richiesta con lo stesso backoff e il turno continua, anche se del testo aveva già iniziato a essere trasmesso. Quando si interrompe dopo che Claude ha finito di pensare ma prima di aver iniziato un testo o una chiamata a uno strumento, Claude Code invece invia nuovamente la richiesta fino a due volte in rapida successione, e termina il turno con `Connection lost before a response was produced` se la connessione continua a interrompersi a quel punto.

419* Una connessione che Claude Code rileva è stata interrotta dal tuo computer che si è addormentato a metà di una richiesta. Claude Code la conta come una connessione interrotta secondo le regole sopra; una volta che l'etichetta di riprovazione nomina il motivo specifico, legge `Connection lost while your computer was asleep`, e se il turno termina dopo che Claude ha finito di pensare ma prima di un testo o di una chiamata a uno strumento, il messaggio legge `Your computer went to sleep before a response was produced`.420* Una connessione che Claude Code rileva è stata interrotta dal tuo computer che si è addormentato a metà di una richiesta. Claude Code la conta come una connessione interrotta secondo le regole sopra; una volta che l'etichetta di riprovazione nomina il motivo specifico, legge `Connection lost while your computer was asleep`, e se il turno termina dopo che Claude ha finito di pensare ma prima di un testo o di una chiamata a uno strumento, il messaggio legge `Your computer went to sleep before a response was produced`.

420* Un flusso di risposta bloccato, quando le intestazioni di risposta sono arrivate ma nessuna risposta di Claude è arrivata, o quando Claude ha finito di pensare ma non ha iniziato un testo o una chiamata a uno strumento: Claude Code interrompe la connessione bloccata e trasmette nuovamente la richiesta in streaming al massimo una volta. Se la risposta si blocca una seconda volta dopo che Claude ha finito di pensare ma prima di un testo o di una chiamata a uno strumento, Claude Code termina il turno con `The response stalled before a response was produced`.421* Un flusso di risposta bloccato, quando le intestazioni di risposta sono arrivate ma nessuna risposta di Claude è arrivata, o quando Claude ha finito di pensare ma non ha iniziato un testo o una chiamata a uno strumento: Claude Code interrompe la connessione bloccata e trasmette nuovamente la richiesta in streaming al massimo una volta. Se la risposta si blocca una seconda volta dopo che Claude ha finito di pensare ma prima di un testo o di una chiamata a uno strumento, Claude Code termina il turno con `The response stalled before a response was produced`.

421* Una richiesta di streaming a cui l'API non risponde mai con intestazioni di risposta, su una connessione dove il [first-byte deadline runs](/docs/it/network-config#streaming-idle-watchdogs): Claude Code la interrompe alla scadenza e la invia nuovamente al massimo una volta per richiesta di modello, entro il budget di riprovazione, quindi termina il turno con [No response from API](#no-response-from-api) se anche quel tentativo rimane senza risposta. Su altre connessioni, la richiesta attende `API_TIMEOUT_MS`. Quando imposti `CLAUDE_CODE_RETRY_WATCHDOG`, il limite di un tentativo non si applica.422* Una richiesta di streaming a cui l'API non risponde mai con intestazioni di risposta, su una connessione dove il [first-byte deadline runs](/docs/it/network-config#streaming-idle-watchdogs): Claude Code la interrompe alla scadenza e la invia nuovamente al massimo una volta per richiesta di modello, entro il budget di riprovazione, quindi termina il turno con [No response from API](#no-response-from-api) se anche quel tentativo rimane senza risposta. Quando imposti `CLAUDE_CODE_RETRY_WATCHDOG`, il limite di un tentativo non si applica.

422* Una risposta in streaming che il filtro dei contenuti di output dell'API interrompe prima che Claude abbia finito il suo ragionamento o iniziato un testo o una chiamata a uno strumento. Claude Code invia nuovamente la richiesta una volta, entro il budget di riprovazione, e mostra [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) se il filtro interrompe anche la seconda risposta.423* Una risposta in streaming che il filtro dei contenuti di output dell'API interrompe prima che Claude abbia finito il suo ragionamento o iniziato un testo o una chiamata a uno strumento. Claude Code invia nuovamente la richiesta una volta, entro il budget di riprovazione, e mostra [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) se il filtro interrompe anche la seconda risposta.

423* Throttle 429 temporanei, ma non il `429` del limite di spesa di un gateway, che non è un throttle; vedi [Spend limit reached](#spend-limit-reached).424* Throttle 429 temporanei, ma non il `429` del limite di spesa di un gateway, che non è un throttle; vedi [Spend limit reached](#spend-limit-reached).

424 * Quando sei connesso con un abbonamento claude.ai, questo include throttle 429 che non portano le intestazioni di quota del tuo piano. Prima della v2.1.199, Claude Code ritentava questi throttle solo per le chiavi API e gli accessi Enterprise.425 * Quando sei connesso con un abbonamento claude.ai, questo include throttle 429 che non portano le intestazioni di quota del tuo piano. Prima della v2.1.199, Claude Code ritentava questi throttle solo per le chiavi API e gli accessi Enterprise.


4552 4553 

4553* Correggi ogni voce indicata dall'errore confrontandola con gli [strumenti disponibili per i subagent](/docs/it/sub-agents#available-tools)4554* Correggi ogni voce indicata dall'errore confrontandola con gli [strumenti disponibili per i subagent](/docs/it/sub-agents#available-tools)

4554* Rimuovi le voci relative a strumenti che la sessione non ha, come gli strumenti MCP di un server non connesso4555* Rimuovi le voci relative a strumenti che la sessione non ha, come gli strumenti MCP di un server non connesso

4556* Se la voce indica un server MCP connesso, confronta la voce con il nome di quel server così come lo scrivono i [nomi degli strumenti](/docs/it/permissions#mcp) del server, ad esempio `reports__v2` in `mcp__reports__v2__get_totals`. Per quel server, scrivi `mcp__reports__v2__*`, ovvero `mcp__` seguito dal nome completo e da `__*`. Con la forma più breve `mcp__reports`, che indica un server chiamato `reports`, il subagent non riceve nessuno degli strumenti di `reports__v2`

4555* Per uno strumento che [i subagent in background escludono](/docs/it/sub-agents#available-tools), come `CronCreate`, rimuovi la voce. Per mantenere lo strumento, [disattiva la modalità fork](/docs/it/sub-agents#turn-fork-mode-on-or-off) e chiedi a Claude di eseguire il subagent in primo piano4557* Per uno strumento che [i subagent in background escludono](/docs/it/sub-agents#available-tools), come `CronCreate`, rimuovi la voce. Per mantenere lo strumento, [disattiva la modalità fork](/docs/it/sub-agents#turn-fork-mode-on-or-off) e chiedi a Claude di eseguire il subagent in primo piano

4556* Elimina il campo `tools` invece di elencare gli strumenti per dare al subagent ogni [strumento disponibile per i subagent](/docs/it/sub-agents#available-tools)4558* Elimina il campo `tools` invece di elencare gli strumenti per dare al subagent ogni [strumento disponibile per i subagent](/docs/it/sub-agents#available-tools)

4557* Per un elenco `tools` che contiene solo `Agent`, aumenta il [limite di profondità](/docs/it/sub-agents#let-subagents-spawn-their-own-subagents) oppure assegna all'agente almeno un altro strumento: Claude Code nega `Agent` a quel limite, quindi un elenco che non contiene nient'altro si risolve in nessuno strumento4559* Per un elenco `tools` che contiene solo `Agent`, aumenta il [limite di profondità](/docs/it/sub-agents#let-subagents-spawn-their-own-subagents) oppure assegna all'agente almeno un altro strumento: Claude Code nega `Agent` a quel limite, quindi un elenco che non contiene nient'altro si risolve in nessuno strumento

hooks.md +53 −16

Details

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](/docs/it/glossary#system-reminder) 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| `onFailure` | no | Cosa succede all'azione quando l'hook fallisce: `"continue"`, il valore predefinito, o `"block"`. Vedi [Blocca l'azione quando un hook fallisce](#block-the-action-when-a-hook-fails). Richiede Claude Code v2.1.295 o successivo |479| `onFailure` | no | Se l'azione che ha attivato l'hook procede quando l'hook fallisce: `"continue"` o `"block"`. Vedi [Blocca l'azione quando un hook fallisce](#block-the-action-when-a-hook-fails) per `"block"` e per il caso in cui il campo non sia impostato. Richiede Claude Code v2.1.295 o successivo |

480 480 

481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

482 482 


829 829 

830* **Successo**: il tuo hook esce con 0. Claude Code applica tutti i campi di [output JSON](#json-output) che il tuo hook ha stampato, e l'azione procede a meno che quei campi non la blocchino o la neghino. [Hook che avviano un processo in background](#hooks-that-start-a-background-process) descrive l'eccezione.830* **Successo**: il tuo hook esce con 0. Claude Code applica tutti i campi di [output JSON](#json-output) che il tuo hook ha stampato, e l'azione procede a meno che quei campi non la blocchino o la neghino. [Hook che avviano un processo in background](#hooks-that-start-a-background-process) descrive l'eccezione.

831* **Errore bloccante**: il tuo hook esce con 2. Sugli [eventi che possono bloccare](#exit-code-2-behavior-per-event), Claude Code interrompe l'azione.831* **Errore bloccante**: il tuo hook esce con 2. Sugli [eventi che possono bloccare](#exit-code-2-behavior-per-event), Claude Code interrompe l'azione.

832* **Errore non bloccante**: il tuo hook esce con qualsiasi altro codice, oppure fallisce in qualche altro modo, ad esempio non avviandosi o stampando JSON non valido. L'azione procede, e su eventi come `PreToolUse` vedi un avviso `<hook name> hook error` nella trascrizione. Se vuoi che un hook fallito blocchi l'azione, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).832* **Errore non bloccante**: il tuo hook esce con qualsiasi altro codice, oppure fallisce in qualche altro modo, ad esempio non avviandosi o stampando JSON non valido. L'azione procede, tranne che per gli hook [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails), ad esempio un hook con `onFailure` impostato su `"block"`. Su eventi come `PreToolUse`, vedi un avviso `<hook name> hook error` nella trascrizione.

833 833 

834Ciò che il tuo hook stampa su stdout può cambiare il risultato. Ad esempio, se un hook `PreToolUse` esce con 1 ma stampa JSON che supera la convalida, l'esecuzione è un successo e sono i campi JSON a decidere cosa accade. Per trovare il risultato del tuo hook su un evento come `PreToolUse`, fai corrispondere ciò che ha stampato su stdout nella prima colonna con il suo codice di uscita nella riga in alto:834Ciò che il tuo hook stampa su stdout può cambiare il risultato. Ad esempio, quando un hook `PreToolUse` esce con 1 ma stampa JSON che supera la convalida, quel JSON può comunque decidere cosa accade. Per trovare il risultato del tuo hook su un evento come `PreToolUse`, fai corrispondere ciò che ha stampato su stdout nella prima colonna con il suo codice di uscita nella riga in alto:

835 835 

836| Stdout | Exit 0 | Exit 2 | Qualsiasi altro codice di uscita |836| Stdout | Exit 0 | Exit 2 | Qualsiasi altro codice di uscita |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| Oggetto JSON che supera la [convalida dello schema](#json-output) | Successo. I campi si applicano | Errore bloccante. Claude Code legge comunque i campi, ma non possono sovrascrivere il blocco | Successo. Claude Code ignora il codice di uscita, e decidono solo i campi. Con [`onFailure: "block"`](#block-the-action-when-a-hook-fails), questo conta come un fallimento |838| Oggetto JSON che supera la [convalida dello schema](#json-output) | Successo. I campi si applicano | Errore bloccante. Claude Code legge comunque i campi, ma non possono sovrascrivere il blocco | Successo. Claude Code ignora il codice di uscita, e decidono solo i campi. Per gli hook [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails), l'esecuzione conta invece come un fallimento |

839| JSON che [non può essere analizzato](#exit-code-0) o non supera la convalida dello schema | Errore non bloccante. L'avviso riporta il messaggio di analisi o di convalida | Errore bloccante. Il tuo stderr è il motivo | Errore non bloccante. L'avviso riporta il messaggio di analisi o di convalida |839| JSON che [non può essere analizzato](#exit-code-0) o non supera la convalida dello schema | Errore non bloccante. L'avviso riporta il messaggio di analisi o di convalida | Errore bloccante. Il tuo stderr è il motivo | Errore non bloccante. L'avviso riporta il messaggio di analisi o di convalida |

840| [Testo semplice](#exit-code-0), o niente | Successo | Errore bloccante. Il tuo stderr è il motivo | Errore non bloccante. L'avviso riporta la prima riga del tuo stderr |840| [Testo semplice](#exit-code-0), o niente | Successo | Errore bloccante. Il tuo stderr è il motivo | Errore non bloccante. L'avviso riporta la prima riga del tuo stderr |

841 841 


864* **Due o più righe che si analizzano ciascuna come JSON da sole, la prima che inizia con `{` e l'ultima che finisce con `}`**: testo semplice quando nessuna riga è un oggetto JSON output che imposta un campo, ed errore di analisi quando una lo è.864* **Due o più righe che si analizzano ciascuna come JSON da sole, la prima che inizia con `{` e l'ultima che finisce con `}`**: testo semplice quando nessuna riga è un oggetto JSON output che imposta un campo, ed errore di analisi quando una lo è.

865* **Qualsiasi altra cosa che inizia con `{` e finisce con `}` ma non è JSON valido**: errore di analisi.865* **Qualsiasi altra cosa che inizia con `{` e finisce con `}` ma non è JSON valido**: errore di analisi.

866 866 

867Quando Claude Code tenta di analizzare il tuo stdout come JSON e non ci riesce, oppure l'oggetto analizzato non supera la [convalida dello schema](#json-output), l'esecuzione è un [errore non bloccante](#exit-code-output). L'avviso `<hook name> hook error` riporta il messaggio di analisi o di convalida. Sugli eventi che aggiungono lo stdout in testo semplice come contesto, Claude Code non aggiunge lo stdout che non è riuscito ad analizzare.867A meno che l'hook non sia uno di quelli [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails), un errore di analisi o un oggetto analizzato che non supera la [convalida dello schema](#json-output) è un [errore non bloccante](#exit-code-output). L'avviso `<hook name> hook error` riporta il messaggio di analisi o di convalida. Sugli eventi che aggiungono lo stdout in testo semplice come contesto, Claude Code non aggiunge lo stdout che non è riuscito ad analizzare.

868 868 

869Claude non vede mai lo stderr di un hook che esce con 0. Per leggerlo tu stesso su eventi come `PreToolUse`, abilita il [debug logging](#debug-hooks). Per mostrare un avviso a Claude da un hook `PostToolUse` o `PostToolUseFailure`, esci invece con 2 in modo che [Claude veda lo stderr](#exit-code-2-behavior-per-event) anche se lo strumento è già stato eseguito.869Claude non vede mai lo stderr di un hook che esce con 0. Per leggerlo tu stesso su eventi come `PreToolUse`, abilita il [debug logging](#debug-hooks). Per mostrare un avviso a Claude da un hook `PostToolUse` o `PostToolUseFailure`, esci invece con 2 in modo che [Claude veda lo stderr](#exit-code-2-behavior-per-event) anche se lo strumento è già stato eseguito.

870 870 


907 Altri codici di uscita907 Altri codici di uscita

908</h4>908</h4>

909 909 

910Quando il tuo hook esce con un codice diverso da 0 o 2 e stampa testo semplice o niente su stdout, l'esecuzione è un [errore non bloccante](#exit-code-output). Vedi un avviso `<hook name> hook error` nella trascrizione con `Failed with non-blocking status code:` e la prima riga dello stderr del tuo hook. Ad esempio, quando un hook `PreToolUse` su `Bash` stampa `something broke` su stderr ed esce con 1, l'avviso `PreToolUse:Bash hook error` riporta questa riga:910A meno che l'hook non sia uno di quelli [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails), un codice di uscita diverso da 0 o 2 con testo semplice o niente su stdout è un [errore non bloccante](#exit-code-output). Se l'azione procede, vedi un avviso `<hook name> hook error` nella trascrizione con `Failed with non-blocking status code:` e la prima riga dello stderr del tuo hook.

911 

912Ad esempio, quando un hook `PreToolUse` su `Bash` stampa `something broke` su stderr ed esce con 1, l'avviso `PreToolUse:Bash hook error` riporta questa riga:

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916Per acquisire lo stderr completo anziché la sua prima riga, abilita il [debug logging](#debug-hooks).918Per acquisire lo stderr completo anziché la sua prima riga, abilita il [debug logging](#debug-hooks).

917 919 

918Anche un hook che non riesce ad avviarsi è un errore non bloccante. In forma shell, quando il percorso dello script non esiste o non è eseguibile, la shell esce con un codice come 127 e l'avviso riporta il messaggio dell'interprete, ad esempio `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Quando configuri un hook di policy, controlla se compare questo avviso alla sua prima esecuzione, perché un percorso digitato male in `settings.json` significa che l'hook non viene mai eseguito. Per bloccare invece l'azione, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).920A meno che l'hook non sia uno di quelli [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails), anche un hook che non riesce ad avviarsi è un errore non bloccante. In forma shell, quando il percorso dello script non esiste o non è eseguibile, la shell esce con un codice come 127 e l'avviso riporta il messaggio dell'interprete. Ad esempio, quando il percorso dello script non esiste, l'avviso riporta una riga come questa:

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926Quando configuri un hook di policy, controlla se compare questo avviso alla sua prima esecuzione, perché un percorso digitato male in `settings.json` significa che l'hook non viene mai eseguito. Per bloccare l'azione quando l'hook non riesce ad avviarsi, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

919 927 

920<Warning>928<Warning>

921 Senza JSON valido su stdout, Claude Code tratta il codice di uscita 1 come un errore non bloccante, anche se 1 è il codice di errore Unix convenzionale. Se il tuo hook è destinato ad applicare una policy, usa `exit 2`.929 Il codice di uscita 1 senza output JSON valido è un errore non bloccante a meno che l'hook non sia uno di quelli [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails), anche se 1 è il codice di errore Unix convenzionale. Se il tuo hook è destinato ad applicare una policy, usa `exit 2`.

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

930Su [`PreModelSwitch`](#premodelswitch), un hook annullato al suo timeout blocca il cambio di modello. Su `PreToolUse`, le due famiglie di hook si comportano diversamente:938Su [`PreModelSwitch`](#premodelswitch), un hook annullato al suo timeout blocca il cambio di modello. Su `PreToolUse`, le due famiglie di hook si comportano diversamente:

931 939 

932* Un hook `command`, `http` o `mcp_tool` scaduto non blocca la chiamata allo strumento. La chiamata continua attraverso il normale [flusso dei permessi](/docs/it/permissions), quindi non contare su un hook bloccato perché agisca da controllo. Per bloccare la chiamata quando un hook `command` o `http` va in timeout, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).940* Un hook `command`, `http` o `mcp_tool` scaduto non blocca la chiamata allo strumento, tranne che per gli hook [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails). La chiamata continua attraverso il normale [flusso dei permessi](/docs/it/permissions), quindi non contare su un hook bloccato perché agisca da controllo. Per bloccare la chiamata quando un hook `command` o `http` va in timeout, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

933* Un [hook di callback dell'Agent SDK](/docs/it/agent-sdk/hooks) che supera il suo timeout [blocca la chiamata allo strumento](#pretooluse).941* Un [hook di callback dell'Agent SDK](/docs/it/agent-sdk/hooks) che supera il suo timeout [blocca la chiamata allo strumento](#pretooluse).

934 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 Bloccare l'azione quando un hook fallisce967 Bloccare l'azione quando un hook fallisce

960</h4>968</h4>

961 969 

962Sulla maggior parte degli eventi, quando un hook fallisce o va in timeout, Claude Code esegue comunque l'azione, quindi un hook di policy con un percorso sbagliato o uno script che si arresta in modo anomalo lascia passare tutto. Per bloccare invece l'azione, imposta `"onFailure": "block"` su un hook `command` o `http`. Il valore predefinito è `"continue"`. Richiede Claude Code v2.1.295 o successivo.970Sulla maggior parte degli eventi, quando un hook fallisce o va in timeout, Claude Code esegue comunque l'azione. Un hook di policy con un percorso sbagliato o uno script che si arresta in modo anomalo lascia quindi passare tutto. Per bloccare invece l'azione, imposta `"onFailure": "block"` su un hook `command` o `http`. Richiede Claude Code v2.1.295 o successivo.

971 

972<Note>

973 Su Windows senza Git Bash, un command hook `PreToolUse` o `PermissionRequest` in forma shell che fallisce senza `onFailure` impostato può invece [bloccare la chiamata allo strumento](#failed-hooks-on-windows-without-git-bash).

974</Note>

963 975 

964Questo hook `PreToolUse` in `.claude/settings.json` esegue uno script di progetto prima di ogni comando Bash, e blocca il comando se lo script fallisce:976Questo hook `PreToolUse` in `.claude/settings.json` esegue uno script di progetto prima di ogni comando Bash, e blocca il comando se lo script fallisce:

965 977 


1007* **Hook `Stop`, `SubagentStop`, `TaskCompleted` e `TeammateIdle`**: il codice di uscita 2 su questi eventi rimanda Claude a continuare a lavorare, e Claude non può riparare un hook che non viene eseguito1019* **Hook `Stop`, `SubagentStop`, `TaskCompleted` e `TeammateIdle`**: il codice di uscita 2 su questi eventi rimanda Claude a continuare a lavorare, e Claude non può riparare un hook che non viene eseguito

1008* **Command hook in background**: i command hook che impostano [`async` o `asyncRewake`](#run-hooks-in-the-background)1020* **Command hook in background**: i command hook che impostano [`async` o `asyncRewake`](#run-hooks-in-the-background)

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Hook falliti su Windows senza Git Bash

1024</h4>

1025 

1026Se l'errore di una chiamata a uno strumento bloccata include questo testo, un command hook `PreToolUse` o `PermissionRequest` è fallito o è andato in timeout e ha bloccato la chiamata:

1027 

1028```text theme={null}

1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.

1030```

1031 

1032Un hook in forma shell senza `shell` impostato viene eseguito in PowerShell quando Git Bash non è installato, e uno script scritto per Bash potrebbe non funzionare lì così com'è. Scegli la correzione adatta al tuo hook:

1033 

1034* **L'hook è scritto per Bash**: installa [Git for Windows](https://git-scm.com/downloads/win), oppure imposta [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/it/env-vars) se Git Bash è installato in una posizione in cui Claude Code non lo trova, poi avvia una nuova sessione

1035* **L'hook esegue un solo `.exe`, non un file `.cmd` o `.bat`**: metti il programma in `command` e i suoi argomenti in `args` per usare la [forma exec](#exec-form-and-shell-form), e aggiungi [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Claude Code avvia quindi il programma senza shell. Senza `"onFailure": "block"`, la chiamata può procedere quando il programma fallisce, manca o va in timeout

1036* **L'hook è scritto per PowerShell**: aggiungi `"shell": "powershell"` e [`"onFailure": "block"`](#block-the-action-when-a-hook-fails) all'hook. Senza `"onFailure": "block"`, la chiamata può procedere quando l'hook continua a fallire o va in timeout. Per scoprire perché l'hook è fallito, controlla il [log di debug](#debug-hooks)

1037* **L'azione deve procedere quando l'hook fallisce**: aggiungi `"onFailure": "continue"` all'hook

1038 

1039Per un hook che mostra questo errore, qualsiasi codice di uscita diverso da 0 o 2 conta come un [fallimento](#block-the-action-when-a-hook-fails), anche quando l'hook stampa JSON che non nega la chiamata.

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 Exit code 2 behavior per event1042 Exit code 2 behavior per event

1012</h4>1043</h4>


1060* **2xx con corpo vuoto**: successo, equivalente al codice di uscita 0 senza output1091* **2xx con corpo vuoto**: successo, equivalente al codice di uscita 0 senza output

1061* **2xx con corpo costituito da un oggetto JSON**: analizzato usando lo stesso schema [JSON output](#json-output) dei command hook. Un corpo che non supera la convalida dello schema è un errore non bloccante1092* **2xx con corpo costituito da un oggetto JSON**: analizzato usando lo stesso schema [JSON output](#json-output) dei command hook. Un corpo che non supera la convalida dello schema è un errore non bloccante

1062* **2xx con qualsiasi altro corpo, come testo semplice**: errore non bloccante, gestito nello stesso modo di uno stato non-2xx. Claude Code non aggiunge il testo al contesto di Claude1093* **2xx con qualsiasi altro corpo, come testo semplice**: errore non bloccante, gestito nello stesso modo di uno stato non-2xx. Claude Code non aggiunge il testo al contesto di Claude

1063* **Stato non-2xx**: errore non bloccante, l'esecuzione continua1094* **Stato non-2xx**: errore non bloccante

1064* **Errore di connessione**: errore non bloccante, l'esecuzione continua1095* **Errore di connessione**: errore non bloccante

1065* **Timeout**: l'hook viene annullato, come descritto in [Timeouts](#timeouts)1096* **Timeout**: l'hook viene annullato, come descritto in [Timeouts](#timeouts)

1066 1097 

1067Gli HTTP hook non possono segnalare un errore bloccante solo attraverso il codice di stato: uno stato non-2xx o una connessione fallita è un [errore non bloccante](#exit-code-output). Per bloccare una chiamata a uno strumento o negare un permesso, restituisci una risposta 2xx con un corpo JSON contenente i campi di decisione appropriati. Per bloccare l'azione quando la richiesta fallisce o restituisce uno stato non-2xx, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).1098Dopo un [errore non bloccante](#exit-code-output), l'azione procede a meno che l'hook non sia uno di quelli [il cui fallimento blocca l'azione](#block-the-action-when-a-hook-fails). Per bloccare una chiamata a uno strumento o negare un permesso, restituisci una risposta 2xx con un corpo JSON contenente i [campi di decisione](#decision-control) appropriati. Per bloccare l'azione quando la richiesta fallisce o restituisce uno stato non-2xx, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 Output JSON1101 Output JSON


1573}1604}

1574```1605```

1575 1606 

1607Quando il prompt è una [skill](/docs/it/skills) o un comando personalizzato che hai digitato, come `/deploy staging`, l'hook riceve quella riga così come l'hai digitata anziché il contenuto espanso della skill. Se l'hook blocca il prompt, il comando non viene eseguito, quindi non vengono eseguiti nemmeno i comandi shell che la skill [inserisce con `` !`<command>` ``](/docs/it/skills#inject-dynamic-context). Per basare la corrispondenza sul nome o sugli argomenti del comando, usa invece [UserPromptExpansion](#userpromptexpansion).

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 Controllo delle decisioni di UserPromptSubmit1610 Controllo delle decisioni di UserPromptSubmit

1578</h4>1611</h4>


2076 2109 

2077| Campo | Descrizione |2110| Campo | Descrizione |

2078| :- | :- |2111| :- | :- |

2079| `permissionDecision` | `"allow"` salta la richiesta di permesso, tranne per le [azioni che nessuna modalità approva automaticamente](/docs/it/permission-modes#actions-no-mode-auto-approves), per le [letture da percorsi di rete](/docs/it/permissions#network-paths) e per `AskUserQuestion` e `ExitPlanMode`, che richiedono [`updatedInput` abbinato](#allow-with-updatedinput). `"deny"` impedisce la chiamata allo strumento. `"ask"` chiede all'utente di confermare. `"defer"` esce in modo ordinato così lo strumento può essere ripreso più tardi. Le [regole di negazione e di richiesta di conferma](/docs/it/permissions#manage-permissions) vengono comunque valutate indipendentemente da ciò che l'hook restituisce |2112| `permissionDecision` | `"allow"` salta la richiesta di permesso, tranne per le [azioni che nessuna modalità approva automaticamente](/docs/it/permission-modes#actions-no-mode-auto-approves) e le [letture da percorsi di rete](/docs/it/permissions#network-paths). `AskUserQuestion` ed `ExitPlanMode` richiedono [`updatedInput` abbinato a `"allow"`](#allow-with-updatedinput). Per il plan mode, consulta [Approvazioni degli hook in plan mode](/docs/it/permissions#hook-approvals-in-plan-mode). `"deny"` impedisce la chiamata allo strumento. `"ask"` chiede conferma all'utente. `"defer"` termina in modo ordinato affinché lo strumento possa essere ripreso in seguito. Le [regole di negazione e di richiesta](/docs/it/permissions#manage-permissions) vengono comunque valutate indipendentemente da ciò che restituisce l'hook |

2080| `permissionDecisionReason` | Per `"ask"`, mostrato all'utente nella richiesta di permesso. Quando Claude Code [nega la chiamata](/docs/it/headless#turn-off-permission-prompts-in-unattended-runs) in un'esecuzione `-p` in cui nessuno può rispondere a quella richiesta, Claude legge invece il motivo nel risultato dello strumento. Per `"deny"`, mostrato a Claude. Per `"allow"` e `"defer"`, scritto solo nel [log di debug](#debug-hooks) |2113| `permissionDecisionReason` | Per `"ask"`, mostrato all'utente nella richiesta di permesso. Quando Claude Code [nega la chiamata](/docs/it/headless#turn-off-permission-prompts-in-unattended-runs) in un'esecuzione `-p` in cui nessuno può rispondere a quella richiesta, Claude legge invece il motivo nel risultato dello strumento. Per `"deny"`, mostrato a Claude. Per `"allow"` e `"defer"`, scritto solo nel [log di debug](#debug-hooks) |

2081| `updatedInput` | Modifica i parametri di input dello strumento prima dell'esecuzione. Sostituisce l'intero oggetto di input, quindi includi i campi non modificati insieme a quelli modificati. Claude Code valuta le regole di permesso e l'[idoneità al passaggio automatico in background](/docs/it/tools-reference#foreground-commands-that-move-to-the-background) di un comando Bash sull'input restituito dal tuo hook, non sull'input inviato da Claude. Combinalo con `"allow"` per approvare automaticamente, oppure con `"ask"` per mostrare all'utente l'input modificato. Per `"defer"`, ignorato |2114| `updatedInput` | Modifica i parametri di input dello strumento prima dell'esecuzione. Sostituisce l'intero oggetto di input, quindi includi i campi non modificati insieme a quelli modificati. Claude Code valuta le regole di permesso e l'[idoneità al passaggio automatico in background](/docs/it/tools-reference#foreground-commands-that-move-to-the-background) di un comando Bash sull'input restituito dal tuo hook, non sull'input inviato da Claude. Combinalo con `"allow"` per approvare automaticamente, oppure con `"ask"` per mostrare all'utente l'input modificato. Per `"defer"`, ignorato |

2082| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al risultato dello strumento. Ignorata quando `permissionDecision` è `"defer"`. Consulta [Aggiungere contesto per Claude](#add-context-for-claude) |2115| `additionalContext` | Stringa aggiunta al contesto di Claude insieme al risultato dello strumento. Ignorata quando `permissionDecision` è `"defer"`. Consulta [Aggiungere contesto per Claude](#add-context-for-claude) |


3718 3751 

3719Claude Code mostra all'utente qualsiasi `systemMessage` restituito dal tuo hook indipendentemente dalla decisione, quindi un hook che riporta i costi può restituire `{"systemMessage": "..."}` e uscire con 0.3752Claude Code mostra all'utente qualsiasi `systemMessage` restituito dal tuo hook indipendentemente dalla decisione, quindi un hook che riporta i costi può restituire `{"systemMessage": "..."}` e uscire con 0.

3720 3753 

3721Un hook PreModelSwitch che non risponde prima del suo timeout blocca il cambio. Per sapere cosa comporta un timeout negli altri eventi, consulta [Timeout](#timeouts). Il timeout predefinito per questo evento è di 30 secondi. `PreModelSwitch` esegue solo hook `command`, `http` e `mcp_tool`, quindi i valori predefiniti di `prompt` e `agent` non si applicano.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3755 Timeout di PreModelSwitch e altri codici di uscita

3756</h4>

3757 

3758Un hook PreModelSwitch che non risponde prima del suo timeout blocca il cambio. Il timeout predefinito per questo evento è di 30 secondi.

3722 3759 

3723Un hook che esce con un codice diverso da 0 o 2 e non stampa alcuna decisione JSON è un errore non bloccante, come descritto in [Altri codici di uscita](#other-exit-codes).3760Per sapere cosa comporta un codice di uscita diverso da 0 o 2, consulta [Altri codici di uscita](#other-exit-codes).

3724 3761 

3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">

3726 PostModelSwitch3763 PostModelSwitch

hooks-guide.md +20 −7

Details

633 * Per un hook `PreToolUse` questo non approva la chiamata dello strumento: il normale [flusso di autorizzazione](/docs/it/permissions) si applica ancora.633 * Per un hook `PreToolUse` questo non approva la chiamata dello strumento: il normale [flusso di autorizzazione](/docs/it/permissions) si applica ancora.

634 * Per gli hook `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` e `PostModelSwitch`, Claude Code aggiunge stdout che [tratta come testo semplice](/docs/it/hooks#exit-code-0) al contesto di Claude.634 * Per gli hook `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` e `PostModelSwitch`, Claude Code aggiunge stdout che [tratta come testo semplice](/docs/it/hooks#exit-code-0) al contesto di Claude.

635* **Exit 2**: Claude Code blocca l'azione. Scrivete un motivo su stderr. Dove finisce dipende dall'evento: alcuni eventi lo alimentano a Claude come feedback in modo che possa adattarsi, altri lo mostrano all'utente, e alcuni, come `ConfigChange` e `Elicitation`, non mostrano alcun messaggio. Alcuni eventi non possono essere bloccati: per `SessionStart` e altri, exit 2 mostra stderr all'utente e l'esecuzione continua. Consultate [exit code 2 behavior per evento](/docs/it/hooks#exit-code-2-behavior-per-event) per l'elenco completo.635* **Exit 2**: Claude Code blocca l'azione. Scrivete un motivo su stderr. Dove finisce dipende dall'evento: alcuni eventi lo alimentano a Claude come feedback in modo che possa adattarsi, altri lo mostrano all'utente, e alcuni, come `ConfigChange` e `Elicitation`, non mostrano alcun messaggio. Alcuni eventi non possono essere bloccati: per `SessionStart` e altri, exit 2 mostra stderr all'utente e l'esecuzione continua. Consultate [exit code 2 behavior per evento](/docs/it/hooks#exit-code-2-behavior-per-event) per l'elenco completo.

636* **Qualsiasi altro codice di uscita**: per la maggior parte degli eventi, il risultato dipende da quello che il vostro hook ha stampato su stdout:636* **Qualsiasi altro codice di uscita**: per la maggior parte degli eventi, l'azione procede come [errore non bloccante](/docs/it/hooks#exit-code-output), a meno che l'hook non sia uno di quelli [il cui fallimento blocca l'azione](/docs/it/hooks#block-the-action-when-a-hook-fails) o che il suo output JSON superi la validazione:

637 * Un oggetto analizzato che passa la validazione dello schema: Claude Code ignora il codice di uscita, il JSON da solo decide il risultato, e l'hook non viene segnalato come errore. Le eccezioni per evento, come `WorktreeCreate` che fallisce su qualsiasi uscita diversa da zero, sono elencate nella sezione [Exit code output](/docs/it/hooks#exit-code-output) del riferimento.637 * Un oggetto analizzato che supera la validazione dello schema: Claude Code ignora il codice di uscita, il JSON da solo decide il risultato e l'hook non viene segnalato come errore. Le eccezioni per evento, come `WorktreeCreate` che fallisce con qualsiasi uscita diversa da zero, sono elencate nella sezione [Exit code output](/docs/it/hooks#exit-code-output) del riferimento.

638 * Un oggetto analizzato che fallisce la validazione dello schema, o stdout che Claude Code [tenta di analizzare come JSON](/docs/it/hooks#exit-code-0) ma che non è JSON valido: un errore non bloccante; l'avviso contiene il messaggio di validazione o analisi.638 * Un oggetto analizzato che non supera la validazione dello schema, o uno stdout che Claude Code [tenta di analizzare come JSON](/docs/it/hooks#exit-code-0) ma che non è JSON valido: un errore non bloccante; l'avviso riporta il messaggio di validazione o di analisi.

639 * Stdout che Claude Code [tratta come testo semplice](/docs/it/hooks#exit-code-0), o stdout vuoto: l'azione procede come errore non bloccante. La trascrizione mostra un avviso `<hook name> hook error`, quindi la prima riga di stderr con prefisso `Failed with non-blocking status code:`. Per catturare lo stderr completo, abilitate il [debug logging](/docs/it/hooks#debug-hooks) con `claude --debug` o eseguendo `/debug` durante la sessione.639 * Uno stdout che Claude Code [tratta come testo semplice](/docs/it/hooks#exit-code-0), o uno stdout vuoto: l'azione procede come errore non bloccante. La trascrizione mostra un avviso `<hook name> hook error`, seguito dalla prima riga di stderr con il prefisso `Failed with non-blocking status code:`. Per catturare lo stderr completo, abilita il [debug logging](/docs/it/hooks#debug-hooks) con `claude --debug` o eseguendo `/debug` durante la sessione.

640 640 

641<h4 id="structured-json-output">641<h4 id="structured-json-output">

642 Output JSON strutturato642 Output JSON strutturato


664 664 

665Su `PreToolUse`, Claude Code gestisce ogni valore `permissionDecision` come segue:665Su `PreToolUse`, Claude Code gestisce ogni valore `permissionDecision` come segue:

666 666 

667* `"allow"`: salta la richiesta di permesso interattiva. Le regole di negazione e di richiesta, incluse le liste di negazione gestite dall'azienda, si applicano comunque, così come le richieste per le letture da [percorsi di rete](/docs/it/permissions#network-paths), per gli strumenti MCP contrassegnati con [`requiresUserInteraction`](/docs/it/mcp#require-approval-for-a-specific-tool) e per gli strumenti dei connettori [che la tua organizzazione ha impostato su `ask`](/docs/it/mcp#organization-controls-on-connector-tools) nelle sessioni in cui quell'impostazione raggiunge Claude Code667* `"allow"`: salta la richiesta di permesso interattiva. Le regole di negazione e di richiesta, incluse le liste di negazione gestite dall'azienda, si applicano comunque, così come le richieste per:

668 

669 * Letture da [percorsi di rete](/docs/it/permissions#network-paths)

670 * Strumenti MCP contrassegnati con [`requiresUserInteraction`](/docs/it/mcp#require-approval-for-a-specific-tool)

671 * Strumenti dei connettori [che la tua organizzazione ha impostato su `ask`](/docs/it/mcp#organization-controls-on-connector-tools) nelle sessioni in cui quell'impostazione raggiunge Claude Code

672 

673 Per sapere cosa fa `"allow"` in plan mode, consulta [Approvazioni degli hook in plan mode](/docs/it/permissions#hook-approvals-in-plan-mode).

668* `"deny"`: annulla la chiamata dello strumento e invia il motivo a Claude674* `"deny"`: annulla la chiamata dello strumento e invia il motivo a Claude

669* `"ask"`: mostra il prompt di autorizzazione all'utente come al solito675* `"ask"`: mostra il prompt di autorizzazione all'utente come al solito

670 676 


1015 1021 

1016Gli hook `PreToolUse` si attivano prima di qualsiasi controllo della modalità di permesso, in ogni [modalità di permesso](/docs/it/permission-modes), incluso `dontAsk`. Un hook che restituisce `permissionDecision: "deny"` blocca lo strumento anche in modalità `bypassPermissions` o con `--dangerously-skip-permissions`. Questo ti consente di applicare criteri che gli utenti non possono aggirare cambiando la propria modalità di permesso.1022Gli hook `PreToolUse` si attivano prima di qualsiasi controllo della modalità di permesso, in ogni [modalità di permesso](/docs/it/permission-modes), incluso `dontAsk`. Un hook che restituisce `permissionDecision: "deny"` blocca lo strumento anche in modalità `bypassPermissions` o con `--dangerously-skip-permissions`. Questo ti consente di applicare criteri che gli utenti non possono aggirare cambiando la propria modalità di permesso.

1017 1023 

1018Il contrario non vale: un hook che restituisce `"allow"` non aggira le regole di negazione delle impostazioni, e non può sopprimere la richiesta di permesso per le letture da [percorsi di rete](/docs/it/permissions#network-paths), per gli strumenti MCP contrassegnati con [`requiresUserInteraction`](/docs/it/mcp#require-approval-for-a-specific-tool) o per gli strumenti dei connettori che [la tua organizzazione ha impostato su `ask`](/docs/it/mcp#organization-controls-on-connector-tools) nelle sessioni in cui tale impostazione raggiunge Claude Code. Gli hook nei file di impostazioni e nel file `hooks/hooks.json` di un plugin possono rendere più rigide le restrizioni, ma non allentarle oltre quanto consentito dalle regole di permesso.1024Il contrario non vale: gli hook nei file di impostazioni e nel file `hooks/hooks.json` di un plugin possono rendere più rigide le restrizioni, ma non allentarle oltre quanto consentito dalle regole di permesso. Un hook che restituisce `"allow"` non aggira le regole di negazione delle impostazioni, e non può sopprimere la richiesta di permesso per:

1025 

1026* Le letture da [percorsi di rete](/docs/it/permissions#network-paths)

1027* Gli strumenti MCP contrassegnati con [`requiresUserInteraction`](/docs/it/mcp#require-approval-for-a-specific-tool)

1028* Gli strumenti dei connettori che [la tua organizzazione ha impostato su `ask`](/docs/it/mcp#organization-controls-on-connector-tools) nelle sessioni in cui tale impostazione raggiunge Claude Code

1029 

1030In [plan mode](/docs/it/permissions#hook-approvals-in-plan-mode), se il tuo hook `PreToolUse` restituisce `"allow"` per la modifica di un file, ottieni la stessa richiesta di permesso, lo stesso blocco o la stessa approvazione che la modifica otterrebbe senza alcun hook. Per rimuovere questo limite sulle approvazioni degli hook, [approva il piano](/docs/it/permission-modes#review-and-approve-a-plan) o passa a un'altra modalità di permesso.

1019 1031 

1020Un [mod](/docs/it/plugins/mods/overview) che installi e che gestisce `tool.check` può approvare una chiamata bloccata dal tuo hook `PreToolUse`, a meno che l'hook non si trovi nelle impostazioni gestite. [Estendere i permessi con gli hook](/docs/it/permissions#extend-permissions-with-hooks) elenca quali regole prevalgono su un mod.1032Un [mod](/docs/it/plugins/mods/overview) che installi e che gestisce `tool.check` può approvare una chiamata bloccata dal tuo hook `PreToolUse`, a meno che l'hook non si trovi nelle impostazioni gestite. In plan mode, il mod può approvare una chiamata di questo tipo quando è di sola lettura, ma non la modifica di un file o un'altra chiamata che non sia di sola lettura. [Estendere i permessi con gli hook](/docs/it/permissions#extend-permissions-with-hooks) elenca quali regole prevalgono su un mod.

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 L'hook non si attiva1035 L'hook non si attiva


1042 ```1054 ```

1043* Se vedi "command not found", usa percorsi assoluti o `${CLAUDE_PROJECT_DIR}` per fare riferimento agli script. Per evitare del tutto il quoting della shell, aggiungi `"args": []` per passare alla [forma exec](/docs/it/hooks#exec-form-and-shell-form), che avvia lo script direttamente senza una shell1055* Se vedi "command not found", usa percorsi assoluti o `${CLAUDE_PROJECT_DIR}` per fare riferimento agli script. Per evitare del tutto il quoting della shell, aggiungi `"args": []` per passare alla [forma exec](/docs/it/hooks#exec-form-and-shell-form), che avvia lo script direttamente senza una shell

1044* Se vedi "jq: command not found", installa `jq` oppure usa Python/Node.js per il parsing del JSON1056* Se vedi "jq: command not found", installa `jq` oppure usa Python/Node.js per il parsing del JSON

1057* Se il messaggio include `blocking because Git Bash wasn't found`, sei su Windows, Claude Code non ha trovato Git Bash e l'hook non riuscito o andato in timeout ha bloccato la chiamata allo strumento. Consulta [Hook non riusciti su Windows senza Git Bash](/docs/it/hooks#failed-hooks-on-windows-without-git-bash) per le soluzioni

1045* Se l'avviso mostra un messaggio di convalida JSON, lo stdout del tuo hook è stato interpretato come JSON ma non ha superato la convalida dello schema. Se mostra un messaggio di parsing JSON, lo stdout sembrava un oggetto JSON ma non era JSON valido. Entrambi i casi si verificano anche con uscita 0.1058* Se l'avviso mostra un messaggio di convalida JSON, lo stdout del tuo hook è stato interpretato come JSON ma non ha superato la convalida dello schema. Se mostra un messaggio di parsing JSON, lo stdout sembrava un oggetto JSON ma non era JSON valido. Entrambi i casi si verificano anche con uscita 0.

1046 1059 

1047 Per correggere un errore di parsing, crea il payload con un encoder JSON come `jq` invece di concatenare stringhe, in modo che virgolette e barre rovesciate all'interno dei valori vengano sottoposte a escape. La sezione [Output del codice di uscita](/docs/it/hooks#exit-code-output) del riferimento descrive le combinazioni di codice di uscita e JSON1060 Per correggere un errore di parsing, crea il payload con un encoder JSON come `jq` invece di concatenare stringhe, in modo che virgolette e barre rovesciate all'interno dei valori vengano sottoposte a escape. La sezione [Output del codice di uscita](/docs/it/hooks#exit-code-output) del riferimento descrive le combinazioni di codice di uscita e JSON

Details

1091* `event.sequence`: contatore per processo per ordinare gli eventi, descritto sotto [Attributi di correlazione degli eventi](#event-correlation-attributes)1091* `event.sequence`: contatore per processo per ordinare gli eventi, descritto sotto [Attributi di correlazione degli eventi](#event-correlation-attributes)

1092* `from_mode`: La modalità di autorizzazione precedente, ad esempio `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, o `"bypassPermissions"`1092* `from_mode`: La modalità di autorizzazione precedente, ad esempio `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, o `"bypassPermissions"`

1093* `to_mode`: La nuova modalità di autorizzazione1093* `to_mode`: La nuova modalità di autorizzazione

1094* `trigger`: Cosa ha causato il cambio. Uno di `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, o `"auto_opt_in"`. Assente quando la transizione proviene dall'SDK o dal bridge1094* `trigger`: Cosa ha causato la modifica. Uno tra `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` o `"auto_opt_in"`. Assente per alcune modifiche, ad esempio quando l'SDK imposta la modalità di permesso tramite [`setPermissionMode()`](/docs/it/agent-sdk/typescript#query-object)

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 Evento di autenticazione1097 Evento di autenticazione

Details

203 Watchdog di inattività dello streaming203 Watchdog di inattività dello streaming

204</h2>204</h2>

205 205 

206Claude Code esegue quattro timer indipendenti che interrompono una risposta del modello in streaming quando rimane silenziosa, in modo che una connessione morta fallisca e riprovi invece di rimanere bloccata. La scadenza del primo byte copre l'attesa degli header di risposta, prima che sia arrivata una parte della risposta. Ognuno degli altri tre monitora una risposta attiva per un segnale diverso.206Claude Code esegue quattro timer indipendenti che interrompono una risposta del modello in streaming quando rimane silenziosa, in modo che una connessione morta fallisca e riprovi invece di rimanere bloccata. Una richiesta che non riceve alcun header di risposta termina in uno di due modi:

207 

208* **Dove viene eseguita la scadenza del primo byte**: il primo tentativo termina a quella scadenza. Per modificarla, imposta `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`. Per l'attesa del nuovo tentativo, consulta [Nessuna risposta dall'API](/docs/it/errors#no-response-from-api).

209* **Sulle altre connessioni**: la richiesta termina dopo 5-6 minuti, quando scatta il timeout di inattività del corpo, a meno che tu non abbia disattivato quel timeout. Per terminarla prima, abbassa `API_TIMEOUT_MS`.

207 210 

208| Timer | Interrompe quando | Viene eseguito su | Timeout predefinito |211| Timer | Interrompe quando | Viene eseguito su | Timeout predefinito |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

210| Scadenza del primo byte | Nessun header di risposta arriva dopo che Claude Code invia la richiesta | API Anthropic diretta e [Claude Platform on AWS](/docs/it/claude-platform-on-aws), incluso attraverso un proxy HTTPS, ma non quando `ANTHROPIC_BASE_URL` o `ANTHROPIC_AWS_BASE_URL` le instradano attraverso un [gateway](/docs/it/gateways). Opt-in su Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; non viene eseguito su Google Cloud's Agent Platform o Microsoft Foundry | 180 secondi sull'API Anthropic diretta, 300 secondi altrove, più un secondo per ogni 32KB del corpo della richiesta |213| Scadenza del primo byte | Nessun header di risposta arriva dopo che Claude Code invia la richiesta | API Anthropic diretta e [Claude Platform on AWS](/docs/it/claude-platform-on-aws), incluso attraverso un proxy HTTPS, ma non quando `ANTHROPIC_BASE_URL` o `ANTHROPIC_AWS_BASE_URL` le instradano attraverso un [gateway](/docs/it/gateways). Opt-in su Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; non viene eseguito su Google Cloud's Agent Platform o Microsoft Foundry, né in una sessione [Claude apps gateway](/docs/it/claude-apps-gateway) | 180 secondi sull'API Anthropic diretta, 300 secondi altrove, più un secondo per ogni 32KB del corpo della richiesta |

211| Watchdog a livello di evento | Nessun evento di risposta viene analizzato. Su connessioni in cui viene eseguito il watchdog a livello di byte, i byte in arrivo, inclusi i ping keep-alive, ripristinano anche questo watchdog, per circa cinque minuti senza un evento analizzato | Ogni provider | 300 secondi |214| Watchdog a livello di evento | Nessun evento di risposta viene analizzato. Su connessioni in cui viene eseguito il watchdog a livello di byte, i byte in arrivo, inclusi i ping keep-alive, ripristinano anche questo watchdog, per circa cinque minuti senza un evento analizzato | Ogni provider | 300 secondi |

212| Watchdog a livello di byte | Nessun byte arriva sul filo, inclusi i ping keep-alive SSE | API Anthropic diretta, [Claude Platform on AWS](/docs/it/claude-platform-on-aws) e connessioni tramite [gateway](/docs/it/gateways), incluso un `ANTHROPIC_BASE_URL` personalizzato. Opt-in su risposte Amazon Bedrock `vnd.amazon.eventstream` con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; non viene eseguito su Google Cloud's Agent Platform o Microsoft Foundry | 180 secondi sull'API Anthropic diretta. 300 secondi su Claude Platform on AWS, su Amazon Bedrock, in una sessione [Claude apps gateway](/docs/it/claude-apps-gateway) e attraverso un `ANTHROPIC_BASE_URL` personalizzato |215| Watchdog a livello di byte | Nessun byte arriva sul filo, inclusi i ping keep-alive SSE | API Anthropic diretta, [Claude Platform on AWS](/docs/it/claude-platform-on-aws) e connessioni tramite [gateway](/docs/it/gateways), incluso un `ANTHROPIC_BASE_URL` personalizzato. Opt-in su risposte Amazon Bedrock `vnd.amazon.eventstream` con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; non viene eseguito su Google Cloud's Agent Platform o Microsoft Foundry | 180 secondi sull'API Anthropic diretta. 300 secondi su Claude Platform on AWS, su Amazon Bedrock, in una sessione [Claude apps gateway](/docs/it/claude-apps-gateway) e attraverso un `ANTHROPIC_BASE_URL` personalizzato |

213| Timeout di inattività del corpo | Nessun byte arriva per 5 minuti | Provider diversi dall'API Anthropic diretta, Claude Platform on AWS, e Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` impostato, a meno che [`API_FORCE_IDLE_TIMEOUT`](/docs/it/env-vars) non lo modifichi | 5 minuti |216| Timeout di inattività del corpo | Nessun byte arriva per 5 minuti, contando l'attesa degli header di risposta | Provider diversi dall'API Anthropic diretta, Claude Platform on AWS, e Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` impostato, a meno che [`API_FORCE_IDLE_TIMEOUT`](/docs/it/env-vars) non lo modifichi | 5 minuti |

214 217 

215Se si imposta `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, il watchdog a livello di byte sostituisce il timeout di inattività del corpo su Bedrock piuttosto che essere eseguito insieme ad esso. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` governa quindi anche quanto a lungo uno stream Bedrock può rimanere silenzioso prima che Claude Code consideri la connessione come morta, entro i limiti elencati di seguito. I byte in arrivo ancora non ripristinano il watchdog a livello di evento su Bedrock. Con la registrazione di debug attivata, ogni stream Bedrock registra quindi un messaggio di debug che inizia con `wire-heartbeat: _chunkTimes absent`.218Se si imposta `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, il watchdog a livello di byte sostituisce il timeout di inattività del corpo su Bedrock piuttosto che essere eseguito insieme ad esso. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` governa quindi anche quanto a lungo uno stream Bedrock può rimanere silenzioso prima che Claude Code consideri la connessione come morta, entro i limiti elencati di seguito. I byte in arrivo ancora non ripristinano il watchdog a livello di evento su Bedrock. Con la registrazione di debug attivata, ogni stream Bedrock registra quindi un messaggio di debug che inizia con `wire-heartbeat: _chunkTimes absent`.

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` imposta il timeout di entrambi i watchdog. Claude Code aumenta i valori inferiori a 5 minuti a 5 minuti e limita il valore a 30 minuti per il watchdog a livello di byte.223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` imposta il timeout di entrambi i watchdog. Claude Code aumenta i valori inferiori a 5 minuti a 5 minuti e limita il valore a 30 minuti per il watchdog a livello di byte.

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` imposta il timeout del watchdog a livello di byte senza modificare quello del watchdog a livello di evento, limitato tra 10 secondi e 30 minuti, e ha la precedenza su `CLAUDE_STREAM_IDLE_TIMEOUT_MS` per quel watchdog.224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` imposta il timeout del watchdog a livello di byte senza modificare quello del watchdog a livello di evento, limitato tra 10 secondi e 30 minuti, e ha la precedenza su `CLAUDE_STREAM_IDLE_TIMEOUT_MS` per quel watchdog.

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` imposta la scadenza del primo byte direttamente. Lasciarlo non impostato e Claude Code utilizza il timeout del watchdog a livello di byte, quindi `CLAUDE_STREAM_IDLE_TIMEOUT_MS` e `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` modificano anche la scadenza. Per i limiti, l'indennità di caricamento, il limite `API_TIMEOUT_MS` e quanto tempo l'attesa di ripetizione dopo un'interruzione senza risposta, vedere [Nessuna risposta dall'API](/docs/it/errors#no-response-from-api).225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` imposta la scadenza del primo byte direttamente. Lasciarlo non impostato e Claude Code utilizza il timeout del watchdog a livello di byte, quindi `CLAUDE_STREAM_IDLE_TIMEOUT_MS` e `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` modificano anche la scadenza. Per i limiti, l'indennità di caricamento, il limite `API_TIMEOUT_MS` e quanto tempo l'attesa di ripetizione dopo un'interruzione senza risposta, vedere [Nessuna risposta dall'API](/docs/it/errors#no-response-from-api).

226* `API_TIMEOUT_MS` limita l'attesa degli header di risposta. Dove la scadenza del primo byte non viene eseguita, come in una sessione Claude apps gateway, impostalo al di sotto di `300000`, ovvero 5 minuti, per riprovare prima una richiesta senza risposta. Mantienilo al di sopra dell'attesa più lunga degli header, e della [richiesta non in streaming](/docs/it/errors#streaming-response-ended-before-any-complete-data-was-received) più lunga, che prevedi: una richiesta che richiede più tempo va di nuovo in timeout a ogni nuovo tentativo.

223* `API_FORCE_IDLE_TIMEOUT` impostato su `0` disattiva il timeout di inattività del corpo, e impostato su `1` lo attiva per ogni provider. I watchdog vengono eseguiti indipendentemente da esso, quindi per consentire a uno stream di pausa più lungo dei loro soglie, aumentare o disabilitare anche loro.227* `API_FORCE_IDLE_TIMEOUT` impostato su `0` disattiva il timeout di inattività del corpo, e impostato su `1` lo attiva per ogni provider. I watchdog vengono eseguiti indipendentemente da esso, quindi per consentire a uno stream di pausa più lungo dei loro soglie, aumentare o disabilitare anche loro.

224 228 

225Quando un watchdog interrompe uno stream bloccato, Claude Code tratta l'interruzione come un errore a metà flusso, e quello che si vede dipende da quanto lontano era arrivata la risposta. Claude Code riprova la richiesta o termina il turno con un errore, mantiene l'output completato e mostra un [avviso di risposta incompleta](/docs/it/errors#the-response-above-may-be-incomplete), o termina il turno normalmente. [Tentativi automatici](/docs/it/errors#automatic-retries) dice dove si applica ogni risultato.229Quando un watchdog interrompe uno stream bloccato, Claude Code tratta l'interruzione come un errore a metà flusso, e quello che si vede dipende da quanto lontano era arrivata la risposta. Claude Code riprova la richiesta o termina il turno con un errore, mantiene l'output completato e mostra un [avviso di risposta incompleta](/docs/it/errors#the-response-above-may-be-incomplete), o termina il turno normalmente. [Tentativi automatici](/docs/it/errors#automatic-retries) dice dove si applica ogni risultato.

Details

627 627 

628Claude Code rifiuta `bypassPermissions` in una sessione che avvii con [`--restricted`](/docs/it/cli-reference#cli-flags). `--restricted` richiede Claude Code v2.1.248 o successivo.628Claude Code rifiuta `bypassPermissions` in una sessione che avvii con [`--restricted`](/docs/it/cli-reference#cli-flags). `--restricted` richiede Claude Code v2.1.248 o successivo.

629 629 

630La prima volta che avvii una sessione interattiva con questa modalità abilitata, Claude Code mostra una finestra di dialogo di avviso che ti chiede di accettare la responsabilità per le azioni intraprese senza controlli di autorizzazione:630<span id="bypass-permissions-acceptance" />La prima volta che avvii una sessione interattiva con questa modalità abilitata, Claude Code mostra una finestra di dialogo di avviso che ti chiede di accettare la responsabilità per le azioni intraprese senza controlli dei permessi:

631 631 

632* **Se accetti**: Claude Code imposta `skipDangerousModePermissionPrompt` su `true` in `~/.claude/settings.json`, in modo che le sessioni successive saltino la finestra di dialogo. Per visualizzare di nuovo la finestra di dialogo, rimuovi la chiave da quel file o impostala su `false`. Il [riferimento `skipDangerousModePermissionPrompt`](/docs/it/settings-reference#skipdangerousmodepermissionprompt) elenca gli altri file di impostazioni dove tu o la tua organizzazione potete impostarla.632* **Se accetti**: Claude Code imposta `skipDangerousModePermissionPrompt` su `true` in `~/.claude/settings.json`, in modo che le sessioni successive saltino la finestra di dialogo. Per visualizzare di nuovo la finestra di dialogo, rimuovi la chiave da quel file o impostala su `false`. Il [riferimento `skipDangerousModePermissionPrompt`](/docs/it/settings-reference#skipdangerousmodepermissionprompt) elenca gli altri file di impostazioni dove tu o la tua organizzazione potete impostarla.

633* **Se rifiuti**: Claude Code esce.633* **Se rifiuti**: Claude Code esce.


635In [modalità non interattiva](/docs/it/headless) nessuna finestra di dialogo viene mostrata. Una [sessione in background](/docs/it/agent-view) rispetta la tua accettazione quando è registrata nelle impostazioni utente o nelle impostazioni gestite:635In [modalità non interattiva](/docs/it/headless) nessuna finestra di dialogo viene mostrata. Una [sessione in background](/docs/it/agent-view) rispetta la tua accettazione quando è registrata nelle impostazioni utente o nelle impostazioni gestite:

636 636 

637* Se non è registrata alcuna accettazione, `claude --bg --permission-mode bypassPermissions` viene rifiutato finché non accetti la finestra di dialogo in una sessione interattiva.637* Se non è registrata alcuna accettazione, `claude --bg --permission-mode bypassPermissions` viene rifiutato finché non accetti la finestra di dialogo in una sessione interattiva.

638* Con `skipDangerousModePermissionPrompt` impostato solo in `.claude/settings.local.json`, la sessione in background si avvia ignorando la richiesta di bypass e fissa l'avviso `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Perché il bypass venga rispettato, aggiungi quella chiave a `~/.claude/settings.json`, poi avvia una nuova sessione in background.638* Con `skipDangerousModePermissionPrompt` impostato solo in `.claude/settings.local.json`, la sessione in background si avvia ignorando la richiesta di bypass e fissa l'avviso `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Aggiungi quella chiave a `~/.claude/settings.json`, poi avvia una nuova sessione in background. La sessione che mostra l'avviso viene comunque eseguita:

639 * Con `--allow-dangerously-skip-permissions` ignorato, `bypassPermissions` viene escluso dal suo ciclo `Shift+Tab`.

640 * Con `--permission-mode bypassPermissions` o `--dangerously-skip-permissions` ignorati, la sessione si avvia invece in modalità Manual.

639 641 

640Su Linux e macOS, Claude Code rifiuta di avviarsi in questa modalità quando viene eseguito come root o sotto `sudo`:642Su Linux e macOS, Claude Code rifiuta di avviarsi in modalità `bypassPermissions` quando viene eseguito come root o sotto `sudo`:

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * I file markdown nella directory della [memoria automatica](/docs/it/memory#storage-location) del progetto, come `~/.claude/projects/<project>/memory/`, in una sessione avviata senza `--restricted`694 * I file markdown nella directory della [memoria automatica](/docs/it/memory#storage-location) del progetto, come `~/.claude/projects/<project>/memory/`, in una sessione avviata senza `--restricted`

693 * I file markdown in una directory di [memoria dei subagent](/docs/it/sub-agents#enable-persistent-memory), come `.claude/agent-memory/`, in una sessione avviata senza `--restricted`695 * I file markdown in una directory di [memoria dei subagent](/docs/it/sub-agents#enable-persistent-memory), come `.claude/agent-memory/`, in una sessione avviata senza `--restricted`

694* Una directory caricata con [`--plugin-dir`](/docs/it/plugins/mods/create#change-a-mod-with-claude), perché Claude Code ricarica ed esegue il codice di un mod da essa quando un file cambia696* Una directory caricata con [`--plugin-dir`](/docs/it/plugins/mods/create#change-a-mod-with-claude), perché Claude Code ricarica ed esegue il codice di un mod da essa quando un file cambia

697* `~/.claude/dev-mods/`, o `dev-mods/` nella directory a cui punta [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars), dove Claude salva i [mod che scrive per te](/docs/it/plugins/mods/create#ask-claude-for-a-mod)

695 698 

696File protetti:699File protetti:

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598Le regole MCP usano il nome del server così come è configurato in Claude Code, seguito facoltativamente dal nome di uno strumento di quel server.598Per corrispondere a tutti gli strumenti di un server MCP, scrivi `mcp__<server>__*`. Per corrispondere a un singolo strumento, scrivi il suo nome completo, `mcp__<server>__<tool>`.

599 599 

600* `mcp__puppeteer` corrisponde a qualsiasi strumento fornito dal server `puppeteer`600* `mcp__puppeteer` corrisponde a qualsiasi strumento fornito dal server `puppeteer`

601* `mcp__puppeteer__*` usa la sintassi con caratteri jolly e corrisponde anch'essa a tutti gli strumenti del server `puppeteer`601* `mcp__puppeteer__*` usa la sintassi con caratteri jolly e corrisponde anch'essa a tutti gli strumenti del server `puppeteer`

602* `mcp__puppeteer__puppeteer_navigate` corrisponde allo strumento `puppeteer_navigate` fornito dal server `puppeteer`602* `mcp__puppeteer__puppeteer_navigate` corrisponde allo strumento `puppeteer_navigate` fornito dal server `puppeteer`

603 603 

604Per `<server>`, scrivi il nome del server così come compare nei nomi degli strumenti di quel server. Questi esempi mostrano la regola da scrivere per un nome con caratteri speciali, per un server fornito da un plugin e per un nome che contiene `__` o termina con `_`:

605 

606* **Nomi con caratteri come `.` o spazi**: questi caratteri diventano `_`, quindi per un server che hai configurato come `my.server`, scrivi `mcp__my_server__*`

607* **Server forniti da un plugin**: `<server>` assume la [forma con ambito del plugin](/docs/it/mcp#plugin-provided-mcp-servers), quindi per il server `database-tools` in un plugin chiamato `my-plugin`, scrivi `mcp__plugin_my-plugin_database-tools__*`

608* **Un `<server>` che contiene `__` o termina con `_`**: scrivi la forma con carattere jolly, `mcp__<server>__*`, con il nome completo. Per un server chiamato `reports__v2`, scrivi `mcp__reports__v2__*`. La forma semplice `mcp__reports__v2` e quella più breve `mcp__reports` non corrispondono ai suoi strumenti come regole allow, perché Claude Code le interpreta entrambe come regole per un server chiamato `reports`

609 

604Se la tua organizzazione ha impostato uno strumento di un [connettore claude.ai](/docs/it/mcp#organization-controls-on-connector-tools) su `ask` e tale impostazione raggiunge Claude Code nella tua sessione, le regole allow per quello strumento non hanno effetto: Claude Code chiede conferma a ogni chiamata, anche nelle modalità `auto` e `bypassPermissions`. In modalità `dontAsk`, che non chiede mai conferma, Claude Code nega invece la chiamata. Gli strumenti dei connettori che Claude Code recupera autonomamente compaiono come `mcp__claude_ai_<server>__<tool>`.610Se la tua organizzazione ha impostato uno strumento di un [connettore claude.ai](/docs/it/mcp#organization-controls-on-connector-tools) su `ask` e tale impostazione raggiunge Claude Code nella tua sessione, le regole allow per quello strumento non hanno effetto: Claude Code chiede conferma a ogni chiamata, anche nelle modalità `auto` e `bypassPermissions`. In modalità `dontAsk`, che non chiede mai conferma, Claude Code nega invece la chiamata. Gli strumenti dei connettori che Claude Code recupera autonomamente compaiono come `mcp__claude_ai_<server>__<tool>`.

605 611 

606In una sessione [Cowork](https://claude.com/docs/cowork/overview) nell'app Claude Desktop, Claude esegue i comandi shell tramite lo strumento `mcp__workspace__bash` di Cowork anziché tramite lo strumento integrato `Bash`, e allo stesso modo Cowork fornisce `mcp__workspace__web_fetch` per i fetch web. Claude Code applica a questi strumenti Cowork anche le regole deny che nominano l'intero strumento `Bash` o `WebFetch`, quindi una regola deny `Bash` gestita impedisce a Claude di eseguire comandi shell in Cowork. Quando Claude Code blocca una chiamata di questo tipo, il messaggio indica lo strumento Cowork: `Permission to use mcp__workspace__bash has been denied.` Le regole allow non vengono trasferite: Claude Code non applica mai una regola allow `Bash` a `mcp__workspace__bash`.612In una sessione [Cowork](https://claude.com/docs/cowork/overview) nell'app Claude Desktop, Claude esegue i comandi shell tramite lo strumento `mcp__workspace__bash` di Cowork anziché tramite lo strumento integrato `Bash`, e allo stesso modo Cowork fornisce `mcp__workspace__web_fetch` per i fetch web. Claude Code applica a questi strumenti Cowork anche le regole deny che nominano l'intero strumento `Bash` o `WebFetch`, quindi una regola deny `Bash` gestita impedisce a Claude di eseguire comandi shell in Cowork. Quando Claude Code blocca una chiamata di questo tipo, il messaggio indica lo strumento Cowork: `Permission to use mcp__workspace__bash has been denied.` Le regole allow non vengono trasferite: Claude Code non applica mai una regola allow `Bash` a `mcp__workspace__bash`.


649 655 

650Gli [hook di Claude Code](/docs/it/hooks-guide) consentono di registrare comandi shell personalizzati che valutano le autorizzazioni in fase di esecuzione. Quando Claude Code effettua una chiamata di strumento, gli hook PreToolUse vengono eseguiti prima del prompt di autorizzazione, per ogni strumento tranne [`EndConversation`](/docs/it/tools-reference#endconversation-tool-behavior). L'output dell'hook può negare la chiamata dello strumento, forzare un prompt o saltare il prompt per consentire alla chiamata di procedere.656Gli [hook di Claude Code](/docs/it/hooks-guide) consentono di registrare comandi shell personalizzati che valutano le autorizzazioni in fase di esecuzione. Quando Claude Code effettua una chiamata di strumento, gli hook PreToolUse vengono eseguiti prima del prompt di autorizzazione, per ogni strumento tranne [`EndConversation`](/docs/it/tools-reference#endconversation-tool-behavior). L'output dell'hook può negare la chiamata dello strumento, forzare un prompt o saltare il prompt per consentire alla chiamata di procedere.

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 Precedenza tra regole, hook e mod

660</h3>

661 

652Le decisioni dell'hook PreToolUse non bypassano le regole di autorizzazione. Claude Code valuta le regole deny e ask indipendentemente da ciò che un hook PreToolUse restituisce: una regola deny corrispondente blocca la chiamata e una regola ask corrispondente richiede comunque un prompt anche quando l'hook ha restituito `"allow"` o `"ask"`. Questo preserva la precedenza deny-first descritta in [Gestire le autorizzazioni](#manage-permissions), incluse le regole deny impostate nelle impostazioni gestite.662Le decisioni dell'hook PreToolUse non bypassano le regole di autorizzazione. Claude Code valuta le regole deny e ask indipendentemente da ciò che un hook PreToolUse restituisce: una regola deny corrispondente blocca la chiamata e una regola ask corrispondente richiede comunque un prompt anche quando l'hook ha restituito `"allow"` o `"ask"`. Questo preserva la precedenza deny-first descritta in [Gestire le autorizzazioni](#manage-permissions), incluse le regole deny impostate nelle impostazioni gestite.

653 663 

654Questa precedenza copre gli hook nei file di impostazioni e nel file `hooks/hooks.json` di un plugin. Un [mod](/docs/it/plugins/mods/overview) che installi e che gestisce `tool.check` risponde dopo che le regole e gli hook `PreToolUse` hanno deciso, e la sua risposta può sostituire la loro:664Questa precedenza copre gli hook nei file di impostazioni e nel file `hooks/hooks.json` di un plugin. Un [mod](/docs/it/plugins/mods/overview) che installi e che gestisce `tool.check` risponde dopo che le regole e gli hook `PreToolUse` hanno deciso. Al di fuori del [plan mode](#hook-approvals-in-plan-mode), o per una chiamata di sola lettura, la sua risposta può sostituire la loro:

655 665 

656* **Regole Ask**: il mod può approvare una chiamata per cui una regola ask richiederebbe un prompt666* **Regole Ask**: il mod può approvare una chiamata per cui una regola ask richiederebbe un prompt

657* **Un blocco da un hook `PreToolUse`**: il mod può approvare la chiamata, a meno che l'hook non sia nelle impostazioni gestite667* **Un blocco da un hook `PreToolUse`**: il mod può approvare la chiamata, a meno che l'hook non sia nelle impostazioni gestite


664 674 

665Un hook di blocco ha anche la precedenza sulle regole allow. Un hook che esce con codice 2 interrompe la chiamata dello strumento prima che le regole di autorizzazione vengano valutate, quindi il blocco si applica anche quando una regola allow consentirebbe altrimenti la chiamata. Per eseguire tutti i comandi Bash senza prompt tranne alcuni che desiderate bloccare, aggiungete `"Bash"` al vostro elenco allow e registrate un hook PreToolUse che rifiuta quei comandi specifici. Vedi [Bloccare le modifiche ai file protetti](/docs/it/hooks-guide#block-edits-to-protected-files) per uno script di hook che potete adattare.675Un hook di blocco ha anche la precedenza sulle regole allow. Un hook che esce con codice 2 interrompe la chiamata dello strumento prima che le regole di autorizzazione vengano valutate, quindi il blocco si applica anche quando una regola allow consentirebbe altrimenti la chiamata. Per eseguire tutti i comandi Bash senza prompt tranne alcuni che desiderate bloccare, aggiungete `"Bash"` al vostro elenco allow e registrate un hook PreToolUse che rifiuta quei comandi specifici. Vedi [Bloccare le modifiche ai file protetti](/docs/it/hooks-guide#block-edits-to-protected-files) per uno script di hook che potete adattare.

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 Approvazioni degli hook nel plan mode

679</h3>

680 

681Nel [plan mode](/docs/it/permission-modes#analyze-before-you-edit-with-plan-mode), a parte `ExitPlanMode`, l'`"allow"` del tuo hook `PreToolUse` non ha alcun effetto su una modifica a un file o su un'altra chiamata che non sia di sola lettura. Ottieni la stessa richiesta di conferma, lo stesso blocco o la stessa approvazione che la chiamata otterrebbe senza alcun hook, e Claude Code applica comunque qualsiasi `updatedInput` restituito dall'hook. Se l'hook risponde a [`ExitPlanMode`](/docs/it/hooks#allow-with-updatedinput) con `"allow"` e `updatedInput`, quello strumento viene comunque eseguito senza richiesta di conferma.

682 

683Nel plan mode, anche un mod che gestisce `tool.check` non può approvare una modifica a un file o un'altra chiamata che non sia di sola lettura, anche se può comunque bloccare tale chiamata. Per rimuovere questo limite sulle approvazioni di hook e mod, [approva il piano](/docs/it/permission-modes#review-and-approve-a-plan) o passa a un'altra modalità di permesso.

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 Directory di lavoro686 Directory di lavoro

669</h2>687</h2>

Details

30 Chiedi il mod con parole tue, ad esempio `make a mod that shows the current git branch above the prompt`. Claude scrive il mod in una propria directory all'interno della cartella dei mod della sessione, che è `~/.claude/dev-mods/` seguita dall'ID della sessione. Il percorso completo di un mod è simile a `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.30 Chiedi il mod con parole tue, ad esempio `make a mod that shows the current git branch above the prompt`. Claude scrive il mod in una propria directory all'interno della cartella dei mod della sessione, che è `~/.claude/dev-mods/` seguita dall'ID della sessione. Il percorso completo di un mod è simile a `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 31 

32 <Note>32 <Note>

33 Nelle [modalità di permesso](/docs/it/permission-modes#protected-paths) `default` e `acceptEdits`, Claude Code chiede conferma prima che Claude crei ciascuno dei file del mod, perché `~/.claude` è un percorso protetto. Approva ogni file man mano che viene proposto.33 Nelle [modalità di permesso](/docs/it/permission-modes) `default` e `acceptEdits`, Claude Code chiede conferma prima che Claude crei ciascuno dei file del mod, perché la cartella dei mod è un [percorso protetto](/docs/it/permission-modes#protected-paths). Approva ogni file man mano che viene proposto.

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219Su `main`, l'hook restituisce `deny`, anche quando una regola consente `git push`. Su un altro branch, e per altri comandi, la chiamata riceve la decisione che riceverebbe senza il mod.219L'hook rifiuta `git push` su `main` e lascia passare ogni altra chiamata:

220 

221* **Su `main`**: l'hook restituisce `deny`, anche quando una regola consente `git push`

222* **Su un altro branch, e per altri comandi**: la chiamata riceve la decisione che riceverebbe senza il mod

220 223 

221L'hook confronta il testo del comando, quindi consideralo un promemoria per Claude. Per bloccare i push su `main` per tutti, proteggi il branch sul tuo host Git.224L'hook confronta il testo del comando, quindi consideralo un promemoria per Claude. Per bloccare i push su `main` per tutti, proteggi il branch sul tuo host Git.

222 225 

223Un hook può restituire `allow`, `ask` o `deny`, quindi può anche approvare una chiamata bloccata da un hook `PreToolUse` al di fuori delle impostazioni gestite. [Estendere i permessi con gli hook](/docs/it/permissions#extend-permissions-with-hooks) elenca quali decisioni prevalgono su un mod.226Un hook può restituire `allow`, `ask` o `deny`, quindi può anche approvare una chiamata bloccata da un hook `PreToolUse` al di fuori delle impostazioni gestite. In [plan mode](/docs/it/permissions#hook-approvals-in-plan-mode), per una chiamata che non è di sola lettura, come la modifica di un file, il tuo hook può rendere più restrittiva la decisione restituita da `next(e)` ma non può allentarla. [Estendere i permessi con gli hook](/docs/it/permissions#extend-permissions-with-hooks) elenca quali decisioni prevalgono su un mod.

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 Riscrivere o integrare un prompt229 Riscrivere o integrare un prompt


337* **Hook `PreToolUse` dalle impostazioni gestite**: vengono eseguiti prima dell'hook `tool.call` del primo mod, e un blocco da parte di uno di essi è definitivo, quindi nessun mod vede la chiamata.340* **Hook `PreToolUse` dalle impostazioni gestite**: vengono eseguiti prima dell'hook `tool.call` del primo mod, e un blocco da parte di uno di essi è definitivo, quindi nessun mod vede la chiamata.

338* **Hook `PreToolUse` da ogni altro file di impostazioni e da `hooks/hooks.json` dei plugin**: vengono eseguiti dopo che l'ultimo mod ha chiamato `next`, come parte del comportamento proprio di Claude Code. Un mod che risponde a `tool.call` senza chiamare `next` ne impedisce l'esecuzione, e un mod che chiama `next` vede la loro decisione nel risultato che restituisce.341* **Hook `PreToolUse` da ogni altro file di impostazioni e da `hooks/hooks.json` dei plugin**: vengono eseguiti dopo che l'ultimo mod ha chiamato `next`, come parte del comportamento proprio di Claude Code. Un mod che risponde a `tool.call` senza chiamare `next` ne impedisce l'esecuzione, e un mod che chiama `next` vede la loro decisione nel risultato che restituisce.

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) si attiva dopo che quegli hook e le regole di permesso hanno deciso, quindi un hook su di esso può approvare una chiamata che un hook del secondo gruppo ha bloccato.343Un hook [`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) può approvare una chiamata che un hook `PreToolUse` esterno alle impostazioni gestite ha bloccato, perché `tool.check` si attiva dopo che quegli hook e le regole di permesso hanno deciso. In plan mode, un hook `tool.check` può approvare una chiamata di questo tipo quando è di sola lettura, ma non una modifica a un file o un'altra chiamata che non sia di sola lettura.

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 Gestire un hook che fallisce346 Gestire un hook che fallisce

Details

205 205 

206Per produrre il riepilogo, Claude Code invia una richiesta separata con lo stesso prompt di sistema, strumenti e cronologia della tua conversazione, più un'istruzione di riepilogo aggiunta come messaggio utente finale. Mentre la cache è calda, quella richiesta legge il tuo prefisso dalla cache, quindi un `/compact` a metà sessione costa una frazione di quello che la dimensione del contesto suggerisce e spende la maggior parte del suo tempo generando il riepilogo.206Per produrre il riepilogo, Claude Code invia una richiesta separata con lo stesso prompt di sistema, strumenti e cronologia della tua conversazione, più un'istruzione di riepilogo aggiunta come messaggio utente finale. Mentre la cache è calda, quella richiesta legge il tuo prefisso dalla cache, quindi un `/compact` a metà sessione costa una frazione di quello che la dimensione del contesto suggerisce e spende la maggior parte del suo tempo generando il riepilogo.

207 207 

208Dopo una pausa più lunga della [durata della cache](#cache-lifetime), non c'è cache rimasta da leggere, quindi la richiesta di riepilogo rielabora la cronologia completa come input non memorizzato nella cache. Questo è il motivo per cui `/compact` costa di più quando [riprendi una sessione vecchia](/docs/it/sessions#resume-from-a-summary). In entrambi i casi caldi e freddi, il turno dopo la compattazione ricostruisce la cache della conversazione solo per il riepilogo molto più breve, quindi quel turno non è la parte lenta.208Dopo una pausa più lunga della [durata della cache](#cache-lifetime), non c'è cache rimasta da leggere, quindi la richiesta di riepilogo rielabora la cronologia completa come input non memorizzato nella cache. Questo è il motivo per cui `/compact` costa di più quando [riprendi una sessione vecchia](/docs/it/sessions#resume-a-session). In entrambi i casi caldi e freddi, il turno dopo la compattazione ricostruisce la cache della conversazione solo per il riepilogo molto più breve, quindi quel turno non è la parte lenta.

209 209 

210<Tip>210<Tip>

211 La compattazione funziona a tuo favore quando il contesto che scarta è contenuto che non ti serve più. Per scegliere quando il suo sovraccarico accade, esegui `/compact` a una pausa naturale nel tuo lavoro, ad esempio tra le attività, invece di aspettare che la compattazione automatica si attivi a metà attività. Se sei andato su un percorso che vuoi abbandonare completamente, [`/rewind`](#rewinding-the-conversation) a un turno precedente. Il riavvolgimento tronca a un prefisso che è già memorizzato nella cache, piuttosto che costruirne uno nuovo come fa la compattazione.211 La compattazione funziona a tuo favore quando il contesto che scarta è contenuto che non ti serve più. Per scegliere quando il suo sovraccarico accade, esegui `/compact` a una pausa naturale nel tuo lavoro, ad esempio tra le attività, invece di aspettare che la compattazione automatica si attivi a metà attività. Se sei andato su un percorso che vuoi abbandonare completamente, [`/rewind`](#rewinding-the-conversation) a un turno precedente. Il riavvolgimento tronca a un prefisso che è già memorizzato nella cache, piuttosto che costruirne uno nuovo come fa la compattazione.


310 310 

311I prefissi memorizzati nella cache scadono dopo un periodo di inattività. Ogni richiesta che colpisce la cache ripristina il timer, quindi la cache rimane calda finché continui a lavorare. Dopo un intervallo abbastanza lungo, la richiesta successiva ricalcola l'input completo e ristabilisce la cache, il che è il motivo per cui il primo turno di ritorno dopo essersi allontanato può essere notevolmente più lento.311I prefissi memorizzati nella cache scadono dopo un periodo di inattività. Ogni richiesta che colpisce la cache ripristina il timer, quindi la cache rimane calda finché continui a lavorare. Dopo un intervallo abbastanza lungo, la richiesta successiva ricalcola l'input completo e ristabilisce la cache, il che è il motivo per cui il primo turno di ritorno dopo essersi allontanato può essere notevolmente più lento.

312 312 

313Su un piano Pro o Max, quando riprendi una sessione di grandi dimensioni dopo una lunga pausa, Claude Code [offre di riprendere da un riepilogo](/docs/it/sessions#resume-from-a-summary) in modo che le richieste successive non portino la cronologia completa.

314 

315Il time to live (TTL) determina per quanto tempo di inattività la cache sopravvive. L'API ne offre due: un TTL di cinque minuti e un [TTL di un'ora](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) che mantiene la cache calda durante pause più lunghe ma [applica una tariffa più elevata alle scritture nella cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). Il TTL più lungo è utile quando lasci una sessione inattiva e poi ci torni, perché eviti la rielaborazione che un prefisso scaduto comporta. Costa di più nelle brevi sessioni di lavoro che non restano mai inattive oltre cinque minuti, dove si applica la tariffa di scrittura più elevata e la durata più lunga della cache rimane inutilizzata.313Il time to live (TTL) determina per quanto tempo di inattività la cache sopravvive. L'API ne offre due: un TTL di cinque minuti e un [TTL di un'ora](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) che mantiene la cache calda durante pause più lunghe ma [applica una tariffa più elevata alle scritture nella cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). Il TTL più lungo è utile quando lasci una sessione inattiva e poi ci torni, perché eviti la rielaborazione che un prefisso scaduto comporta. Costa di più nelle brevi sessioni di lavoro che non restano mai inattive oltre cinque minuti, dove si applica la tariffa di scrittura più elevata e la durata più lunga della cache rimane inutilizzata.

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`**: se hai avviato Claude Code con [`--settings`](/docs/it/settings#change-a-setting-for-one-session), verifica se il file o il JSON che hai passato imposta una di quelle chiavi. In tal caso, modifica il valore lì, oppure avvia di nuovo Claude Code senza quelle chiavi.1080* **`Command line arguments`**: se hai avviato Claude Code con [`--settings`](/docs/it/settings#change-a-setting-for-one-session), verifica se il file o il JSON che hai passato imposta una di quelle chiavi. In tal caso, modifica il valore lì, oppure avvia di nuovo Claude Code senza quelle chiavi.

1081* **`Enterprise managed settings`**: sono caricate le impostazioni gestite della tua organizzazione. Se impostano una di quelle chiavi, non puoi modificare quella chiave da `/sandbox` né da alcun file di impostazioni sotto il tuo controllo, quindi rivolgiti al tuo amministratore.1081* **`Enterprise managed settings`**: sono caricate le impostazioni gestite della tua organizzazione. Se impostano una di quelle chiavi, non puoi modificare quella chiave da `/sandbox` né da alcun file di impostazioni sotto il tuo controllo, quindi rivolgiti al tuo amministratore.

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox` stampa `Sandbox settings not changed`

1085</h3>

1086 

1087Questa riga indica che `/sandbox` non è riuscito a salvare la scelta che hai fatto nel suo pannello nel file `.claude/settings.local.json` del tuo progetto:

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093Se il motivo tra parentesi è `EACCES`, `EPERM` o `EROFS`, avvia Claude Code in una cartella di progetto in cui puoi scrivere, quindi esegui di nuovo `/sandbox` in quella sessione.

1094 

1095Se il motivo inizia con `Invalid JSON syntax in settings file`, correggi il JSON nel file `.claude/settings.local.json` del tuo progetto, quindi esegui di nuovo `/sandbox`.

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 Limitazioni1098 Limitazioni

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* L'esecuzione non è avviata attraverso [canali](/docs/it/channels)102* L'esecuzione non è avviata attraverso [canali](/docs/it/channels)

103* Nessuna [regola di negazione](/docs/it/permissions#manage-permissions) rimuove lo strumento `ExitPlanMode`103* Nessuna [regola di negazione](/docs/it/permissions#manage-permissions) rimuove lo strumento `ExitPlanMode`

104 104 

105<h3 id="resume-from-a-summary">

106 Riprendere da un riepilogo

107</h3>

108 

109Su un piano Pro o Max, quando riprendi una sessione che è stata inattiva per più di circa un'ora ed è superiore a 100.000 token, Claude Code ripristina la conversazione e quindi apre una finestra di dialogo prima che tu invii il tuo primo messaggio. La [cache del prompt](/docs/it/prompt-caching#cache-lifetime) della sessione è scaduta entro allora, quindi la richiesta successiva elabora la cronologia completa una volta indipendentemente da quale opzione della finestra di dialogo scegli.

110 

111La finestra di dialogo offre tre modi per continuare la sessione:

112 

113* **Riprendi da riepilogo**: esegue [`/compact`](/docs/it/context-window#what-survives-compaction) immediatamente. Le richieste successive trasportano il riepilogo invece della cronologia completa.

114* **Riprendi la sessione completa così com'è**: carica la conversazione invariata.

115* **Non chiedermi più**: riprende la sessione completa e smette di mostrare la finestra di dialogo su tutte le future riprese.

116 

117Riprendere così com'è mantiene ogni dettaglio della conversazione disponibile, a un costo per richiesta che scala con la dimensione della conversazione. Riprendere dal riepilogo costa meno su ogni richiesta successiva perché trasporta il riepilogo invece della cronologia completa, ma qualunque cosa il riepilogo ometta non è più nel contesto di Claude. Vedi [perché l'utilizzo aumenta in una sessione lunga](/docs/it/costs#why-usage-climbs-in-a-long-session) per sapere da dove viene quel costo per richiesta.

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 Dove il selezionatore di sessioni cerca106 Dove il selezionatore di sessioni cerca

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | Sì | Identificatore univoco di massimo 256 caratteri, come `code-reviewer` o `reviewer-v2`. Gli [hook](/docs/it/hooks#subagentstart) ricevono questo valore come `agent_type`. Non è necessario che il nome del file corrisponda. I nomi non possono contenere `:`, che è riservato agli [identificatori con ambito del plugin](/docs/it/plugins/overview) come `my-plugin:reviewer` |316| `name` | Sì | Identificatore univoco di massimo 256 caratteri, come `code-reviewer` o `reviewer-v2`. Gli [hook](/docs/it/hooks#subagentstart) ricevono questo valore come `agent_type`. Non è necessario che il nome del file corrisponda. I nomi non possono contenere `:`, che è riservato agli [identificatori con ambito del plugin](/docs/it/plugins/overview) come `my-plugin:reviewer` |

317| `description` | Yes | Quando Claude dovrebbe delegare a questo subagent |317| `description` | Yes | Quando Claude dovrebbe delegare a questo subagent |

318| `tools` | No | [Strumenti](#available-tools) che il subagent può utilizzare, come una stringa separata da virgole come `Read, Grep, Bash` o un elenco YAML. Eredita ogni strumento disponibile per i subagent se omesso. Se nessuna voce nell'elenco si risolve in uno strumento, il subagent di solito [non si avvia](/docs/it/errors#agent-would-be-spawned-with-zero-tools) con un errore che nomina le voci. Per precaricare Skills nel contesto, usi il campo `skills` piuttosto che elencare `Skill` qui |318| `tools` | No | [Strumenti](#available-tools) che il subagent può utilizzare, come una stringa separata da virgole come `Read, Grep, Bash` o un elenco YAML. Eredita ogni strumento disponibile per i subagent se omesso. Se nessuna voce nell'elenco si risolve in uno strumento, il subagent di solito [non si avvia](/docs/it/errors#agent-would-be-spawned-with-zero-tools) con un errore che nomina le voci. Per precaricare Skills nel contesto, usi il campo `skills` piuttosto che elencare `Skill` qui |

319| `disallowedTools` | No | Strumenti da negare, rimossi dall'elenco ereditato o specificato. Stesso formato di `tools`. Una voce con uno specificatore, come `Bash(git push *)`, comunque [rimuove lo strumento intero](#available-tools) |319| `disallowedTools` | No | Strumenti da negare, rimossi dall'elenco ereditato o specificato. Stesso formato di `tools`. Una voce con uno specificatore, come `Bash(git push *)`, [rimuove comunque l'intero strumento](#restrict-which-tools-a-subagent-can-use) |

320| `model` | No | [Modello](#choose-a-model) da utilizzare: `sonnet`, `opus`, `haiku`, `fable`, un ID modello completo come `claude-opus-5-5`, o `inherit`. Quando lo omette, Claude Code sceglie il modello nell'[ordine del modello subagent](#choose-a-model) |320| `model` | No | [Modello](#choose-a-model) da utilizzare: `sonnet`, `opus`, `haiku`, `fable`, un ID modello completo come `claude-opus-5-5`, o `inherit`. Quando lo omette, Claude Code sceglie il modello nell'[ordine del modello subagent](#choose-a-model) |

321| `permissionMode` | No | [Modalità di permesso](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, o `manual` come alias di `default`. Ignorato per i [subagent dei plugin](#choose-the-subagent-scope) |321| `permissionMode` | No | [Modalità di permesso](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, o `manual` come alias di `default`. Ignorato per i [subagent dei plugin](#choose-the-subagent-scope) |

322| `maxTurns` | No | Numero massimo di turni agentici prima che il subagent si fermi. Quando il subagent raggiunge il limite, Claude Code restituisce il suo output contrassegnato come parziale, e Claude può [riprenderlo](#resume-subagents) per continuare. Il contrassegno parziale richiede Claude Code v2.1.246 o successivo |322| `maxTurns` | No | Numero massimo di turni agentici prima che il subagent si fermi. Quando il subagent raggiunge il limite, Claude Code restituisce il suo output contrassegnato come parziale, e Claude può [riprenderlo](#resume-subagents) per continuare. Il contrassegno parziale richiede Claude Code v2.1.246 o successivo |


475 475 

476In una [sessione senza gli strumenti Task](/docs/it/tools-reference#task-tool-availability), Claude Code non fornisce gli strumenti di attività ai subagent nemmeno quando il subagent esegue un modello diverso. Un compagno di squadra in-process segue la sua sessione allo stesso modo, mentre un compagno di squadra nel suo [riquadro diviso](/docs/it/agent-teams#choose-a-display-mode) viene eseguito come un processo Claude Code separato, quindi il suo modello decide.476In una [sessione senza gli strumenti Task](/docs/it/tools-reference#task-tool-availability), Claude Code non fornisce gli strumenti di attività ai subagent nemmeno quando il subagent esegue un modello diverso. Un compagno di squadra in-process segue la sua sessione allo stesso modo, mentre un compagno di squadra nel suo [riquadro diviso](/docs/it/agent-teams#choose-a-display-mode) viene eseguito come un processo Claude Code separato, quindi il suo modello decide.

477 477 

478Per limitare gli strumenti, usi il campo `tools` come allowlist o il campo `disallowedTools` come denylist. Questo esempio usa `tools` per consentire solo Read, Grep, Glob e Bash. Il subagent non può modificare file, scrivere file o utilizzare alcuno strumento MCP:478<h4 id="restrict-which-tools-a-subagent-can-use">

479 Limita gli strumenti che un subagent può usare

480</h4>

481 

482Per limitare gli strumenti, usa il campo `tools` come allowlist o il campo `disallowedTools` come denylist. Se sono impostati entrambi, viene applicato prima `disallowedTools`, poi `tools` viene risolto rispetto agli strumenti rimanenti. Uno strumento elencato in entrambi viene rimosso.

483 

484Questo esempio usa `tools` per consentire solo Read, Grep, Glob e Bash. Il subagent non può modificare file, scrivere file né utilizzare strumenti MCP:

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498Se entrambi sono impostati, `disallowedTools` viene applicato per primo, quindi `tools` viene risolto rispetto al pool rimanente. Uno strumento elencato in entrambi viene rimosso.

499 

500Quando nulla nell'elenco `tools` si risolve in uno strumento, ad esempio perché ogni voce è errata o nomina uno strumento che non è disponibile per i subagent, Claude Code di solito rifiuta di avviare il subagent e lo strumento Agent restituisce un errore che nomina le voci non risolte; consulti [Agent would be spawned with zero tools](/docs/it/errors#agent-would-be-spawned-with-zero-tools) per il messaggio e come correggere ogni voce. Prima di v2.1.208, quel subagent si avviava senza strumenti e potrebbe restituire un risultato vuoto o confuso.504Quando nulla nell'elenco `tools` si risolve in uno strumento, ad esempio perché ogni voce è errata o nomina uno strumento che non è disponibile per i subagent, Claude Code di solito rifiuta di avviare il subagent e lo strumento Agent restituisce un errore che nomina le voci non risolte; consulti [Agent would be spawned with zero tools](/docs/it/errors#agent-would-be-spawned-with-zero-tools) per il messaggio e come correggere ogni voce. Prima di v2.1.208, quel subagent si avviava senza strumenti e potrebbe restituire un risultato vuoto o confuso.

501 505 

502Entrambi i campi accettano modelli a livello di server MCP oltre ai nomi esatti degli strumenti: `mcp__<server>` o `mcp__<server>__*` concede o rimuove ogni strumento dal server denominato. In `disallowedTools`, `mcp__*` rimuove anche ogni strumento MCP da qualsiasi server. Questo esempio rimuove ogni strumento dal server MCP `github` mentre mantiene gli strumenti da altri server e gli strumenti integrati nel suo pool:506I campi `tools` e `disallowedTools` accettano anche voci per un intero server MCP:

507 

508| Obiettivo | Campo | Voce di esempio |

509| :- | :- | :- |

510| Dare al subagent ogni strumento di un server | `tools` | `mcp__github__*` |

511| Negare gli strumenti di un server | `disallowedTools` | `mcp__github` o `mcp__github__*` |

512| Negare ogni strumento MCP di qualsiasi server | `disallowedTools` | `mcp__*` |

513 

514Questo esempio rimuove ogni strumento del server MCP `github`, mantenendo tra gli strumenti del subagent quelli degli altri server e gli strumenti integrati:

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---