SpyBara
Go Premium

Documentation 2026-10-06 23:59 UTC to 2026-10-07 15:59 UTC

39 files changed +496 −452. View all changes and history on the product overview
2026
Wed 7 15: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

agent-sdk/hooks.md +61 −61

Details

15* **Tracciare il ciclo di vita della sessione** per gestire lo stato, pulire le risorse o inviare notifiche15* **Tracciare il ciclo di vita della sessione** per gestire lo stato, pulire le risorse o inviare notifiche

16 16 

17<h2 id="how-hooks-work">17<h2 id="how-hooks-work">

18 Come funzionano gli hooks18 Come funzionano gli hook

19</h2>19</h2>

20 20 

21<Steps>21<Steps>

22 <Step title="Un evento si attiva">22 <Step title="Un evento si attiva">

23 Qualcosa accade durante l'esecuzione dell'agente e l'SDK attiva un evento: uno strumento sta per essere chiamato (`PreToolUse`), uno strumento ha restituito un risultato (`PostToolUse`), un subagente è stato avviato o interrotto, l'agente è inattivo o l'esecuzione è terminata. Consultate l'[elenco completo degli eventi](#available-hooks).23 Qualcosa accade durante l'esecuzione dell'agente e l'SDK attiva un evento: uno strumento sta per essere chiamato (`PreToolUse`), uno strumento ha restituito un risultato (`PostToolUse`), un subagent è stato avviato o interrotto, l'agente è inattivo o l'esecuzione è terminata. Consulta l'[elenco completo degli eventi](#available-hooks).

24 </Step>24 </Step>

25 25 

26 <Step title="L'SDK raccoglie gli hooks registrati">26 <Step title="L'SDK raccoglie gli hook registrati">

27 L'SDK verifica la presenza di hooks registrati per quel tipo di evento. Questo include gli hooks di callback che passate in `options.hooks` e gli hooks dei comandi shell dai file di impostazioni quando la voce [`settingSources`](/docs/it/agent-sdk/typescript#settingsource) o [`setting_sources`](/docs/it/agent-sdk/python#settingsource) corrispondente è abilitata, come avviene per le opzioni predefinite di `query()`.27 L'SDK verifica la presenza di hook registrati per quel tipo di evento. Questo include gli hook di callback che passi in `options.hooks` e gli hook dei comandi shell dai file di impostazioni quando la voce [`settingSources`](/docs/it/agent-sdk/typescript#settingsource) o [`setting_sources`](/docs/it/agent-sdk/python#settingsource) corrispondente è abilitata, come avviene per le opzioni predefinite di `query()`.

28 </Step>28 </Step>

29 29 

30 <Step title="I matcher filtrano quali hooks vengono eseguiti">30 <Step title="I matcher filtrano quali hook vengono eseguiti">

31 Se un hook ha un modello [`matcher`](#matchers) (come `"Write|Edit"`), l'SDK lo testa rispetto al target dell'evento (ad esempio, il nome dello strumento). Gli hooks senza un matcher vengono eseguiti per ogni evento di quel tipo.31 Se un hook ha un modello [`matcher`](#matchers) (come `"Write|Edit"`), l'SDK lo testa rispetto al target dell'evento (ad esempio, il nome dello strumento). Gli hook senza un matcher vengono eseguiti per ogni evento di quel tipo.

32 </Step>32 </Step>

33 33 

34 <Step title="Le funzioni di callback vengono eseguite">34 <Step title="Le funzioni di callback vengono eseguite">

35 Ogni hook corrispondente riceve la sua [funzione di callback](#callback-functions) con input su ciò che sta accadendo: il nome dello strumento, i suoi argomenti, l'ID della sessione e altri dettagli specifici dell'evento.35 La [funzione di callback](#callback-functions) di ogni hook corrispondente riceve input su ciò che sta accadendo: il nome dello strumento, i suoi argomenti, l'ID della sessione e altri dettagli specifici dell'evento.

36 </Step>36 </Step>

37 37 

38 <Step title="Il vostro callback restituisce una decisione">38 <Step title="Il tuo callback restituisce una decisione">

39 Dopo aver eseguito qualsiasi operazione (registrazione, chiamate API, convalida), il vostro callback restituisce un [oggetto di output](#outputs) che dice all'agente cosa fare: consentire l'operazione, bloccarla, modificare l'input o iniettare contesto nella conversazione.39 Dopo aver eseguito qualsiasi operazione (log, chiamate API, convalida), il tuo callback restituisce un [oggetto di output](#outputs) che dice all'agente cosa fare: consentire l'operazione, bloccarla, modificare l'input o iniettare contesto nella conversazione.

40 </Step>40 </Step>

41</Steps>41</Steps>

42 42 


140 ```140 ```

141</CodeGroup>141</CodeGroup>

142 142 

143Quando eseguite uno dei due script, Claude tenta di creare il file `.env`, l'hook nega la chiamata dello strumento e la risposta finale di Claude spiega che non può creare file `.env`.143Quando esegui uno dei due script, Claude tenta di creare il file `.env` e l'hook nega la chiamata allo strumento.

144 144 

145<h2 id="available-hooks">145<h2 id="available-hooks">

146 Hook disponibili146 Hook disponibili


179| `ConfigChange` | No | Sì | Il file di configurazione cambia | Ricaricare le impostazioni dinamicamente |179| `ConfigChange` | No | Sì | Il file di configurazione cambia | Ricaricare le impostazioni dinamicamente |

180| `InstructionsLoaded` | No | Sì | Un file `CLAUDE.md` o di regole viene caricato nel contesto | Controllare quali file di istruzioni vengono caricati |180| `InstructionsLoaded` | No | Sì | Un file `CLAUDE.md` o di regole viene caricato nel contesto | Controllare quali file di istruzioni vengono caricati |

181| `WorktreeCreate` | No | Sì | Git worktree creato | Tracciare gli spazi di lavoro isolati |181| `WorktreeCreate` | No | Sì | Git worktree creato | Tracciare gli spazi di lavoro isolati |

182| `WorktreeRemove` | No | Sì | Git worktree rimosso | Pulire le risorse dello spazio di lavoro |182| `WorktreeRemove` | No | Sì | Un worktree creato da un hook `WorktreeCreate` viene rimosso | Pulire le risorse del workspace |

183| `CwdChanged` | No | Sì | La directory di lavoro cambia durante una sessione | Ricaricare le variabili di ambiente per directory |183| `CwdChanged` | No | Sì | La directory di lavoro cambia durante una sessione | Ricaricare le variabili di ambiente per directory |

184| `FileChanged` | No | Sì | Un file monitorato viene modificato, creato o eliminato | Ricaricare la configurazione quando i file del progetto cambiano |184| `FileChanged` | No | Sì | Un file monitorato viene modificato, creato o eliminato | Ricaricare la configurazione quando i file del progetto cambiano |

185| `DirectoryAdded` | No | Sì | Una directory di lavoro viene aggiunta durante una sessione | Installare le dipendenze per un repository aggiunto a metà sessione |185| `DirectoryAdded` | No | Sì | Una directory di lavoro viene aggiunta durante una sessione | Installare le dipendenze per un repository aggiunto a metà sessione |

186 186 

187<h2 id="configure-hooks">187<h2 id="configure-hooks">

188 Configurare gli hooks188 Configurare gli hook

189</h2>189</h2>

190 190 

191Per configurare un hook, passatelo nel campo `hooks` delle opzioni dell'agente (`ClaudeAgentOptions` in Python, l'oggetto `options` in TypeScript). Questo snippet presuppone che abbiate già definito un callback hook, come `protect_env_files` in Python o `protectEnvFiles` in TypeScript dall'esempio precedente:191Per configurare un hook, passalo nel campo `hooks` delle opzioni dell'agente (`ClaudeAgentOptions` in Python, l'oggetto `options` in TypeScript). Questo snippet presuppone che tu abbia già definito un callback hook, come `protect_env_files` in Python o `protectEnvFiles` in TypeScript dall'esempio precedente:

192 192 

193<CodeGroup>193<CodeGroup>

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


219L'opzione `hooks` è un dizionario in Python o un oggetto in TypeScript, dove:219L'opzione `hooks` è un dizionario in Python o un oggetto in TypeScript, dove:

220 220 

221* **Le chiavi**: [nomi degli eventi hook](#available-hooks) come `'PreToolUse'`, `'PostToolUse'` e `'Stop'`221* **Le chiavi**: [nomi degli eventi hook](#available-hooks) come `'PreToolUse'`, `'PostToolUse'` e `'Stop'`

222* **I valori**: array di [matcher](#matchers), ognuno contenente un modello di filtro opzionale e le vostre [funzioni di callback](#callback-functions)222* **I valori**: array di [matcher](#matchers), ognuno contenente un modello di filtro opzionale e le tue [funzioni di callback](#callback-functions)

223 223 

224<h3 id="matchers">224<h3 id="matchers">

225 Matchers225 Matcher

226</h3>226</h3>

227 227 

228Utilizzate i matcher per filtrare quando i vostri callback si attivano. Il campo `matcher` corrisponde a un valore diverso a seconda del tipo di evento hook. Ad esempio, gli hook basati su strumenti corrispondono al nome dello strumento, mentre gli hook `Notification` corrispondono al tipo di notifica.228Utilizza i matcher per filtrare quando i tuoi callback si attivano. Il campo `matcher` corrisponde a un valore diverso a seconda del tipo di evento hook. Ad esempio, gli hook basati su strumenti corrispondono al nome dello strumento, mentre gli hook `Notification` corrispondono al tipo di notifica.

229 229 

230I matcher SDK seguono le stesse regole dei [matcher nei file di impostazioni](/docs/it/hooks#matcher-patterns). Quella sezione documenta i percorsi di valutazione di stringa esatta e espressione regolare, i loro requisiti di versione e i valori di matcher per ogni tipo di evento.230I matcher SDK seguono le stesse regole dei [matcher nei file di impostazioni](/docs/it/hooks#matcher-patterns). Quella sezione documenta i percorsi di valutazione di stringa esatta e espressione regolare, i loro requisiti di versione e i valori di matcher per ogni tipo di evento.

231 231 

232| Opzione | Tipo | Predefinito | Descrizione |232| Opzione | Tipo | Predefinito | Descrizione |

233| - | - | - | - |233| - | - | - | - |

234| `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 (consultate [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 utilizzate nella configurazione `mcpServers`. |234| `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`. |

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

236| `timeout` | `number` | `undefined` | Timeout in secondi. Quando omesso, Claude Code applica il [timeout predefinito dell'evento](#hook-timeout). I vostri callback SDK seguono i valori predefiniti dell'hook `command` |236| `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` |

237 237 

238Utilizzate il modello `matcher` per indirizzare strumenti specifici quando possibile. Un matcher con `'Bash'` viene eseguito solo per i comandi Bash, mentre omettere il modello esegue i vostri callback per ogni occorrenza dell'evento. Omettete intenzionalmente per registrare ogni chiamata a uno strumento che la vostra sessione effettua.238Utilizza il modello `matcher` per indirizzare strumenti specifici quando possibile. Un matcher con `'Bash'` viene eseguito solo per i comandi Bash, mentre omettere il modello esegue i tuoi callback per ogni occorrenza dell'evento. Omettilo intenzionalmente per registrare ogni chiamata a uno strumento che la tua sessione effettua.

239 239 

240<h3 id="callback-functions">240<h3 id="callback-functions">

241 Funzioni di callback241 Funzioni di callback


247 247 

248Ogni callback hook riceve tre argomenti:248Ogni callback hook riceve tre argomenti:

249 249 

250* **Dati di input:** un oggetto tipizzato contenente i dettagli dell'evento. Ogni tipo di hook ha la sua forma di input. Ad esempio, `PreToolUseHookInput` include `tool_name` e `tool_input`, mentre `NotificationHookInput` include `message`. Consultate le definizioni di tipo complete nei riferimenti SDK [TypeScript](/docs/it/agent-sdk/typescript#hookinput) e [Python](/docs/it/agent-sdk/python#hookinput).250* **Dati di input:** un oggetto tipizzato contenente i dettagli dell'evento. Ogni tipo di hook ha la sua forma di input. Ad esempio, `PreToolUseHookInput` include `tool_name` e `tool_input`, mentre `NotificationHookInput` include `message`. Consulta le definizioni di tipo complete nei riferimenti SDK [TypeScript](/docs/it/agent-sdk/typescript#hookinput) e [Python](/docs/it/agent-sdk/python#hookinput).

251 * Tutti gli input hook condividono `session_id`, `cwd` e `hook_event_name`.251 * Tutti gli input hook condividono `session_id`, `cwd` e `hook_event_name`.

252 * `agent_id` e `agent_type` vengono popolati quando l'hook si attiva all'interno di un subagente. In TypeScript, questi si trovano sull'input hook di base e sono disponibili per tutti i tipi di hook. In Python, sono campi opzionali su `PreToolUse`, `PostToolUse`, `PostToolUseFailure` e `PermissionRequest`, e campi obbligatori su `SubagentStart` e `SubagentStop`.252 * `agent_id` e `agent_type` vengono popolati quando l'hook si attiva all'interno di un subagent. In TypeScript, questi si trovano sull'input hook di base e sono disponibili per tutti i tipi di hook. In Python, sono campi opzionali su `PreToolUse`, `PostToolUse`, `PostToolUseFailure` e `PermissionRequest`, e campi obbligatori su `SubagentStart` e `SubagentStop`.

253* **ID di utilizzo dello strumento** (`str | None` / `string | undefined`): correla gli eventi `PreToolUse` e `PostToolUse` per la stessa chiamata a uno strumento.253* **ID di utilizzo dello strumento** (`str | None` / `string | undefined`): correla gli eventi `PreToolUse` e `PostToolUse` per la stessa chiamata a uno strumento.

254* **Contesto:** in TypeScript, contiene una proprietà `signal` (`AbortSignal`) per l'annullamento. In Python, questo argomento è riservato per uso futuro.254* **Contesto:** in TypeScript, contiene una proprietà `signal` (`AbortSignal`) per l'annullamento. In Python, questo argomento è riservato per uso futuro.

255 255 


257 Output257 Output

258</h4>258</h4>

259 259 

260Il vostro callback restituisce un oggetto con due categorie di campi:260Il tuo callback restituisce un oggetto con due categorie di campi:

261 261 

262* **Campi di livello superiore** sono accettati su ogni evento: `systemMessage` mostra un messaggio all'utente, e `continue` (`continue_` in Python) determina se l'agente continua a funzionare dopo questo hook. Alcuni eventi li scartano o li consegnano altrove. La sezione di ogni [evento](/docs/it/hooks#hook-events) sulla pagina degli hooks dice dove finiscono.262* **Campi di livello superiore** sono accettati su ogni evento: `systemMessage` mostra un messaggio all'utente, e `continue` (`continue_` in Python) determina se l'agente continua a funzionare dopo questo hook. Alcuni eventi li scartano o li consegnano altrove. La sezione di ogni [evento](/docs/it/hooks#hook-events) sulla pagina degli hook dice dove finiscono.

263* **`hookSpecificOutput`** controlla l'operazione corrente. I campi che imposti all'interno dipendono dal tipo di evento hook:263* **`hookSpecificOutput`** controlla l'operazione corrente. I campi che imposti all'interno dipendono dal tipo di evento hook:

264 * Per gli hook `PreToolUse`, è qui che imposti `permissionDecision` (`"allow"`, `"deny"`, `"ask"` o `"defer"`), `permissionDecisionReason` e `updatedInput`. Se restituisci `"defer"`, il turno termina con un messaggio di risultato il cui `stop_reason` è `"tool_deferred"`, in modo da poter [riprendere la chiamata in seguito](/docs/it/hooks#defer-a-tool-call-for-later).264 * Per gli hook `PreToolUse`, è qui che imposti `permissionDecision` (`"allow"`, `"deny"`, `"ask"` o `"defer"`), `permissionDecisionReason` e `updatedInput`. Se restituisci `"defer"`, il turno termina con un messaggio di risultato il cui `stop_reason` è `"tool_deferred"`, in modo da poter [riprendere la chiamata in seguito](/docs/it/hooks#defer-a-tool-call-for-later).

265 * Per gli hook `PostToolUse`, puoi impostare `additionalContext` per aggiungere informazioni al risultato dello strumento. Per sostituire l'output dello strumento prima che Claude lo veda, imposta `updatedToolOutput`, che funziona per qualsiasi strumento in entrambi gli SDK. Il campo più vecchio `updatedMCPToolOutput` sostituisce solo l'output dello strumento MCP ed è deprecato.265 * Per gli hook `PostToolUse`, puoi impostare `additionalContext` per aggiungere informazioni al risultato dello strumento. Per sostituire l'output dello strumento prima che Claude lo veda, imposta `updatedToolOutput`, che funziona per qualsiasi strumento in entrambi gli SDK. Il campo più vecchio `updatedMCPToolOutput` sostituisce solo l'output dello strumento MCP.

266 * Nel TypeScript SDK, un callback `PostToolUse` può anche restituire `classifierContext`, una breve nota sul risultato della chiamata allo strumento per il classificatore dei permessi della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode). Poiché il tuo callback viene eseguito nel processo della tua applicazione, il classificatore può pesare una dichiarazione dell'utente che inoltri nella nota come intenzione dell'utente. Il campo richiede TypeScript Agent SDK v0.3.236 o successivo. [Annotare un risultato per il classificatore della modalità auto](/docs/it/hooks#annotate-a-result-for-the-auto-mode-classifier) copre il limite di lunghezza, la regola solo sincrona e cosa non mettere nella nota.266 * Nel TypeScript SDK, un callback `PostToolUse` può anche restituire `classifierContext`, una breve nota sul risultato della chiamata allo strumento per il classificatore dei permessi della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode). Poiché il tuo callback viene eseguito nel processo della tua applicazione, il classificatore può pesare una dichiarazione dell'utente che inoltri nella nota come intenzione dell'utente. Il campo richiede TypeScript Agent SDK v0.3.236 o successivo. [Annotare un risultato per il classificatore della modalità auto](/docs/it/hooks#annotate-a-result-for-the-auto-mode-classifier) copre il limite di lunghezza, la regola solo sincrona e cosa non mettere nella nota.

267 267 

268Restituite `{}` per consentire l'operazione senza modifiche. Gli hook di callback SDK utilizzano lo stesso formato di output JSON degli [hook dei comandi shell di Claude Code](/docs/it/hooks#json-output), che documenta ogni campo e opzione specifica dell'evento. Per le definizioni di tipo SDK, consultate i riferimenti SDK [TypeScript](/docs/it/agent-sdk/typescript#synchookjsonoutput) e [Python](/docs/it/agent-sdk/python#synchookjsonoutput).268Restituisci `{}` per consentire l'operazione senza modifiche. Gli hook di callback SDK utilizzano lo stesso formato di output JSON degli [hook dei comandi shell di Claude Code](/docs/it/hooks#json-output), che documenta ogni campo e opzione specifica dell'evento. Per le definizioni di tipo SDK, consulta i riferimenti SDK [TypeScript](/docs/it/agent-sdk/typescript#synchookjsonoutput) e [Python](/docs/it/agent-sdk/python#synchookjsonoutput).

269 269 

270<Note>270<Note>

271 Quando si applicano più hook o regole di autorizzazione, `deny` ha priorità su `defer`, che ha priorità su `ask`, che ha priorità su `allow`. Se un hook restituisce `deny`, l'operazione viene bloccata indipendentemente dagli altri hook.271 Quando si applicano più hook o regole di permesso, `deny` ha priorità su `defer`, che ha priorità su `ask`, che ha priorità su `allow`. Se un hook restituisce `deny`, l'operazione viene bloccata indipendentemente dagli altri hook.

272</Note>272</Note>

273 273 

274<h4 id="asynchronous-output">274<h4 id="asynchronous-output">

275 Output asincrono275 Output asincrono

276</h4>276</h4>

277 277 

278Per impostazione predefinita, l'agente attende che il vostro hook restituisca prima di procedere. Se il vostro hook esegue un effetto collaterale, come la registrazione o l'invio di un webhook, e non ha bisogno di influenzare il comportamento dell'agente, potete restituire un output asincrono. Questo dice all'agente di continuare immediatamente senza attendere il completamento dell'hook. In questo snippet, `send_to_logging_service` in Python e `sendToLoggingService` in TypeScript rappresentano qualsiasi funzione di registrazione che definite:278Per impostazione predefinita, l'agente attende che il tuo hook restituisca prima di procedere. Se il tuo hook esegue un effetto collaterale, come la registrazione di log o l'invio di un webhook, e non ha bisogno di influenzare il comportamento dell'agente, puoi restituire un output asincrono. Questo dice all'agente di continuare immediatamente senza attendere il completamento dell'hook. In questo snippet, `send_to_logging_service` in Python e `sendToLoggingService` in TypeScript rappresentano qualsiasi funzione di logging che definisci:

279 279 

280<CodeGroup>280<CodeGroup>

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


296 296 

297| Campo | Tipo | Descrizione |297| Campo | Tipo | Descrizione |

298| - | - | - |298| - | - | - |

299| `async` | `true` | Segnala la modalità asincrona. L'agente procede senza attendere. In Python, utilizzate `async_` per evitare la parola chiave riservata. |299| `async` | `true` | Segnala la modalità asincrona. L'agente procede senza attendere. In Python, utilizza `async_` per evitare la parola chiave riservata. |

300| `asyncTimeout` | `number` | Timeout opzionale in millisecondi per l'operazione in background |300| `asyncTimeout` | `number` | Timeout opzionale in millisecondi per l'operazione in background |

301 301 

302<Note>302<Note>

303 Gli output asincroni non possono bloccare, modificare o iniettare contesto nell'operazione poiché l'agente ha già proseguito. Utilizzateli solo per effetti collaterali come registrazione, metriche o notifiche.303 Gli output asincroni non possono bloccare, modificare o iniettare contesto nell'operazione poiché l'agente ha già proseguito. Utilizzali solo per effetti collaterali come logging, metriche o notifiche.

304</Note>304</Note>

305 305 

306<h2 id="examples">306<h2 id="examples">


801 Hook non si attiva801 Hook non si attiva

802</h3>802</h3>

803 803 

804* Verificate che il nome dell'evento hook sia corretto e sensibile alle maiuscole (`PreToolUse`, non `preToolUse`)804* Verifica che il nome dell'evento hook sia corretto e sensibile alle maiuscole (`PreToolUse`, non `preToolUse`)

805* Controllate che il vostro modello di matcher corrisponda esattamente al nome dello strumento805* Controlla che il tuo pattern di matcher corrisponda esattamente al nome dello strumento

806* Assicuratevi che l'hook sia sotto il tipo di evento corretto in `options.hooks`806* Assicurati che l'hook sia sotto il tipo di evento corretto in `options.hooks`

807* Per gli hook non basati su strumenti che supportano matcher, come `Notification` e `SubagentStop`, i matcher corrispondono a campi diversi, e `Stop` ignora completamente i matcher (consultate [modelli di matcher](/docs/it/hooks#matcher-patterns))807* Per gli hook non basati su strumenti che supportano matcher, come `Notification` e `SubagentStop`, i matcher corrispondono a campi diversi, e `Stop` ignora completamente i matcher (consulta [pattern di matcher](/docs/it/hooks#matcher-patterns))

808* Gli hooks potrebbero non attivarsi quando l'agente raggiunge il limite [`max_turns`](/docs/it/agent-sdk/python#claudeagentoptions) perché la sessione termina prima che gli hooks possano essere eseguiti808* Gli hook potrebbero non attivarsi quando l'agente raggiunge il limite [`max_turns`](/docs/it/agent-sdk/python#claudeagentoptions) perché la sessione termina prima che gli hook possano essere eseguiti

809 809 

810<h3 id="matcher-not-filtering-as-expected">810<h3 id="matcher-not-filtering-as-expected">

811 Matcher non filtra come previsto811 Matcher non filtra come previsto

812</h3>812</h3>

813 813 

814I matcher corrispondono solo ai nomi degli strumenti, non ai percorsi dei file o ad altri argomenti. Per filtrare per percorso di file, controllate `tool_input.file_path` all'interno del vostro hook:814I matcher corrispondono solo ai nomi degli strumenti, non ai percorsi dei file o ad altri argomenti. Per filtrare per percorso di file, controlla `tool_input.file_path` all'interno del tuo hook:

815 815 

816```typescript theme={null}816```typescript theme={null}

817const myHook: HookCallback = async (input, toolUseID, { signal }) => {817const myHook: HookCallback = async (input, toolUseID, { signal }) => {


828 Timeout dell'hook828 Timeout dell'hook

829</h3>829</h3>

830 830 

831Claude Code esegue ogni callback con un timeout, che impostate in secondi con il campo `timeout` sul suo `HookMatcher`. Quando non ne impostate uno, Claude Code utilizza il valore predefinito dell'evento: 600 secondi per la maggior parte degli eventi, 30 secondi per `UserPromptSubmit`, `PreModelSwitch` e `PostModelSwitch`, e 10 secondi per `MessageDisplay`. Claude Code esegue i callback `SessionEnd` durante l'arresto con il budget di timeout più breve [`SessionEnd timeout budget`](/docs/it/hooks#sessionend-input), 1,5 secondi per impostazione predefinita.831Claude Code esegue ogni callback con un timeout, che imposti in secondi con il campo `timeout` sul suo `HookMatcher`. Quando non ne imposti uno, Claude Code utilizza il valore predefinito dell'evento: 600 secondi per la maggior parte degli eventi, 30 secondi per `UserPromptSubmit`, `PreModelSwitch` e `PostModelSwitch`, e 10 secondi per `MessageDisplay`. Claude Code esegue i callback `SessionEnd` durante l'arresto con il [budget di timeout di SessionEnd](/docs/it/hooks#sessionend-input) più breve, 1,5 secondi per impostazione predefinita.

832 832 

833Quando un callback supera il suo timeout, Claude Code lo annulla e scarta l'output, e la sessione continua piuttosto che bloccarsi. Quello che accade dopo dipende dall'evento:833Quando un callback supera il suo timeout, Claude Code lo annulla e scarta il suo output, e la sessione continua anziché bloccarsi. Quello che accade dopo dipende dall'evento:

834 834 

835* `PreToolUse`: Claude Code non esegue la chiamata dello strumento, Claude riceve un risultato dello strumento che indica che l'hook non ha risposto prima del suo timeout, e il turno continua. Se un altro hook `PreToolUse` ha restituito un rifiuto esplicito, Claude riceve invece quel rifiuto anziché l'errore di timeout. Prima della v2.1.210, Claude Code segnalava il timeout a Claude come un rifiuto dell'utente, il che faceva fermare le sessioni incustodite e attendere l'input.835* `PreToolUse`: Claude Code non esegue la chiamata allo strumento, Claude riceve un risultato dello strumento che indica che l'hook non ha risposto prima del suo timeout, e il turno continua. Se un altro hook `PreToolUse` ha restituito un rifiuto esplicito, Claude riceve quel rifiuto anziché l'errore di timeout. Prima della v2.1.210, Claude Code segnalava il timeout a Claude come un rifiuto dell'utente, il che faceva fermare le sessioni incustodite in attesa di input.

836* `PostToolUse` e `PostToolUseFailure`: Claude Code mantiene il risultato dello strumento e il turno continua.836* `PostToolUse` e `PostToolUseFailure`: Claude Code mantiene il risultato dello strumento e il turno continua.

837* `UserPromptSubmit` e [`UserPromptExpansion`](/docs/it/hooks#userpromptexpansion): Claude Code blocca il prompt con un messaggio che nomina l'hook e il timeout, e la sessione continua. Poiché un callback su questi eventi può agire come un gate di policy, Claude Code non lascia mai passare un prompt scaduto senza controllo. Prima della v2.1.208, Claude Code terminava la query con `error_during_execution` quando un callback su questi eventi scadeva.837* `UserPromptSubmit` e [`UserPromptExpansion`](/docs/it/hooks#userpromptexpansion): Claude Code blocca il prompt con un messaggio che nomina l'hook e il timeout, e la sessione continua. Poiché un callback su questi eventi può agire come un gate di policy, Claude Code non lascia mai passare un prompt scaduto senza controllo. Prima della v2.1.208, Claude Code terminava la query con `error_during_execution` quando un callback su questi eventi scadeva.

838* `Stop` e `SubagentStop`: il callback scaduto conta come se non avesse restituito alcuna decisione. L'agente o il subagente si ferma come se quel callback lo avesse consentito, e una decisione dai vostri altri hook sull'evento si applica comunque. Prima di Claude Code v2.1.273, un callback `Stop` o `SubagentStop` scaduto contava come un'esecuzione di hook non riuscita, e Claude Code scartava le decisioni dei vostri altri hook sull'evento.838* `Stop` e `SubagentStop`: il callback scaduto conta come se non avesse restituito alcuna decisione. L'agente o il subagent si ferma come se quel callback lo avesse consentito, e una decisione dei tuoi altri hook sull'evento si applica comunque. Prima di Claude Code v2.1.273, un callback `Stop` o `SubagentStop` scaduto contava come un'esecuzione di hook non riuscita, e Claude Code scartava le decisioni dei tuoi altri hook sull'evento.

839* `SessionStart`: il callback scaduto conta come se non avesse restituito alcun output, e la sessione continua con l'output dei vostri altri hook `SessionStart`.839* `SessionStart`: il callback scaduto conta come se non avesse restituito alcun output, e la sessione continua con l'output dei tuoi altri hook `SessionStart`.

840* `PreModelSwitch`: Claude Code blocca il cambio di modello. Un hook che non risponde non ha approvato il cambio.840* `PreModelSwitch`: Claude Code blocca il cambio di modello. Un hook che non risponde non ha approvato il cambio.

841* Altri eventi, come `Notification`, `PreCompact` e `PostModelSwitch`: Claude Code registra l'errore e continua.841* Altri eventi, come `Notification`, `PreCompact` e `PostModelSwitch`: Claude Code registra l'errore nei log e continua.

842 842 

843La prima volta che un callback `Stop` o `SessionStart` scade nella sessione principale, Claude Code aggiunge anche un [`SDKInformationalMessage`](/docs/it/agent-sdk/typescript#sdkinformationalmessage) al flusso dei messaggi dicendo che l'app che guida la sessione non ha risposto. I timeout successivi non ripetono quel messaggio mentre la vostra app rimane non responsiva.843La prima volta che un callback `Stop` o `SessionStart` scade nella sessione principale, Claude Code aggiunge anche un [`SDKInformationalMessage`](/docs/it/agent-sdk/typescript#sdkinformationalmessage) al flusso dei messaggi indicando che l'app che guida la sessione non ha risposto. I timeout successivi non ripetono quel messaggio finché la tua app rimane non responsiva.

844 844 

845Se interrompete la query mentre un callback è in sospeso, Claude Code annulla la chiamata dello strumento in sospeso. Prima della v2.1.208, la chiamata dello strumento potrebbe ancora procedere se interrompevate durante un callback `PreToolUse` in sospeso.845Se interrompi la query mentre un callback è in sospeso, Claude Code annulla la chiamata allo strumento in sospeso. Prima della v2.1.208, la chiamata allo strumento poteva ancora procedere se interrompevi durante un callback `PreToolUse` in sospeso.

846 846 

847Se il vostro callback ha bisogno di più tempo, impostate un `timeout` più alto sul suo `HookMatcher`. In TypeScript, utilizzate `AbortSignal` dal terzo argomento del callback per gestire l'annullamento con eleganza quando il timeout si attiva.847Se il tuo callback ha bisogno di più tempo, imposta un `timeout` più alto sul suo `HookMatcher`. In TypeScript, utilizza l'`AbortSignal` dal terzo argomento del callback per gestire l'annullamento in modo pulito quando scatta il timeout.

848 848 

849<h3 id="tool-blocked-unexpectedly">849<h3 id="tool-blocked-unexpectedly">

850 Strumento bloccato inaspettatamente850 Strumento bloccato inaspettatamente

851</h3>851</h3>

852 852 

853* Controllate tutti gli hook `PreToolUse` per i ritorni `permissionDecision: 'deny'`853* Controlla tutti gli hook `PreToolUse` per i ritorni `permissionDecision: 'deny'`

854* Aggiungete la registrazione ai vostri hook per vedere quale `permissionDecisionReason` stanno restituendo854* Aggiungi dei log ai tuoi hook per vedere quale `permissionDecisionReason` stanno restituendo

855* Verificate che i modelli di matcher non siano troppo ampi: un matcher vuoto corrisponde a tutti gli strumenti855* Verifica che i pattern di matcher non siano troppo ampi: un matcher vuoto corrisponde a tutti gli strumenti

856 856 

857<h3 id="modified-input-not-applied">857<h3 id="modified-input-not-applied">

858 Input modificato non applicato858 Input modificato non applicato

859</h3>859</h3>

860 860 

861* Assicuratevi che `updatedInput` sia all'interno di `hookSpecificOutput`, non al livello superiore:861* Assicurati che `updatedInput` sia all'interno di `hookSpecificOutput`, non al livello superiore:

862 862 

863 ```typescript theme={null}863 ```typescript theme={null}

864 return {864 return {


870 };870 };

871 ```871 ```

872 872 

873* Non abbinate `updatedInput` con `permissionDecision: 'defer'`, che scarta l'input modificato. Omettere `permissionDecision` va bene: l'input modificato si applica comunque attraverso la valutazione delle autorizzazioni normale. Potete anche restituire `'allow'` per approvare automaticamente l'input modificato o `'ask'` per mostrarlo all'utente per l'approvazione873* Non abbinare `updatedInput` a `permissionDecision: 'defer'`, che scarta l'input modificato. Omettere `permissionDecision` va bene: l'input modificato si applica comunque attraverso la normale valutazione dei permessi. Puoi anche restituire `'allow'` per approvare automaticamente l'input modificato o `'ask'` per mostrarlo all'utente per l'approvazione

874 874 

875* Includete `hookEventName` in `hookSpecificOutput` per identificare quale tipo di hook è l'output875* Includi `hookEventName` in `hookSpecificOutput` per identificare a quale tipo di hook si riferisce l'output

876 876 

877<h3 id="session-hooks-not-available-in-python">877<h3 id="session-hooks-not-available-in-python">

878 Hook di sessione non disponibili in Python878 Hook di sessione non disponibili in Python

879</h3>879</h3>

880 880 

881`SessionStart` e `SessionEnd` possono essere registrati come hook di callback SDK in TypeScript, ma non sono disponibili nell'SDK Python perché il suo tipo `HookEvent` li omette. In Python, sono disponibili solo come [hook dei comandi shell](/docs/it/hooks#hook-events) definiti nei file di impostazioni come `.claude/settings.json`. Per caricare gli hook dei comandi shell dalla vostra applicazione SDK, includete la fonte di impostazione appropriata con [`setting_sources`](/docs/it/agent-sdk/python#settingsource) o [`settingSources`](/docs/it/agent-sdk/typescript#settingsource):881`SessionStart` e `SessionEnd` possono essere registrati come hook di callback SDK in TypeScript, ma non sono disponibili nell'SDK Python perché il suo tipo `HookEvent` li omette. In Python, sono disponibili solo come [hook di comandi shell](/docs/it/hooks#hook-events) definiti in file di impostazioni come `.claude/settings.json`. Quali file di impostazioni carica la tua applicazione SDK dipende da [`setting_sources`](/docs/it/agent-sdk/python#settingsource) o [`settingSources`](/docs/it/agent-sdk/typescript#settingsource). Se imposti quell'opzione, includi la fonte che contiene gli hook:

882 882 

883<CodeGroup>883<CodeGroup>

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


894 ```894 ```

895</CodeGroup>895</CodeGroup>

896 896 

897Per eseguire la logica di inizializzazione come callback SDK Python, utilizzate il primo messaggio da `client.receive_response()` come trigger.897Per eseguire invece la logica di inizializzazione come callback dell'SDK Python, utilizza il primo messaggio da `client.receive_response()` come trigger.

898 898 

899<h3 id="subagent-permission-prompts-multiplying">899<h3 id="subagent-permission-prompts-multiplying">

900 I prompt di autorizzazione dei subagenti si moltiplicano900 Le richieste di permesso dei subagent si moltiplicano

901</h3>901</h3>

902 902 

903Quando si avviano più subagenti, ognuno potrebbe richiedere autorizzazioni separatamente per le proprie chiamate di strumenti. Per evitare prompt ripetuti, utilizzate gli hook `PreToolUse` per approvare automaticamente strumenti specifici, o configurate regole di autorizzazione, che i subagenti [ereditano dalla conversazione genitore](/docs/it/sub-agents#permission-modes).903Quando avvii più subagent, ognuno potrebbe richiedere permessi separatamente per le proprie chiamate agli strumenti. Per evitare richieste ripetute, utilizza gli hook `PreToolUse` per approvare automaticamente strumenti specifici, oppure configura regole di permesso, che i subagent [ereditano dalla conversazione principale](/docs/it/sub-agents#permission-modes).

904 904 

905<h3 id="recursive-hook-loops-with-subagents">905<h3 id="recursive-hook-loops-with-subagents">

906 Loop ricorsivi di hook con subagenti906 Loop ricorsivi di hook con subagent

907</h3>907</h3>

908 908 

909Un hook `UserPromptSubmit` che avvia subagenti può creare loop infiniti se quei subagenti attivano lo stesso hook. Per prevenire questo:909Un hook `UserPromptSubmit` che avvia subagent può creare loop infiniti se quei subagent attivano lo stesso hook. Per prevenire questo:

910 910 

911* Utilizzate una variabile condivisa o lo stato della sessione per tracciare se siete già all'interno di un subagente911* Utilizza una variabile condivisa o lo stato della sessione per tenere traccia del fatto che ti trovi già all'interno di un subagent

912* Limitate gli hook per l'esecuzione solo per la sessione dell'agente di livello superiore912* Limita gli hook in modo che vengano eseguiti solo per la sessione dell'agente di livello superiore

913 913 

914<h3 id="systemmessage-not-appearing-in-output">914<h3 id="systemmessage-not-appearing-in-output">

915 systemMessage non appare nell'output915 systemMessage non appare nell'output

916</h3>916</h3>

917 917 

918Il campo `systemMessage` mostra un messaggio all'utente, non al modello. Su Claude Code v2.1.227 o successivo, il `systemMessage` di un hook può emergere nel flusso dei messaggi come un [`SDKInformationalMessage`](/docs/it/agent-sdk/typescript#sdkinformationalmessage). Se lo fa dipende dall'evento. Ogni [sezione dell'evento](/docs/it/hooks#hook-events) sulla pagina degli hooks dice come emerge l'output. Per passare il contesto al modello, restituite [`additionalContext`](/docs/it/hooks#add-context-for-claude).918Il campo `systemMessage` mostra un messaggio all'utente, non al modello. Su Claude Code v2.1.227 o successivo, il `systemMessage` di un hook può emergere nel flusso dei messaggi come un [`SDKInformationalMessage`](/docs/it/agent-sdk/typescript#sdkinformationalmessage). Che ciò avvenga dipende dall'evento. La [sezione di ogni evento](/docs/it/hooks#hook-events) nella pagina degli hook indica come emerge l'output. Per passare invece il contesto al modello, restituisci [`additionalContext`](/docs/it/hooks#add-context-for-claude).

919 919 

920Prima della v2.1.227, l'SDK faceva emergere l'output degli hook nel flusso dei messaggi solo per gli hook `SessionStart` e `Setup`. Per qualsiasi altro evento, l'output appariva solo negli eventi del ciclo di vita che [`includeHookEvents`](/docs/it/agent-sdk/typescript#options) (`include_hook_events` in Python) aggiunge. La voce di quell'opzione copre quali eventi del ciclo di vita ogni evento hook produce.920Prima della v2.1.227, l'SDK faceva emergere l'output degli hook nel flusso dei messaggi solo per gli hook `SessionStart` e `Setup`. Per qualsiasi altro evento, l'output appariva solo negli eventi del ciclo di vita che [`includeHookEvents`](/docs/it/agent-sdk/typescript#options) (`include_hook_events` in Python) aggiunge. La voce di quell'opzione descrive quali eventi del ciclo di vita produce ogni evento hook.

921 921 

922Se avete bisogno di far emergere le decisioni degli hook alla vostra applicazione in modo affidabile, registratele separatamente o utilizzate un canale di output dedicato.922Se hai bisogno di far emergere in modo affidabile le decisioni degli hook nella tua applicazione, registrale separatamente nei log o utilizza un canale di output dedicato.

923 923 

924<h2 id="related-resources">924<h2 id="related-resources">

925 Risorse correlate925 Risorse correlate

agent-sdk/python.md +149 −148

Details

44 Funzioni44 Funzioni

45</h2>45</h2>

46 46 

47<Note>I blocchi di firma e i frammenti `async for` / `async with` nudi in questa pagina sono illustrativi. Per eseguirli, avvolgete il corpo in `async def main(): ...` e chiamate `asyncio.run(main())`.</Note>47<Note>I blocchi di firma e i frammenti `async for` / `async with` nudi in questa pagina sono illustrativi. Per eseguirli, avvolgi il corpo in `async def main(): ...` e chiama `asyncio.run(main())`.</Note>

48 48 

49<h3 id="query">49<h3 id="query">

50 `query()`50 `query()`

51</h3>51</h3>

52 52 

53Crea una nuova sessione per ogni interazione con Claude Code per impostazione predefinita. Restituisce un iteratore asincrono che produce messaggi man mano che arrivano. Ogni chiamata a `query()` inizia da zero senza memoria di interazioni precedenti a meno che non passiate `continue_conversation=True` o `resume` in [`ClaudeAgentOptions`](#claudeagentoptions). Vedi [Sessions](/docs/it/agent-sdk/sessions).53Crea una nuova sessione per ogni interazione con Claude Code per impostazione predefinita. Restituisce un iteratore asincrono che produce messaggi man mano che arrivano. Ogni chiamata a `query()` inizia da zero senza memoria di interazioni precedenti a meno che non passi `continue_conversation=True` o `resume` in [`ClaudeAgentOptions`](#claudeagentoptions). Vedi [Sessions](/docs/it/agent-sdk/sessions).

54 54 

55```python theme={null}55```python theme={null}

56async def query(56async def query(


194 `ToolAnnotations`194 `ToolAnnotations`

195</h4>195</h4>

196 196 

197Suggerimenti comportamentali per uno strumento, passati come argomento `annotations` di [`tool()`](#tool). `ToolAnnotations` estende `mcp.types.ToolAnnotations` dell'SDK MCP con un campo `maxResultSizeChars`, e potete scrivere ogni suggerimento in camelCase o snake\_case: `ToolAnnotations(readOnlyHint=True)` e `ToolAnnotations(read_only_hint=True)` sono equivalenti. Potete anche passare un semplice `mcp.types.ToolAnnotations` ovunque l'SDK accetti annotazioni.197Suggerimenti comportamentali per uno strumento, passati come argomento `annotations` di [`tool()`](#tool). `ToolAnnotations` estende `mcp.types.ToolAnnotations` dell'SDK MCP con un campo `maxResultSizeChars`, e puoi scrivere ogni suggerimento in camelCase o snake\_case: `ToolAnnotations(readOnlyHint=True)` e `ToolAnnotations(read_only_hint=True)` sono equivalenti. Per rileggere un suggerimento dall'oggetto, usa la grafia dichiarata dal pacchetto `mcp` installato: `.readOnlyHint` su `mcp` 1.x e `.read_only_hint` su 2.x, mentre `.maxResultSizeChars` funziona su entrambi. Puoi anche passare un semplice `mcp.types.ToolAnnotations` ovunque l'SDK accetti annotazioni.

198 198 

199I nomi snake\_case e il campo tipizzato `maxResultSizeChars` richiedono Python Agent SDK 0.2.140 o successivo. Le versioni da 0.1.31 a 0.2.139 riesportano `mcp.types.ToolAnnotations` senza modifiche. Nelle versioni da 0.1.55 a 0.2.139 potete comunque passare `maxResultSizeChars` come argomento di parola chiave: la classe MCP accetta campi extra e l'SDK invia il valore a Claude Code.199I nomi snake\_case e il campo tipizzato `maxResultSizeChars` richiedono Python Agent SDK 0.2.140 o successivo. Le versioni da 0.1.31 a 0.2.139 riesportano `mcp.types.ToolAnnotations` senza modifiche. Nelle versioni da 0.1.55 a 0.2.139 puoi comunque passare `maxResultSizeChars` come argomento di parola chiave: la classe MCP accetta campi extra e l'SDK invia il valore a Claude Code.

200 200 

201Tutti i campi sono opzionali. I client non dovrebbero fare affidamento sui suggerimenti per decisioni di sicurezza.201Tutti i campi sono opzionali. I client non dovrebbero fare affidamento sui suggerimenti per decisioni di sicurezza.

202 202 


318| Proprietà | Tipo | Descrizione |318| Proprietà | Tipo | Descrizione |

319| :- | :- | :- |319| :- | :- | :- |

320| `session_id` | `str` | Identificatore di sessione univoco |320| `session_id` | `str` | Identificatore di sessione univoco |

321| `summary` | `str` | Titolo di visualizzazione: titolo personalizzato, riepilogo generato automaticamente o primo prompt |321| `summary` | `str` | Titolo di visualizzazione: titolo personalizzato, prompt più recente, riepilogo generato automaticamente o primo prompt |

322| `last_modified` | `int` | Ora dell'ultima modifica in millisecondi dall'epoca |322| `last_modified` | `int` | Ora dell'ultima modifica in millisecondi dall'epoca |

323| `file_size` | `int \| None` | Dimensione del file di sessione in byte (`None` per backend di archiviazione remota) |323| `file_size` | `int \| None` | Dimensione del file di sessione in byte (`None` per backend di archiviazione remota) |

324| `custom_title` | `str \| None` | Titolo della sessione impostato dall'utente |324| `custom_title` | `str \| None` | Titolo della sessione: il titolo impostato dall'utente, o il titolo generato automaticamente quando non ne è impostato nessuno |

325| `first_prompt` | `str \| None` | Primo prompt utente significativo nella sessione |325| `first_prompt` | `str \| None` | Primo prompt utente significativo nella sessione |

326| `git_branch` | `str \| None` | Ramo Git alla fine della sessione |326| `git_branch` | `str \| None` | Branch Git alla fine della sessione |

327| `cwd` | `str \| None` | Directory di lavoro per la sessione |327| `cwd` | `str \| None` | Directory di lavoro per la sessione |

328| `tag` | `str \| None` | Tag della sessione impostato dall'utente (vedi [`tag_session()`](#tag_session)) |328| `tag` | `str \| None` | Tag della sessione impostato dall'utente (vedi [`tag_session()`](#tag_session)) |

329| `created_at` | `int \| None` | Ora di creazione della sessione in millisecondi dall'epoca |329| `created_at` | `int \| None` | Ora di creazione della sessione in millisecondi dall'epoca |


782</h2>782</h2>

783 783 

784<Note>784<Note>

785 **`@dataclass` vs `TypedDict`:** Questo SDK utilizza due tipi di tipi. Le classi decorate con `@dataclass` (come `ResultMessage`, `AgentDefinition`, `TextBlock`) sono istanze di oggetti in fase di esecuzione e supportano l'accesso agli attributi: `msg.result`. Le classi definite con `TypedDict` (come `ThinkingConfigEnabled`, `McpStdioServerConfig`, `SyncHookJSONOutput`) sono **dicts semplici in fase di esecuzione** e richiedono l'accesso alle chiavi: `config["budget_tokens"]`, non `config.budget_tokens`. La sintassi di chiamata `ClassName(field=value)` funziona per entrambi, ma solo le dataclass producono oggetti con attributi.785 **`@dataclass` vs `TypedDict`:** Questo SDK utilizza due tipi di tipi. Le classi decorate con `@dataclass` (come `ResultMessage`, `AgentDefinition`, `TextBlock`) sono istanze di oggetti in fase di esecuzione e supportano l'accesso agli attributi: `msg.result`. Le classi definite con `TypedDict` (come `ThinkingConfigEnabled`, `McpStdioServerConfig`, `SyncHookJSONOutput`) sono **dict semplici in fase di esecuzione** e richiedono l'accesso alle chiavi: `config["budget_tokens"]`, non `config.budget_tokens`. La sintassi di chiamata `ClassName(field=value)` funziona per entrambi, ma solo le dataclass producono oggetti con attributi.

786</Note>786</Note>

787 787 

788<h3 id="sdkmcptool">788<h3 id="sdkmcptool">


919| Proprietà | Tipo | Predefinito | Descrizione |919| Proprietà | Tipo | Predefinito | Descrizione |

920| :- | :- | :- | :- |920| :- | :- | :- | :- |

921| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Configurazione degli strumenti. Usa `{"type": "preset", "preset": "claude_code"}` per gli strumenti predefiniti di Claude Code |921| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Configurazione degli strumenti. Usa `{"type": "preset", "preset": "claude_code"}` per gli strumenti predefiniti di Claude Code |

922| `allowed_tools` | `list[str]` | `[]` | Strumenti da approvare automaticamente senza chiedere. Questo non limita Claude a solo questi strumenti. Se nomini uno dei [strumenti di tracciamento delle attività](/docs/it/agent-sdk/todo-tracking#model-availability) qui, Claude Code opta anche la sessione. Gli altri strumenti non elencati ricadono in `permission_mode` e `can_use_tool`. Usa `disallowed_tools` per bloccare gli strumenti. Vedi [Autorizzazioni](/docs/it/agent-sdk/permissions#allow-and-deny-rules) |922| `allowed_tools` | `list[str]` | `[]` | Strumenti da approvare automaticamente senza chiedere. Questo non limita Claude a solo questi strumenti. Se nomini uno degli [strumenti di tracciamento delle attività](/docs/it/agent-sdk/todo-tracking#model-availability) qui, Claude Code abilita anche la sessione. Gli altri strumenti non elencati passano a `permission_mode` e `can_use_tool`. Usa `disallowed_tools` per bloccare gli strumenti. Vedi [Permessi](/docs/it/agent-sdk/permissions#allow-and-deny-rules) |

923| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Configurazione del prompt di sistema. Passa una stringa per un prompt personalizzato, `{"type": "preset", "preset": "claude_code"}` per il prompt di sistema di Claude Code con `"append"` opzionale, `{"type": "custom", "prompt": "..."}` per un prompt personalizzato che può anche impostare `"snapshot"`, o `{"type": "file", "path": "..."}` per caricare un prompt grande da disco. Vedi [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom), e [`SystemPromptFile`](#systempromptfile) |923| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Configurazione del prompt di sistema. Passa una stringa per un prompt personalizzato, `{"type": "preset", "preset": "claude_code"}` per il prompt di sistema di Claude Code con `"append"` opzionale, `{"type": "custom", "prompt": "..."}` per un prompt personalizzato che può anche impostare `"snapshot"`, o `{"type": "file", "path": "..."}` per caricare un prompt grande da disco. Vedi [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom), e [`SystemPromptFile`](#systempromptfile) |

924| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Configurazioni del server MCP o percorso al file di configurazione |924| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Configurazioni del server MCP o percorso al file di configurazione |

925| `strict_mcp_config` | `bool` | `False` | Quando `True`, usa solo i server passati in `mcp_servers` e ignora il progetto `.mcp.json`, le impostazioni utente, i server MCP forniti dai plugin e i [connettori claude.ai](/docs/it/mcp#use-mcp-servers-from-claude-ai). Mappa al flag CLI `--strict-mcp-config` |925| `strict_mcp_config` | `bool` | `False` | Quando `True`, usa solo i server passati in `mcp_servers` e ignora il progetto `.mcp.json`, le impostazioni utente, i server MCP forniti dai plugin e i [connettori claude.ai](/docs/it/mcp#use-mcp-servers-from-claude-ai). Mappa al flag CLI `--strict-mcp-config` |

926| `permission_mode` | `PermissionMode \| None` | `None` | Modalità di autorizzazione per l'utilizzo dello strumento |926| `permission_mode` | `PermissionMode \| None` | `None` | Modalità di permesso per l'utilizzo degli strumenti |

927| `continue_conversation` | `bool` | `False` | Continua la conversazione più recente |927| `continue_conversation` | `bool` | `False` | Continua la conversazione più recente |

928| `resume` | `str \| None` | `None` | ID della sessione da riprendere |928| `resume` | `str \| None` | `None` | ID della sessione da riprendere |

929| `session_id` | `str \| None` | `None` | Usa un ID di sessione specifico invece di uno generato automaticamente. Deve essere un UUID valido. Non può essere combinato con `continue_conversation` o `resume` a meno che `fork_session` non sia anche impostato |929| `session_id` | `str \| None` | `None` | Usa un ID di sessione specifico invece di uno generato automaticamente. Deve essere un UUID valido. Non può essere combinato con `continue_conversation` o `resume` a meno che `fork_session` non sia anche impostato |

930| `max_turns` | `int \| None` | `None` | Numero massimo di turni agentici (round trip di utilizzo dello strumento) |930| `max_turns` | `int \| None` | `None` | Numero massimo di turni agentici (round trip di utilizzo degli strumenti) |

931| `max_budget_usd` | `float \| None` | `None` | Interrompi la query quando la stima del costo lato client raggiunge questo valore in USD. Conta solo la spesa della chiamata stessa; i totali ripristinati da una sessione ripresa non contano. Per le avvertenze di accuratezza e il comportamento di ripristino, vedi [Traccia costo e utilizzo](/docs/it/agent-sdk/cost-tracking) |931| `max_budget_usd` | `float \| None` | `None` | Interrompi la query quando la stima del costo lato client raggiunge questo valore in USD. Conta solo la spesa della chiamata stessa; i totali ripristinati da una sessione ripresa non contano. Per le avvertenze di accuratezza e il comportamento di ripristino, vedi [Traccia costo e utilizzo](/docs/it/agent-sdk/cost-tracking) |

932| `disallowed_tools` | `list[str]` | `[]` | Strumenti da negare. Un nome semplice come `"Bash"` rimuove lo strumento dal contesto di Claude. Una regola con ambito come `"Bash(rm *)"` lascia lo strumento disponibile e nega le chiamate corrispondenti in ogni modalità di autorizzazione, incluso `bypassPermissions`, per il comando [come scritto](/docs/it/permissions#bash-rule-limits). Vedi [Autorizzazioni](/docs/it/agent-sdk/permissions#allow-and-deny-rules) |932| `disallowed_tools` | `list[str]` | `[]` | Strumenti da negare. Un nome semplice come `"Bash"` rimuove lo strumento dal contesto di Claude. Una regola con ambito come `"Bash(rm *)"` lascia lo strumento disponibile e nega le chiamate corrispondenti in ogni modalità di permesso, incluso `bypassPermissions`, per il comando [come scritto](/docs/it/permissions#bash-rule-limits). Vedi [Permessi](/docs/it/agent-sdk/permissions#allow-and-deny-rules) |

933| `enable_file_checkpointing` | `bool` | `False` | Abilita il tracciamento dei cambiamenti dei file per il rewind. Vedi [File checkpointing](/docs/it/agent-sdk/file-checkpointing) |933| `enable_file_checkpointing` | `bool` | `False` | Abilita il tracciamento dei cambiamenti dei file per il rewind. Vedi [File checkpointing](/docs/it/agent-sdk/file-checkpointing) |

934| `model` | `str \| None` | `None` | Alias del modello Claude o nome completo del modello. Vedi [valori accettati e ID specifici del provider](/docs/it/model-config#available-models) |934| `model` | `str \| None` | `None` | Alias del modello Claude o nome completo del modello. Vedi [valori accettati e ID specifici del provider](/docs/it/model-config#available-models) |

935| `fallback_model` | `str \| None` | `None` | Modello di fallback da utilizzare se il modello primario fallisce. Accetta un elenco separato da virgole. Per indicazioni, vedi [Scegli un modello](/docs/it/agent-sdk/configuration#choose-a-model) |935| `fallback_model` | `str \| None` | `None` | Modello di fallback da utilizzare se il modello primario fallisce. Accetta un elenco separato da virgole. Per indicazioni, vedi [Scegli un modello](/docs/it/agent-sdk/configuration#choose-a-model) |

936| `betas` | `list[SdkBeta]` | `[]` | Funzionalità beta da abilitare. Vedi [`SdkBeta`](#sdkbeta) per le opzioni disponibili |936| `betas` | `list[SdkBeta]` | `[]` | Funzionalità beta da abilitare. Vedi [`SdkBeta`](#sdkbeta) per le opzioni disponibili |

937| `output_format` | `dict[str, Any] \| None` | `None` | Formato di output per risposte strutturate (ad es. `{"type": "json_schema", "schema": {...}}`). Vedi [Output strutturati](/docs/it/agent-sdk/structured-outputs) per i dettagli |937| `output_format` | `dict[str, Any] \| None` | `None` | Formato di output per risposte strutturate (ad es. `{"type": "json_schema", "schema": {...}}`). Vedi [Output strutturati](/docs/it/agent-sdk/structured-outputs) per i dettagli |

938| `permission_prompt_tool_name` | `str \| None` | `None` | Nome dello strumento MCP per i prompt di autorizzazione |938| `permission_prompt_tool_name` | `str \| None` | `None` | Nome dello strumento MCP per le richieste di permesso |

939| `cwd` | `str \| Path \| None` | `None` | Directory di lavoro corrente |939| `cwd` | `str \| Path \| None` | `None` | Directory di lavoro corrente |

940| `cli_path` | `str \| Path \| None` | `None` | Percorso personalizzato all'eseguibile CLI di Claude Code |940| `cli_path` | `str \| Path \| None` | `None` | Percorso personalizzato all'eseguibile CLI di Claude Code |

941| `settings` | `str \| None` | `None` | Percorso al file di impostazioni o una stringa JSON inline |941| `settings` | `str \| None` | `None` | Percorso al file di impostazioni o una stringa JSON inline |

942| `add_dirs` | `list[str \| Path]` | `[]` | Directory aggiuntive a cui Claude può accedere. L'SDK passa ogni voce a Claude Code come `--add-dir`, quindi con l'impostazione della fonte `project` Claude Code [carica anche le skills, i comandi e i subagenti della directory](/docs/it/permissions#additional-directories-grant-file-access-not-configuration) |942| `add_dirs` | `list[str \| Path]` | `[]` | Directory aggiuntive a cui Claude può accedere. L'SDK passa ogni voce a Claude Code come `--add-dir`, quindi con la fonte di impostazioni `project` Claude Code [carica anche le skill, i comandi e i subagent della directory](/docs/it/permissions#additional-directories-grant-file-access-not-configuration) |

943| `env` | `dict[str, str]` | `{}` | Variabili di ambiente unite in cima all'ambiente del processo ereditato. Vedi [Variabili di ambiente](/docs/it/env-vars) per le variabili che la CLI sottostante legge, e [Gestisci risposte API lente o bloccate](#handle-slow-or-stalled-api-responses) per le variabili relative ai timeout. Imposta `CLAUDE_AGENT_SDK_CLIENT_APP` per identificare la tua app nell'intestazione User-Agent |943| `env` | `dict[str, str]` | `{}` | Variabili d'ambiente unite in cima all'ambiente del processo ereditato. Vedi [Variabili d'ambiente](/docs/it/env-vars) per le variabili che la CLI sottostante legge, e [Gestisci risposte API lente o bloccate](#handle-slow-or-stalled-api-responses) per le variabili relative ai timeout. Imposta `CLAUDE_AGENT_SDK_CLIENT_APP` per identificare la tua app nell'intestazione User-Agent |

944| `extra_args` | `dict[str, str \| None]` | `{}` | Argomenti CLI aggiuntivi da passare direttamente alla CLI |944| `extra_args` | `dict[str, str \| None]` | `{}` | Argomenti CLI aggiuntivi da passare direttamente alla CLI |

945| `max_buffer_size` | `int \| None` | `None` | Byte massimi durante il buffering dell'stdout della CLI |945| `max_buffer_size` | `int \| None` | `None` | Byte massimi durante il buffering dello stdout della CLI |

946| `debug_stderr` | `Any` | `sys.stderr` | *Deprecato* - L'SDK ignora questo valore. Usa il callback `stderr` per l'output stderr della CLI |946| `debug_stderr` | `Any` | `sys.stderr` | *Deprecato* - L'SDK ignora questo valore. Usa il callback `stderr` per l'output stderr della CLI |

947| `stderr` | `Callable[[str], None] \| None` | `None` | Funzione di callback per l'output stderr dalla CLI |947| `stderr` | `Callable[[str], None] \| None` | `None` | Funzione di callback per l'output stderr dalla CLI |

948| `can_use_tool` | [`CanUseTool`](#canusetool) ` \| None` | `None` | Funzione di callback per l'autorizzazione dello strumento, invocata solo quando il [flusso di autorizzazione](/docs/it/agent-sdk/permissions#how-permissions-are-evaluated) ricade in un prompt. Non invocata per le chiamate auto-approvate da `allowed_tools`, regole di autorizzazione, o `permission_mode`. Una regola di autorizzazione non pre-approva le [azioni che nessuna modalità auto-approva](/docs/it/permission-modes#actions-no-mode-auto-approves). Vedi [`CanUseTool`](#canusetool) per i dettagli |948| `can_use_tool` | [`CanUseTool`](#canusetool) ` \| None` | `None` | Funzione di callback per i permessi degli strumenti, invocata solo quando il [flusso dei permessi](/docs/it/agent-sdk/permissions#how-permissions-are-evaluated) arriva a una richiesta di permesso. Non invocata per le chiamate approvate automaticamente da `allowed_tools`, regole di consenso, o `permission_mode`. Una regola di consenso non pre-approva le [azioni che nessuna modalità approva automaticamente](/docs/it/permission-modes#actions-no-mode-auto-approves). Vedi [`CanUseTool`](#canusetool) per i dettagli |

949| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | Configurazioni hook per intercettare gli eventi |949| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | Configurazioni degli hook per intercettare gli eventi |

950| `user` | `str \| None` | `None` | Su piattaforme POSIX, l'account utente del sistema operativo in cui viene eseguito il subprocess Claude Code. Claude Code mantiene l'ambiente del processo genitore, incluso `HOME`, e viene eseguito in `cwd` |950| `user` | `str \| None` | `None` | Su piattaforme POSIX, l'account utente del sistema operativo con cui viene eseguito il subprocess Claude Code. Claude Code mantiene l'ambiente del processo genitore, incluso `HOME`, e viene eseguito in `cwd` |

951| `include_partial_messages` | `bool` | `False` | Includi eventi di streaming di messaggi parziali. Se abilitato, i messaggi [`StreamEvent`](#streamevent) vengono prodotti |951| `include_partial_messages` | `bool` | `False` | Includi eventi di streaming di messaggi parziali. Se abilitato, vengono prodotti i messaggi [`StreamEvent`](#streamevent) |

952| `include_hook_events` | `bool` | `False` | Includi eventi del ciclo di vita dei hook nel flusso di messaggi come oggetti `HookEventMessage` |952| `include_hook_events` | `bool` | `False` | Includi eventi del ciclo di vita degli hook nel flusso di messaggi come oggetti `HookEventMessage` |

953| `forward_subagent_text` | `bool` | `False` | Inoltra i blocchi di testo e pensiero dei subagenti nel flusso di messaggi. Senza questa opzione, Claude Code emette blocchi `tool_use` e `tool_result` dei subagenti ma non testo o pensiero. Richiede Python Agent SDK 0.2.140 o successivo |953| `forward_subagent_text` | `bool` | `False` | Inoltra i blocchi di testo e di ragionamento dei subagent nel flusso di messaggi. Senza questa opzione, Claude Code emette i blocchi `tool_use` e `tool_result` dei subagent ma non testo o ragionamento. Richiede Python Agent SDK 0.2.140 o successivo |

954| `verbatim_prompts` | `bool` | `False` | Consegna ogni prompt come scritto. L'SDK invia ogni messaggio utente con `client_composed` impostato a `True`. Vedi [`client_composed`](/docs/it/agent-sdk/typescript#sdkusermessage) per ciò che Claude Code salta su quei messaggi. Usa questa opzione quando il testo del prompt include contenuto che l'utente finale non ha digitato. Per il controllo per turno, lascialo disattivato e imposta `"client_composed": True` su singoli messaggi trasmessi invece. Mentre l'opzione è attiva, l'SDK sovrascrive qualsiasi valore `client_composed` che imposti. Richiede Python Agent SDK 0.2.158 o successivo e Claude Code v2.1.248 o successivo; la CLI fornita con quelle versioni dell'SDK soddisfa il requisito di Claude Code |954| `verbatim_prompts` | `bool` | `False` | Consegna ogni prompt come scritto. L'SDK invia ogni messaggio utente con `client_composed` impostato a `True`. Vedi [`client_composed`](/docs/it/agent-sdk/typescript#sdkusermessage) per ciò che Claude Code salta su quei messaggi. Usa questa opzione quando il testo del prompt include contenuto che l'utente finale non ha digitato. Per il controllo per turno, lasciala disattivata e imposta invece `"client_composed": True` su singoli messaggi trasmessi in streaming. Mentre l'opzione è attiva, l'SDK sovrascrive qualsiasi valore `client_composed` che imposti. Richiede Python Agent SDK 0.2.158 o successivo e Claude Code v2.1.248 o successivo; la CLI fornita con quelle versioni dell'SDK soddisfa il requisito di Claude Code |

955| `fork_session` | `bool` | `False` | Quando si riprende con `resume`, esegui il fork a un nuovo ID di sessione invece di continuare la sessione originale |955| `fork_session` | `bool` | `False` | Quando si riprende con `resume`, esegui il fork a un nuovo ID di sessione invece di continuare la sessione originale |

956| `resume_session_at` | `str \| None` | `None` | Quando si riprende, carica la conversazione solo fino a e includendo il messaggio con questo UUID. Usa con `resume`, e solitamente `fork_session`, per ramificarsi da un punto precedente. Richiede Python Agent SDK 0.2.137 o successivo |956| `resume_session_at` | `str \| None` | `None` | Quando si riprende, carica la conversazione solo fino al messaggio con questo UUID, incluso. Usa con `resume`, e solitamente `fork_session`, per creare un branch da un punto precedente. Richiede Python Agent SDK 0.2.137 o successivo |

957| `resume_drops_turn` | `str \| None` | `None` | UUID del prompt utente il cui turno un troncamento `resume_session_at` scarta. Quando impostato, la CLI rifiuta la ripresa se l'intervallo scartato contiene voci non attribuibili a quel turno. Richiede Python Agent SDK 0.2.137 o successivo e Claude Code v2.1.223 o successivo; la CLI fornita con quelle versioni dell'SDK soddisfa il requisito di Claude Code |957| `resume_drops_turn` | `str \| None` | `None` | UUID del prompt utente il cui turno un troncamento `resume_session_at` scarta. Quando impostato, la CLI rifiuta la ripresa se l'intervallo scartato contiene voci non attribuibili a quel turno. Richiede Python Agent SDK 0.2.137 o successivo e Claude Code v2.1.223 o successivo; la CLI fornita con quelle versioni dell'SDK soddisfa il requisito di Claude Code |

958| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagenti definiti programmaticamente |958| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagent definiti programmaticamente |

959| `plugins` | `list[SdkPluginConfig]` | `[]` | Carica plugin personalizzati da percorsi locali. Vedi [Plugin](/docs/it/agent-sdk/plugins) per i dettagli |959| `plugins` | `list[SdkPluginConfig]` | `[]` | Carica plugin personalizzati da percorsi locali. Vedi [Plugin](/docs/it/agent-sdk/plugins) per i dettagli |

960| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Configura il comportamento della sandbox a livello di programmazione. Vedi [Impostazioni sandbox](#sandboxsettings) per i dettagli |960| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Configura il comportamento della sandbox a livello di programmazione. Vedi [Impostazioni sandbox](#sandboxsettings) per i dettagli |

961| `setting_sources` | `list[SettingSource] \| None` | `None` (Impostazioni predefinite CLI: tutte le fonti) | Controlla quali impostazioni del filesystem caricare. Passa `[]` per disabilitare le impostazioni utente, progetto e locali. Con `skills` impostato e questo campo non impostato, solo le fonti utente e progetto si caricano. Imposta `setting_sources` esplicitamente per mantenere le impostazioni locali. La politica gestita dall'endpoint si carica indipendentemente; le impostazioni gestite dal server vengono recuperate quando la sessione si autentica con una credenziale organizzativa su una [configurazione idonea](/docs/it/server-managed-settings#platform-availability). Per gli input letti indipendentemente da questa opzione, vedi [Cosa settingSources non controlla](/docs/it/agent-sdk/claude-code-features#what-settingsources-does-not-control) |961| `setting_sources` | `list[SettingSource] \| None` | `None` (Impostazioni predefinite CLI: tutte le fonti) | Controlla quali impostazioni del filesystem caricare. Passa `[]` per disabilitare le impostazioni utente, progetto e locali. Con `skills` impostato e questo campo non impostato, si caricano solo le fonti utente e progetto. Imposta `setting_sources` esplicitamente per mantenere le impostazioni locali. La politica gestita dall'endpoint si carica indipendentemente; le impostazioni gestite dal server vengono recuperate quando la sessione si autentica con una credenziale dell'organizzazione su una [configurazione idonea](/docs/it/server-managed-settings#platform-availability). Per gli input letti indipendentemente da questa opzione, vedi [Cosa settingSources non controlla](/docs/it/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

962| `skills` | `list[str] \| Literal["all"] \| None` | `None` | Skills disponibili per la sessione. Passa `"all"` per abilitare ogni skill scoperta, o un elenco di nomi di skill. Passa solo nomi esatti. L'SDK rifiuta i nomi malformati e in forma wildcard con un `ValueError` prima di avviare il processo Claude Code; questo controllo richiede Python Agent SDK 0.2.129 o successivo. Quando impostato, l'SDK aggiunge lo strumento Skill a `allowed_tools` automaticamente. Se passi anche `tools`, includi `"Skill"` in quell'elenco. Vedi [Skills](/docs/it/agent-sdk/skills) |962| `skills` | `list[str] \| Literal["all"] \| None` | `None` | Skill disponibili per la sessione. Passa `"all"` per abilitare ogni skill scoperta, o un elenco di nomi di skill. Passa solo nomi esatti. L'SDK rifiuta i nomi malformati e in forma wildcard con un `ValueError` prima di avviare il processo Claude Code; questo controllo richiede Python Agent SDK 0.2.129 o successivo. Quando impostato, l'SDK aggiunge automaticamente lo strumento Skill a `allowed_tools`. Se passi anche `tools`, includi `"Skill"` in quell'elenco. Vedi [Skill](/docs/it/agent-sdk/skills) |

963| `max_thinking_tokens` | `int \| None` | `None` | *Deprecato* - Token massimi per i blocchi di pensiero. Usa `thinking` invece |963| `max_thinking_tokens` | `int \| None` | `None` | *Deprecato* - Token massimi per i blocchi di ragionamento. Usa invece `thinking` |

964| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Controlla il comportamento del pensiero esteso. Ha la precedenza su `max_thinking_tokens` |964| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Controlla il comportamento del ragionamento esteso. Ha la precedenza su `max_thinking_tokens` |

965| `effort` | [`EffortLevel`](#effortlevel) ` \| None` | `None` | Livello di sforzo per la profondità del pensiero. Vedi [regola il livello di sforzo](/docs/it/model-config#adjust-effort-level) |965| `effort` | [`EffortLevel`](#effortlevel) ` \| None` | `None` | Livello di sforzo per la profondità del ragionamento. Vedi [regola il livello di sforzo](/docs/it/model-config#adjust-effort-level) |

966| `session_store` | [`SessionStore`](/docs/it/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | Specchia i trascritti di sessione in un backend esterno in modo che qualsiasi host possa riprenderli. Vedi [Persisti le sessioni nell'archiviazione esterna](/docs/it/agent-sdk/session-storage) |966| `session_store` | [`SessionStore`](/docs/it/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | Replica le trascrizioni di sessione in un backend esterno in modo che un altro host possa riprenderle. Vedi [Persisti le sessioni nell'archiviazione esterna](/docs/it/agent-sdk/session-storage) |

967| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | Quando eseguire il flush delle voci di trascritto mirrorato a `session_store`. `"batched"` esegue il flush una volta per turno o quando il buffer si riempie; `"eager"` attiva un flush in background dopo ogni frame. Ignorato quando `session_store` è `None` |967| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | Quando eseguire il flush delle voci di trascrizione replicate in `session_store`. `"batched"` esegue il flush una volta per turno o quando il buffer si riempie; `"eager"` attiva un flush in background dopo ogni frame. Ignorato quando `session_store` è `None` |

968| `load_timeout_ms` | `int` | `60000` | Timeout per chiamata per `session_store.load()` e `list_subkeys()` durante la materializzazione della ripresa, in millisecondi |968| `load_timeout_ms` | `int` | `60000` | Timeout per chiamata per `session_store.load()` e `list_subkeys()` durante la materializzazione della ripresa, in millisecondi |

969| `task_budget` | `TaskBudget \| None` | `None` | Budget di token lato API. Inviato come `output_config.task_budget` con l'intestazione beta `task-budgets-2026-03-13`. Passa `{"total": <int>}`. |969| `task_budget` | `TaskBudget \| None` | `None` | Budget di token lato API. Inviato come `output_config.task_budget` con l'intestazione beta `task-budgets-2026-03-13`. Passa `{"total": <int>}`. |

970 970 


972 Gestisci risposte API lente o bloccate972 Gestisci risposte API lente o bloccate

973</h4>973</h4>

974 974 

975Il subprocess CLI legge diverse variabili di ambiente che controllano i timeout dell'API e il rilevamento dei blocchi. Passale attraverso `ClaudeAgentOptions.env`:975Il subprocess CLI legge diverse variabili d'ambiente che controllano i timeout dell'API e il rilevamento dei blocchi. Passale attraverso `ClaudeAgentOptions.env`:

976 976 

977```python theme={null}977```python theme={null}

978from claude_agent_sdk import ClaudeAgentOptions978from claude_agent_sdk import ClaudeAgentOptions


986)986)

987```987```

988 988 

989* `API_TIMEOUT_MS`: timeout per richiesta sul client Anthropic, in millisecondi. Predefinito `600000`. Si applica al ciclo principale e a tutti i subagenti.989* `API_TIMEOUT_MS`: timeout per richiesta sul client Anthropic, in millisecondi. Predefinito `600000`. Si applica al ciclo principale e a tutti i subagent.

990* `CLAUDE_CODE_MAX_RETRIES`: numero massimo di tentativi API. Predefinito `10`, limitato a `15`. Ogni tentativo ottiene la propria finestra `API_TIMEOUT_MS`, quindi il tempo di parete nel caso peggiore è approssimativamente `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` più backoff. Per esecuzioni incustodite che devono attendere interruzioni più lunghe, imposta [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/it/errors#tune-retry-behavior): ritenta gli errori di capacità transitori indefinitamente e, a partire da Claude Code v2.1.199, aumenta il valore predefinito per altri errori transitori a `300` e rimuove il limite su questa variabile.990* `CLAUDE_CODE_MAX_RETRIES`: numero massimo di nuovi tentativi API. Predefinito `10`, limitato a `15`. Ogni nuovo tentativo ottiene la propria finestra `API_TIMEOUT_MS`, quindi il tempo reale nel caso peggiore è approssimativamente `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` più backoff. Per esecuzioni incustodite che devono attendere interruzioni più lunghe, imposta [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/it/errors#tune-retry-behavior): riprova indefinitamente in caso di errori di capacità transitori e, a partire da Claude Code v2.1.199, aumenta il valore predefinito per altri errori transitori a `300` e rimuove il limite su questa variabile.

991* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog di blocco per i subagenti. Mentre il watchdog del flusso è attivo, il predefinito è `CLAUDE_STREAM_IDLE_TIMEOUT_MS` più 5 minuti, che ammonta a `600000` a meno che non aumenti quella variabile. Con il watchdog del flusso disattivato, il predefinito è `600000`. Prima di v2.1.257, il predefinito era sempre `600000`.991* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog di blocco per i subagent. Mentre il watchdog del flusso è attivo, il predefinito è `CLAUDE_STREAM_IDLE_TIMEOUT_MS` più 5 minuti, che ammonta a `600000` a meno che non aumenti quella variabile. Con il watchdog del flusso disattivato, il predefinito è `600000`. Prima di v2.1.257, il predefinito era sempre `600000`.

992 992 

993 Il timer si ripristina su ogni evento di flusso. In caso di blocco, Claude Code interrompe il subagente e segnala il blocco al genitore. Per un subagente in background, contrassegna anche l'attività come non riuscita e allega qualsiasi risultato parziale.993 Il timer si azzera a ogni evento del flusso. In caso di blocco, Claude Code interrompe il subagent e segnala il blocco al genitore. Per un subagent in background, contrassegna anche l'attività come non riuscita e allega qualsiasi risultato parziale.

994* `CLAUDE_ENABLE_STREAM_WATCHDOG` con `CLAUDE_STREAM_IDLE_TIMEOUT_MS`: watchdog del flusso che interrompe la richiesta quando le intestazioni sono arrivate ma il corpo della risposta smette di trasmettere. Il watchdog è attivo per impostazione predefinita per tutti i provider; imposta `CLAUDE_ENABLE_STREAM_WATCHDOG=0` per disabilitarlo. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` predefinito a `300000` e viene bloccato a quel minimo. Dopo l'interruzione, [Tentativi automatici](/docs/it/errors#automatic-retries) copre cosa Claude Code fa, in base a quanto la risposta aveva progredito.994* `CLAUDE_ENABLE_STREAM_WATCHDOG` con `CLAUDE_STREAM_IDLE_TIMEOUT_MS`: watchdog del flusso che interrompe la richiesta quando le intestazioni sono arrivate ma il corpo della risposta smette di essere trasmesso in streaming. Il watchdog è attivo per impostazione predefinita per tutti i provider; imposta `CLAUDE_ENABLE_STREAM_WATCHDOG=0` per disabilitarlo. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` ha come predefinito `300000` e non può scendere sotto quel minimo. Dopo l'interruzione, [Nuovi tentativi automatici](/docs/it/errors#automatic-retries) descrive cosa fa Claude Code, in base a quanto la risposta era avanzata.

995 995 

996 Mentre il watchdog attende una risposta che un gateway dietro `ANTHROPIC_BASE_URL` tiene aperta con ping keep-alive, un host che imposta `include_partial_messages` continua a ricevere messaggi [`StreamEvent`](#streamevent) di `ping`. Leggi quei frame come vivacità piuttosto che cronometrare la sessione su silenzio. Prima di v2.1.257, i frame si fermavano 5 minuti dopo l'ultimo evento di flusso reale.996 Mentre il watchdog attende una risposta che un gateway dietro `ANTHROPIC_BASE_URL` tiene aperta con ping keep-alive, un host che imposta `include_partial_messages` continua a ricevere messaggi [`StreamEvent`](#streamevent) di `ping`. Interpreta quei frame come segnali di attività invece di far scadere la sessione per inattività. Prima di v2.1.257, i frame si fermavano 5 minuti dopo l'ultimo evento di flusso reale.

997 997 

998<h3 id="outputformat">998<h3 id="outputformat">

999 `OutputFormat`999 `OutputFormat`


1035| `preset` | Sì | Deve essere `"claude_code"` per utilizzare il prompt di sistema di Claude Code |1035| `preset` | Sì | Deve essere `"claude_code"` per utilizzare il prompt di sistema di Claude Code |

1036| `append` | No | Istruzioni aggiuntive da aggiungere al prompt di sistema preset |1036| `append` | No | Istruzioni aggiuntive da aggiungere al prompt di sistema preset |

1037| `exclude_dynamic_sections` | No | Sposta il contesto per utente, come la posizione della memoria automatica, dal prompt di sistema nel primo messaggio utente. Migliora il riutilizzo della cache dei prompt tra utenti e macchine. Vedi [Modifica i prompt di sistema](/docs/it/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |1037| `exclude_dynamic_sections` | No | Sposta il contesto per utente, come la posizione della memoria automatica, dal prompt di sistema nel primo messaggio utente. Migliora il riutilizzo della cache dei prompt tra utenti e macchine. Vedi [Modifica i prompt di sistema](/docs/it/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

1038| `snapshot` | No | Imposta a `False` per ricostruire il prompt di sistema su ogni richiesta invece di [riutilizzare il prompt che la sessione ha registrato alla sua prima richiesta](/docs/it/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session). Richiede `claude-agent-sdk` v0.2.153 o successivo |1038| `snapshot` | No | Imposta a `False` per ricostruire il prompt di sistema a ogni richiesta invece di [riutilizzare il prompt che la sessione ha registrato alla sua prima richiesta](/docs/it/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session). Richiede `claude-agent-sdk` v0.2.153 o successivo |

1039 1039 

1040<h3 id="systempromptcustom">1040<h3 id="systempromptcustom">

1041 `SystemPromptCustom`1041 `SystemPromptCustom`


1053| Campo | Obbligatorio | Descrizione |1053| Campo | Obbligatorio | Descrizione |

1054| :- | :- | :- |1054| :- | :- | :- |

1055| `type` | Sì | Deve essere `"custom"` |1055| `type` | Sì | Deve essere `"custom"` |

1056| `prompt` | Sì | Il testo del prompt di sistema. Passato alla CLI come argomento della riga di comando, quindi i [limiti di lunghezza della riga di comando](#systempromptfile) si applicano |1056| `prompt` | Sì | Il testo del prompt di sistema. Passato alla CLI come argomento della riga di comando, quindi si applicano i [limiti di lunghezza della riga di comando](#systempromptfile) |

1057| `snapshot` | No | Uguale a [`SystemPromptPreset.snapshot`](#systempromptpreset), applicato a `prompt` |1057| `snapshot` | No | Uguale a [`SystemPromptPreset.snapshot`](#systempromptpreset), applicato a `prompt` |

1058 1058 

1059<h3 id="systempromptfile">1059<h3 id="systempromptfile">

1060 `SystemPromptFile`1060 `SystemPromptFile`

1061</h3>1061</h3>

1062 1062 

1063Configurazione per il caricamento di un prompt di sistema personalizzato da un file invece di passarlo come stringa. L'SDK mappa questo al flag CLI [`--system-prompt-file`](/docs/it/cli-reference#system-prompt-flags). Usa il modulo file quando il prompt è grande: l'SDK passa una stringa `system_prompt` sull'argv del subprocess CLI, che è soggetto ai limiti di lunghezza della riga di comando del sistema operativo prima che l'SDK invii qualsiasi richiesta API. Su Linux un singolo argomento più lungo di circa 128 KB fallisce al spawn del processo con `Argument list too long`. Su Windows l'intera riga di comando è limitata a circa 32 KB, quindi il modulo stringa fallisce a una soglia inferiore.1063Configurazione per il caricamento di un prompt di sistema personalizzato da un file invece di passarlo come stringa. L'SDK mappa questo al flag CLI [`--system-prompt-file`](/docs/it/cli-reference#system-prompt-flags). Usa la forma file quando il prompt è grande: l'SDK passa una stringa `system_prompt` sull'argv del subprocess CLI, che è soggetto ai limiti di lunghezza della riga di comando del sistema operativo prima che l'SDK invii qualsiasi richiesta API. Su Linux un singolo argomento più lungo di circa 128 KB fallisce all'avvio del processo con `Argument list too long`. Su Windows l'intera riga di comando è limitata a circa 32 KB, quindi la forma stringa fallisce a una soglia inferiore.

1064 1064 

1065```python theme={null}1065```python theme={null}

1066class SystemPromptFile(TypedDict):1066class SystemPromptFile(TypedDict):


1077 `SettingSource`1077 `SettingSource`

1078</h3>1078</h3>

1079 1079 

1080Controlla quali fonti di configurazione basate su filesystem l'SDK carica le impostazioni da.1080Controlla da quali fonti di configurazione basate su filesystem l'SDK carica le impostazioni.

1081 1081 

1082```python theme={null}1082```python theme={null}

1083SettingSource = Literal["user", "project", "local"]1083SettingSource = Literal["user", "project", "local"]


1086| Valore | Descrizione | Posizione |1086| Valore | Descrizione | Posizione |

1087| :- | :- | :- |1087| :- | :- | :- |

1088| `"user"` | Impostazioni utente globali | `~/.claude/settings.json` |1088| `"user"` | Impostazioni utente globali | `~/.claude/settings.json` |

1089| `"project"` | Impostazioni di progetto condivise (controllate dalla versione) | `.claude/settings.json` |1089| `"project"` | Impostazioni di progetto condivise (sotto controllo di versione) | `.claude/settings.json` |

1090| `"local"` | Impostazioni di progetto locali, gitignored quando Claude Code salva un'impostazione in essa | `.claude/settings.local.json` |1090| `"local"` | Impostazioni di progetto locali, aggiunte a gitignore quando Claude Code vi salva un'impostazione | `.claude/settings.local.json` |

1091 1091 

1092<h4 id="default-behavior">1092<h4 id="default-behavior">

1093 Comportamento predefinito1093 Comportamento predefinito

1094</h4>1094</h4>

1095 1095 

1096Quando `setting_sources` è omesso o `None` e `skills` non è impostato, `query()` carica le stesse impostazioni del filesystem della CLI di Claude Code: utente, progetto e locale. Con `skills` impostato, la riga [`setting_sources`](#claudeagentoptions) descrive il valore predefinito corrente. La politica gestita dall'endpoint viene caricata in tutti i casi; le impostazioni gestite dal server vengono recuperate quando la sessione si autentica con una credenziale organizzativa su una [configurazione idonea](/docs/it/server-managed-settings#platform-availability). Per ulteriori informazioni, vedi [Cosa settingSources non controlla](/docs/it/agent-sdk/claude-code-features#what-settingsources-does-not-control).1096Quando `setting_sources` è omesso o `None` e `skills` non è impostato, `query()` carica le stesse impostazioni del filesystem della CLI di Claude Code: utente, progetto e locale. Con `skills` impostato, la riga [`setting_sources`](#claudeagentoptions) descrive il valore predefinito corrente. La politica gestita dall'endpoint viene caricata in tutti i casi; le impostazioni gestite dal server vengono recuperate quando la sessione si autentica con una credenziale dell'organizzazione su una [configurazione idonea](/docs/it/server-managed-settings#platform-availability). Per ulteriori informazioni, vedi [Cosa settingSources non controlla](/docs/it/agent-sdk/claude-code-features#what-settingsources-does-not-control).

1097 1097 

1098<h4 id="why-use-setting_sources">1098<h4 id="why-use-setting_sources">

1099 Perché usare setting\_sources1099 Perché usare setting\_sources


1192 `AgentDefinition`1192 `AgentDefinition`

1193</h3>1193</h3>

1194 1194 

1195Configurazione per un subagente definito programmaticamente.1195Configurazione per un subagent definito programmaticamente.

1196 1196 

1197```python theme={null}1197```python theme={null}

1198@dataclass1198@dataclass


1216| :- | :- | :- |1216| :- | :- | :- |

1217| `description` | Sì | Descrizione in linguaggio naturale di quando utilizzare questo agente |1217| `description` | Sì | Descrizione in linguaggio naturale di quando utilizzare questo agente |

1218| `prompt` | Sì | Il prompt di sistema dell'agente |1218| `prompt` | Sì | Il prompt di sistema dell'agente |

1219| `tools` | No | Array di nomi di strumenti consentiti. Se omesso, eredita ogni [strumento disponibile ai subagenti](/docs/it/sub-agents#available-tools) |1219| `tools` | No | Array di nomi di strumenti consentiti. Se omesso, eredita ogni [strumento disponibile ai subagent](/docs/it/sub-agents#available-tools) |

1220| `disallowedTools` | No | Array di nomi di strumenti da rimuovere dal set di strumenti dell'agente. Sono accettati anche i pattern a livello di server MCP: `mcp__server` o `mcp__server__*` rimuove ogni strumento da quel server, e `mcp__*` rimuove ogni strumento MCP da qualsiasi server |1220| `disallowedTools` | No | Array di nomi di strumenti da rimuovere dal set di strumenti dell'agente. Sono accettati anche i pattern a livello di server MCP: `mcp__server` o `mcp__server__*` rimuove ogni strumento da quel server, e `mcp__*` rimuove ogni strumento MCP da qualsiasi server |

1221| `model` | No | Override del modello per questo agente. Accetta un alias come `"sonnet"`, `"opus"`, `"haiku"`, o `"inherit"`, o un ID modello completo. Quando lo ometti, Claude Code sceglie il modello nell'[ordine del modello subagente](/docs/it/sub-agents#choose-a-model) |1221| `model` | No | Override del modello per questo agente. Accetta un alias come `"sonnet"`, `"opus"`, `"haiku"`, o `"inherit"`, o un ID modello completo. Quando lo ometti, Claude Code sceglie il modello secondo l'[ordine dei modelli dei subagent](/docs/it/sub-agents#choose-a-model) |

1222| `skills` | No | Elenco dei nomi di skills da precaricare nel contesto dell'agente all'avvio. Le skills non elencate rimangono invocabili attraverso lo strumento Skill |1222| `skills` | No | Elenco dei nomi di skill da precaricare nel contesto dell'agente all'avvio. Le skill non elencate rimangono invocabili attraverso lo strumento Skill |

1223| `memory` | No | Fonte di memoria per questo agente: `"user"`, `"project"`, o `"local"` |1223| `memory` | No | Fonte di memoria per questo agente: `"user"`, `"project"`, o `"local"` |

1224| `mcpServers` | No | Server MCP disponibili per questo agente. Ogni voce è un nome di server o un dict `{name: config}` inline |1224| `mcpServers` | No | Server MCP disponibili per questo agente. Ogni voce è un nome di server o un dict `{name: config}` inline |

1225| `initialPrompt` | No | Auto-inviato come il primo turno utente quando questo agente viene eseguito come agente del thread principale |1225| `initialPrompt` | No | Inviato automaticamente come primo turno utente quando questo agente viene eseguito come agente del thread principale |

1226| `maxTurns` | No | Numero massimo di turni agentici prima che l'agente si fermi |1226| `maxTurns` | No | Numero massimo di turni agentici prima che l'agente si fermi |

1227| `background` | No | Esegui questo agente come attività in background non bloccante quando invocato |1227| `background` | No | Esegui questo agente come attività in background non bloccante quando invocato |

1228| `effort` | No | Livello di sforzo di ragionamento per questo agente. Accetta un livello denominato o un numero intero. Vedi [`EffortLevel`](#effortlevel) |1228| `effort` | No | Livello di sforzo di ragionamento per questo agente. Accetta un livello denominato o un numero intero. Vedi [`EffortLevel`](#effortlevel) |

1229| `permissionMode` | No | Modalità di autorizzazione per l'esecuzione dello strumento all'interno di questo agente. Le [regole di eredità del subagente](/docs/it/agent-sdk/permissions#available-modes) decidono quando si applica. Vedi [`PermissionMode`](#permissionmode) |1229| `permissionMode` | No | Modalità di permesso per l'esecuzione degli strumenti all'interno di questo agente. Le [regole di ereditarietà dei subagent](/docs/it/agent-sdk/permissions#available-modes) decidono quando si applica. Vedi [`PermissionMode`](#permissionmode) |

1230 1230 

1231<Note>1231<Note>

1232 I nomi dei campi `AgentDefinition` usano camelCase, come `disallowedTools`, `permissionMode` e `maxTurns`. Questi nomi si mappano direttamente al formato wire condiviso con TypeScript SDK. Questo differisce da `ClaudeAgentOptions`, che usa Python snake\_case per i campi di livello superiore equivalenti come `disallowed_tools` e `permission_mode`. Poiché `AgentDefinition` è una dataclass, passare una parola chiave snake\_case genera un `TypeError` al momento della costruzione.1232 I nomi dei campi di `AgentDefinition` usano camelCase, come `disallowedTools`, `permissionMode` e `maxTurns`. Questi nomi si mappano direttamente al formato wire condiviso con TypeScript SDK. Questo differisce da `ClaudeAgentOptions`, che usa lo snake\_case di Python per i campi di livello superiore equivalenti come `disallowed_tools` e `permission_mode`. Poiché `AgentDefinition` è una dataclass, passare una parola chiave snake\_case genera un `TypeError` al momento della costruzione.

1233</Note>1233</Note>

1234 1234 

1235<h3 id="permissionmode">1235<h3 id="permissionmode">

1236 `PermissionMode`1236 `PermissionMode`

1237</h3>1237</h3>

1238 1238 

1239Modalità di autorizzazione per controllare l'esecuzione dello strumento.1239Modalità di permesso per controllare l'esecuzione degli strumenti.

1240 1240 

1241```python theme={null}1241```python theme={null}

1242PermissionMode = Literal[1242PermissionMode = Literal[


1253 `EffortLevel`1253 `EffortLevel`

1254</h3>1254</h3>

1255 1255 

1256Livelli di sforzo per guidare la profondità del pensiero.1256Livelli di sforzo per guidare la profondità del ragionamento.

1257 1257 

1258```python theme={null}1258```python theme={null}

1259EffortLevel = Literal[1259EffortLevel = Literal[


1269 `CanUseTool`1269 `CanUseTool`

1270</h3>1270</h3>

1271 1271 

1272Alias di tipo per le funzioni di callback di autorizzazione dello strumento.1272Alias di tipo per le funzioni di callback dei permessi degli strumenti.

1273 1273 

1274```python theme={null}1274```python theme={null}

1275CanUseTool = Callable[1275CanUseTool = Callable[


1283* `input_data`: I parametri di input dello strumento1283* `input_data`: I parametri di input dello strumento

1284* `context`: Un `ToolPermissionContext` con informazioni aggiuntive1284* `context`: Un `ToolPermissionContext` con informazioni aggiuntive

1285 1285 

1286Restituisce un `PermissionResult` (sia `PermissionResultAllow` che `PermissionResultDeny`).1286Restituisce un `PermissionResult` (`PermissionResultAllow` oppure `PermissionResultDeny`).

1287 1287 

1288Il callback è il sostituto SDK per il prompt di autorizzazione interattivo: viene invocato solo quando il [flusso di valutazione delle autorizzazioni](/docs/it/agent-sdk/permissions#how-permissions-are-evaluated) si risolve in un prompt. Le chiamate dello strumento già approvate da una voce `allowed_tools`, una regola di autorizzazione nelle impostazioni, o la modalità di autorizzazione, come `acceptEdits` o `bypassPermissions`, non lo invocano mai. Per controllare ogni chiamata dello strumento, usa un [hook `PreToolUse`](/docs/it/agent-sdk/hooks) invece.1288Il callback è il sostituto SDK della richiesta di permesso interattiva: viene invocato solo quando il [flusso di valutazione dei permessi](/docs/it/agent-sdk/permissions#how-permissions-are-evaluated) si risolve in una richiesta di permesso. Le chiamate agli strumenti già approvate da una voce `allowed_tools`, da una regola di consenso nelle impostazioni, o dalla modalità di permesso, come `acceptEdits` o `bypassPermissions`, non lo invocano mai. Per controllare ogni chiamata a uno strumento, usa invece un [hook `PreToolUse`](/docs/it/agent-sdk/hooks).

1289 1289 

1290Una regola di autorizzazione non pre-approva le [azioni che nessuna modalità auto-approva](/docs/it/permission-modes#actions-no-mode-auto-approves); vedi [Come vengono valutate le autorizzazioni](/docs/it/agent-sdk/permissions#how-permissions-are-evaluated) per quali di esse raggiungono il callback e cosa accade in modalità `dontAsk` e `auto`.1290Una regola di consenso non pre-approva le [azioni che nessuna modalità approva automaticamente](/docs/it/permission-modes#actions-no-mode-auto-approves); vedi [Come vengono valutati i permessi](/docs/it/agent-sdk/permissions#how-permissions-are-evaluated) per sapere quali di esse raggiungono il callback e cosa accade in modalità `dontAsk` e `auto`.

1291 1291 

1292<h3 id="toolpermissioncontext">1292<h3 id="toolpermissioncontext">

1293 `ToolPermissionContext`1293 `ToolPermissionContext`

1294</h3>1294</h3>

1295 1295 

1296Informazioni di contesto passate ai callback di autorizzazione dello strumento.1296Informazioni di contesto passate ai callback dei permessi degli strumenti.

1297 1297 

1298```python theme={null}1298```python theme={null}

1299@dataclass1299@dataclass


1312| Campo | Tipo | Descrizione |1312| Campo | Tipo | Descrizione |

1313| :- | :- | :- |1313| :- | :- | :- |

1314| `signal` | `Any \| None` | Riservato per il supporto futuro del segnale di interruzione |1314| `signal` | `Any \| None` | Riservato per il supporto futuro del segnale di interruzione |

1315| `suggestions` | `list[PermissionUpdate]` | Suggerimenti di aggiornamento delle autorizzazioni dalla CLI. I prompt Bash includono un suggerimento con la destinazione `localSettings`, quindi restituirlo in `updated_permissions` scrive la regola in `.claude/settings.local.json` e persiste tra le sessioni. |1315| `suggestions` | `list[PermissionUpdate]` | Suggerimenti di aggiornamento dei permessi dalla CLI. Le richieste di permesso di Bash includono un suggerimento con la destinazione `localSettings`, quindi restituirlo in `updated_permissions` scrive la regola in `.claude/settings.local.json` e persiste tra le sessioni. |

1316| `tool_use_id` | `str \| None` | Identificatore della chiamata dello strumento specifica per cui è questo prompt. Sempre popolato quando consegnato a `can_use_tool` |1316| `tool_use_id` | `str \| None` | Identificatore della specifica chiamata allo strumento a cui si riferisce questa richiesta. Sempre popolato quando consegnato a `can_use_tool` |

1317| `agent_id` | `str \| None` | ID del sub-agente quando la chiamata proviene da un subagente; `None` per l'agente principale |1317| `agent_id` | `str \| None` | ID del subagent quando la chiamata proviene da un subagent; `None` per l'agente principale |

1318| `blocked_path` | `str \| None` | Percorso del file che ha attivato la richiesta di autorizzazione, se applicabile. Ad esempio, quando un comando Bash tenta di accedere a un percorso al di fuori delle directory consentite |1318| `blocked_path` | `str \| None` | Percorso del file che ha attivato la richiesta di permesso, se applicabile. Ad esempio, quando un comando Bash tenta di accedere a un percorso al di fuori delle directory consentite |

1319| `decision_reason` | `str \| None` | Motivo per cui questa richiesta di autorizzazione è stata attivata. Inoltrato dal `permissionDecisionReason` di un hook PreToolUse quando l'hook ha restituito `"ask"` |1319| `decision_reason` | `str \| None` | Motivo per cui questa richiesta di permesso è stata attivata. Inoltrato dal `permissionDecisionReason` di un hook PreToolUse quando l'hook ha restituito `"ask"` |

1320| `title` | `str \| None` | Frase completa del prompt di autorizzazione, come `Claude wants to read foo.txt`. Usa come testo del prompt principale quando presente |1320| `title` | `str \| None` | Frase completa della richiesta di permesso, come `Claude wants to read foo.txt`. Usala come testo principale della richiesta quando presente |

1321| `display_name` | `str \| None` | Breve frase nominale per l'azione dello strumento, come `Read file`, adatta per etichette di pulsanti |1321| `display_name` | `str \| None` | Breve frase nominale per l'azione dello strumento, come `Read file`, adatta per etichette di pulsanti |

1322| `description` | `str \| None` | Sottotitolo leggibile per l'interfaccia utente di autorizzazione |1322| `description` | `str \| None` | Sottotitolo leggibile per l'interfaccia utente dei permessi |

1323 1323 

1324<h3 id="permissionresult">1324<h3 id="permissionresult">

1325 `PermissionResult`1325 `PermissionResult`

1326</h3>1326</h3>

1327 1327 

1328Tipo di unione per i risultati del callback di autorizzazione.1328Tipo di unione per i risultati del callback dei permessi.

1329 1329 

1330```python theme={null}1330```python theme={null}

1331PermissionResult = PermissionResultAllow | PermissionResultDeny1331PermissionResult = PermissionResultAllow | PermissionResultDeny


1335 `PermissionResultAllow`1335 `PermissionResultAllow`

1336</h3>1336</h3>

1337 1337 

1338Risultato che indica che la chiamata dello strumento deve essere consentita.1338Risultato che indica che la chiamata allo strumento deve essere consentita.

1339 1339 

1340```python theme={null}1340```python theme={null}

1341@dataclass1341@dataclass


1349| :- | :- | :- | :- |1349| :- | :- | :- | :- |

1350| `behavior` | `Literal["allow"]` | `"allow"` | Deve essere "allow" |1350| `behavior` | `Literal["allow"]` | `"allow"` | Deve essere "allow" |

1351| `updated_input` | `dict[str, Any] \| None` | `None` | Input modificato da utilizzare al posto dell'originale |1351| `updated_input` | `dict[str, Any] \| None` | `None` | Input modificato da utilizzare al posto dell'originale |

1352| `updated_permissions` | `list[PermissionUpdate] \| None` | `None` | Aggiornamenti delle autorizzazioni da applicare |1352| `updated_permissions` | `list[PermissionUpdate] \| None` | `None` | Aggiornamenti dei permessi da applicare |

1353 1353 

1354<h3 id="permissionresultdeny">1354<h3 id="permissionresultdeny">

1355 `PermissionResultDeny`1355 `PermissionResultDeny`

1356</h3>1356</h3>

1357 1357 

1358Risultato che indica che la chiamata dello strumento deve essere negata.1358Risultato che indica che la chiamata allo strumento deve essere negata.

1359 1359 

1360```python theme={null}1360```python theme={null}

1361@dataclass1361@dataclass


1375 `PermissionUpdate`1375 `PermissionUpdate`

1376</h3>1376</h3>

1377 1377 

1378Configurazione per l'aggiornamento delle autorizzazioni a livello di programmazione.1378Configurazione per l'aggiornamento dei permessi a livello di programmazione.

1379 1379 

1380```python theme={null}1380```python theme={null}

1381@dataclass1381@dataclass


1399 1399 

1400| Campo | Tipo | Descrizione |1400| Campo | Tipo | Descrizione |

1401| :- | :- | :- |1401| :- | :- | :- |

1402| `type` | `Literal[...]` | Il tipo di operazione di aggiornamento delle autorizzazioni |1402| `type` | `Literal[...]` | Il tipo di operazione di aggiornamento dei permessi |

1403| `rules` | `list[PermissionRuleValue] \| None` | Regole per le operazioni add/replace/remove |1403| `rules` | `list[PermissionRuleValue] \| None` | Regole per le operazioni add/replace/remove |

1404| `behavior` | `Literal["allow", "deny", "ask"] \| None` | Comportamento per le operazioni basate su regole |1404| `behavior` | `Literal["allow", "deny", "ask"] \| None` | Comportamento per le operazioni basate su regole |

1405| `mode` | `PermissionMode \| None` | Modalità per l'operazione setMode |1405| `mode` | `PermissionMode \| None` | Modalità per l'operazione setMode |

1406| `directories` | `list[str] \| None` | Directory per le operazioni add/remove directory |1406| `directories` | `list[str] \| None` | Directory per le operazioni add/remove directory |

1407| `destination` | `Literal[...] \| None` | Dove applicare l'aggiornamento delle autorizzazioni |1407| `destination` | `Literal[...] \| None` | Dove applicare l'aggiornamento dei permessi |

1408 1408 

1409<h3 id="permissionrulevalue">1409<h3 id="permissionrulevalue">

1410 `PermissionRuleValue`1410 `PermissionRuleValue`

1411</h3>1411</h3>

1412 1412 

1413Una regola da aggiungere, sostituire o rimuovere in un aggiornamento delle autorizzazioni.1413Una regola da aggiungere, sostituire o rimuovere in un aggiornamento dei permessi.

1414 1414 

1415```python theme={null}1415```python theme={null}

1416@dataclass1416@dataclass


1435 `ThinkingConfig`1435 `ThinkingConfig`

1436</h3>1436</h3>

1437 1437 

1438Controlla il comportamento del pensiero esteso. Un'unione di tre configurazioni:1438Controlla il comportamento del ragionamento esteso. Un'unione di tre configurazioni:

1439 1439 

1440```python theme={null}1440```python theme={null}

1441ThinkingDisplay = Literal["summarized", "omitted"]1441ThinkingDisplay = Literal["summarized", "omitted"]


1461 1461 

1462| Variante | Campi | Descrizione |1462| Variante | Campi | Descrizione |

1463| :- | :- | :- |1463| :- | :- | :- |

1464| `adaptive` | `type`, `display` | Claude decide adattivamente quando pensare |1464| `adaptive` | `type`, `display` | Claude decide in modo adattivo quando ragionare |

1465| `enabled` | `type`, `budget_tokens`, `display` | Abilita il pensiero con un budget di token specifico |1465| `enabled` | `type`, `budget_tokens`, `display` | Abilita il ragionamento con un budget di token specifico |

1466| `disabled` | `type` | Disabilita il pensiero |1466| `disabled` | `type` | Disabilita il ragionamento |

1467 1467 

1468Il campo opzionale `display` controlla se il testo di pensiero viene restituito `"summarized"` o `"omitted"`. Su Claude Opus 4.7 e versioni successive, l'impostazione predefinita dell'API è `"omitted"`, quindi imposta `"summarized"` per ricevere il contenuto di pensiero negli output [`ThinkingBlock`](#thinkingblock). Claude Code non invia `display` ad Amazon Bedrock o alla piattaforma agente di Google Cloud, quindi su quei provider Opus 4.7 e versioni successive restituiscono output `ThinkingBlock` vuoti anche quando imposti `display` a `"summarized"`.1468Il campo opzionale `display` controlla se il testo del ragionamento viene restituito `"summarized"` o `"omitted"`. Su Claude Opus 4.7 e versioni successive, l'impostazione predefinita dell'API è `"omitted"`, quindi imposta `"summarized"` per ricevere il contenuto del ragionamento negli output [`ThinkingBlock`](#thinkingblock). Claude Code omette `display` dalle richieste verso alcuni provider, come Amazon Bedrock e l'Agent Platform di Google Cloud. Su quei provider, Opus 4.7 e versioni successive restituiscono output `ThinkingBlock` vuoti anche quando imposti `display` a `"summarized"`.

1469 1469 

1470Poiché queste sono classi `TypedDict`, sono dicts semplici in fase di esecuzione. Costruiscile come letterali dict o chiama la classe come costruttore; entrambi producono un `dict`. Accedi ai campi con `config["budget_tokens"]`, non `config.budget_tokens`:1470Poiché queste sono classi `TypedDict`, sono dict semplici in fase di esecuzione. Costruiscile come letterali dict o chiama la classe come un costruttore; entrambi producono un `dict`. Accedi ai campi con `config["budget_tokens"]`, non `config.budget_tokens`:

1471 1471 

1472```python theme={null}1472```python theme={null}

1473from claude_agent_sdk import ClaudeAgentOptions, ThinkingConfigEnabled1473from claude_agent_sdk import ClaudeAgentOptions, ThinkingConfigEnabled


1577 `McpServerStatusConfig`1577 `McpServerStatusConfig`

1578</h3>1578</h3>

1579 1579 

1580La configurazione di un server MCP come riportato da [`get_mcp_status()`](#methods). Questa è l'unione di tutte le varianti di trasporto [`McpServerConfig`](#mcpserverconfig) più una variante di output-only `claudeai-proxy` per i server proxy attraverso claude.ai.1580La configurazione di un server MCP come riportata da [`get_mcp_status()`](#methods). Questa è l'unione di tutte le varianti di trasporto di [`McpServerConfig`](#mcpserverconfig) più una variante di solo output `claudeai-proxy` per i server instradati tramite proxy attraverso claude.ai.

1581 1581 

1582```python theme={null}1582```python theme={null}

1583McpServerStatusConfig = (1583McpServerStatusConfig = (


1589)1589)

1590```1590```

1591 1591 

1592`McpSdkServerConfigStatus` è la forma serializzabile di [`McpSdkServerConfig`](#mcpsdkserverconfig) con solo i campi `type` (`"sdk"`) e `name` (`str`); l'`instance` in-process viene omesso. `McpClaudeAIProxyServerConfig` ha i campi `type` (`"claudeai-proxy"`), `url` (`str`), e `id` (`str`).1592`McpSdkServerConfigStatus` è la forma serializzabile di [`McpSdkServerConfig`](#mcpsdkserverconfig) con solo i campi `type` (`"sdk"`) e `name` (`str`); l'`instance` in-process viene omessa. `McpClaudeAIProxyServerConfig` ha i campi `type` (`"claudeai-proxy"`), `url` (`str`), e `id` (`str`).

1593 1593 

1594<h3 id="mcpstatusresponse">1594<h3 id="mcpstatusresponse">

1595 `McpStatusResponse`1595 `McpStatusResponse`

1596</h3>1596</h3>

1597 1597 

1598Risposta da [`ClaudeSDKClient.get_mcp_status()`](#methods). Avvolge l'elenco degli stati del server sotto la chiave `mcpServers`.1598Risposta da [`ClaudeSDKClient.get_mcp_status()`](#methods). Racchiude l'elenco degli stati dei server sotto la chiave `mcpServers`.

1599 1599 

1600```python theme={null}1600```python theme={null}

1601class McpStatusResponse(TypedDict):1601class McpStatusResponse(TypedDict):


1622| Campo | Tipo | Descrizione |1622| Campo | Tipo | Descrizione |

1623| :- | :- | :- |1623| :- | :- | :- |

1624| `name` | `str` | Nome del server |1624| `name` | `str` | Nome del server |

1625| `status` | `str` | Uno di `"connected"`, `"failed"`, `"needs-auth"`, `"pending"`, o `"disabled"` |1625| `status` | `str` | Uno tra `"connected"`, `"failed"`, `"needs-auth"`, `"pending"`, o `"disabled"` |

1626| `serverInfo` | `dict` (opzionale) | Nome e versione del server (`{"name": str, "version": str}`) |1626| `serverInfo` | `dict` (opzionale) | Nome e versione del server (`{"name": str, "version": str}`) |

1627| `error` | `str` (opzionale) | Messaggio di errore se il server non si è connesso |1627| `error` | `str` (opzionale) | Messaggio di errore se il server non si è connesso |

1628| `config` | [`McpServerStatusConfig`](#mcpserverstatusconfig) (opzionale) | Configurazione del server. Stessa forma di [`McpServerConfig`](#mcpserverconfig) (stdio, SSE, HTTP, o SDK), più una variante `claudeai-proxy` per i server connessi tramite claude.ai |1628| `config` | [`McpServerStatusConfig`](#mcpserverstatusconfig) (opzionale) | Configurazione del server. Stessa forma di [`McpServerConfig`](#mcpserverconfig) (stdio, SSE, HTTP, o SDK), più una variante `claudeai-proxy` per i server connessi tramite claude.ai |


1633 `ContextUsageResponse`1633 `ContextUsageResponse`

1634</h3>1634</h3>

1635 1635 

1636Risposta da [`ClaudeSDKClient.get_context_usage()`](#methods). Questo è lo stesso payload che Claude Code renderizza per il comando `/context` in una sessione interattiva, quindi insieme ai conteggi dei token contiene campi di visualizzazione come `color` e `gridRows` che Claude Code utilizza per disegnare la griglia di utilizzo `/context`.1636Risposta da [`ClaudeSDKClient.get_context_usage()`](#methods). Questo è lo stesso payload che Claude Code visualizza per il comando `/context` in una sessione interattiva, quindi insieme ai conteggi dei token contiene campi di visualizzazione come `color` e `gridRows` che Claude Code utilizza per disegnare la griglia di utilizzo di `/context`.

1637 1637 

1638Claude Code costruisce questo payload inviando diverse richieste all'API di [token-counting](https://platform.claude.com/docs/en/build-with-claude/token-counting). Queste richieste non appaiono nel flusso di messaggi, quindi il tracciamento dei costi che legge il flusso non le vedrà. Sull'API Anthropic, il conteggio dei token non viene fatturato.1638Claude Code costruisce questo payload inviando diverse richieste all'API di [token-counting](https://platform.claude.com/docs/en/build-with-claude/token-counting). Queste richieste non appaiono nel flusso di messaggi, quindi il tracciamento dei costi che legge il flusso non le vedrà. Sull'API Anthropic, il conteggio dei token non viene fatturato.

1639 1639 


1660 apiUsage: NotRequired[dict[str, Any] | None]1660 apiUsage: NotRequired[dict[str, Any] | None]

1661```1661```

1662 1662 

1663Ogni voce `ContextUsageCategory` contiene `name`, `tokens`, `color` e un flag opzionale `isDeferred`. `totalTokens` è l'utilizzo del contesto corrente della sessione, e `maxTokens` è la finestra rispetto alla quale viene misurato l'utilizzo. Quella finestra è la finestra di contesto del modello, o la finestra di auto-compattazione inferiore quando se ne applica una, e `rawMaxTokens` contiene lo stesso valore di `maxTokens`. `apiUsage` contiene l'utilizzo dalla risposta API più recente, non un totale in esecuzione per la sessione. Claude Code lascia i campi opzionali `deferredBuiltinTools`, `systemTools` e `systemPromptSections` non impostati, quindi aspettati che siano assenti anche se il tipo li dichiara.1663Ogni voce `ContextUsageCategory` contiene `name`, `tokens`, `color` e un flag opzionale `isDeferred`. `totalTokens` è l'utilizzo del contesto corrente della sessione, e `maxTokens` è la finestra rispetto alla quale viene misurato l'utilizzo. Quella finestra è la finestra di contesto del modello, o la finestra di compattazione automatica inferiore quando se ne applica una, e `rawMaxTokens` contiene lo stesso valore di `maxTokens`. `apiUsage` contiene l'utilizzo dalla risposta API più recente, non un totale progressivo per la sessione. Claude Code lascia non impostate le chiavi opzionali `deferredBuiltinTools`, `systemTools` e `systemPromptSections`, quindi aspettati che siano assenti anche se il tipo le dichiara.

1664 1664 

1665<h3 id="sdkpluginconfig">1665<h3 id="sdkpluginconfig">

1666 `SdkPluginConfig`1666 `SdkPluginConfig`


1738 1738 

1739L'SDK passa `tool_use_result` attraverso dalla CLI senza modifiche. Per uno strumento su un server MCP esterno il cui risultato contiene blocchi `resource_link`, il dict ha una chiave `resourceLinks` che contiene un elenco di dict con le chiavi del tipo TypeScript [`SDKMcpResourceLink`](/docs/it/agent-sdk/typescript#sdkmcpresourcelink). Claude riceve ogni link come una riga di testo nel risultato dello strumento. Per renderizzare i file restituiti dal server, leggi `resourceLinks` invece di analizzare quel testo. La chiave `resourceLinks` richiede Python Agent SDK 0.2.150 o successivo e Claude Code v2.1.257 o successivo; la CLI fornita con quella versione dell'SDK soddisfa il requisito di Claude Code.1739L'SDK passa `tool_use_result` attraverso dalla CLI senza modifiche. Per uno strumento su un server MCP esterno il cui risultato contiene blocchi `resource_link`, il dict ha una chiave `resourceLinks` che contiene un elenco di dict con le chiavi del tipo TypeScript [`SDKMcpResourceLink`](/docs/it/agent-sdk/typescript#sdkmcpresourcelink). Claude riceve ogni link come una riga di testo nel risultato dello strumento. Per renderizzare i file restituiti dal server, leggi `resourceLinks` invece di analizzare quel testo. La chiave `resourceLinks` richiede Python Agent SDK 0.2.150 o successivo e Claude Code v2.1.257 o successivo; la CLI fornita con quella versione dell'SDK soddisfa il requisito di Claude Code.

1740 1740 

1741La CLI omette la chiave quando il risultato non ha link e sui risultati dei subagenti. La CLI mantiene al massimo 50 link per risultato e smette di aggiungere link una volta che l'elenco raggiunge 64 KiB di JSON serializzato. Uno strumento che definisci in-process con [`tool()`](#tool) non produce mai la chiave, perché l'SDK appiattisce i suoi blocchi `resource_link` a testo prima che la CLI veda il risultato.1741La CLI omette la chiave quando il risultato non ha link e sui risultati dei subagent. La CLI mantiene al massimo 50 link per risultato e smette di aggiungere link una volta che l'elenco raggiunge 64 KiB di JSON serializzato. Uno strumento che definisci in-process con [`tool()`](#tool) non produce mai la chiave, perché l'SDK appiattisce i suoi blocchi `resource_link` a testo prima che la CLI veda il risultato.

1742 1742 

1743<h3 id="assistantmessage">1743<h3 id="assistantmessage">

1744 `AssistantMessage`1744 `AssistantMessage`


1847* `terminal_reason`: perché il ciclo di query è terminato, come `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"`, o `"aborted_tools"`. Un valore di `"aborted_streaming"` o `"aborted_tools"` significa che il turno è stato interrotto prima del completamento. Le cause comuni sono [`interrupt()`](#claudesdkclient) e un callback di permesso che restituisce [`PermissionResultDeny`](#permissionresultdeny) con `interrupt=True`. `None` su versioni CLI che precedono il campo, su risultati da comandi locali come `/voice` o `/usage`, che bypassano il ciclo di query, o su risultati di errore sintetizzati emessi quando la sessione fallisce fatalmente. Rispecchia il [`SDKResultMessage.terminal_reason`](/docs/it/agent-sdk/typescript#sdkresultmessage) dell'SDK TypeScript, che elenca l'insieme completo di valori.1847* `terminal_reason`: perché il ciclo di query è terminato, come `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"`, o `"aborted_tools"`. Un valore di `"aborted_streaming"` o `"aborted_tools"` significa che il turno è stato interrotto prima del completamento. Le cause comuni sono [`interrupt()`](#claudesdkclient) e un callback di permesso che restituisce [`PermissionResultDeny`](#permissionresultdeny) con `interrupt=True`. `None` su versioni CLI che precedono il campo, su risultati da comandi locali come `/voice` o `/usage`, che bypassano il ciclo di query, o su risultati di errore sintetizzati emessi quando la sessione fallisce fatalmente. Rispecchia il [`SDKResultMessage.terminal_reason`](/docs/it/agent-sdk/typescript#sdkresultmessage) dell'SDK TypeScript, che elenca l'insieme completo di valori.

1848* `origin`: origine del messaggio utente che ha attivato questo turno. In [modalità input streaming](/docs/it/agent-sdk/streaming-vs-single-mode), controlla questo per distinguere il risultato del tuo prompt, dove `origin` è `None` o `{"kind": "human"}`, dal risultato di un turno iniettato come una notifica di attività in background. Richiede Python Agent SDK 0.2.137 o successivo.1848* `origin`: origine del messaggio utente che ha attivato questo turno. In [modalità input streaming](/docs/it/agent-sdk/streaming-vs-single-mode), controlla questo per distinguere il risultato del tuo prompt, dove `origin` è `None` o `{"kind": "human"}`, dal risultato di un turno iniettato come una notifica di attività in background. Richiede Python Agent SDK 0.2.137 o successivo.

1849 1849 

1850Il dict `usage` copre solo il ciclo dell'agente principale ed esclude i subagenti e altre chiamate di modello nidificate o ausiliarie. In [modalità input streaming](/docs/it/agent-sdk/streaming-vs-single-mode), i valori sono per turno. Preferisci `model_usage` per la contabilità dei token e dei costi. Il dict `usage` contiene le seguenti chiavi quando presenti:1850Il dict `usage` copre solo il ciclo dell'agente principale ed esclude i subagent e altre chiamate di modello nidificate o ausiliarie. In [modalità input streaming](/docs/it/agent-sdk/streaming-vs-single-mode), i valori sono per turno. Preferisci `model_usage` per la contabilità dei token e dei costi. Il dict `usage` contiene le seguenti chiavi quando presenti:

1851 1851 

1852| Chiave | Tipo | Descrizione |1852| Chiave | Tipo | Descrizione |

1853| - | - | - |1853| - | - | - |

1854| `input_tokens` | `int` | Token di input consumati dal ciclo dell'agente di livello superiore. [I token dei subagenti non sono inclusi](/docs/it/agent-sdk/cost-tracking#get-the-total-cost-of-a-query); usa `model_usage` per la contabilità dell'intero albero. |1854| `input_tokens` | `int` | Token di input consumati dal ciclo dell'agente di livello superiore. [I token dei subagent non sono inclusi](/docs/it/agent-sdk/cost-tracking#get-the-total-cost-of-a-query); usa `model_usage` per la contabilità dell'intero albero. |

1855| `output_tokens` | `int` | Token di output generati dal ciclo dell'agente di livello superiore. I token dei subagenti non sono inclusi. |1855| `output_tokens` | `int` | Token di output generati dal ciclo dell'agente di livello superiore. I token dei subagent non sono inclusi. |

1856| `cache_creation_input_tokens` | `int` | Token utilizzati per creare nuove voci di cache. |1856| `cache_creation_input_tokens` | `int` | Token utilizzati per creare nuove voci di cache. |

1857| `cache_read_input_tokens` | `int` | Token letti dalle voci di cache esistenti. |1857| `cache_read_input_tokens` | `int` | Token letti dalle voci di cache esistenti. |

1858 1858 

1859Il dict `model_usage` mappa i nomi dei modelli all'utilizzo per modello. Copre ogni chiamata di modello effettuata attraverso la pipeline di query: il ciclo principale, i subagenti e le chiamate interne come la compattazione e gli agenti Workflow. Le chiamate helper al di fuori di quella pipeline, come il classificatore di permessi e le richieste di conteggio dei token, sono escluse da `model_usage`. Tratta `model_usage` come una stima, non come un estratto conto di fatturazione.1859Il dict `model_usage` mappa i nomi dei modelli all'utilizzo per modello. Copre ogni chiamata di modello effettuata attraverso la pipeline di query: il ciclo principale, i subagent e le chiamate interne come la compattazione e gli agenti Workflow. Le chiamate helper al di fuori di quella pipeline, come il classificatore di permessi e le richieste di conteggio dei token, sono escluse da `model_usage`. Tratta `model_usage` come una stima, non come un estratto conto di fatturazione.

1860 1860 

1861In [modalità input streaming](/docs/it/agent-sdk/streaming-vs-single-mode), `model_usage` e `total_cost_usd` sono cumulativi tra i turni, quindi leggi il risultato più recente piuttosto che sommare tra i risultati. Una chiamata che riprende una sessione conta anche i [totali ripristinati dalle chiamate precedenti della sessione](/docs/it/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Vedi [Traccia i costi in modalità input streaming](/docs/it/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode) per i ripristini e [Recupera i totali dopo un crash della sessione](/docs/it/agent-sdk/cost-tracking#recover-totals-after-a-session-crash) per i risultati azzerati.1861In [modalità input streaming](/docs/it/agent-sdk/streaming-vs-single-mode), `model_usage` e `total_cost_usd` sono cumulativi tra i turni, quindi leggi il risultato più recente piuttosto che sommare tra i risultati. Una chiamata che riprende una sessione conta anche i [totali ripristinati dalle chiamate precedenti della sessione](/docs/it/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Vedi [Traccia i costi in modalità input streaming](/docs/it/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode) per i ripristini e [Recupera i totali dopo un crash della sessione](/docs/it/agent-sdk/cost-tracking#recover-totals-after-a-session-crash) per i risultati azzerati.

1862 1862 


1869| `cacheReadInputTokens` | `int` | Token di lettura della cache per questo modello. |1869| `cacheReadInputTokens` | `int` | Token di lettura della cache per questo modello. |

1870| `cacheCreationInputTokens` | `int` | Token di creazione della cache per questo modello. |1870| `cacheCreationInputTokens` | `int` | Token di creazione della cache per questo modello. |

1871| `webSearchRequests` | `int` | Richieste di ricerca web effettuate da questo modello. |1871| `webSearchRequests` | `int` | Richieste di ricerca web effettuate da questo modello. |

1872| `thinkingTokens` | `int` | Token di thinking generati da questo modello, già contati in `outputTokens`. Assenti fino a quando un turno non viene eseguito su una versione di Claude Code che lo registra, e non dichiarati sul TypedDict, quindi leggilo con `.get()`. Richiede Python Agent SDK 0.2.150 o successivo, il cui CLI fornito lo registra. |1872| `thinkingTokens` | `int` | Token di ragionamento generati da questo modello, già contati in `outputTokens`. Assenti fino a quando un turno non viene eseguito su una versione di Claude Code che lo registra, e non dichiarati sul TypedDict, quindi leggilo con `.get()`. Richiede Python Agent SDK 0.2.150 o successivo, il cui CLI fornito lo registra. |

1873| `costUSD` | `float` | Costo stimato in USD per questo modello, calcolato lato client. Vedi [Traccia costo e utilizzo](/docs/it/agent-sdk/cost-tracking) per avvertenze di fatturazione. |1873| `costUSD` | `float` | Costo stimato in USD per questo modello, calcolato lato client. Vedi [Traccia costo e utilizzo](/docs/it/agent-sdk/cost-tracking) per avvertenze di fatturazione. |

1874| `contextWindow` | `int` | Dimensione della finestra di contesto per questo modello. |1874| `contextWindow` | `int` | Dimensione della finestra di contesto per questo modello. |

1875| `maxOutputTokens` | `int` | Limite massimo di token di output per questo modello. |1875| `maxOutputTokens` | `int` | Limite massimo di token di output per questo modello. |

1876| `canonicalModel` | `str` | ID del modello canonico utilizzato per la ricerca dei prezzi. Può differire dalla stringa del modello grezzo per cui la voce è codificata, come un ID specifico del provider o un alias. Non sempre presente. |1876| `canonicalModel` | `str` | ID del modello canonico utilizzato per la ricerca dei prezzi. Può differire dalla stringa del modello grezzo per cui la voce è codificata, come un ID specifico del provider o un alias. Non sempre presente. |

1877| `provider` | `str` | Provider API che ha servito questo modello, come `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle`, o `gateway`. Non sempre presente. |1877| `provider` | `str` | Provider API che ha servito questo modello, come `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle`, o `gateway`. Non sempre presente. |

1878| `costBasis` | `str` | Tabella dei prezzi usata per calcolare il prezzo dell'ultima richiesta di questo modello: `list` per il prezzo di listino, `managed` per una tabella [`modelPricing`](/docs/it/settings-reference#modelpricing), o `unknown` quando nessuna delle due corrispondeva all'ID del modello. Non sempre presente, e non dichiarato sul TypedDict, quindi leggilo con `.get()`. Richiede Claude Code v2.1.246 o successivo. |

1878 1879 

1879<h3 id="streamevent">1880<h3 id="streamevent">

1880 `StreamEvent`1881 `StreamEvent`


1896| `uuid` | `str` | Identificatore univoco per questo evento |1897| `uuid` | `str` | Identificatore univoco per questo evento |

1897| `session_id` | `str` | Identificatore di sessione |1898| `session_id` | `str` | Identificatore di sessione |

1898| `event` | `dict[str, Any]` | I dati dell'evento di flusso dell'API Claude grezzo |1899| `event` | `dict[str, Any]` | I dati dell'evento di flusso dell'API Claude grezzo |

1899| `parent_tool_use_id` | `str \| None` | Sempre `None`. Gli eventi di flusso vengono emessi solo per la sessione principale. Per l'attribuzione dei subagenti, utilizza messaggi completi come [`AssistantMessage`](#assistantmessage) |1900| `parent_tool_use_id` | `str \| None` | Sempre `None`. Gli eventi di flusso vengono emessi solo per la sessione principale. Per l'attribuzione dei subagent, utilizza messaggi completi come [`AssistantMessage`](#assistantmessage) |

1900 1901 

1901<h3 id="ratelimitevent">1902<h3 id="ratelimitevent">

1902 `RateLimitEvent`1903 `RateLimitEvent`

1903</h3>1904</h3>

1904 1905 

1905Emesso quando lo stato del limite di velocità cambia (ad esempio, da `"allowed"` a `"allowed_warning"`). Usalo per avvertire gli utenti prima che raggiungano un limite rigido, o per fare backoff quando lo stato è `"rejected"`.1906Emesso quando lo stato del rate limit cambia (ad esempio, da `"allowed"` a `"allowed_warning"`). Usalo per avvertire gli utenti prima che raggiungano un limite rigido, o per fare backoff quando lo stato è `"rejected"`.

1906 1907 

1907```python theme={null}1908```python theme={null}

1908@dataclass1909@dataclass


1914 1915 

1915| Campo | Tipo | Descrizione |1916| Campo | Tipo | Descrizione |

1916| :- | :- | :- |1917| :- | :- | :- |

1917| `rate_limit_info` | [`RateLimitInfo`](#ratelimitinfo) | Stato del limite di velocità corrente |1918| `rate_limit_info` | [`RateLimitInfo`](#ratelimitinfo) | Stato corrente del rate limit |

1918| `uuid` | `str` | Identificatore di evento univoco |1919| `uuid` | `str` | Identificatore di evento univoco |

1919| `session_id` | `str` | Identificatore di sessione |1920| `session_id` | `str` | Identificatore di sessione |

1920 1921 


1922 `RateLimitInfo`1923 `RateLimitInfo`

1923</h3>1924</h3>

1924 1925 

1925Stato del limite di velocità trasportato da [`RateLimitEvent`](#ratelimitevent).1926Stato del rate limit trasportato da [`RateLimitEvent`](#ratelimitevent).

1926 1927 

1927```python theme={null}1928```python theme={null}

1928RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]1929RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]


1946| Campo | Tipo | Descrizione |1947| Campo | Tipo | Descrizione |

1947| :- | :- | :- |1948| :- | :- | :- |

1948| `status` | `RateLimitStatus` | Stato corrente, uno di `"allowed"`, `"allowed_warning"`, o `"rejected"`. `"allowed_warning"` significa avvicinarsi al limite; `"rejected"` significa che il limite è stato raggiunto |1949| `status` | `RateLimitStatus` | Stato corrente, uno di `"allowed"`, `"allowed_warning"`, o `"rejected"`. `"allowed_warning"` significa avvicinarsi al limite; `"rejected"` significa che il limite è stato raggiunto |

1949| `resets_at` | `int \| None` | Timestamp Unix quando la finestra del limite di velocità si ripristina |1950| `resets_at` | `int \| None` | Timestamp Unix quando la finestra del rate limit si ripristina |

1950| `rate_limit_type` | `RateLimitType \| None` | Quale finestra del limite di velocità si applica |1951| `rate_limit_type` | `RateLimitType \| None` | Quale finestra del rate limit si applica |

1951| `utilization` | `float \| None` | Frazione del limite di velocità consumato (0.0 a 1.0) |1952| `utilization` | `float \| None` | Frazione del rate limit consumata (0.0 a 1.0) |

1952| `overage_status` | `RateLimitStatus \| None` | Stato dell'utilizzo di overage pay-as-you-go, se applicabile |1953| `overage_status` | `RateLimitStatus \| None` | Stato dell'utilizzo di overage pay-as-you-go, se applicabile |

1953| `overage_resets_at` | `int \| None` | Timestamp Unix quando la finestra di overage si ripristina |1954| `overage_resets_at` | `int \| None` | Timestamp Unix quando la finestra di overage si ripristina |

1954| `overage_disabled_reason` | `str \| None` | Perché l'overage non è disponibile, se lo stato è `"rejected"` |1955| `overage_disabled_reason` | `str \| None` | Perché l'overage non è disponibile, se lo stato è `"rejected"` |


1978 `TaskStartedMessage`1979 `TaskStartedMessage`

1979</h3>1980</h3>

1980 1981 

1981Emesso quando un'attività in background inizia. Un'attività in background è qualsiasi cosa tracciata al di fuori del turno principale: un comando Bash in background, un watch [Monitor](#monitor), un subagente generato tramite lo strumento Agent, o un agente remoto. Il campo `task_type` ti dice quale. Questo nome non è correlato al rinomina dello strumento `Task`-to-`Agent`.1982Emesso quando un'attività in background inizia. Un'attività in background è qualsiasi cosa tracciata al di fuori del turno principale: un comando Bash in background, un watch [Monitor](#monitor), un subagent generato tramite lo strumento Agent, o un agente remoto. Il campo `task_type` ti dice quale. Questo nome non è correlato alla rinomina dello strumento da `Task` ad `Agent`.

1982 1983 

1983```python theme={null}1984```python theme={null}

1984@dataclass1985@dataclass


2045 `TaskNotificationMessage`2046 `TaskNotificationMessage`

2046</h3>2047</h3>

2047 2048 

2048Emesso quando un'attività in background si completa, fallisce o viene interrotta. Le attività in background includono comandi Bash `run_in_background`, watch Monitor e subagenti in background.2049Emesso quando un'attività in background si completa, fallisce o viene interrotta. Le attività in background includono comandi Bash `run_in_background`, watch Monitor e subagent in background.

2049 2050 

2050```python theme={null}2051```python theme={null}

2051@dataclass2052@dataclass


2071| `tool_use_id` | `str \| None` | ID di utilizzo dello strumento associato |2072| `tool_use_id` | `str \| None` | ID di utilizzo dello strumento associato |

2072| `usage` | `TaskUsage \| None` | Utilizzo dei token finale per l'attività |2073| `usage` | `TaskUsage \| None` | Utilizzo dei token finale per l'attività |

2073 2074 

2074Quando la CLI [sposta una lunga chiamata di strumento MCP in background](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls), il risultato dello strumento per quella chiamata contiene solo un placeholder e il risultato reale della chiamata arriva in questo messaggio. Su una notifica `"completed"` per tale chiamata, la CLI aggiunge una chiave `resource_links` che elenca i file restituiti dallo strumento per riferimento, con le stesse voci e limiti della chiave `resourceLinks` su [`UserMessage.tool_use_result`](#usermessage). La chiave `resource_links` richiede Python Agent SDK 0.2.150 o successivo e Claude Code v2.1.257 o successivo; la CLI fornita con quella versione dell'SDK soddisfa il requisito di Claude Code.2075Quando la CLI [sposta una lunga chiamata a uno strumento MCP in background](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls), il risultato dello strumento per quella chiamata contiene solo un placeholder e il risultato reale della chiamata arriva in questo messaggio. Su una notifica `"completed"` per tale chiamata, la CLI aggiunge una chiave `resource_links` che elenca i file restituiti dallo strumento per riferimento, con le stesse voci e limiti della chiave `resourceLinks` su [`UserMessage.tool_use_result`](#usermessage). La chiave `resource_links` richiede Python Agent SDK 0.2.150 o successivo e Claude Code v2.1.257 o successivo; la CLI fornita con quella versione dell'SDK soddisfa il requisito di Claude Code.

2075 2076 

2076La dataclass non ha un campo per `resource_links`. Leggilo dal dict `data` che il messaggio eredita da [`SystemMessage`](#systemmessage): `message.data.get("resource_links")`. Abbina la notifica alla chiamata con `tool_use_id`. La CLI omette la chiave quando il risultato non aveva link e su notifiche per attività che non sono chiamate di strumento MCP.2077La dataclass non ha un campo per `resource_links`. Leggilo dal dict `data` che il messaggio eredita da [`SystemMessage`](#systemmessage): `message.data.get("resource_links")`. Abbina la notifica alla chiamata con `tool_use_id`. La CLI omette la chiave quando il risultato non aveva link e su notifiche per attività che non sono chiamate a strumenti MCP.

2077 2078 

2078<h2 id="content-block-types">2079<h2 id="content-block-types">

2079 Tipi di blocco di contenuto2080 Tipi di blocco di contenuto


2153 Tipi di errore2154 Tipi di errore

2154</h2>2155</h2>

2155 2156 

2156I tipi di seguito definiscono cosa il vostro codice cattura. Per le voci associate ai messaggi di errore che questi tipi generano, con la causa e la correzione per ciascuno, consultate [Troubleshooting](/docs/it/agent-sdk/troubleshooting).2157I tipi di seguito definiscono cosa il tuo codice cattura. Per le voci associate ai messaggi di errore che questi tipi generano, con la causa e la correzione per ciascuno, consulta [Risoluzione dei problemi](/docs/it/agent-sdk/troubleshooting).

2157 2158 

2158<h3 id="claudesdkerror">2159<h3 id="claudesdkerror">

2159 `ClaudeSDKError`2160 `ClaudeSDKError`


2166 """Base error for Claude SDK."""2167 """Base error for Claude SDK."""

2167```2168```

2168 2169 

2169Quando una singola `query()` termina con un risultato di errore, ad esempio un errore di limite di turni, l'SDK genera un [`ResultError`](#resulterror) dopo aver restituito il messaggio di risultato finale. Le versioni di Python Agent SDK precedenti alla 0.2.140 generavano una semplice `Exception` che non era una sottoclasse di `ClaudeSDKError`.2170Quando una singola `query()` termina con un risultato di errore, ad esempio un errore di limite di turni, l'SDK genera un [`ResultError`](#resulterror).

2170 2171 

2171<h3 id="clinotfounderror">2172<h3 id="clinotfounderror">

2172 `CLINotFoundError`2173 `CLINotFoundError`


2216 `ResultError`2217 `ResultError`

2217</h3>2218</h3>

2218 2219 

2219Generato dopo il [`ResultMessage`](#resultmessage) finale quando il processo Claude Code esce perché l'esecuzione è terminata con un risultato di errore, come un errore di limite di turni o un errore API. `ResultError` è una sottoclasse di `ProcessError`, quindi un gestore `except ProcessError` esistente lo cattura anche. I suoi attributi contengono i campi di quel messaggio di risultato, quindi potete distinguere il motivo del fallimento dell'esecuzione senza analizzare il testo del messaggio. Richiede Python Agent SDK 0.2.140 o successivo.2220Generato quando il processo Claude Code esce perché l'esecuzione è terminata con un [messaggio di risultato](#resultmessage) di errore, come un errore di limite di turni o un errore API. `ResultError` è una sottoclasse di `ProcessError`, quindi un gestore `except ProcessError` esistente lo cattura anche. I suoi attributi contengono i campi di quel messaggio di risultato, quindi puoi distinguere il motivo del fallimento dell'esecuzione senza analizzare il testo del messaggio. Richiede Python Agent SDK 0.2.140 o successivo.

2220 2221 

2221```python theme={null}2222```python theme={null}

2222class ResultError(ProcessError):2223class ResultError(ProcessError):

2223 subtype: str | None # "error_max_turns", "error_during_execution", ...; "success" quando l'esecuzione è terminata su una richiesta non riuscita2224 subtype: str | None # "error_max_turns", "error_during_execution", ...; "success" when the run ended on a failed request

2224 errors: list[str] # un elenco vuoto quando il messaggio di risultato non ne ha segnalati2225 errors: list[str] # an empty list when the result message reported none

2225 result: str | None2226 result: str | None

2226 api_error_status: int | None2227 api_error_status: int | None

2227 terminal_reason: str | None # "max_turns", "api_error", ...; controllate questo prima di subtype2228 terminal_reason: str | None # "max_turns", "api_error", ...; check this before subtype

2228 session_id: str | None2229 session_id: str | None

2229 data: dict[str, Any] # il payload del messaggio di risultato grezzo2230 data: dict[str, Any] # the raw result message payload

2230```2231```

2231 2232 

2232Per distinguere i fallimenti, controllate `terminal_reason` prima di `subtype`. Quando la richiesta finale fallisce, ad esempio su un errore API, Claude Code segnala `subtype` `"success"` con la causa in `terminal_reason`, ad esempio `"api_error"`; quando un limite che avete impostato termina l'esecuzione, come `max_turns` o `max_budget_usd`, segnala un `subtype` di tipo `error_*`.2233Per distinguere i fallimenti, controlla `terminal_reason` prima di `subtype`. Quando la richiesta finale fallisce, ad esempio su un errore API, Claude Code segnala `subtype` `"success"` con la causa in `terminal_reason`, ad esempio `"api_error"`; quando un limite che hai impostato termina l'esecuzione, come `max_turns` o `max_budget_usd`, segnala un `subtype` di tipo `error_*`.

2233 2234 

2234<h3 id="clijsondecodeerror">2235<h3 id="clijsondecodeerror">

2235 `CLIJSONDecodeError`2236 `CLIJSONDecodeError`


2253 Tipi di Hook2254 Tipi di Hook

2254</h2>2255</h2>

2255 2256 

2256Per una guida completa sull'utilizzo degli hooks con esempi e modelli comuni, vedi la [guida Hooks](/docs/it/agent-sdk/hooks).2257Per una guida completa sull'utilizzo degli hook con esempi e modelli comuni, vedi la [guida Hooks](/docs/it/agent-sdk/hooks).

2257 2258 

2258<h3 id="hookevent">2259<h3 id="hookevent">

2259 `HookEvent`2260 `HookEvent`


2368| Campo | Tipo | Descrizione |2369| Campo | Tipo | Descrizione |

2369| :- | :- | :- |2370| :- | :- | :- |

2370| `session_id` | `str` | Identificatore di sessione corrente |2371| `session_id` | `str` | Identificatore di sessione corrente |

2371| `transcript_path` | `str` | Percorso al file di trascritto della sessione |2372| `transcript_path` | `str` | Percorso al file di trascrizione della sessione |

2372| `cwd` | `str` | Directory di lavoro corrente |2373| `cwd` | `str` | Directory di lavoro corrente |

2373| `permission_mode` | `str` (opzionale) | Modalità di autorizzazione corrente |2374| `permission_mode` | `str` (opzionale) | Modalità di permesso corrente |

2374 2375 

2375<h3 id="pretoolusehookinput">2376<h3 id="pretoolusehookinput">

2376 `PreToolUseHookInput`2377 `PreToolUseHookInput`


2394| `tool_name` | `str` | Nome dello strumento che sta per essere eseguito |2395| `tool_name` | `str` | Nome dello strumento che sta per essere eseguito |

2395| `tool_input` | `dict[str, Any]` | Parametri di input per lo strumento |2396| `tool_input` | `dict[str, Any]` | Parametri di input per lo strumento |

2396| `tool_use_id` | `str` | Identificatore univoco per questo utilizzo dello strumento |2397| `tool_use_id` | `str` | Identificatore univoco per questo utilizzo dello strumento |

2397| `agent_id` | `str` (opzionale) | Identificatore del subagente, presente quando l'hook si attiva all'interno di un subagente |2398| `agent_id` | `str` (opzionale) | Identificatore del subagent, presente quando l'hook si attiva all'interno di un subagent |

2398| `agent_type` | `str` (opzionale) | Tipo di subagente, presente quando l'hook si attiva all'interno di un subagente |2399| `agent_type` | `str` (opzionale) | Tipo di subagent, presente quando l'hook si attiva all'interno di un subagent |

2399 2400 

2400<h3 id="posttoolusehookinput">2401<h3 id="posttoolusehookinput">

2401 `PostToolUseHookInput`2402 `PostToolUseHookInput`


2421| `tool_input` | `dict[str, Any]` | Parametri di input che sono stati utilizzati |2422| `tool_input` | `dict[str, Any]` | Parametri di input che sono stati utilizzati |

2422| `tool_response` | `Any` | Risposta dall'esecuzione dello strumento |2423| `tool_response` | `Any` | Risposta dall'esecuzione dello strumento |

2423| `tool_use_id` | `str` | Identificatore univoco per questo utilizzo dello strumento |2424| `tool_use_id` | `str` | Identificatore univoco per questo utilizzo dello strumento |

2424| `agent_id` | `str` (opzionale) | Identificatore del subagente, presente quando l'hook si attiva all'interno di un subagente |2425| `agent_id` | `str` (opzionale) | Identificatore del subagent, presente quando l'hook si attiva all'interno di un subagent |

2425| `agent_type` | `str` (opzionale) | Tipo di subagente, presente quando l'hook si attiva all'interno di un subagente |2426| `agent_type` | `str` (opzionale) | Tipo di subagent, presente quando l'hook si attiva all'interno di un subagent |

2426 2427 

2427<h3 id="posttoolusefailurehookinput">2428<h3 id="posttoolusefailurehookinput">

2428 `PostToolUseFailureHookInput`2429 `PostToolUseFailureHookInput`


2450| `tool_use_id` | `str` | Identificatore univoco per questo utilizzo dello strumento |2451| `tool_use_id` | `str` | Identificatore univoco per questo utilizzo dello strumento |

2451| `error` | `str` | Messaggio di errore dall'esecuzione fallita |2452| `error` | `str` | Messaggio di errore dall'esecuzione fallita |

2452| `is_interrupt` | `bool` (opzionale) | True quando il fallimento è arrivato a Claude Code come un'interruzione piuttosto che come un errore segnalato dallo strumento. L'annullamento di uno strumento in esecuzione con `interrupt()` non attiva questo hook; il risultato dello strumento contiene il messaggio di interruzione |2453| `is_interrupt` | `bool` (opzionale) | True quando il fallimento è arrivato a Claude Code come un'interruzione piuttosto che come un errore segnalato dallo strumento. L'annullamento di uno strumento in esecuzione con `interrupt()` non attiva questo hook; il risultato dello strumento contiene il messaggio di interruzione |

2453| `agent_id` | `str` (opzionale) | Identificatore del subagente, presente quando l'hook si attiva all'interno di un subagente |2454| `agent_id` | `str` (opzionale) | Identificatore del subagent, presente quando l'hook si attiva all'interno di un subagent |

2454| `agent_type` | `str` (opzionale) | Tipo di subagente, presente quando l'hook si attiva all'interno di un subagente |2455| `agent_type` | `str` (opzionale) | Tipo di subagent, presente quando l'hook si attiva all'interno di un subagent |

2455 2456 

2456<h3 id="userpromptsubmithookinput">2457<h3 id="userpromptsubmithookinput">

2457 `UserPromptSubmitHookInput`2458 `UserPromptSubmitHookInput`


2506| :- | :- | :- |2507| :- | :- | :- |

2507| `hook_event_name` | `Literal["SubagentStop"]` | Sempre "SubagentStop" |2508| `hook_event_name` | `Literal["SubagentStop"]` | Sempre "SubagentStop" |

2508| `stop_hook_active` | `bool` | Se l'hook di arresto è attivo |2509| `stop_hook_active` | `bool` | Se l'hook di arresto è attivo |

2509| `agent_id` | `str` | Identificatore univoco per il subagente |2510| `agent_id` | `str` | Identificatore univoco per il subagent |

2510| `agent_transcript_path` | `str` | Percorso al file di trascritto del subagente |2511| `agent_transcript_path` | `str` | Percorso al file di trascrizione del subagent |

2511| `agent_type` | `str` | Tipo del subagente |2512| `agent_type` | `str` | Tipo del subagent |

2512 2513 

2513<h3 id="precompacthookinput">2514<h3 id="precompacthookinput">

2514 `PreCompactHookInput`2515 `PreCompactHookInput`


2566| Campo | Tipo | Descrizione |2567| Campo | Tipo | Descrizione |

2567| :- | :- | :- |2568| :- | :- | :- |

2568| `hook_event_name` | `Literal["SubagentStart"]` | Sempre "SubagentStart" |2569| `hook_event_name` | `Literal["SubagentStart"]` | Sempre "SubagentStart" |

2569| `agent_id` | `str` | Identificatore univoco per il subagente |2570| `agent_id` | `str` | Identificatore univoco per il subagent |

2570| `agent_type` | `str` | Tipo del subagente |2571| `agent_type` | `str` | Tipo del subagent |

2571 2572 

2572<h3 id="permissionrequesthookinput">2573<h3 id="permissionrequesthookinput">

2573 `PermissionRequestHookInput`2574 `PermissionRequestHookInput`

2574</h3>2575</h3>

2575 2576 

2576Dati di input per gli eventi hook `PermissionRequest`. Consente agli hook di gestire le decisioni di autorizzazione a livello di programmazione.2577Dati di input per gli eventi hook `PermissionRequest`. Consente agli hook di gestire le decisioni di permesso a livello di programmazione.

2577 2578 

2578```python theme={null}2579```python theme={null}

2579class PermissionRequestHookInput(BaseHookInput):2580class PermissionRequestHookInput(BaseHookInput):


2588| Campo | Tipo | Descrizione |2589| Campo | Tipo | Descrizione |

2589| :- | :- | :- |2590| :- | :- | :- |

2590| `hook_event_name` | `Literal["PermissionRequest"]` | Sempre "PermissionRequest" |2591| `hook_event_name` | `Literal["PermissionRequest"]` | Sempre "PermissionRequest" |

2591| `tool_name` | `str` | Nome dello strumento che richiede l'autorizzazione |2592| `tool_name` | `str` | Nome dello strumento che richiede il permesso |

2592| `tool_input` | `dict[str, Any]` | Parametri di input per lo strumento |2593| `tool_input` | `dict[str, Any]` | Parametri di input per lo strumento |

2593| `permission_suggestions` | `list[Any]` (opzionale) | Aggiornamenti di autorizzazione suggeriti dalla CLI |2594| `permission_suggestions` | `list[Any]` (opzionale) | Aggiornamenti dei permessi suggeriti dalla CLI |

2594| `agent_id` | `str` (opzionale) | Identificatore del subagente, presente quando l'hook si attiva all'interno di un subagente |2595| `agent_id` | `str` (opzionale) | Identificatore del subagent, presente quando l'hook si attiva all'interno di un subagent |

2595| `agent_type` | `str` (opzionale) | Tipo di subagente, presente quando l'hook si attiva all'interno di un subagente |2596| `agent_type` | `str` (opzionale) | Tipo di subagent, presente quando l'hook si attiva all'interno di un subagent |

2596 2597 

2597<h3 id="hookjsonoutput">2598<h3 id="hookjsonoutput">

2598 `HookJSONOutput`2599 `HookJSONOutput`


2634 `HookSpecificOutput`2635 `HookSpecificOutput`

2635</h4>2636</h4>

2636 2637 

2637Un'unione discriminata di tipi di output specifici dell'evento `TypedDict`. Il campo `hookEventName` determina quali campi sono validi. Per i dettagli completi sui campi disponibili per evento hook, vedi [Controlla l'esecuzione con gli hooks](/docs/it/agent-sdk/hooks#outputs).2638Un'unione discriminata di tipi di output specifici dell'evento `TypedDict`. Il campo `hookEventName` determina quali campi sono validi. Per i dettagli completi sui campi disponibili per evento hook, vedi [Controlla l'esecuzione con gli hook](/docs/it/agent-sdk/hooks#outputs).

2638 2639 

2639```python theme={null}2640```python theme={null}

2640class PreToolUseHookSpecificOutput(TypedDict):2641class PreToolUseHookSpecificOutput(TypedDict):


2649 hookEventName: Literal["PostToolUse"]2650 hookEventName: Literal["PostToolUse"]

2650 additionalContext: NotRequired[str]2651 additionalContext: NotRequired[str]

2651 updatedToolOutput: NotRequired[Any]2652 updatedToolOutput: NotRequired[Any]

2652 updatedMCPToolOutput: NotRequired[Any] # Deprecated: use updatedToolOutput, which works for all tools2653 updatedMCPToolOutput: NotRequired[Any] # MCP tools only. Prefer updatedToolOutput, which works for all tools

2653 2654 

2654 2655 

2655class PostToolUseFailureHookSpecificOutput(TypedDict):2656class PostToolUseFailureHookSpecificOutput(TypedDict):


2708 Esempio di utilizzo di Hook2709 Esempio di utilizzo di Hook

2709</h3>2710</h3>

2710 2711 

2711Questo esempio registra due hook: uno che blocca i comandi bash pericolosi come `rm -rf /`, e un altro che registra tutto l'utilizzo dello strumento per il controllo. L'hook di sicurezza viene eseguito solo sui comandi Bash (tramite il `matcher`), mentre l'hook di registrazione viene eseguito su tutti gli strumenti.2712Questo esempio registra due hook: uno che blocca i comandi Bash pericolosi come `rm -rf /`, e un altro che registra nei log tutto l'utilizzo degli strumenti per il controllo. L'hook di sicurezza viene eseguito solo sui comandi Bash (tramite il `matcher`), mentre l'hook di logging viene eseguito su tutti gli strumenti.

2712 2713 

2713```python theme={null}2714```python theme={null}

2714import asyncio2715import asyncio


2767 Tipi di input/output dello strumento2768 Tipi di input/output dello strumento

2768</h2>2769</h2>

2769 2770 

2770Documentazione degli schemi di input/output per tutti gli strumenti Claude Code integrati. Mentre Python SDK non esporta questi come tipi, rappresentano la struttura degli input e output dello strumento nei messaggi.2771Documentazione degli schemi di input/output per gli strumenti Claude Code integrati. Mentre Python SDK non esporta questi come tipi, rappresentano la struttura degli input e output dello strumento nei messaggi.

2771 2772 

2772Ogni output mostrato è il valore che leggete da [`UserMessage.tool_use_result`](#usermessage) per quello strumento. I nomi delle chiavi appaiono esattamente come Claude Code li emette. Una chiave annotata `| None` con un commento "presente quando" o "opzionale" viene omessa quando non si applica.2773Ogni output mostrato è il valore che leggi da [`UserMessage.tool_use_result`](#usermessage) per quello strumento. I nomi delle chiavi appaiono esattamente come Claude Code li emette. Una chiave annotata `| None` con un commento "presente quando" o "opzionale" viene omessa quando non si applica.

2773 2774 

2774<h3 id="agent">2775<h3 id="agent">

2775 Agent2776 Agent


2788 "run_in_background": bool | None, # Gli agenti vengono eseguiti in background per impostazione predefinita; impostare su False per eseguire in modo sincrono2789 "run_in_background": bool | None, # Gli agenti vengono eseguiti in background per impostazione predefinita; impostare su False per eseguire in modo sincrono

2789 "name": str | None, # Nome per l'agente generato2790 "name": str | None, # Nome per l'agente generato

2790 "team_name": str | None, # Deprecato; ignorato2791 "team_name": str | None, # Deprecato; ignorato

2791 "mode": "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan" | None, # Deprecato; ignorato. Le regole di ereditarietà dei subagenti decidono la modalità di autorizzazione di un subagente2792 "mode": "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan" | None, # Deprecato; ignorato. Le regole di ereditarietà dei subagent decidono la modalità di permesso di un subagent

2792 "isolation": "worktree" | "remote" | None, # Modalità di isolamento per le modifiche dell'agente2793 "isolation": "worktree" | "remote" | None, # Modalità di isolamento per le modifiche dell'agente

2793}2794}

2794```2795```


2873}2874}

2874```2875```

2875 2876 

2876Restituisce il risultato dal subagente. L'output è discriminato sul campo `status`: `"completed"` per compiti terminati, `"async_launched"` per compiti in background, e `"remote_launched"` per compiti che Claude Code ha inviato a una sessione cloud, dove `sessionUrl` si collega a quella sessione e `taskId` l'identifica. Se Claude Code [ha mantenuto il worktree isolato del subagente](/docs/it/worktrees#isolate-subagents-with-worktrees), `worktreePath` sulla variante `completed` è dove trovarlo, e `worktreeBranch` è il suo ramo quando Claude Code ha creato il worktree con git.2877Restituisce il risultato dal subagent. L'output è discriminato sul campo `status`: `"completed"` per compiti terminati, `"async_launched"` per compiti in background, e `"remote_launched"` per compiti che Claude Code ha inviato a una sessione cloud, dove `sessionUrl` si collega a quella sessione e `taskId` l'identifica. Se Claude Code [ha mantenuto il worktree isolato del subagent](/docs/it/worktrees#isolate-subagents-with-worktrees), `worktreePath` sulla variante `completed` è dove trovarlo, e `worktreeBranch` è il suo branch quando Claude Code ha creato il worktree con git.

2877 2878 

2878Sulla variante `completed`, `resolvedModel` nomina il modello su cui il subagente ha iniziato, che può differire dal `model` input richiesto quando [`availableModels`](/docs/it/model-config#restrict-model-selection) o un altro override si applica. Questo campo richiede Claude Code v2.1.174 o successivo. Sulla variante `async_launched`, `resolvedModel` nomina il modello in uso quando l'agente si è spostato in background, quindi uno scambio che è accaduto prima del backgrounding si riflette lì. Il campo `modelsUsed` su entrambe le varianti elenca i modelli utilizzati in ordine, con ripetizioni consecutive compresse; è impostato solo quando il modello è stato scambiato durante l'esecuzione. `modelsUsed` e il comportamento di `resolvedModel` al momento del backgrounding richiedono Claude Code v2.1.212 o successivo.2879Sulla variante `completed`, `resolvedModel` nomina il modello su cui il subagent ha iniziato, che può differire dal `model` input richiesto quando [`availableModels`](/docs/it/model-config#restrict-model-selection) o un altro override si applica. Questo campo richiede Claude Code v2.1.174 o successivo. Sulla variante `async_launched`, `resolvedModel` nomina il modello in uso quando l'agente si è spostato in background, quindi uno scambio che è accaduto prima del backgrounding si riflette lì. Il campo `modelsUsed` su entrambe le varianti elenca i modelli utilizzati in ordine, con ripetizioni consecutive compresse; è impostato solo quando il modello è stato scambiato durante l'esecuzione. `modelsUsed` e il comportamento di `resolvedModel` al momento del backgrounding richiedono Claude Code v2.1.212 o successivo.

2879 2880 

2880Claude Code riempie `usage` e `totalTokens` dalla richiesta API finale del subagent, non dall'intera esecuzione. Quando presente, `thinking_tokens` sotto `output_tokens_details` in `usage` è il numero di token di output di quella richiesta che erano token di ragionamento. La chiave `output_tokens_details` richiede Python SDK v0.2.136 o successivo, che raggruppa Claude Code v2.1.228. La chiave `fallback_credit` richiede Python SDK v0.2.162 o successivo, che raggruppa Claude Code v2.1.285.2881Claude Code riempie `usage` e `totalTokens` dalla richiesta API finale del subagent, non dall'intera esecuzione. Quando presente, `thinking_tokens` sotto `output_tokens_details` in `usage` è il numero di token di output di quella richiesta che erano token di ragionamento. La chiave `output_tokens_details` richiede Python SDK v0.2.136 o successivo, che raggruppa Claude Code v2.1.228. La chiave `fallback_credit` richiede Python SDK v0.2.162 o successivo, che raggruppa Claude Code v2.1.285.

2881 2882 


2906 }2907 }

2907 ],2908 ],

2908 "answers": dict[str, str] | None,2909 "answers": dict[str, str] | None,

2909 # Risposte dell'utente popolate dal sistema di autorizzazione. Le risposte2910 # Risposte dell'utente popolate dal sistema di permessi. Le risposte

2910 # multi-select sono una stringa unita da virgole delle etichette selezionate; un2911 # multi-select sono una stringa unita da virgole delle etichette selezionate; un

2911 # elenco di etichette è accettato su input e coercizzato in quella forma2912 # elenco di etichette è accettato su input e coercizzato in quella forma

2912 "annotations": dict[str, dict] | None,2913 "annotations": dict[str, dict] | None,


2933 # Le risposte multi-select sono separate da virgole2934 # Le risposte multi-select sono separate da virgole

2934 "response": str | None,2935 "response": str | None,

2935 # Risposta in testo libero digitata invece di rispondere alle domande; quando impostato,2936 # Risposta in testo libero digitata invece di rispondere alle domande; quando impostato,

2936 # Claude riceve "L'utente ha risposto: ..." al posto dell'elenco di risposte2937 # Claude riceve "The user responded: ..." al posto dell'elenco di risposte

2937 "annotations": dict[str, dict] | None, # "preview" e "notes" per domanda dalle selezioni dell'utente2938 "annotations": dict[str, dict] | None, # "preview" e "notes" per domanda dalle selezioni dell'utente

2938 "afkTimeoutMs": int | None, # Impostato quando la finestra di dialogo si è auto-risolta dopo questo numero di millisecondi di inattività dell'utente; assente quando l'utente ha risposto2939 "afkTimeoutMs": int | None, # Impostato quando la finestra di dialogo si è auto-risolta dopo questo numero di millisecondi di inattività dell'utente; assente quando l'utente ha risposto

2939}2940}


2976 2977 

2977**Nome dello strumento:** `Monitor`2978**Nome dello strumento:** `Monitor`

2978 2979 

2979Esegue una sorgente in background e fornisce ogni evento a Claude in modo che possa reagire senza polling: `command` esegue uno script e emette un evento per riga stdout, e `ws` apre un WebSocket ed emette un evento per frame di testo. Fornire esattamente uno tra `command` o `ws`.2980Esegue una sorgente in background e fornisce ogni evento a Claude in modo che possa reagire senza polling: `command` esegue uno script e emette un evento per riga stdout, e `ws` apre un WebSocket ed emette un evento per frame di testo. Fornisci esattamente uno tra `command` o `ws`.

2980 2981 

2981Quando Monitor esegue un comando, segue le stesse regole di autorizzazione di Bash; un monitoraggio WebSocket richiede l'approvazione separatamente. L'origine `ws` richiede Claude Code v2.1.195 o successivo. Vedi il [riferimento dello strumento Monitor](/docs/it/tools-reference#monitor-tool) per il comportamento e la disponibilità del provider.2982Quando Monitor esegue un comando, segue le stesse regole di permesso di Bash; un monitoraggio WebSocket richiede l'approvazione separatamente. L'origine `ws` richiede Claude Code v2.1.195 o successivo. Vedi il [riferimento dello strumento Monitor](/docs/it/tools-reference#monitor-tool) per il comportamento e la disponibilità del provider.

2982 2983 

2983**Input:**2984**Input:**

2984 2985 


3065}3066}

3066```3067```

3067 3068 

3068L'output assume una delle seguenti forme a seconda di ciò che Claude ha letto. Controllare la chiave `type` per distinguerle.3069L'output assume una delle seguenti forme a seconda di ciò che Claude ha letto. Controlla la chiave `type` per distinguerle.

3069 3070 

3070**Output (type: `"text"`):**3071**Output (type: `"text"`):**

3071 3072 


3150 "file": {3151 "file": {

3151 "filePath": str,3152 "filePath": str,

3152 },3153 },

3153 "source": "seeded" | None, # Presente quando la copia precedente proveniva da un file CLAUDE.md o memory caricato all'avvio piuttosto che da una chiamata Read3154 "source": "seeded" | None, # Presente quando la copia precedente proveniva da un file CLAUDE.md o di memoria caricato all'avvio piuttosto che da una chiamata Read

3154}3155}

3155```3156```

3156 3157 


3544 TaskOutput3545 TaskOutput

3545</h3>3546</h3>

3546 3547 

3547Rimosso in Claude Code v2.1.277. In precedenza recuperava l'output da un'attività in background o completata in esecuzione, con `BashOutput` accettato come alias; Claude legge il file di output di un'attività in background con `Read` invece.3548Rimosso in Claude Code v2.1.277. In precedenza recuperava l'output da un'attività in background in esecuzione o completata, con `BashOutput` accettato come alias; Claude legge invece il file di output di un'attività in background con `Read`.

3548 3549 

3549Una voce `disallowed_tools` o una regola di negazione che ancora nomina uno dei due nomi viene ignorata senza un avviso.3550Una voce `disallowed_tools` o una regola di negazione che ancora nomina uno dei due nomi viene ignorata senza un avviso.

3550 3551 


3584 3585 

3585```python theme={null}3586```python theme={null}

3586{3587{

3587 "plan": str # Il piano da eseguire dall'utente per l'approvazione3588 "plan": str # Il piano da sottoporre all'utente per l'approvazione

3588}3589}

3589```3590```

3590 3591 


3593```python theme={null}3594```python theme={null}

3594{3595{

3595 "plan": str | None, # Il piano che è stato presentato all'utente3596 "plan": str | None, # Il piano che è stato presentato all'utente

3596 "isAgent": bool, # True quando un subagente ha chiamato lo strumento3597 "isAgent": bool, # True quando un subagent ha chiamato lo strumento

3597 "filePath": str | None, # Presente quando il piano è stato salvato in un file3598 "filePath": str | None, # Presente quando il piano è stato salvato in un file

3598 "hasTaskTool": bool | None, # Opzionale; se lo strumento Agent è disponibile nel contesto corrente3599 "hasTaskTool": bool | None, # Opzionale; se lo strumento Agent è disponibile nel contesto corrente

3599 "planWasEdited": bool | None, # Presente e True quando l'utente ha modificato il piano prima di approvarlo3600 "planWasEdited": bool | None, # Presente e True quando l'utente ha modificato il piano prima di approvarlo

Details

60 60 

61Per utilizzare gli output strutturati, definire uno [JSON Schema](https://json-schema.org/understanding-json-schema/about) che descriva la forma dei dati desiderati, quindi passarlo a `query()` tramite l'opzione `outputFormat` (TypeScript) o `output_format` (Python). Quando l'agente termina, il messaggio di risultato include un campo `structured_output` con dati convalidati corrispondenti allo schema.61Per utilizzare gli output strutturati, definire uno [JSON Schema](https://json-schema.org/understanding-json-schema/about) che descriva la forma dei dati desiderati, quindi passarlo a `query()` tramite l'opzione `outputFormat` (TypeScript) o `output_format` (Python). Quando l'agente termina, il messaggio di risultato include un campo `structured_output` con dati convalidati corrispondenti allo schema.

62 62 

63L'esempio seguente chiede all'agente di ricercare Anthropic e restituire il nome dell'azienda, l'anno di fondazione e la sede come output strutturato.63Prima di eseguire gli esempi in questa pagina, installa il Claude Agent SDK seguendo la [guida rapida](/docs/it/agent-sdk/quickstart#setup). L'esempio seguente chiede all'agente di ricercare Anthropic e restituire il nome dell'azienda, l'anno di fondazione e la sede come output strutturato.

64 64 

65<CodeGroup>65<CodeGroup>

66 ```typescript TypeScript theme={null}66 ```typescript TypeScript theme={null}


390 Gestione degli errori390 Gestione degli errori

391</h2>391</h2>

392 392 

393La generazione di output strutturati può non riuscire quando l'agente non può produrre JSON valido corrispondente allo schema. Questo accade in genere quando lo schema è troppo complesso per l'attività, l'attività stessa è ambigua o l'agente raggiunge il limite di tentativi cercando di correggere gli errori di convalida. Può anche accadere senza alcun errore di convalida: un [fallback del modello](/docs/it/model-config#automatic-model-fallback) può ritirare un output già completato a metà flusso, e se nessun nuovo tentativo lo sostituisce, l'esecuzione termina con lo stesso errore. Controllare l'elenco `errors` sul messaggio di risultato per distinguere le due cause prima di eseguire il debug dello schema.393La generazione di output strutturati può non riuscire quando l'agente non può produrre JSON valido corrispondente al tuo schema. Questo accade in genere quando lo schema è troppo complesso per l'attività, l'attività stessa è ambigua o l'agente raggiunge il limite di tentativi cercando di correggere gli errori di convalida. Può anche accadere senza alcun errore di convalida: un [fallback del modello](/docs/it/model-config#automatic-model-fallback) può ritirare un output già completato a metà flusso, e se nessun nuovo tentativo lo sostituisce, l'esecuzione termina con lo stesso errore. Controlla l'elenco `errors` sul messaggio di risultato per distinguere le due cause prima di eseguire il debug del tuo schema.

394 394 

395Quando si verifica un errore, il messaggio di risultato ha un `subtype` che indica cosa è andato storto:395Quando si verifica un errore, il messaggio di risultato ha un `subtype` che indica cosa è andato storto:

396 396 

Details

186 console.error("Claim failed:", error.message);186 console.error("Claim failed:", error.message);

187});187});

188 188 

189for await (const message of claimedQuery) {189try {

190 for await (const message of claimedQuery) {

190 console.log(message);191 console.log(message);

192 }

193} catch (error) {

194 // Dopo un claim rifiutato, la query rivendicata genera un'eccezione una volta prodotto il risultato di errore

195 console.error(`Session ended with an error: ${error}`);

191}196}

192```197```

193 198 


717| `accountInfo()` | Restituisce le informazioni dell'account |722| `accountInfo()` | Restituisce le informazioni dell'account |

718| `reconnectMcpServer(serverName)` | Ricollega un server MCP per nome. Se il nome corrisponde anche a una voce in un file di impostazioni come `.mcp.json` o `~/.claude.json`, Claude Code ricollega il server che hai configurato tramite [`mcpServers`](#options) o `setMcpServers()`, non la voce del file di impostazioni. Quell'ordine di risoluzione richiede Claude Code v2.1.257 o successivo |723| `reconnectMcpServer(serverName)` | Ricollega un server MCP per nome. Se il nome corrisponde anche a una voce in un file di impostazioni come `.mcp.json` o `~/.claude.json`, Claude Code ricollega il server che hai configurato tramite [`mcpServers`](#options) o `setMcpServers()`, non la voce del file di impostazioni. Quell'ordine di risoluzione richiede Claude Code v2.1.257 o successivo |

719| `toggleMcpServer(serverName, enabled)` | Abilita o disabilita un server MCP per nome, con la stessa risoluzione dei nomi di `reconnectMcpServer()`. Disabilitare un server lo disconnette e ne rimuove gli strumenti. Consulta [`toggleMcpServer()`](#togglemcpserver) per la versione di Claude Code necessaria per ciascun tipo di server |724| `toggleMcpServer(serverName, enabled)` | Abilita o disabilita un server MCP per nome, con la stessa risoluzione dei nomi di `reconnectMcpServer()`. Disabilitare un server lo disconnette e ne rimuove gli strumenti. Consulta [`toggleMcpServer()`](#togglemcpserver) per la versione di Claude Code necessaria per ciascun tipo di server |

720| `setMcpServers(servers)` | Sostituisci dinamicamente l'insieme dei server MCP per questa sessione. Si risolve con un [`McpSetServersResult`](#mcpsetserversresult) che nomina quali server sono stati aggiunti e rimossi, e eventuali errori |725| `setMcpServers(servers)` | Sostituisce i server MCP gestiti da questo metodo: i server aggiunti tramite esso e i [server SDK in-process](#createsdkmcpserver). Si risolve con un [`McpSetServersResult`](#mcpsetserversresult) che indica quali server sono stati aggiunti e rimossi, ed eventuali errori; quella sezione spiega quali altri server restano connessi |

721| `readMcpResource(serverName, uri)` | *Alpha.* Legge una risorsa MCP Apps `ui://` da un server MCP connesso in modo che la tua applicazione possa rendere il widget di uno strumento. Si risolve con un [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Richiede TypeScript Agent SDK v0.3.280 o successivo |726| `readMcpResource(serverName, uri)` | *Alpha.* Legge una risorsa MCP Apps `ui://` da un server MCP connesso in modo che la tua applicazione possa rendere il widget di uno strumento. Si risolve con un [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Richiede TypeScript Agent SDK v0.3.280 o successivo |

722| `streamInput(stream)` | Trasmetti i messaggi di input alla query per conversazioni multi-turno |727| `streamInput(stream)` | Trasmetti i messaggi di input alla query per conversazioni multi-turno |

723| `stopTask(taskId)` | Interrompi un'attività in background in esecuzione per ID |728| `stopTask(taskId)` | Interrompi un'attività in background in esecuzione per ID |


844 849 

845`options.cwd` è richiesto. Una rivendicazione può anche impostare `additionalDirectories`, `model`, `permissionMode`, `maxThinkingTokens`, un overlay flag-settings in `settings`, `appendSystemPrompt`, `title`, `agents`, e token per-sessione in `env`.850`options.cwd` è richiesto. Una rivendicazione può anche impostare `additionalDirectories`, `model`, `permissionMode`, `maxThinkingTokens`, un overlay flag-settings in `settings`, `appendSystemPrompt`, `title`, `agents`, e token per-sessione in `env`.

846 851 

847Claude Code può rifiutare una rivendicazione, ad esempio per una cartella che non esiste o una le cui impostazioni del progetto impostano `env`, `agent`, o `model`. Quando `claimed` rifiuta con un messaggio che inizia con `option_not_applied`, la sessione è in esecuzione senza il `model` o `maxThinkingTokens` che hai richiesto. Dopo qualsiasi altro rifiuto il tuo prompt non ha eseguito, quindi avvia la sessione con `query()` invece.852Claude Code può rifiutare una rivendicazione, ad esempio per una cartella che non esiste o per una le cui impostazioni di progetto impostano `env`, `agent` o `model`. Dopo un rifiuto, un prompt che `claim()` ha già inviato riceve un risultato di errore il cui testo inizia con `not_claimed`, e la query restituita genera quindi un'eccezione. Racchiudi il loop della query in un blocco try per proseguire oltre l'eccezione. Quando `claimed` viene rifiutata con un messaggio che inizia con `option_not_applied`, la sessione è in esecuzione senza il `model` o il `maxThinkingTokens` che hai richiesto. Dopo qualsiasi altro rifiuto il tuo prompt non è stato eseguito, quindi avvia invece la sessione con `query()`.

848 853 

849<h3 id="sdkcontrolinitializeresponse">854<h3 id="sdkcontrolinitializeresponse">

850 `SDKControlInitializeResponse`855 `SDKControlInitializeResponse`


1337| `mcpServer` | `{ name: string; source: string }` | Per uno strumento `mcp__*`, il server MCP che lo serve e da dove proviene la definizione di quel server, con i campi di [`McpServerProvenance`](#mcpserverprovenance). Assente per altri strumenti. Richiede Agent SDK v0.3.274 o successivo |1342| `mcpServer` | `{ name: string; source: string }` | Per uno strumento `mcp__*`, il server MCP che lo serve e da dove proviene la definizione di quel server, con i campi di [`McpServerProvenance`](#mcpserverprovenance). Assente per altri strumenti. Richiede Agent SDK v0.3.274 o successivo |

1338| `decisionReason` | `string` | Spiega perché questa richiesta di permesso è stata attivata |1343| `decisionReason` | `string` | Spiega perché questa richiesta di permesso è stata attivata |

1339| `defaultToNo` | `boolean` | Quando `true`, un singolo tasto errato non deve approvare questa richiesta: apri il tuo prompt sulla sua opzione di declino, non pre-selezionare approvazione, e non offrire alcuna scorciatoia di approvazione con un tasto. Richiede Agent SDK v0.3.268 o successivo |1344| `defaultToNo` | `boolean` | Quando `true`, un singolo tasto errato non deve approvare questa richiesta: apri il tuo prompt sulla sua opzione di declino, non pre-selezionare approvazione, e non offrire alcuna scorciatoia di approvazione con un tasto. Richiede Agent SDK v0.3.268 o successivo |

1340| `suppressAlwaysAllowRule` | `boolean` | Quando `true`, non offrire una scelta persistente sempre-consenti per questa richiesta, perché la regola che scriverebbe concede più dell'azione della richiesta stessa. Richiede Agent SDK v0.3.268 o successivo |1345| `suppressAlwaysAllowRule` | `boolean` | Quando è `true`, non offrire una scelta persistente "consenti sempre" per questa richiesta. Richiede Agent SDK v0.3.268 o successiva |

1341| `toolUseID` | `string` | Identificatore univoco per questa specifica chiamata dello strumento all'interno del messaggio dell'assistente |1346| `toolUseID` | `string` | Identificatore univoco per questa specifica chiamata dello strumento all'interno del messaggio dell'assistente |

1342| `agentID` | `string` | Se in esecuzione all'interno di un sub-agente, l'ID del sub-agente |1347| `agentID` | `string` | Se in esecuzione all'interno di un sub-agente, l'ID del sub-agente |

1343| `requestId` | `string` | L'`request_id` dell'envelope `control_request`. Un `control_response` che la tua applicazione invia al di fuori dell'SDK, come un POST HTTP firmato, deve echeggiare questo valore in modo che il processo Claude Code possa abbinare la risposta alla richiesta |1348| `requestId` | `string` | L'`request_id` dell'envelope `control_request`. Un `control_response` che la tua applicazione invia al di fuori dell'SDK, come un POST HTTP firmato, deve echeggiare questo valore in modo che il processo Claude Code possa abbinare la risposta alla richiesta |


5103 `ApiKeySource`5108 `ApiKeySource`

5104</h3>5109</h3>

5105 5110 

5106Da dove proviene la chiave API per le richieste della sessione, segnalata come `apiKeySource` nel messaggio di inizializzazione [`SDKSystemMessage`](#sdksystemmessage).5111La provenienza della chiave API usata per le richieste della sessione, riportata come `apiKeySource` nel messaggio init [`SDKSystemMessage`](#sdksystemmessage).

5107 5112 

5108```typescript theme={null}5113```typescript theme={null}

5109type ApiKeySource =5114type ApiKeySource =


5118 | "oauth";5123 | "oauth";

5119```5124```

5120 5125 

5121Claude Code segnala uno di quattro valori:5126Claude Code riporta uno di quattro valori:

5122 5127 

5123| Valore | Chiave in uso |5128| Valore | Chiave in uso |

5124| - | - |5129| - | - |

5125| `ANTHROPIC_API_KEY` | La chiave nella variabile d'ambiente `ANTHROPIC_API_KEY` |5130| `ANTHROPIC_API_KEY` | La chiave nella variabile d'ambiente `ANTHROPIC_API_KEY` |

5126| `apiKeyHelper` | La chiave restituita dal tuo comando [`apiKeyHelper`](/docs/it/settings-reference#apikeyhelper) |5131| `apiKeyHelper` | La chiave restituita dal tuo comando [`apiKeyHelper`](/docs/it/settings-reference#apikeyhelper) |

5127| `/login managed key` | La chiave che Claude Code ha memorizzato quando hai effettuato l'accesso con un [account Claude Console](/docs/it/authentication#claude-console-authentication) |5132| `/login managed key` | La chiave che Claude Code ha memorizzato quando hai effettuato l'accesso con un [account Claude Console](/docs/it/authentication#claude-console-authentication) |

5128| `none` | Nessuna chiave API. La sessione si autentica in un altro modo, ad esempio un accesso a claude.ai, un token bearer, o un provider cloud |5133| `none` | Nessuna chiave API. La sessione si autentica in un altro modo, ad esempio con un accesso a claude.ai, un bearer token o un provider cloud |

5129 5134 

5130Agent SDK v0.3.234 e versioni successive elencano questi quattro valori nel tipo. Il tipo mantiene anche `user`, `project`, `org`, `temporary` e `oauth` affinché il codice più vecchio continui a compilarsi, e Claude Code non li segnala.5135Agent SDK v0.3.234 e versioni successive elencano questi quattro valori nel tipo. Il tipo mantiene anche `user`, `project`, `org`, `temporary` e `oauth` affinché il codice meno recente continui a compilare, ma Claude Code non li riporta.

5131 5136 

5132<h3 id="sdkbeta">5137<h3 id="sdkbeta">

5133 `SdkBeta`5138 `SdkBeta`

5134</h3>5139</h3>

5135 5140 

5136Funzioni beta disponibili che possono essere abilitate tramite l'opzione `betas`. Vedi [Intestazioni beta](https://platform.claude.com/docs/en/api/beta-headers) per ulteriori informazioni.5141Funzionalità beta disponibili che possono essere abilitate tramite l'opzione `betas`. Per maggiori informazioni, consulta [Beta headers](https://platform.claude.com/docs/en/api/beta-headers).

5137 5142 

5138```typescript theme={null}5143```typescript theme={null}

5139type SdkBeta = "context-1m-2025-08-07";5144type SdkBeta = "context-1m-2025-08-07";

5140```5145```

5141 5146 

5142<Warning>5147<Warning>

5143 Sull'API Claude, la beta `context-1m-2025-08-07` è ritirata per Claude Sonnet 4.5 e Claude Sonnet 4. Se la passi ancora con uno dei due modelli, le richieste che superano la finestra di contesto standard di 200K token restituiscono un errore, quindi rimuovila da `betas`. Per eseguire una sessione con una finestra di contesto di 1M token, imposta `model` su un modello che [usa la finestra da 1M per impostazione predefinita](/docs/it/model-config#extended-context), come `claude-sonnet-5-5` o `claude-opus-5-5`. Per un modello che raggiunge 1M solo tramite la sua variante `[1m]`, aggiungi il suffisso all'ID del modello, come in `claude-opus-4-6[1m]`.5148 Sulla Claude API, la beta `context-1m-2025-08-07` è stata ritirata per Claude Sonnet 4.5 e Claude Sonnet 4. Se la passi ancora con uno di questi modelli, le richieste che superano la finestra di contesto standard di 200K token restituiscono un errore, quindi rimuovila da `betas`. Per eseguire una sessione con una finestra di contesto da 1M token, imposta `model` su un modello che [funziona con la finestra da 1M per impostazione predefinita](/docs/it/model-config#extended-context), come `claude-sonnet-5-5` o `claude-opus-5-5`. Per un modello che raggiunge 1M solo tramite la sua variante `[1m]`, aggiungi il suffisso all'ID del modello, come in `claude-opus-4-6[1m]`.

5144</Warning>5149</Warning>

5145 5150 

5146<h3 id="slashcommand">5151<h3 id="slashcommand">


5159};5164};

5160```5165```

5161 5166 

5162`builtin` è `true` su una riga quando il comando è proprio di Claude Code e digitare `/name` lo esegue. È assente per un comando definito da un utente, progetto, plugin, o server MCP, e per un comando in bundle che uno di quelli [sostituisce per nome](/docs/it/skills#resolve-skills-that-share-a-name). Richiede Agent SDK v0.3.277 o successivo.5167`builtin` è `true` su una riga quando il comando è proprio di Claude Code e digitare `/name` lo esegue. È assente per un comando definito da un utente, un progetto, un plugin o un server MCP, e per un comando incluso che uno di questi [sostituisce per nome](/docs/it/skills#resolve-skills-that-share-a-name). Richiede Agent SDK v0.3.277 o versioni successive.

5163 5168 

5164<h3 id="modelinfo">5169<h3 id="modelinfo">

5165 `ModelInfo`5170 `ModelInfo`


5184| Campo | Tipo | Descrizione |5189| Campo | Tipo | Descrizione |

5185| :- | :- | :- |5190| :- | :- | :- |

5186| `value` | `string` | Identificatore del modello da passare nelle chiamate API |5191| `value` | `string` | Identificatore del modello da passare nelle chiamate API |

5187| `resolvedModel` | `string \| undefined` | L'ID del modello a cui si risolve il `value` di questa voce, come `claude-sonnet-5-5` per la voce dell'alias `sonnet`. Richiede Claude Code v2.1.197 o successivo. |5192| `resolvedModel` | `string \| undefined` | L'ID del modello a cui si risolve il `value` di questa voce, ad esempio `claude-sonnet-5-5` per la voce dell'alias `sonnet`. Richiede Claude Code v2.1.197 o versioni successive. |

5188| `displayName` | `string` | Nome di visualizzazione leggibile dall'uomo |5193| `displayName` | `string` | Nome visualizzato leggibile |

5189| `description` | `string` | Descrizione delle capacità del modello |5194| `description` | `string` | Descrizione delle capacità del modello |

5190| `supportsEffort` | `boolean \| undefined` | Se questo modello supporta i livelli di sforzo |5195| `supportsEffort` | `boolean \| undefined` | Se questo modello supporta i livelli di sforzo |

5191| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | Livelli di sforzo che questo modello accetta |5196| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | Livelli di sforzo accettati da questo modello |

5192| `supportsAdaptiveThinking` | `boolean \| undefined` | Se questo modello supporta il ragionamento adattivo, dove Claude decide quando e quanto ragionare |5197| `supportsAdaptiveThinking` | `boolean \| undefined` | Se questo modello supporta il ragionamento adattivo, in cui Claude decide quando e quanto ragionare |

5193| `supportsFastMode` | `boolean \| undefined` | Se questo modello supporta la modalità veloce |5198| `supportsFastMode` | `boolean \| undefined` | Se questo modello supporta la modalità veloce |

5194| `supportsAutoMode` | `boolean \| undefined` | Se questo modello supporta la modalità auto |5199| `supportsAutoMode` | `boolean \| undefined` | Se questo modello supporta la modalità auto |

5195 5200 


5211| :- | :- | :- |5216| :- | :- | :- |

5212| `name` | `string` | Identificatore del tipo di agente (ad esempio, `"Explore"`, `"general-purpose"`) |5217| `name` | `string` | Identificatore del tipo di agente (ad esempio, `"Explore"`, `"general-purpose"`) |

5213| `description` | `string` | Descrizione di quando usare questo agente |5218| `description` | `string` | Descrizione di quando usare questo agente |

5214| `model` | `string \| undefined` | Modello che questo agente usa: un alias o un ID di modello, o `'inherit'` per il modello del genitore. Quando è `undefined`, Claude Code sceglie il modello nell'[ordine del modello del subagent](/docs/it/sub-agents#choose-a-model) |5219| `model` | `string \| undefined` | Modello usato da questo agente: un alias o un ID di modello, oppure `'inherit'` per il modello del genitore. Quando è `undefined`, Claude Code sceglie il modello secondo l'[ordine dei modelli dei subagent](/docs/it/sub-agents#choose-a-model) |

5215 5220 

5216<h3 id="mcpserverprovenance">5221<h3 id="mcpserverprovenance">

5217 `McpServerProvenance`5222 `McpServerProvenance`

5218</h3>5223</h3>

5219 5224 

5220Il server MCP che serve uno strumento `mcp__*`, e da dove proviene la definizione di quel server. Gli input degli hook [`PreToolUse`](#pretoolusehookinput), `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` e `PermissionDenied` lo portano come `mcp_server`, e le opzioni [`CanUseTool`](#canusetool) lo portano come `mcpServer`. Entrambi lo omettono per gli strumenti che non provengono da un server MCP.5225Il server MCP che fornisce uno strumento `mcp__*` e la provenienza della definizione di quel server. Gli input degli hook [`PreToolUse`](#pretoolusehookinput), `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` e `PermissionDenied` lo riportano come `mcp_server`, e le opzioni di [`CanUseTool`](#canusetool) lo riportano come `mcpServer`. Entrambi lo omettono per gli strumenti che non provengono da un server MCP.

5221 5226 

5222```typescript theme={null}5227```typescript theme={null}

5223type McpServerProvenance = {5228type McpServerProvenance = {


5228 5233 

5229| Campo | Tipo | Descrizione |5234| Campo | Tipo | Descrizione |

5230| :- | :- | :- |5235| :- | :- | :- |

5231| `name` | `string` | Il nome con cui il server è registrato, lo stesso valore che [`mcpServerStatus()`](#query-object) segnala per esso |5236| `name` | `string` | Il nome con cui il server è registrato, lo stesso valore che [`mcpServerStatus()`](#query-object) riporta per esso |

5232| `source` | `string` | Da dove proviene la definizione del server: `sdk`, `plugin`, o un ambito di configurazione |5237| `source` | `string` | La provenienza della definizione del server: `sdk`, `plugin` o un ambito di configurazione |

5233 5238 

5234`source` assume uno dei seguenti valori. L'insieme è aperto, quindi tratta un valore che non riconosci come una fonte configurata, mai come `sdk`:5239`source` assume uno dei seguenti valori. L'insieme è aperto, quindi tratta un valore che non riconosci come una sorgente configurata, mai come `sdk`:

5235 5240 

5236* **`sdk`**: un server in-process che la tua applicazione ha registrato. Solo l'applicazione host dell'SDK può registrarne uno, quindi un server configurato non segnala mai `sdk`, qualunque sia il suo nome.5241* **`sdk`**: un server in-process registrato dalla tua applicazione. Solo l'applicazione host dell'SDK può registrarne uno, quindi un server configurato non riporta mai `sdk`, qualunque sia il suo nome.

5237* **`plugin`**: un server che un [plugin](/docs/it/agent-sdk/plugins) fornisce. Il suo `name` è la forma con ambito `plugin:<plugin-name>:<server-name>` descritta sotto [server MCP forniti da plugin](/docs/it/mcp#plugin-provided-mcp-servers).5242* **`plugin`**: un server fornito da un [plugin](/docs/it/agent-sdk/plugins). Il suo `name` è nella forma con ambito `plugin:<plugin-name>:<server-name>` descritta in [server MCP forniti dai plugin](/docs/it/mcp#plugin-provided-mcp-servers).

5238* **Un ambito di configurazione**: `user`, `project`, `local`, `dynamic`, `managed`, `enterprise`, `claudeai`, o `agent`. Un server `.mcp.json` segnala `project`, e [ambiti di installazione MCP](/docs/it/mcp#mcp-installation-scopes) definisce `local`, `project` e `user`. I server che la tua applicazione passa nell'opzione [`mcpServers`](#options), diversi dai server SDK in-process, segnalano `dynamic`.5243* **Un ambito di configurazione**: `user`, `project`, `local`, `dynamic`, `managed`, `enterprise`, `claudeai` o `agent`. Un server di `.mcp.json` riporta `project`, e [ambiti di installazione MCP](/docs/it/mcp#mcp-installation-scopes) definisce `local`, `project` e `user`. I server che la tua applicazione passa nell'[opzione `mcpServers`](#options), ad eccezione dei server SDK in-process, riportano `dynamic`.

5239 5244 

5240Basa le decisioni di fiducia su `source`, non su `name` o il prefisso del nome dello strumento `mcp__<server>__`. Per qualsiasi fonte diversa da `sdk`, `name` è testo non attendibile: eseguine l'escape prima della visualizzazione.5245Basa le decisioni di fiducia su `source`, non su `name` né sul prefisso `mcp__<server>__` del nome dello strumento. Per qualsiasi sorgente diversa da `sdk`, `name` è testo non attendibile: eseguine l'escape prima di visualizzarlo.

5241 5246 

5242`McpServerProvenance` e i campi che lo portano richiedono Agent SDK v0.3.274 o successivo.5247`McpServerProvenance` e i campi che lo riportano richiedono Agent SDK v0.3.274 o versioni successive.

5243 5248 

5244<h3 id="mcpserverstatus">5249<h3 id="mcpserverstatus">

5245 `McpServerStatus`5250 `McpServerStatus`


5272};5277};

5273```5278```

5274 5279 

5275`source` dice da dove proviene la definizione del server, con gli stessi valori e regola di fiducia di [`McpServerProvenance`](#mcpserverprovenance) `source`. Il campo richiede Agent SDK v0.3.274 o successivo ed è assente nelle versioni precedenti.5280`source` indica la provenienza della definizione del server, con gli stessi valori e la stessa regola di fiducia del `source` di [`McpServerProvenance`](#mcpserverprovenance). Il campo richiede Agent SDK v0.3.274 o versioni successive ed è assente nelle versioni precedenti.

5276 5281 

5277`_meta` su una voce `tools` contiene i membri MCP Apps di `_meta` di quello strumento, quindi la tua applicazione può trovare la risorsa `ui://` da rendere con [`readMcpResource()`](#query-object). Claude Code passa attraverso l'oggetto `ui` e la stringa deprecata `ui/resourceUri`, e trattiene ogni altra chiave. All'interno di `ui`, `resourceUri` è una stringa `ui://` e `visibility` è un array di `"model"` e `"app"` quando il server li imposta, e qualsiasi altro membro passa attraverso invariato. Claude Code scarta entrambe le chiavi quando il valore è malformato, e omette `_meta` da uno strumento che non dichiara nessuna delle due. Il campo è presente solo quando le [`capabilities`](#sdksystemmessage) del messaggio di inizializzazione includono `mcp_tool_ui_meta_v1`, e richiede TypeScript Agent SDK v0.3.280 o successivo.5282`_meta` in una voce di `tools` riporta i membri MCP Apps del `_meta` di quello strumento, in modo che la tua applicazione possa trovare la risorsa `ui://` da visualizzare con [`readMcpResource()`](#query-object). Claude Code inoltra l'oggetto `ui` e la stringa piatta deprecata `ui/resourceUri`, e trattiene ogni altra chiave. All'interno di `ui`, `resourceUri` è una stringa `ui://` e `visibility` un array di `"model"` e `"app"` quando il server li imposta, e qualsiasi altro membro viene inoltrato invariato. Claude Code scarta ciascuna delle due chiavi il cui valore sia malformato, e omette `_meta` da uno strumento che non dichiara nessuna delle due. Il campo è presente solo quando le [`capabilities`](#sdksystemmessage) del messaggio init includono `mcp_tool_ui_meta_v1`, e richiede TypeScript Agent SDK v0.3.280 o versioni successive.

5278 5283 

5279<h3 id="mcpserverstatusconfig">5284<h3 id="mcpserverstatusconfig">

5280 `McpServerStatusConfig`5285 `McpServerStatusConfig`

5281</h3>5286</h3>

5282 5287 

5283La configurazione di un server MCP come segnalato da `mcpServerStatus()`. Questa è l'unione di tutti i tipi di trasporto del server MCP.5288La configurazione di un server MCP come riportata da `mcpServerStatus()`. È l'unione di tutti i tipi di trasporto dei server MCP.

5284 5289 

5285```typescript theme={null}5290```typescript theme={null}

5286type McpServerStatusConfig =5291type McpServerStatusConfig =


5291 | McpClaudeAIProxyServerConfig;5296 | McpClaudeAIProxyServerConfig;

5292```5297```

5293 5298 

5294Vedi [`McpServerConfig`](#mcpserverconfig) per i dettagli su ogni tipo di trasporto.5299Consulta [`McpServerConfig`](#mcpserverconfig) per i dettagli su ciascun tipo di trasporto.

5295 5300 

5296<h3 id="accountinfo">5301<h3 id="accountinfo">

5297 `AccountInfo`5302 `AccountInfo`

5298</h3>5303</h3>

5299 5304 

5300Informazioni sull'account per l'utente autenticato.5305Informazioni sull'account dell'utente autenticato.

5301 5306 

5302```typescript theme={null}5307```typescript theme={null}

5303type AccountInfo = {5308type AccountInfo = {


5313 `ModelUsage`5318 `ModelUsage`

5314</h3>5319</h3>

5315 5320 

5316Statistiche di utilizzo per modello restituite nei messaggi di risultato. Il valore `costUSD` è una stima lato client. Vedi [Traccia costo e utilizzo](/docs/it/agent-sdk/cost-tracking) per le avvertenze di fatturazione.5321Statistiche di utilizzo per modello restituite nei messaggi di risultato. Il valore `costUSD` è una stima lato client. Consulta [Monitorare costi e utilizzo](/docs/it/agent-sdk/cost-tracking) per le avvertenze sulla fatturazione.

5317 5322 

5318```typescript theme={null}5323```typescript theme={null}

5319type ModelUsage = {5324type ModelUsage = {


5332};5337};

5333```5338```

5334 5339 

5335`thinkingTokens` conta i token di ragionamento che questo modello ha generato. `outputTokens` li include già, quindi non sommare i due insieme. Il campo è assente fino a quando un turno non viene eseguito su una versione di Claude Code che lo registra, quindi una sessione ripresa che è iniziata su una versione precedente segnala un conteggio parziale. `thinkingTokens` richiede Agent SDK v0.3.257 o successivo.5340`thinkingTokens` conta i token di ragionamento generati da questo modello. `outputTokens` li include già, quindi non sommare i due valori. Il campo è assente finché un turno non viene eseguito su una versione di Claude Code che lo registra, quindi una sessione ripresa iniziata su una versione precedente riporta un conteggio parziale. `thinkingTokens` richiede Agent SDK v0.3.257 o versioni successive.

5336 5341 

5337I campi `canonicalModel` e `provider` richiedono Claude Code v2.1.218 o successivo. `canonicalModel` è l'ID del modello canonico che la ricerca dei prezzi utilizza; può differire dalla stringa del modello grezzo che fa da chiave alla voce, ad esempio quando quella stringa è un ID specifico del provider o un alias.5342I campi `canonicalModel` e `provider` richiedono Claude Code v2.1.218 o versioni successive. `canonicalModel` è l'ID canonico del modello usato per la ricerca dei prezzi; può differire dalla stringa grezza del modello che funge da chiave per la voce, ad esempio quando tale stringa è un ID specifico del provider o un alias.

5338 5343 

5339`provider` nomina il backend API che ha servito il modello, come `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle`, o `gateway`.5344`provider` indica il backend API che ha servito il modello, come `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle` o `gateway`.

5340 5345 

5341`costBasis` nomina la tabella dei prezzi che ha prezzato la richiesta più recente del modello: `list` per il prezzo di listino, `managed` per una tabella [`modelPricing`](/docs/it/settings-reference#modelpricing), o `unknown` quando nessuno dei due ha corrisposto all'ID del modello. Il campo richiede Claude Code v2.1.246 o successivo.5346`costBasis` indica la tabella dei prezzi usata per la richiesta più recente del modello: `list` per il prezzo di listino, `managed` per una tabella [`modelPricing`](/docs/it/settings-reference#modelpricing), oppure `unknown` quando nessuna delle due corrisponde all'ID del modello. Il campo richiede Claude Code v2.1.246 o versioni successive.

5342 5347 

5343<h3 id="configscope">5348<h3 id="configscope">

5344 `ConfigScope`5349 `ConfigScope`


5352 `NonNullableUsage`5357 `NonNullableUsage`

5353</h3>5358</h3>

5354 5359 

5355Una versione di [`Usage`](#usage) con tutti i campi nullable resi non-nullable tranne `fallback_credit`, che può ancora essere `null`.5360Una versione di [`Usage`](#usage) in cui ogni campo nullable è reso non-nullable tranne `fallback_credit`, che può ancora essere `null`.

5356 5361 

5357```typescript theme={null}5362```typescript theme={null}

5358type NonNullableUsage = {5363type NonNullableUsage = {


5366 `Usage`5371 `Usage`

5367</h3>5372</h3>

5368 5373 

5369Statistiche di utilizzo dei token. Questo è il tipo `BetaUsage` da `@anthropic-ai/sdk`.5374Statistiche di utilizzo dei token. È il tipo `BetaUsage` di `@anthropic-ai/sdk`.

5370 5375 

5371```typescript theme={null}5376```typescript theme={null}

5372type Usage = {5377type Usage = {


5390 5395 

5391`BetaServerToolUsage`, `BetaIterationsUsage`, `BetaOutputTokensDetails` e `BetaFallbackCreditUsage` sono definiti in `@anthropic-ai/sdk`.5396`BetaServerToolUsage`, `BetaIterationsUsage`, `BetaOutputTokensDetails` e `BetaFallbackCreditUsage` sono definiti in `@anthropic-ai/sdk`.

5392 5397 

5393`output_tokens_details` suddivide l'output fatturato per categoria. Attualmente contiene un campo, `thinking_tokens: number`, che conta i token di output che il modello ha generato come ragionamento interno, inclusi i delimitatori del blocco di ragionamento. Il campo `output_tokens_details` richiede TypeScript SDK v0.3.228 o successivo, che include Claude Code v2.1.228.5398`output_tokens_details` suddivide l'output fatturato per categoria. Attualmente contiene un solo campo, `thinking_tokens: number`, che conta i token di output generati dal modello come ragionamento interno, inclusi i delimitatori dei blocchi di ragionamento. Il campo `output_tokens_details` richiede TypeScript SDK v0.3.228 o versioni successive, che include Claude Code v2.1.228.

5394 5399 

5395* **Fatturazione**: leggi la suddivisione per l'osservabilità, non per la fatturazione. `output_tokens` rimane il totale autorevole, e `output_tokens - thinking_tokens` approssima l'output non di ragionamento.5400* **Fatturazione**: leggi la suddivisione per l'osservabilità, non per la fatturazione. `output_tokens` rimane il totale autorevole, e `output_tokens - thinking_tokens` approssima l'output non di ragionamento.

5396* **Cosa copre il conteggio**: il ragionamento grezzo che il modello ha prodotto, che può essere più lungo del testo di ragionamento restituito nel corpo della risposta. L'API lo calcola ritokenizzando quel testo grezzo, quindi può differire dal conteggio esatto della generazione del modello di alcuni token.5401* **Cosa copre il conteggio**: il ragionamento grezzo prodotto dal modello, che può essere più lungo del testo di ragionamento restituito nel corpo della risposta. L'API lo calcola ri-tokenizzando quel testo grezzo, quindi può differire di alcuni token dal conteggio esatto della generazione del modello.

5397* **Streaming**: sui messaggi dell'assistente trasmessi in streaming questa suddivisione, come `output_tokens`, è un placeholder `message_start` e non contiene un conteggio reale, quindi leggila da `usage` del messaggio di risultato come descritto in [Leggi i token di output dal messaggio di risultato](/docs/it/agent-sdk/cost-tracking#read-output-tokens-from-the-result-message). Nel messaggio di risultato, `thinking_tokens` vale `0` quando il modello o il provider non segnala alcuna suddivisione.5402* **Streaming**: nei messaggi dell'assistente trasmessi in streaming questa suddivisione, come `output_tokens`, è un segnaposto di `message_start` e non contiene un conteggio reale, quindi leggila dallo `usage` del messaggio di risultato come descritto in [Leggere i token di output dal messaggio di risultato](/docs/it/agent-sdk/cost-tracking#read-output-tokens-from-the-result-message). Nel messaggio di risultato, `thinking_tokens` vale `0` quando il modello o il provider non riporta alcuna suddivisione.

5398* **Casi `null`**: `output_tokens_details` stesso è `null` sui messaggi dell'assistente che Claude Code sintetizza, come i messaggi di errore API.5403* **Casi `null`**: `output_tokens_details` stesso è `null` nei messaggi dell'assistente sintetizzati da Claude Code, come i messaggi di errore API.

5399 5404 

5400Se `Usage` contiene `fallback_credit` dipende dal `@anthropic-ai/sdk` che hai installato, che lo ha aggiunto nella versione 0.115.0.5405La presenza di `fallback_credit` in `Usage` dipende dalla versione installata di `@anthropic-ai/sdk`, che lo ha aggiunto nella 0.115.0.

5401 5406 

5402<h3 id="calltoolresult">5407<h3 id="calltoolresult">

5403 `CallToolResult`5408 `CallToolResult`

5404</h3>5409</h3>

5405 5410 

5406Tipo di risultato dello strumento MCP (da `@modelcontextprotocol/sdk/types.js`). `structuredContent` è un oggetto JSON che può essere restituito insieme a `content`, inclusi blocchi di immagini. Vedi [Restituisci dati strutturati](/docs/it/agent-sdk/custom-tools#return-structured-data).5411Tipo di risultato degli strumenti MCP (da `@modelcontextprotocol/sdk/types.js`). `structuredContent` è un oggetto JSON che può essere restituito insieme a `content`, inclusi i blocchi immagine. Consulta [Restituire dati strutturati](/docs/it/agent-sdk/custom-tools#return-structured-data).

5407 5412 

5408```typescript theme={null}5413```typescript theme={null}

5409type CallToolResult = {5414type CallToolResult = {

5410 content: Array<{5415 content: Array<{

5411 type: "text" | "image" | "audio" | "resource" | "resource_link";5416 type: "text" | "image" | "audio" | "resource" | "resource_link";

5412 // I campi aggiuntivi variano in base al tipo5417 // Additional fields vary by type

5413 }>;5418 }>;

5414 structuredContent?: Record<string, unknown>;5419 structuredContent?: Record<string, unknown>;

5415 isError?: boolean;5420 isError?: boolean;


5420 `SDKMcpResourceLink`5425 `SDKMcpResourceLink`

5421</h3>5426</h3>

5422 5427 

5423Un file che uno strumento MCP ha restituito per riferimento. Claude Code crea ogni voce da un blocco `resource_link` nel risultato dello strumento e fornisce l'elenco come `resourceLinks` su [`SDKUserMessage.tool_use_result`](#sdkusermessage), o come `resource_links` su [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) quando la chiamata è terminata in background. Richiede Agent SDK v0.3.257 o successivo.5428Un file restituito per riferimento da uno strumento MCP. Claude Code costruisce ogni voce da un blocco `resource_link` nel risultato dello strumento e consegna l'elenco come `resourceLinks` in [`SDKUserMessage.tool_use_result`](#sdkusermessage), oppure come `resource_links` in [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) quando la chiamata è terminata in background. Richiede Agent SDK v0.3.257 o versioni successive.

5424 5429 

5425```typescript theme={null}5430```typescript theme={null}

5426type SDKMcpResourceLink = {5431type SDKMcpResourceLink = {


5434};5439};

5435```5440```

5436 5441 

5437Claude Code scarta un blocco il cui `uri` o `name` non è una stringa, e omette un campo opzionale il cui valore non è del tipo elencato.5442Claude Code scarta un blocco il cui `uri` o `name` non è una stringa, e omette un campo facoltativo il cui valore non è del tipo indicato.

5438 5443 

5439| Campo | Tipo | Descrizione |5444| Campo | Tipo | Descrizione |

5440| :- | :- | :- |5445| :- | :- | :- |

5441| `uri` | `string` | URI della risorsa, come il server l'ha restituito |5446| `uri` | `string` | URI della risorsa, così come restituito dal server |

5442| `name` | `string` | Nome che il server ha dato alla risorsa |5447| `name` | `string` | Nome che il server ha dato alla risorsa |

5443| `title` | `string \| undefined` | Titolo di visualizzazione, quando il server ne ha impostato uno |5448| `title` | `string \| undefined` | Titolo visualizzato, quando il server ne ha impostato uno |

5444| `description` | `string \| undefined` | Descrizione, quando il server ne ha impostata una |5449| `description` | `string \| undefined` | Descrizione, quando il server ne ha impostata una |

5445| `mimeType` | `string \| undefined` | Tipo MIME, quando il server ne ha impostato uno |5450| `mimeType` | `string \| undefined` | Tipo MIME, quando il server ne ha impostato uno |

5446| `size` | `number \| undefined` | Dimensione in byte, quando il server ne ha impostata una |5451| `size` | `number \| undefined` | Dimensione in byte, quando il server l'ha impostata |

5447| `annotations` | `Record<string, unknown> \| undefined` | L'oggetto annotazioni MCP del blocco, quando il server ne ha impostato uno |5452| `annotations` | `Record<string, unknown> \| undefined` | L'oggetto delle annotazioni MCP del blocco, quando il server ne ha impostato uno |

5448 5453 

5449<h3 id="thinkingconfig">5454<h3 id="thinkingconfig">

5450 `ThinkingConfig`5455 `ThinkingConfig`


5456type ThinkingDisplay = "summarized" | "omitted";5461type ThinkingDisplay = "summarized" | "omitted";

5457 5462 

5458type ThinkingConfig =5463type ThinkingConfig =

5459 | { type: "adaptive"; display?: ThinkingDisplay } // Il modello determina quando e quanto ragionare (Opus 4.6+)5464 | { type: "adaptive"; display?: ThinkingDisplay } // The model determines when and how much to reason (Opus 4.6+)

5460 | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // Budget di token di ragionamento fisso5465 | { type: "enabled"; budgetTokens?: number; display?: ThinkingDisplay } // Fixed thinking token budget

5461 | { type: "disabled" }; // Nessun ragionamento esteso5466 | { type: "disabled" }; // No extended thinking

5462```5467```

5463 5468 

5464Il campo opzionale `display` controlla se il testo di ragionamento viene restituito `"summarized"` o `"omitted"`. Su Claude Opus 4.7 e versioni successive, l'impostazione predefinita dell'API è `"omitted"`, quindi imposta `"summarized"` per ricevere il contenuto di ragionamento nei blocchi `thinking`. Claude Code non invia `display` ad Amazon Bedrock o alla piattaforma Agent di Google Cloud, quindi su quei provider Opus 4.7 e versioni successive restituiscono blocchi `thinking` vuoti anche quando imposti `display` su `"summarized"`.5469Il campo facoltativo `display` controlla se il testo di ragionamento viene restituito `"summarized"` o `"omitted"`. Su Claude Opus 4.7 e versioni successive, il valore predefinito dell'API è `"omitted"`, quindi imposta `"summarized"` per ricevere il contenuto del ragionamento nei blocchi `thinking`. Claude Code omette `display` dalle richieste verso alcuni provider, come Amazon Bedrock e Agent Platform di Google Cloud. Su questi provider, Opus 4.7 e versioni successive restituiscono blocchi `thinking` vuoti anche quando imposti `display` su `"summarized"`.

5465 5470 

5466<h3 id="spawnedprocess">5471<h3 id="spawnedprocess">

5467 `SpawnedProcess`5472 `SpawnedProcess`

5468</h3>5473</h3>

5469 5474 

5470Interfaccia per la generazione di processi personalizzati (usata con l'opzione `spawnClaudeCodeProcess`). `ChildProcess` soddisfa già questa interfaccia.5475Interfaccia per la creazione personalizzata di processi (usata con l'opzione `spawnClaudeCodeProcess`). `ChildProcess` soddisfa già questa interfaccia.

5471 5476 

5472```typescript theme={null}5477```typescript theme={null}

5473interface SpawnedProcess {5478interface SpawnedProcess {


5498 `SpawnOptions`5503 `SpawnOptions`

5499</h3>5504</h3>

5500 5505 

5501Opzioni passate alla funzione di generazione personalizzata.5506Opzioni passate alla funzione di spawn personalizzata.

5502 5507 

5503```typescript theme={null}5508```typescript theme={null}

5504interface SpawnOptions {5509interface SpawnOptions {


5511```5516```

5512 5517 

5513<Note>5518<Note>

5514 Il campo `signal` comunica alla tua funzione di generazione quando smontare il processo. Passalo come opzione `signal` al `spawn()` di Node, oppure passalo al tuo gestore di smontaggio della VM o del contenitore.5519 Il campo `signal` indica alla tua funzione di spawn quando terminare il processo. Passalo come opzione `signal` a `spawn()` di Node, oppure passalo al gestore di terminazione della tua VM o del tuo container.

5515 5520 

5516 Questo segnale non si attiva nell'istante in cui [`Options.abortController`](#options) si interrompe. L'SDK prima chiude lo stdin del processo e attende circa due secondi affinché la CLI si arresti correttamente, quindi interrompe questo segnale. Per reagire invece nel momento in cui il chiamante si interrompe, ascolta il tuo `Options.abortController.signal`, che la tua funzione di generazione può referenziare dal suo ambito di chiusura.5521 Questo segnale non si attiva nell'istante in cui [`Options.abortController`](#options) esegue l'abort. L'SDK chiude prima lo stdin del processo e attende circa due secondi affinché la CLI possa arrestarsi correttamente, poi esegue l'abort di questo segnale. Per reagire invece nel momento in cui il chiamante esegue l'abort, rimani in ascolto sul tuo `Options.abortController.signal`, a cui la tua funzione di spawn può fare riferimento dallo scope che la racchiude.

5517</Note>5522</Note>

5518 5523 

5519<h3 id="mcpsetserversresult">5524<h3 id="mcpsetserversresult">


5532 5537 

5533Quando chiami `setMcpServers()`, Claude Code applica queste regole:5538Quando chiami `setMcpServers()`, Claude Code applica queste regole:

5534 5539 

5535* **Server che la chiamata non nomina**: Claude Code mantiene i server forniti dai plugin in esecuzione. Richiede Agent SDK v0.3.210 o successivo.5540* **Server non indicati dalla chiamata**: al di fuori di una [sessione cloud](/docs/it/claude-code-on-the-web), Claude Code disconnette i server aggiunti da una precedente chiamata `setMcpServers()` e i server SDK in-process, e li elenca in `removed`. Gli altri server continuano a funzionare e non sono elencati in `removed`, tra cui i server stdio, HTTP e SSE dell'opzione [`mcpServers`](#options), i server dei file di impostazioni e i server forniti dai plugin.

5536* **Server che la chiamata nomina**: ad eccezione dei server integrati che la CLI ha avviato all'avvio, Claude Code sostituisce un server in esecuzione solo quando la sua configurazione differisce da quella che hai passato.5541* **Server indicati dalla chiamata**: Claude Code sostituisce un server stdio, HTTP o SSE aggiunto da una precedente chiamata `setMcpServers()` solo quando la sua configurazione differisce da quella che hai passato. Un server SDK in-process già registrato con quel nome rimane invariato, quindi per sostituirne uno, omettilo in una chiamata e aggiungilo in quella successiva.

5537* **Server integrati che la CLI ha avviato all'avvio**: se la chiamata ne nomina uno, Claude Code scarta quella voce e la segnala in `errors`.5542* **Server integrati avviati dalla CLI all'avvio**: se la chiamata ne indica uno, Claude Code scarta quella voce e la riporta in `errors`.

5538 5543 

5539La promessa si risolve dopo che i server stdio, HTTP e SSE appena aggiunti si connettono o falliscono, quindi gli strumenti dai server che si sono connessi sono disponibili al turno successivo.5544La promise si risolve dopo che i server stdio, HTTP e SSE appena aggiunti si sono connessi o non sono riusciti a farlo, quindi gli strumenti dei server che si sono connessi sono disponibili al turno successivo.

5540 5545 

5541`added` elenca i server che Claude Code ha aggiunto o sostituito, indipendentemente dal fatto che si siano connessi. Un server che non si è connesso appare sia in `added` che in `errors`, con il testo di errore sotto `errors` e una riga `failed` in [`mcpServerStatus()`](#methods). Prima di Claude Code v2.1.257, un server il cui tentativo di connessione ha lanciato un'eccezione era segnalato solo sotto `errors`.5546`added` elenca i server che Claude Code ha aggiunto o sostituito, indipendentemente dal fatto che si siano connessi. Un server che non è riuscito a connettersi compare sia in `added` sia in `errors`, con il testo dell'errore in `errors` e una riga `failed` in [`mcpServerStatus()`](#methods). Prima di Claude Code v2.1.257, un server il cui tentativo di connessione generava un'eccezione veniva riportato solo in `errors`.

5542 5547 

5543<h3 id="rewindfilesresult">5548<h3 id="rewindfilesresult">

5544 `RewindFilesResult`5549 `RewindFilesResult`


5557};5562};

5558```5563```

5559 5564 

5560`skippedLinks` conta i percorsi tracciati che il rewind ha rifiutato di ripristinare o eliminare per la sicurezza dei link: un collegamento simbolico, hard link, o altro file non regolare nel percorso tracciato, una directory padre che non si risolve più a dove puntava quando il checkpoint è stato creato, o un backup che non poteva essere letto in sicurezza. Il campo richiede Claude Code v2.1.216 o successivo. Una chiamata di anteprima con `rewindFiles(userMessageId, { dryRun: true })` non lo imposta mai.5565`skippedLinks` conta i percorsi tracciati che il rewind si è rifiutato di ripristinare o eliminare per la sicurezza dei collegamenti: un collegamento simbolico, un hard link o un altro file non regolare nel percorso tracciato, una directory padre che non si risolve più nella posizione a cui puntava quando è stato creato il checkpoint, oppure un backup che non è stato possibile leggere in modo sicuro. Il campo richiede Claude Code v2.1.216 o versioni successive. Una chiamata di anteprima con `rewindFiles(userMessageId, { dryRun: true })` non lo imposta mai.

5561 5566 

5562<h3 id="sdkstatusmessage">5567<h3 id="sdkstatusmessage">

5563 `SDKStatusMessage`5568 `SDKStatusMessage`

5564</h3>5569</h3>

5565 5570 

5566Messaggio di aggiornamento dello stato (ad esempio, compattazione).5571Messaggio di aggiornamento di stato (ad esempio, compattazione in corso).

5567 5572 

5568```typescript theme={null}5573```typescript theme={null}

5569type SDKStatusMessage = {5574type SDKStatusMessage = {


5580 `SDKTaskNotificationMessage`5585 `SDKTaskNotificationMessage`

5581</h3>5586</h3>

5582 5587 

5583Notifica quando un'attività in background si completa, fallisce o viene interrotta. Le attività in background includono i comandi Bash `run_in_background`, i watch [Monitor](#monitor) e i subagent in background. Per il campo `ambient`, vedi [`SDKTaskStartedMessage`](#sdktaskstartedmessage), che lo definisce insieme al suo requisito di versione.5588Notifica inviata quando un'attività in background viene completata, fallisce o viene arrestata. Le attività in background includono i comandi Bash `run_in_background`, le osservazioni [Monitor](#monitor) e i subagent in background. Per il campo `ambient`, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), che lo definisce insieme al relativo requisito di versione.

5584 5589 

5585```typescript theme={null}5590```typescript theme={null}

5586type SDKTaskNotificationMessage = {5591type SDKTaskNotificationMessage = {


5603};5608};

5604```5609```

5605 5610 

5606Quando Claude Code [sposta una lunga chiamata a uno strumento MCP in background](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls), il blocco `tool_result` per quella chiamata contiene solo un placeholder e il risultato reale della chiamata arriva in questa notifica. Abbina la notifica alla chiamata con `tool_use_id`. Su una notifica `completed`, `resource_links` elenca i file che lo strumento ha restituito per riferimento come voci [`SDKMcpResourceLink`](#sdkmcpresourcelink), con gli stessi limiti di 50 link e 64 KiB di [`tool_use_result.resourceLinks`](#sdkusermessage). Claude Code omette `resource_links` quando il risultato non aveva link e sulle notifiche per attività che non sono chiamate a strumenti MCP. `resource_links` richiede Agent SDK v0.3.257 o successivo.5611Quando Claude Code [sposta in background una lunga chiamata a uno strumento MCP](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls), il blocco `tool_result` di quella chiamata contiene solo un segnaposto e il risultato reale della chiamata arriva in questa notifica. Associa la notifica alla chiamata tramite `tool_use_id`. In una notifica `completed`, `resource_links` elenca i file restituiti per riferimento dallo strumento come voci [`SDKMcpResourceLink`](#sdkmcpresourcelink), con gli stessi limiti di 50 link e 64 KiB di [`tool_use_result.resourceLinks`](#sdkusermessage). Claude Code omette `resource_links` quando il risultato non conteneva link e nelle notifiche per attività che non sono chiamate a strumenti MCP. `resource_links` richiede Agent SDK v0.3.257 o versioni successive.

5607 5612 

5608Claude Code antepone un avviso a ogni notifica di attività che invia al modello, ad eccezione delle consegne contrassegnate con il sottotipo [`scheduled-trigger`](#task-notification-subkinds), che portano invece un inquadramento di attività assegnata. L'avviso afferma che non si è verificato alcun input umano, quindi il modello non tratta la notifica come un'istruzione o un'approvazione dell'utente.5613Claude Code antepone un avviso a ogni notifica di attività che invia al modello, tranne le consegne contrassegnate con il [subkind `scheduled-trigger`](#task-notification-subkinds), che riportano invece un'impostazione da attività assegnata. L'avviso indica che non c'è stato alcun input umano, in modo che il modello non tratti la notifica come un'istruzione o un'approvazione dell'utente.

5609 5614 

5610Per rilevare un turno di notifica di attività, controlla `origin.kind === "task-notification"` su [`SDKUserMessage`](#sdkusermessage) o [`SDKResultMessage`](#sdkresultmessage) piuttosto che abbinare il testo dell'avviso. Leggi `subkind` dallo stesso campo se hai bisogno di sapere cosa l'ha sollevato. Prima di v2.1.205, Claude Code ometteva l'avviso dalle notifiche che arrivavano mentre la sessione era inattiva.5615Per rilevare un turno di notifica di attività, verifica `origin.kind === "task-notification"` su [`SDKUserMessage`](#sdkusermessage) o [`SDKResultMessage`](#sdkresultmessage) invece di confrontare il testo dell'avviso. Leggi `subkind` dallo stesso campo se devi sapere cosa l'ha generata. Prima della v2.1.205, Claude Code ometteva l'avviso dalle notifiche arrivate mentre la sessione era inattiva.

5611 5616 

5612<h3 id="sdktoolusesummarymessage">5617<h3 id="sdktoolusesummarymessage">

5613 `SDKToolUseSummaryMessage`5618 `SDKToolUseSummaryMessage`

5614</h3>5619</h3>

5615 5620 

5616Riepilogo dell'uso degli strumenti in una conversazione.5621Riepilogo dell'utilizzo degli strumenti in una conversazione.

5617 5622 

5618```typescript theme={null}5623```typescript theme={null}

5619type SDKToolUseSummaryMessage = {5624type SDKToolUseSummaryMessage = {


5631 5636 

5632Emesso quando un hook inizia l'esecuzione.5637Emesso quando un hook inizia l'esecuzione.

5633 5638 

5634Claude Code fornisce questo messaggio, [`SDKHookProgressMessage`](#sdkhookprogressmessage), e [`SDKHookResponseMessage`](#sdkhookresponsemessage) al flusso di messaggi immediatamente, incluso mentre un hook `SessionStart` o `Setup` è ancora in esecuzione durante l'avvio della sessione. Claude Code dalla v2.1.169 alla v2.1.203 ha fornito questi messaggi in un unico batch dopo che un hook `SessionStart` o `Setup` era completato; la v2.1.204 ha ripristinato la consegna dal vivo.5639Claude Code consegna questo messaggio, [`SDKHookProgressMessage`](#sdkhookprogressmessage) e [`SDKHookResponseMessage`](#sdkhookresponsemessage) al flusso dei messaggi immediatamente, anche mentre un hook `SessionStart` o `Setup` è ancora in esecuzione durante l'avvio della sessione. Claude Code dalla v2.1.169 alla v2.1.203 consegnava questi messaggi in un unico blocco dopo il completamento di un hook `SessionStart` o `Setup`; la v2.1.204 ha ripristinato la consegna in tempo reale.

5635 5640 

5636```typescript theme={null}5641```typescript theme={null}

5637type SDKHookStartedMessage = {5642type SDKHookStartedMessage = {


5649 `SDKHookProgressMessage`5654 `SDKHookProgressMessage`

5650</h3>5655</h3>

5651 5656 

5652Emesso mentre un hook è in esecuzione, con output stdout/stderr.5657Emesso mentre un hook è in esecuzione, con l'output stdout/stderr.

5653 5658 

5654```typescript theme={null}5659```typescript theme={null}

5655type SDKHookProgressMessage = {5660type SDKHookProgressMessage = {


5670 `SDKHookResponseMessage`5675 `SDKHookResponseMessage`

5671</h3>5676</h3>

5672 5677 

5673Emesso quando un hook finisce l'esecuzione.5678Emesso quando un hook termina l'esecuzione.

5674 5679 

5675```typescript theme={null}5680```typescript theme={null}

5676type SDKHookResponseMessage = {5681type SDKHookResponseMessage = {


5693 `SDKToolProgressMessage`5698 `SDKToolProgressMessage`

5694</h3>5699</h3>

5695 5700 

5696Emesso periodicamente mentre uno strumento è in esecuzione per indicare il progresso.5701Emesso periodicamente durante l'esecuzione di uno strumento per indicarne l'avanzamento.

5697 5702 

5698```typescript theme={null}5703```typescript theme={null}

5699type SDKToolProgressMessage = {5704type SDKToolProgressMessage = {


5718};5723};

5719```5724```

5720 5725 

5721Mentre una chiamata a uno strumento viene eseguita nella conversazione principale, Claude Code emette un messaggio `tool_progress` ogni 30 secondi con `heartbeat: true`. Ogni heartbeat contiene il nome dello strumento e i secondi trascorsi, quindi puoi distinguere una chiamata di lunga durata da una sessione bloccata. Claude Code non emette heartbeat per le chiamate agli strumenti all'interno di un subagent. Il campo `heartbeat` richiede Agent SDK v0.3.214 o successivo. Prima di v2.1.257, Claude Code non emetteva heartbeat nemmeno per una chiamata allo strumento Agent in primo piano.5726Mentre una chiamata a uno strumento è in esecuzione nella conversazione principale, Claude Code emette un messaggio `tool_progress` ogni 30 secondi con `heartbeat: true`. Ogni heartbeat riporta il nome dello strumento e i secondi trascorsi, così puoi distinguere una chiamata di lunga durata da una sessione bloccata. Claude Code non emette heartbeat per le chiamate agli strumenti all'interno di un subagent. Il campo `heartbeat` richiede Agent SDK v0.3.214 o versioni successive. Prima della v2.1.257, Claude Code non emetteva heartbeat nemmeno per una chiamata allo strumento Agent in primo piano.

5722 5727 

5723Sui messaggi `tool_progress` per lo strumento Agent diversi dagli heartbeat, `subagent_type` nomina il tipo di subagent in esecuzione, come `general-purpose`. `subagent_retry` è presente mentre quel subagent attende un backoff di errore API, come un rate limit o un sovraccarico, con un messaggio per ogni nuovo tentativo. Entrambi i campi richiedono Agent SDK v0.3.214 o successivo.5728Nei messaggi `tool_progress` per lo strumento Agent diversi dagli heartbeat, `subagent_type` indica il tipo di subagent in esecuzione, come `general-purpose`. `subagent_retry` è presente mentre quel subagent attende il backoff dopo un errore API, come un rate limit o un sovraccarico, con un messaggio per ogni nuovo tentativo. Entrambi i campi richiedono Agent SDK v0.3.214 o versioni successive.

5724 5729 

5725Per rendere un indicatore di nuovo tentativo da `subagent_retry`:5730Per visualizzare un indicatore di nuovo tentativo a partire da `subagent_retry`:

5726 5731 

5727* Traccia l'indicatore per `parent_tool_use_id`, che è univoco per subagent. `tool_use_id` è condiviso da subagent paralleli di uno stesso turno dell'assistente, quindi tracciare per esso lascerebbe che l'aggiornamento di un subagent cancelli l'indicatore di un altro.5732* Traccia l'indicatore tramite `parent_tool_use_id`, che è univoco per ogni subagent. `tool_use_id` è condiviso dai subagent paralleli avviati da uno stesso turno dell'assistente, quindi tracciarlo in base a esso permetterebbe all'aggiornamento di un subagent di cancellare l'indicatore di un altro.

5728* Cancella l'indicatore quando un successivo `tool_progress` per lo stesso `parent_tool_use_id` arriva senza `subagent_retry` né `heartbeat: true`, o quando arriva il messaggio di risultato dello strumento. I frame con `heartbeat: true` segnalano solo che il processo è attivo, quindi mantieni l'indicatore quando ne arriva uno. `attempt` può superare `max_retries` in caso di nuovi tentativi persistenti, quindi non derivare la cancellazione dai contatori.5733* Cancella l'indicatore quando arriva un successivo `tool_progress` per lo stesso `parent_tool_use_id` senza né `subagent_retry` né `heartbeat: true`, oppure quando arriva il messaggio di risultato dello strumento. I frame con `heartbeat: true` segnalano solo che la sessione è attiva, quindi mantieni l'indicatore quando ne arriva uno. `attempt` può superare `max_retries` in caso di nuovi tentativi persistenti, quindi non basare la cancellazione sui contatori.

5729* Tratta `error_category` come un token per scegliere il tuo testo di messaggio, non come testo di visualizzazione. I valori sono `rate_limit`, `overloaded`, `authentication_failed`, `server_error`, `cloud_credential_error` e `unknown`. Gestisci un valore che non riconosci come gestisci `unknown`, perché le versioni successive possono aggiungere valori.5734* Tratta `error_category` come un token per scegliere il testo del tuo messaggio, non come testo da visualizzare. I valori sono `rate_limit`, `overloaded`, `authentication_failed`, `server_error`, `cloud_credential_error` e `unknown`. Gestisci un valore che non riconosci come gestisci `unknown`, perché le versioni future possono aggiungere valori.

5730 5735 

5731<h3 id="sdkauthstatusmessage">5736<h3 id="sdkauthstatusmessage">

5732 `SDKAuthStatusMessage`5737 `SDKAuthStatusMessage`


5749 `SDKTaskStartedMessage`5754 `SDKTaskStartedMessage`

5750</h3>5755</h3>

5751 5756 

5752Emesso quando un'attività inizia. Il campo `task_type` è `"local_bash"` per i comandi Bash e i watch [Monitor](#monitor), `"local_agent"` per i subagent, o `"remote_agent"`.5757Emesso quando un'attività inizia. Il campo `task_type` è `"local_bash"` per i comandi Bash e le osservazioni [Monitor](#monitor), `"local_agent"` per i subagent, oppure `"remote_agent"`.

5753 5758 

5754```typescript theme={null}5759```typescript theme={null}

5755type SDKTaskStartedMessage = {5760type SDKTaskStartedMessage = {


5767};5772};

5768```5773```

5769 5774 

5770`ambient` è `true` per le attività che non fanno parte del lavoro della sessione, come le attività che Claude Code esegue per il proprio funzionamento. Anche i watcher di aggiornamento dal vivo sono ambient, inclusi i watcher che l'utente ha richiesto. Escludi le attività ambient dagli indicatori di attività. Il campo richiede Agent SDK v0.3.247 o successivo.5775`ambient` è `true` per le attività che non fanno parte del lavoro della sessione, come le attività che Claude Code esegue per il proprio funzionamento. Anche gli osservatori di aggiornamenti in tempo reale sono ambient, compresi quelli richiesti dall'utente. Escludi le attività ambient dagli indicatori di attività. Il campo richiede Agent SDK v0.3.247 o versioni successive.

5771 5776 

5772`ambient` appare anche su [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) e sulle voci di [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage).5777`ambient` compare anche in [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) e nelle voci di [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage).

5773 5778 

5774`is_backgrounded` e `spawn_depth` descrivono come Claude Code ha avviato l'attività. Entrambi i campi richiedono Agent SDK v0.3.238 o successivo.5779`is_backgrounded` e `spawn_depth` descrivono come Claude Code ha avviato l'attività. Entrambi i campi richiedono Agent SDK v0.3.238 o versioni successive.

5775 5780 

5776* `is_backgrounded`: Claude Code lo imposta su attività `"local_agent"` e `"local_bash"`. `true` significa che l'attività viene eseguita in background. `false` significa che l'attività viene eseguita in primo piano, e la chiamata allo strumento che l'ha avviata rimane bloccata fino a quando l'attività non finisce o si sposta in background.5781* `is_backgrounded`: Claude Code lo imposta sulle attività `"local_agent"` e `"local_bash"`. `true` significa che l'attività viene eseguita in background. `false` significa che l'attività viene eseguita in primo piano, e la chiamata allo strumento che l'ha avviata resta bloccata finché l'attività non termina o non passa in background.

5777* `spawn_depth`: Claude Code lo imposta solo su attività `"local_agent"`. Un subagent che il thread principale ha generato ha profondità `1`. Un subagent che un subagent di profondità `1` ha generato ha profondità `2`, e così via.5782* `spawn_depth`: Claude Code lo imposta solo sulle attività `"local_agent"`. Un subagent avviato dal thread principale ha profondità `1`. Un subagent avviato da un subagent di profondità `1` ha profondità `2`, e così via.

5778 5783 

5779Un [subagent ripreso](/docs/it/agent-sdk/subagents#resume-subagents) segnala sempre `is_backgrounded: true`, perché Claude Code esegue ogni subagent ripreso in background. Quando un'attività in primo piano si sposta in background in seguito, Claude Code segnala il nuovo valore `is_backgrounded` in un messaggio [`task_updated`](#sdktaskupdatedmessage) piuttosto che inviare un secondo `task_started`.5784Un [subagent ripreso](/docs/it/agent-sdk/subagents#resume-subagents) riporta sempre `is_backgrounded: true`, perché Claude Code esegue ogni subagent ripreso in background. Quando un'attività in primo piano passa in seguito in background, Claude Code riporta il nuovo valore di `is_backgrounded` in un messaggio [`task_updated`](#sdktaskupdatedmessage) invece di inviare un secondo `task_started`.

5780 5785 

5781<h3 id="sdktaskprogressmessage">5786<h3 id="sdktaskprogressmessage">

5782 `SDKTaskProgressMessage`5787 `SDKTaskProgressMessage`


5784 5789 

5785Emesso periodicamente mentre un subagent o un'attività in background è in esecuzione.5790Emesso periodicamente mentre un subagent o un'attività in background è in esecuzione.

5786 5791 

5787Per un'attività di subagent, il campo `summary` contiene un riepilogo del progresso generato dal modello ed è popolato solo quando [`agentProgressSummaries`](#options) è abilitato. Per una [chiamata a uno strumento MCP messa in background](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls), `summary` contiene il progresso più recente segnalato dal server MCP e non dipende da questa opzione.5792Per un'attività di subagent, il campo `summary` contiene un riepilogo dell'avanzamento generato dal modello ed è popolato solo quando [`agentProgressSummaries`](#options) è abilitato. Per una [chiamata a uno strumento MCP spostata in background](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls), `summary` contiene l'ultimo avanzamento riportato dal server MCP e non dipende da tale opzione.

5788 5793 

5789```typescript theme={null}5794```typescript theme={null}

5790type SDKTaskProgressMessage = {5795type SDKTaskProgressMessage = {


5810 `SDKTaskUpdatedMessage`5815 `SDKTaskUpdatedMessage`

5811</h3>5816</h3>

5812 5817 

5813Emesso quando lo stato di un'attività in background cambia, ad esempio quando passa da `running` a `completed`. Esegui il merge di `patch` nella tua mappa locale delle attività con chiave `task_id`. Il campo `end_time` è un timestamp Unix epoch in millisecondi, confrontabile con `Date.now()`.5818Emesso quando lo stato di un'attività in background cambia, ad esempio quando passa da `running` a `completed`. Fai il merge di `patch` nella tua mappa locale delle attività con chiave `task_id`. Il campo `end_time` è un timestamp Unix epoch in millisecondi, confrontabile con `Date.now()`.

5814 5819 

5815```typescript theme={null}5820```typescript theme={null}

5816type SDKTaskUpdatedMessage = {5821type SDKTaskUpdatedMessage = {


5834 `SDKBackgroundTasksChangedMessage`5839 `SDKBackgroundTasksChangedMessage`

5835</h3>5840</h3>

5836 5841 

5837Emesso ogni volta che l'insieme delle attività in background attive cambia: un'attività inizia, si completa, viene terminata, un agente in primo piano viene messo in background, o il campo `description` o `ambient` di un'attività cambia.5842Emesso ogni volta che l'insieme delle attività in background attive cambia: un'attività inizia, viene completata, viene terminata, un agente in primo piano passa in background, oppure cambia il campo `description` o `ambient` di un'attività.

5838 5843 

5839L'array `tasks` è l'insieme completo attivo. Sostituisci qualsiasi insieme memorizzato nella cache con ogni payload invece di abbinare gli eventi `task_started` e `task_notification`, in modo che il prossimo cambio di appartenenza corregga qualsiasi evento che hai perso.5844L'array `tasks` è l'intero insieme attivo. Sostituisci qualsiasi insieme memorizzato nella cache con ogni payload invece di abbinare gli eventi `task_started` e `task_notification`, in modo che la successiva modifica dell'insieme corregga qualsiasi evento che ti sei perso.

5840 5845 

5841L'ordine relativo a quegli eventi per attività non è specificato, quindi non correlare i due flussi.5846L'ordinamento rispetto a quegli eventi per singola attività non è specificato, quindi non correlare i due flussi.

5842 5847 

5843Nulla viene emesso all'avvio. Reimposta a un insieme vuoto ogni volta che il processo CLI della sessione si avvia o si riavvia e lascia che il prossimo cambio di appartenenza lo ripopoli.5848All'avvio non viene emesso nulla. Reimposta su un insieme vuoto ogni volta che il processo CLI della sessione si avvia o si riavvia e lascia che la successiva modifica dell'insieme lo ripopoli.

5844 5849 

5845Quando invii una richiesta di controllo `initialize` ripetuta a una sessione in esecuzione, ad esempio con [`reinitialize()`](#query-object) dopo un'interruzione del trasporto, Claude Code fa seguire alla risposta uno snapshot dell'insieme attivo corrente, anche quando è vuoto. Un host che si ricollega quindi apprende cosa è in esecuzione senza aspettare il prossimo cambio di appartenenza. Prima di Agent SDK v0.3.239, Claude Code non inviava snapshot dopo un `initialize` ripetuto.5850Quando invii una richiesta di controllo `initialize` ripetuta a una sessione in esecuzione, ad esempio con [`reinitialize()`](#query-object) dopo un'interruzione del trasporto, Claude Code fa seguire alla risposta un'istantanea dell'insieme attivo corrente, anche quando è vuoto. Un host che si riconnette scopre quindi cosa è in esecuzione senza attendere la successiva modifica dell'insieme. Prima di Agent SDK v0.3.239, Claude Code non inviava alcuna istantanea dopo un `initialize` ripetuto.

5846 5851 

5847Richiede Claude Code v2.1.203 o successivo.5852Richiede Claude Code v2.1.203 o versioni successive.

5848 5853 

5849```typescript theme={null}5854```typescript theme={null}

5850type SDKBackgroundTasksChangedMessage = {5855type SDKBackgroundTasksChangedMessage = {


5865 `SDKThinkingTokensMessage`5870 `SDKThinkingTokensMessage`

5866</h3>5871</h3>

5867 5872 

5868Emesso mentre Claude sta producendo un blocco di ragionamento, incluso uno redatto. `estimated_tokens` è una stima progressiva dei token di ragionamento generati finora nel blocco corrente, e `estimated_tokens_delta` è l'incremento portato da questo frame. Usa queste stime per la visualizzazione del progresso.5873Emesso mentre Claude produce un blocco di ragionamento, incluso uno oscurato. `estimated_tokens` è una stima progressiva dei token di ragionamento generati finora nel blocco corrente, e `estimated_tokens_delta` è l'incremento riportato da questo frame. Usa queste stime per visualizzare l'avanzamento.

5869 5874 

5870Quando il modello o il provider segnala una suddivisione, il conteggio finale per il ciclo dell'agente di primo livello è il [`usage.output_tokens_details.thinking_tokens`](#usage) del messaggio di risultato, che [non include i token dei subagent](/docs/it/agent-sdk/cost-tracking#get-the-total-cost-of-a-query).5875Quando il modello o il provider riporta una suddivisione, il conteggio finale per il ciclo dell'agente di primo livello è [`usage.output_tokens_details.thinking_tokens`](#usage) del messaggio di risultato, che [non include i token dei subagent](/docs/it/agent-sdk/cost-tracking#get-the-total-cost-of-a-query).

5871 5876 

5872Richiede Claude Code v2.1.153 o successivo.5877Richiede Claude Code v2.1.153 o versioni successive.

5873 5878 

5874```typescript theme={null}5879```typescript theme={null}

5875type SDKThinkingTokensMessage = {5880type SDKThinkingTokensMessage = {


5887 `SDKSessionStateChangedMessage`5892 `SDKSessionStateChangedMessage`

5888</h3>5893</h3>

5889 5894 

5890Emesso quando Claude Code segnala lo stato della sessione. Per ricevere questi messaggi, imposta [`CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1`](/docs/it/env-vars#variables). Claude Code può segnalare lo stesso stato più di una volta, quindi leggi un messaggio come lo stato corrente della sessione piuttosto che come una transizione.5895Emesso quando Claude Code riporta lo stato della sessione. Per ricevere questi messaggi, imposta [`CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1`](/docs/it/env-vars#variables). Claude Code può riportare lo stesso stato più di una volta, quindi interpreta un messaggio come lo stato corrente della sessione piuttosto che come una transizione.

5891 5896 

5892Il campo `state` contiene uno di questi valori:5897Il campo `state` contiene uno di questi valori:

5893 5898 

5894* `running`: la sessione sta lavorando.5899* `running`: la sessione sta lavorando.

5895* `idle`: Claude Code è in attesa del tuo prossimo prompt.5900* `idle`: Claude Code è in attesa del tuo prossimo prompt.

5896* `requires_action`: la sessione è bloccata in attesa della risposta a una richiesta che ha inviato al tuo host, come una richiesta di permesso.5901* `requires_action`: la sessione è bloccata in attesa di una risposta a una richiesta inviata al tuo host, come una richiesta di permesso.

5897 5902 

5898Il messaggio `idle` di un turno e il suo messaggio `result` possono arrivare in qualsiasi ordine. Per cambiare se `idle` attende il lavoro in background, come un subagent in background o l'esecuzione di un [workflow](/docs/it/workflows), vedi [`CLAUDE_CODE_BG_TASKS_REPORT_RUNNING`](/docs/it/env-vars#variables).5903Il messaggio `idle` di un turno e il suo messaggio `result` possono arrivare in qualsiasi ordine. Per cambiare se `idle` attende il lavoro in background, come un subagent in background o un'esecuzione di un [workflow](/docs/it/workflows), consulta [`CLAUDE_CODE_BG_TASKS_REPORT_RUNNING`](/docs/it/env-vars#variables).

5899 5904 

5900```typescript theme={null}5905```typescript theme={null}

5901type SDKSessionStateChangedMessage = {5906type SDKSessionStateChangedMessage = {


5911 `SDKFilesPersistedEvent`5916 `SDKFilesPersistedEvent`

5912</h3>5917</h3>

5913 5918 

5914Emesso quando i checkpoint dei file vengono persistiti su disco.5919Emesso quando i checkpoint dei file vengono salvati su disco.

5915 5920 

5916```typescript theme={null}5921```typescript theme={null}

5917type SDKFilesPersistedEvent = {5922type SDKFilesPersistedEvent = {


5947};5952};

5948```5953```

5949 5954 

5950Quando `errorCode` è `"credits_required"`, il rifiuto proviene da un abbonamento claude.ai il cui utilizzo incluso è esaurito, e la sessione non può continuare fino a quando l'utente non acquista crediti di utilizzo. `canUserPurchaseCredits` indica se l'utente autenticato può acquistare crediti per l'account, e `hasChargeableSavedPaymentMethod` indica se un metodo di pagamento salvato è registrato. Tutti e tre i campi sono assenti negli eventi di rate limit che non sono rifiuti con crediti richiesti. Richiede Claude Code v2.1.181 o successivo.5955Quando `errorCode` è `"credits_required"`, il rifiuto proviene da un abbonamento claude.ai il cui utilizzo incluso è esaurito, e la sessione non può continuare finché l'utente non acquista crediti di utilizzo. `canUserPurchaseCredits` indica se l'utente autenticato può acquistare crediti per l'account, e `hasChargeableSavedPaymentMethod` indica se è registrato un metodo di pagamento salvato. Tutti e tre i campi sono assenti negli eventi di rate limit che non sono rifiuti per crediti richiesti. Richiede Claude Code v2.1.181 o versioni successive.

5951 5956 

5952<h3 id="sdklocalcommandoutputmessage">5957<h3 id="sdklocalcommandoutputmessage">

5953 `SDKLocalCommandOutputMessage`5958 `SDKLocalCommandOutputMessage`


5969 `SDKCommandsChangedMessage`5974 `SDKCommandsChangedMessage`

5970</h3>5975</h3>

5971 5976 

5972Emesso quando l'insieme dei comandi disponibili cambia durante la sessione, ad esempio quando Claude Code scopre skill mentre l'agente entra in una sottodirectory. L'array `commands` è l'elenco completo aggiornato, quindi sostituisci qualsiasi elenco di comandi memorizzato nella cache con questo payload. Chiamare [`supportedCommands()`](#query-object) dopo questo messaggio restituisce lo stesso elenco aggiornato, perché il metodo traccia l'ultimo push; questo richiede Agent SDK v0.3.216 o successivo. Nelle versioni SDK precedenti, `supportedCommands()` restituisce lo snapshot acquisito all'inizializzazione e non riflette mai i cambiamenti durante la sessione.5977Emesso quando l'insieme dei comandi disponibili cambia durante la sessione, ad esempio quando Claude Code scopre delle skill mentre l'agente entra in una sottodirectory. L'array `commands` è l'intero elenco aggiornato, quindi sostituisci qualsiasi elenco di comandi memorizzato nella cache con questo payload. Chiamare [`supportedCommands()`](#query-object) dopo questo messaggio restituisce lo stesso elenco aggiornato, perché il metodo segue l'invio più recente; questo richiede Agent SDK v0.3.216 o versioni successive. Nelle versioni precedenti dell'SDK, `supportedCommands()` restituisce l'istantanea acquisita all'inizializzazione e non riflette mai le modifiche durante la sessione.

5973 5978 

5974Claude Code emette questo messaggio anche quando i [prompt](/docs/it/mcp#use-mcp-prompts-as-commands) di un server MCP entrano o escono dall'elenco, ad esempio quando un server finisce di connettersi dopo l'avvio della sessione. Questo richiede Claude Code v2.1.281 o successivo.5979Claude Code emette questo messaggio anche quando i [prompt](/docs/it/mcp#use-mcp-prompts-as-commands) di un server MCP entrano o escono dall'elenco, ad esempio quando un server termina la connessione dopo l'avvio della sessione. Questo richiede Claude Code v2.1.281 o versioni successive.

5975 5980 

5976```typescript theme={null}5981```typescript theme={null}

5977type SDKCommandsChangedMessage = {5982type SDKCommandsChangedMessage = {


5987 `SDKPromptSuggestionMessage`5992 `SDKPromptSuggestionMessage`

5988</h3>5993</h3>

5989 5994 

5990Emesso dopo un turno quando [`promptSuggestions`](#options) è abilitato e Claude Code ha generato un suggerimento per quel turno. Contiene il prompt utente successivo previsto. Per i turni che non ne ricevono, vedi [Quando Claude Code salta i suggerimenti](/docs/it/interactive-mode#when-claude-code-skips-suggestions).5995Emesso dopo un turno quando [`promptSuggestions`](#options) è abilitato e Claude Code ha generato un suggerimento per quel turno. Contiene il prossimo prompt dell'utente previsto. Per i turni che non ne ricevono, consulta [Quando Claude Code salta i suggerimenti](/docs/it/interactive-mode#when-claude-code-skips-suggestions).

5991 5996 

5992```typescript theme={null}5997```typescript theme={null}

5993type SDKPromptSuggestionMessage = {5998type SDKPromptSuggestionMessage = {


6016};6021};

6017```6022```

6018 6023 

6019I campi opzionali descrivono il ripristino:6024I campi facoltativi descrivono il reset:

6020 6025 

6021* `trigger`: cosa ha scartato la conversazione. Ripristina la tua trascrizione su ogni messaggio `conversation_reset`, incluso uno in cui questo campo è assente o contiene un valore che non riconosci.6026* `trigger`: cosa ha scartato la conversazione. Reimposta la tua trascrizione a ogni messaggio `conversation_reset`, incluso uno in cui questo campo è assente o contiene un valore che non riconosci.

6022* `user_message_uuid`: l'`uuid` del messaggio utente che conteneva il `/clear`. Usalo per abbinare il ripristino a quel messaggio.6027* `user_message_uuid`: l'`uuid` del messaggio dell'utente che conteneva il `/clear`. Usalo per associare il reset a quel messaggio.

6023* `timestamp`: quando è avvenuto il ripristino, come una stringa ISO 8601 in UTC. Usalo per la visualizzazione, non per ordinare i messaggi.6028* `timestamp`: quando è avvenuto il reset, come stringa ISO 8601 in UTC. Usalo per la visualizzazione, non per ordinare i messaggi.

6024 6029 

6025I campi `trigger`, `user_message_uuid` e `timestamp` richiedono Claude Code v2.1.281 o successivo.6030I campi `trigger`, `user_message_uuid` e `timestamp` richiedono Claude Code v2.1.281 o versioni successive.

6026 6031 

6027I tipi pubblicati dall'SDK dichiarano `SDKConversationResetMessage` in Claude Code v2.1.203 e successivo. Prima di v2.1.203, `SDKMessage` faceva riferimento al tipo senza dichiararlo, quindi il restringimento su `type === "conversation_reset"` non superava il controllo dei tipi quando `skipLibCheck` era disabilitato.6032Le tipizzazioni pubblicate dell'SDK dichiarano `SDKConversationResetMessage` in Claude Code v2.1.203 e versioni successive. Prima della v2.1.203, `SDKMessage` faceva riferimento al tipo senza dichiararlo, quindi il restringimento su `type === "conversation_reset"` non superava il controllo dei tipi quando `skipLibCheck` era disabilitato.

6028 6033 

6029<h3 id="aborterror">6034<h3 id="aborterror">

6030 `AbortError`6035 `AbortError`

6031</h3>6036</h3>

6032 6037 

6033Classe di errore personalizzata per le operazioni di interruzione.6038Classe di errore personalizzata per le operazioni di abort.

6034 6039 

6035```typescript theme={null}6040```typescript theme={null}

6036class AbortError extends Error {}6041class AbortError extends Error {}

6037```6042```

6038 6043 

6039`AbortError` è l'unica classe di errore nell'API tipizzata dell'SDK. Altri errori, come il processo Claude Code che esce o non riesce ad avviarsi, rifiutano l'iterazione dei messaggi con errori che non portano alcuna classe SDK su cui fare il confronto. [Risoluzione dei problemi](/docs/it/agent-sdk/troubleshooting) cataloga quegli errori per messaggio, con la causa e la correzione per ciascuno.6044`AbortError` è l'unica classe di errore nell'API tipizzata dell'SDK. Gli altri errori, come l'uscita o il mancato avvio del processo Claude Code, rifiutano l'iterazione dei messaggi con errori che non hanno alcuna classe dell'SDK su cui fare il confronto. [Risoluzione dei problemi](/docs/it/agent-sdk/troubleshooting) classifica questi errori in base al messaggio, con la causa e la soluzione per ciascuno.

6040 6045 

6041<h2 id="sandbox-configuration">6046<h2 id="sandbox-configuration">

6042 Configurazione della sandbox6047 Configurazione della sandbox

agent-view.md +1 −0

Details

819| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Elimina una sessione la cui eliminazione è stata rifiutata a causa di commit non sottoposti a push, scartando il worktree insieme al suo branch e ai commit. Passa il valore esatto che il rifiuto ha stampato; vedi [Cosa elimina l'eliminazione di una sessione](#what-deleting-a-session-removes). Richiede v2.1.260 o successivo |819| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Elimina una sessione la cui eliminazione è stata rifiutata a causa di commit non sottoposti a push, scartando il worktree insieme al suo branch e ai commit. Passa il valore esatto che il rifiuto ha stampato; vedi [Cosa elimina l'eliminazione di una sessione](#what-deleting-a-session-removes). Richiede v2.1.260 o successivo |

820| `claude rm <id> --force-remove-worktree <worktree-id>` | Elimina una sessione la cui eliminazione è stata rifiutata perché git o l'hook `WorktreeRemove` non potevano rimuovere il suo worktree, eliminando comunque la directory del worktree e lasciando il suo branch nel repository. Passa il valore esatto che il rifiuto ha stampato; vedi [Cosa elimina l'eliminazione di una sessione](#what-deleting-a-session-removes). Richiede v2.1.268 o successivo |820| `claude rm <id> --force-remove-worktree <worktree-id>` | Elimina una sessione la cui eliminazione è stata rifiutata perché git o l'hook `WorktreeRemove` non potevano rimuovere il suo worktree, eliminando comunque la directory del worktree e lasciando il suo branch nel repository. Passa il valore esatto che il rifiuto ha stampato; vedi [Cosa elimina l'eliminazione di una sessione](#what-deleting-a-session-removes). Richiede v2.1.268 o successivo |

821| `claude daemon status` | Stampa lo stato del [supervisore](#the-supervisor-process), la versione, la directory socket e il numero di worker |821| `claude daemon status` | Stampa lo stato del [supervisore](#the-supervisor-process), la versione, la directory socket e il numero di worker |

822| `claude daemon logs` | Segue il file di log del supervisore, [`~/.claude/daemon.log`](#where-state-is-stored), stampando le nuove righe man mano che arrivano finché non premi `Ctrl+C` |

822| `claude daemon stop --any` | Ferma il processo supervisore e le sessioni in background che ospita. Passa `--keep-workers` per lasciare le sessioni in background in esecuzione in modo che il supervisore successivo si riconnetta ad esse. Il prossimo `claude agents` o `claude --bg` avvia un supervisore nuovo |823| `claude daemon stop --any` | Ferma il processo supervisore e le sessioni in background che ospita. Passa `--keep-workers` per lasciare le sessioni in background in esecuzione in modo che il supervisore successivo si riconnetta ad esse. Il prossimo `claude agents` o `claude --bg` avvia un supervisore nuovo |

823 824 

824`claude attach` e `claude logs` possono accettare parte del nome di una sessione in esecuzione al posto dell'ID, come in `claude logs "auth refactor"`. Passare un nome richiede Claude Code v2.1.290 o successivo.825`claude attach` e `claude logs` possono accettare parte del nome di una sessione in esecuzione al posto dell'ID, come in `claude logs "auth refactor"`. Passare un nome richiede Claude Code v2.1.290 o successivo.

agents.md +1 −1

Details

20 20 

21Tre ulteriori strumenti supportano questo lavoro senza essere un modo per eseguire agenti stessi:21Tre ulteriori strumenti supportano questo lavoro senza essere un modo per eseguire agenti stessi:

22 22 

23* [Worktrees](/docs/it/worktrees) danno a ogni sessione un checkout git separato, così le sessioni parallele non modificano mai gli stessi file. Usateli per le sessioni che eseguite voi stessi. Una sessione che inviate da visualizzazione agenti [si sposta nel suo proprio worktree prima di modificare i file](/docs/it/agent-view#how-file-edits-are-isolated), e i subagenti che generate possono ottenerne uno anche loro.23* I [worktree](/docs/it/worktrees) danno a ogni sessione un checkout git separato, così ogni sessione parallela modifica la propria copia dei file. Usali per le sessioni che esegui tu stesso. Una sessione che invii dalla visualizzazione agenti [si sposta in un proprio worktree prima di modificare i file](/docs/it/agent-view#how-file-edits-are-isolated), e anche i subagent che generi possono ottenerne uno ciascuno.

24* [Messaggistica tra sessioni](/docs/it/cross-session-messaging) consente a Claude di elencare e inviare messaggi alle Vostre altre sessioni Claude Code su questa macchina, su un'altra macchina, o [nel cloud](/docs/it/claude-code-on-the-web), così le sessioni che eseguite voi stessi possono passare risultati e stato tra di loro.24* [Messaggistica tra sessioni](/docs/it/cross-session-messaging) consente a Claude di elencare e inviare messaggi alle Vostre altre sessioni Claude Code su questa macchina, su un'altra macchina, o [nel cloud](/docs/it/claude-code-on-the-web), così le sessioni che eseguite voi stessi possono passare risultati e stato tra di loro.

25* [`/batch`](/docs/it/commands) è una [skill](/docs/it/skills) che ha Claude dividere un grande cambiamento in 5 a 30 subagenti isolati da worktree. È un uso confezionato di subagenti e worktrees, non uno stile di coordinamento separato.25* [`/batch`](/docs/it/commands) è una [skill](/docs/it/skills) che ha Claude dividere un grande cambiamento in 5 a 30 subagenti isolati da worktree. È un uso confezionato di subagenti e worktrees, non uno stile di coordinamento separato.

26 26 

Details

681 681 

682Amazon Bedrock trasmette le risposte `InvokeModelWithResponseStream` in un formato binario event-stream con l'intestazione `Content-Type: application/vnd.amazon.eventstream`. Un gateway o proxy tra Claude Code e Amazon Bedrock deve inoltrare il corpo della risposta e le sue intestazioni, incluso `Content-Type`, così come Amazon Bedrock le ha inviate.682Amazon Bedrock trasmette le risposte `InvokeModelWithResponseStream` in un formato binario event-stream con l'intestazione `Content-Type: application/vnd.amazon.eventstream`. Un gateway o proxy tra Claude Code e Amazon Bedrock deve inoltrare il corpo della risposta e le sue intestazioni, incluso `Content-Type`, così come Amazon Bedrock le ha inviate.

683 683 

684Se il gateway riscrive `Content-Type` in un altro valore, Claude Code rifiuta la risposta con un errore che inizia con `Bedrock streaming response has content-type`, indicando il valore che ha ricevuto. La riscrittura comune è `text/event-stream`, da un'integrazione che ri-emette il flusso come server-sent events.684Se il gateway riscrive `Content-Type` in un altro valore, Claude Code rifiuta la risposta con un errore che inizia con `Bedrock streaming response has content-type`, indicando il valore che ha ricevuto. La riscrittura comune è `text/event-stream`, da un'integrazione che ri-emette il flusso come server-sent events. Per la variabile `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_GUARD` indicata dal messaggio di errore, consulta [Bedrock streaming response has an unexpected content-type](/docs/it/errors#bedrock-streaming-response-has-an-unexpected-content-type).

685 685 

686Se il gateway elimina o cancella l'intestazione, Claude Code presume che il corpo sia il flusso di eventi di Amazon Bedrock e lo decodifica, quindi un corpo che il gateway ha fatto passare senza modifiche continua a trasmettere.686Se il gateway elimina o cancella l'intestazione, Claude Code presume che il corpo sia il flusso di eventi di Amazon Bedrock e lo decodifica, quindi un corpo che il gateway ha fatto passare senza modifiche continua a trasmettere.

687 687 

Details

349}349}

350```350```

351 351 

352Ottieni feedback AI sulle tue regole `allow`, `soft_deny` e `hard_deny` personalizzate:352Ottieni feedback AI sulle tue voci `allow`, `soft_deny`, `hard_deny` e `environment` personalizzate:

353 353 

354```bash theme={null}354```bash theme={null}

355claude auto-mode critique355claude auto-mode critique

chrome.md +1 −1

Details

343 343 

344| Errore | Causa | Soluzione |344| Errore | Causa | Soluzione |

345| - | - | - |345| - | - | - |

346| "Browser extension is not connected" | L'host di messaggistica nativa non può raggiungere l'estensione, oppure l'allowlist IP della tua organizzazione rifiuta la connessione a `bridge.claudeusercontent.com` | Riavvia Chrome e Claude Code, quindi esegui `/chrome` per riconnetterti. Se la tua organizzazione utilizza l'allowlist IP e l'errore persiste, vedi [Organization IP allowlists and proxy egress](/docs/it/network-config#organization-ip-allowlists-and-proxy-egress) |346| "Browser extension is not connected" | L'host di messaggistica nativa non può raggiungere l'estensione, oppure l'allowlist IP della tua organizzazione rifiuta la connessione a `bridge.claudeusercontent.com` | Verifica che nell'estensione sia stato effettuato l'accesso allo stesso account claude.ai di Claude Code, riavvia Chrome e Claude Code, quindi esegui `/chrome` per riconnetterti. Se la tua organizzazione utilizza l'allowlist IP e l'errore persiste, vedi [Organization IP allowlists and proxy egress](/docs/it/network-config#organization-ip-allowlists-and-proxy-egress) |

347| Extension shows "Not detected" in `/chrome` | L'estensione Chrome non è installata o è disabilitata | Installa o abilita l'estensione in `chrome://extensions` |347| Extension shows "Not detected" in `/chrome` | L'estensione Chrome non è installata o è disabilitata | Installa o abilita l'estensione in `chrome://extensions` |

348| "No tab available" | Claude ha tentato di agire prima che una scheda fosse pronta | Chiedi a Claude di creare una nuova scheda e riprovare |348| "No tab available" | Claude ha tentato di agire prima che una scheda fosse pronta | Chiedi a Claude di creare una nuova scheda e riprovare |

349| "Receiving end does not exist" | Il service worker dell'estensione è diventato inattivo | Esegui `/chrome` e seleziona "Reconnect extension" |349| "Receiving end does not exist" | Il service worker dell'estensione è diventato inattivo | Esegui `/chrome` e seleziona "Reconnect extension" |

Details

75| - | - |75| - | - |

76| Claude Code v2.1.195 o successivo | Il sottocomando `claude gateway` e il flusso di accesso al gateway vengono spediti in v2.1.195. Le build pubbliche precedenti non le includono. Sia la macchina che esegue il server gateway che la macchina di ogni sviluppatore devono essere su v2.1.195 o successivo; esegui `claude update` per ottenere l'ultimo rilascio. L'[upstream Claude Platform su AWS](/docs/it/claude-apps-gateway-config#claude-platform-on-aws) richiede Claude Code v2.1.198 o successivo sul server gateway. |76| Claude Code v2.1.195 o successivo | Il sottocomando `claude gateway` e il flusso di accesso al gateway vengono spediti in v2.1.195. Le build pubbliche precedenti non le includono. Sia la macchina che esegue il server gateway che la macchina di ogni sviluppatore devono essere su v2.1.195 o successivo; esegui `claude update` per ottenere l'ultimo rilascio. L'[upstream Claude Platform su AWS](/docs/it/claude-apps-gateway-config#claude-platform-on-aws) richiede Claude Code v2.1.198 o successivo sul server gateway. |

77| Provider di identità OpenID Connect (OIDC) | Okta, Microsoft Entra ID, Google Workspace, Keycloak, o Dex, o qualsiasi altro IdP conforme a OIDC come PingFederate. Il gateway esegue il discovery OIDC standard e il flusso del codice di autorizzazione rispetto ad esso. SAML e LDAP non sono supportati. |77| Provider di identità OpenID Connect (OIDC) | Okta, Microsoft Entra ID, Google Workspace, Keycloak, o Dex, o qualsiasi altro IdP conforme a OIDC come PingFederate. Il gateway esegue il discovery OIDC standard e il flusso del codice di autorizzazione rispetto ad esso. SAML e LDAP non sono supportati. |

78| PostgreSQL 14 o successivo | Supporta il flusso di accesso del dispositivo, dove il callback del browser scrive e il CLI di polling legge, più contatori di limite di velocità. Qualsiasi Postgres gestito funziona, incluso il livello più piccolo. Senza limiti di spesa configurati, il gateway archivia pochi KB di stato di autenticazione di breve durata; con [limiti di spesa](/docs/it/claude-apps-gateway-spend-limits), contiene anche tabelle di spesa durevole, audit e identità che dovrebbero essere sottoposte a backup. TLS tramite `?sslmode=require` è consigliato. |78| PostgreSQL 11 o successivo | Supporta il flusso di accesso del dispositivo e i contatori dei rate limit. Funziona un servizio PostgreSQL gestito, incluso il livello più piccolo; vedi [quali database sono supportati](/docs/it/claude-apps-gateway-deploy#postgres). Con [limiti di spesa](/docs/it/claude-apps-gateway-spend-limits), contiene anche tabelle di spesa durevole, audit e identità che dovrebbero essere sottoposte a backup. TLS tramite `?sslmode=require` è consigliato. PostgreSQL 11, 12 e 13 richiedono Claude Code v2.1.290 o successivo sul server gateway. Il progetto PostgreSQL non mantiene più quelle versioni, quindi usane una più recente dove puoi. |

79| Upstream del modello | Credenziali Amazon Bedrock, credenziali Claude Platform su AWS, credenziali Google Cloud, una risorsa Microsoft Foundry o una chiave API Anthropic. Sono supportati più upstream con failover. |79| Upstream del modello | Credenziali Amazon Bedrock, credenziali Claude Platform su AWS, credenziali Google Cloud, una risorsa Microsoft Foundry o una chiave API Anthropic. Sono supportati più upstream con failover. |

80| HTTPS | Il gateway deve essere raggiungibile su `https://` dai laptop degli sviluppatori e da qualsiasi browser utilizzato per l'accesso; il gateway serve la pagina di verifica del dispositivo sullo stesso listener. Fornisci un certificato TLS tramite `listen.tls` o esegui dietro un ingresso che termina TLS, e imposta `listen.public_url` all'origine esterna in entrambi i casi. Su `/login`, Claude Code accetta un'origine `http://` semplice solo quando l'host del gateway è loopback: `localhost`, `127.0.0.1`, o `::1`. |80| HTTPS | Il gateway deve essere raggiungibile su `https://` dai laptop degli sviluppatori e da qualsiasi browser utilizzato per l'accesso; il gateway serve la pagina di verifica del dispositivo sullo stesso listener. Fornisci un certificato TLS tramite `listen.tls` o esegui dietro un ingresso che termina TLS, e imposta `listen.public_url` all'origine esterna in entrambi i casi. Su `/login`, Claude Code accetta un'origine `http://` semplice solo quando l'host del gateway è loopback: `localhost`, `127.0.0.1`, o `::1`. |

81| Indirizzo di rete privata | Su `/login`, Claude Code richiede che il nome host o l'indirizzo IP del gateway si risolvano solo in indirizzi privati: RFC 1918, link-local, CGNAT `100.64.0.0/10`, IPv6 ULA `fc00::/7`, o loopback. Per un gateway che ospiti, qualsiasi indirizzo pubblico al di fuori di un blocco che dichiari è rifiutato; vedi il [modello di minaccia](/docs/it/claude-apps-gateway-deploy#threat-model-summary) nella guida di distribuzione. Se le macchine degli sviluppatori instradano HTTPS attraverso un proxy aziendale, l'accesso richiede anche che l'host proxy si risolva in indirizzi privati; se non lo fa, aggiungi l'host del gateway a `NO_PROXY` in modo che il CLI si connetta direttamente. Se la tua rete interna è numerata da spazio IPv4 pubblico che la tua organizzazione possiede, [dichiara quei blocchi](#allow-a-gateway-on-public-address-space-you-own) in modo che `/login` accetti un gateway lì. |81| Indirizzo di rete privata | Su `/login`, Claude Code richiede che il nome host o l'indirizzo IP del gateway si risolvano solo in indirizzi privati: RFC 1918, link-local, CGNAT `100.64.0.0/10`, IPv6 ULA `fc00::/7`, o loopback. Per un gateway che ospiti, qualsiasi indirizzo pubblico al di fuori di un blocco che dichiari è rifiutato; vedi il [modello di minaccia](/docs/it/claude-apps-gateway-deploy#threat-model-summary) nella guida di distribuzione. Se le macchine degli sviluppatori instradano HTTPS attraverso un proxy aziendale, l'accesso richiede anche che l'host proxy si risolva in indirizzi privati; se non lo fa, aggiungi l'host del gateway a `NO_PROXY` in modo che il CLI si connetta direttamente. Se la tua rete interna è numerata da spazio IPv4 pubblico che la tua organizzazione possiede, [dichiara quei blocchi](#allow-a-gateway-on-public-address-space-you-own) in modo che `/login` accetti un gateway lì. |


91 </Step>91 </Step>

92 92 

93 <Step title="Provisioning di un database PostgreSQL">93 <Step title="Provisioning di un database PostgreSQL">

94 Qualsiasi Postgres 14 o successivo funziona, incluso il livello gestito più piccolo. Il gateway esegue le proprie migrazioni dello schema all'avvio, quindi il ruolo del database ha bisogno dei diritti per creare e alterare le tabelle; vedi [`store`](/docs/it/claude-apps-gateway-config#store).94 Usa PostgreSQL 11 o successivo. Il livello gestito più piccolo è sufficiente. Il gateway esegue le proprie migrazioni dello schema all'avvio, quindi il ruolo del database ha bisogno dei diritti per creare e alterare le tabelle; vedi [`store`](/docs/it/claude-apps-gateway-config#store).

95 </Step>95 </Step>

96 96 

97 <Step title="Scrivi gateway.yaml">97 <Step title="Scrivi gateway.yaml">

Details

158Il gateway legge la chiave e il certificato una sola volta all'avvio, quindi un file modificato ha effetto solo dopo un riavvio. Esegui la rotazione in questo ordine in modo che nessuna richiesta di token presenti un certificato che l'IdP non ha:158Il gateway legge la chiave e il certificato una sola volta all'avvio, quindi un file modificato ha effetto solo dopo un riavvio. Esegui la rotazione in questo ordine in modo che nessuna richiesta di token presenti un certificato che l'IdP non ha:

159 159 

1601. Carica il nuovo certificato sull'IdP accanto a quello vecchio.1601. Carica il nuovo certificato sull'IdP accanto a quello vecchio.

1612. Sostituisci i file della chiave e del certificato che `gateway.yaml` carica, quindi riavvia il gateway.1612. Sostituisci i file della chiave e del certificato che `gateway.yaml` carica, quindi riavvia il gateway. Se esegui più repliche, un [riavvio progressivo](/docs/it/claude-apps-gateway-deploy#upgrades) funziona, perché l'IdP ha entrambi i certificati finché non rimuovi quello vecchio.

1623. Rimuovi il vecchio certificato dall'IdP.1623. Dopo che ogni replica si è riavviata, rimuovi il vecchio certificato dall'IdP.

163 163 

164<h4 id="idp-requests-through-a-forward-proxy">164<h4 id="idp-requests-through-a-forward-proxy">

165 Richieste IdP attraverso un forward proxy165 Richieste IdP attraverso un forward proxy


227 227 

228| Campo | Obbligatorio | Descrizione |228| Campo | Obbligatorio | Descrizione |

229| - | - | - |229| - | - | - |

230| `postgres_url` | Sì | URL `postgres://` o `postgresql://`. Obbligatorio: il punto d'incontro della concessione del dispositivo, dove il callback del browser scrive e la CLI in polling legge, richiede uno stato condiviso tra repliche. Il gateway esegue le proprie migrazioni dello schema all'avvio e all'aggiornamento, quindi il ruolo ha bisogno dei diritti per creare e modificare tabelle sullo schema di destinazione. Consulta [Aggiornamenti](/docs/it/claude-apps-gateway-deploy#upgrades) e [Postgres](/docs/it/claude-apps-gateway-deploy#postgres). |230| `postgres_url` | Sì | URL `postgres://` o `postgresql://` con un solo host, non un elenco separato da virgole. Il gateway esegue le proprie migrazioni dello schema all'avvio e all'aggiornamento, quindi il ruolo ha bisogno dei diritti per creare e modificare tabelle sullo schema di destinazione. Consulta [Aggiornamenti](/docs/it/claude-apps-gateway-deploy#upgrades) e [Postgres](/docs/it/claude-apps-gateway-deploy#postgres). |

231| `username` | No | Sovrascrive l'utente in `postgres_url` |231| `username` | No | Sovrascrive l'utente in `postgres_url` |

232| `password` | No | Credenziale del database. Impostala qui anziché in `postgres_url` in modo che la credenziale rimanga fuori dall'URL. Accetta qualsiasi carattere e ha la precedenza sulle credenziali dell'URL. |232| `password` | No | Credenziale del database. Impostala qui anziché in `postgres_url` in modo che la credenziale rimanga fuori dall'URL. Accetta qualsiasi carattere e ha la precedenza sulle credenziali dell'URL. |

233| `max_connections` | No | Dimensione del pool di connessioni Postgres per replica. Predefinito `5`, che è conservativo e adatto ai database condivisi. Con i [limiti di spesa](#admin) abilitati, il percorso critico esegue alcune operazioni per richiesta di inferenza, quindi aumentalo per un database dedicato sotto carico e mantieni repliche × questo valore al di sotto del `max_connections` del database. |233| `max_connections` | No | Dimensione del pool di connessioni Postgres per replica. Predefinito `5`, che è conservativo e adatto ai database condivisi. Con i [limiti di spesa](#admin) abilitati, il percorso critico esegue alcune operazioni per richiesta di inferenza, quindi aumentalo per un database dedicato sotto carico e mantieni repliche × questo valore al di sotto del `max_connections` del database. |

Details

249 Postgres249 Postgres

250</h3>250</h3>

251 251 

252Il gateway memorizza il suo stato in un database PostgreSQL:

253 

254* **Database**: PostgreSQL stesso, self-hosted o gestito, alla [versione minima](/docs/it/claude-apps-gateway#prerequisites) o successiva. I database che implementano solo il protocollo Postgres, come i database SQL distribuiti, non sono supportati.

255* **Indirizzo**: `store.postgres_url` accetta un solo host. Se il database ha più nodi, usa l'indirizzo che si trova davanti a essi, come l'endpoint del tuo servizio gestito, un load balancer o un IP virtuale. Imposta un [periodo di grazia della readiness](#readiness-grace-period) più lungo di quanto impiega un failover.

256 

252Il gateway contiene cinque tabelle di dati più una tabella `_migrations`, tutte create dalle sue migrazioni al momento dell'avvio:257Il gateway contiene cinque tabelle di dati più una tabella `_migrations`, tutte create dalle sue migrazioni al momento dell'avvio:

253 258 

254| Tabella | Contenuti | Conservazione |259| Tabella | Contenuti | Conservazione |


396| CLI `/login`: `Could not resolve the configured HTTP proxy` | Il nome host in `HTTPS_PROXY` o `HTTP_PROXY` non si risolve dalla macchina dello sviluppatore, tipicamente perché non è connesso alla rete aziendale | Chiedi allo sviluppatore di connettersi alla tua rete o VPN e riprovare, oppure correggi l'URL del proxy |401| CLI `/login`: `Could not resolve the configured HTTP proxy` | Il nome host in `HTTPS_PROXY` o `HTTP_PROXY` non si risolve dalla macchina dello sviluppatore, tipicamente perché non è connesso alla rete aziendale | Chiedi allo sviluppatore di connettersi alla tua rete o VPN e riprovare, oppure correggi l'URL del proxy |

397| CLI `/login`: `Could not resolve gateway host <host>` | La macchina non può risolvere il nome DNS interno del gateway, tipicamente perché non è sulla rete aziendale | Chiedi allo sviluppatore di connettersi alla tua rete o VPN, quindi riprova `/login` |402| CLI `/login`: `Could not resolve gateway host <host>` | La macchina non può risolvere il nome DNS interno del gateway, tipicamente perché non è sulla rete aziendale | Chiedi allo sviluppatore di connettersi alla tua rete o VPN, quindi riprova `/login` |

398| L'avvio esce con un errore di convalida della configurazione che nomina `store.postgres_url` | Nessun Postgres configurato; il gateway richiede Postgres | Imposta `store.postgres_url`. Per lo sviluppo locale, utilizza un container usa e getta: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |403| L'avvio esce con un errore di convalida della configurazione che nomina `store.postgres_url` | Nessun Postgres configurato; il gateway richiede Postgres | Imposta `store.postgres_url`. Per lo sviluppo locale, utilizza un container usa e getta: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |

404| L'avvio esce: `store.postgres_url in <path> is not a URL the gateway can read`, oppure, prima di v2.1.290, un semplice `Invalid URL` o `URI error` | L'URL non può essere analizzato, ad esempio perché elenca più di un host o la sua password contiene un `/`, `?`, `#` o `%` non codificato | Indica [un solo host](#postgres) e sposta la password in [`store.password`](/docs/it/claude-apps-gateway-config#store) |

399| L'avvio esce: `requires the native binary` | In esecuzione sotto Node invece del binario nativo | Installa Claude Code con uno dei [metodi di installazione standalone](/docs/it/setup) |405| L'avvio esce: `requires the native binary` | In esecuzione sotto Node invece del binario nativo | Installa Claude Code con uno dei [metodi di installazione standalone](/docs/it/setup) |

400| L'avvio esce con un errore di scoperta OIDC dopo `config.load` | `oidc.issuer` non raggiungibile, oppure la catena TLS non è attendibile | Controlla che l'emittente sia raggiungibile dal pod e serva `/.well-known/openid-configuration`. Imposta `ca_cert_pem` per PKI privata. Se il pod raggiunge l'IdP solo attraverso un proxy forward, imposta [`oidc.use_proxy: true`](/docs/it/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); nelle versioni precedenti a v2.1.227, fornisci al pod una rotta diretta a ciascuno degli endpoint dell'IdP invece. Se il pod inoltre non può risolvere il nome host dell'IdP, oppure il proxy rifiuta `CONNECT` a un indirizzo IP, vedi [Proxy-only egress](/docs/it/claude-apps-gateway-config#proxy-only-egress), che richiede v2.1.277 o successivo. |406| L'avvio esce con un errore di scoperta OIDC dopo `config.load` | `oidc.issuer` non raggiungibile, oppure la catena TLS non è attendibile | Controlla che l'emittente sia raggiungibile dal pod e serva `/.well-known/openid-configuration`. Imposta `ca_cert_pem` per PKI privata. Se il pod raggiunge l'IdP solo attraverso un proxy forward, imposta [`oidc.use_proxy: true`](/docs/it/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); nelle versioni precedenti a v2.1.227, fornisci al pod una rotta diretta a ciascuno degli endpoint dell'IdP invece. Se il pod inoltre non può risolvere il nome host dell'IdP, oppure il proxy rifiuta `CONNECT` a un indirizzo IP, vedi [Proxy-only egress](/docs/it/claude-apps-gateway-config#proxy-only-egress), che richiede v2.1.277 o successivo. |

401| L'avvio esce con un errore di permessi Postgres | Il ruolo del database manca dei diritti DDL sul suo schema | Concedi al ruolo `CREATE` sullo schema del gateway in modo che possa creare e alterare le sue tabelle all'avvio |407| L'avvio esce con un errore di permessi Postgres | Il ruolo del database manca dei diritti DDL sul suo schema | Concedi al ruolo `CREATE` sullo schema del gateway in modo che possa creare e alterare le sue tabelle all'avvio |

402| Log: `could not connect to Postgres at boot, attempt 1 of 3` | Il database non era raggiungibile quando il gateway è stato avviato, ad esempio su un'istanza fredda la cui rete è ancora in fase di avvio | Se il gateway finisce di avviarsi, non è necessaria alcuna azione. Quando il database non è raggiungibile, il gateway tenta la connessione tre volte, due secondi di distanza, prima di uscire. Se esce con `could not connect to Postgres`, controlla `store.postgres_url` e il percorso di rete al database. Se i tentativi scadono piuttosto che essere rifiutati, aumenta [`store.connect_timeout_seconds`](/docs/it/claude-apps-gateway-config#store) per dare a ciascuno più tempo. |408| Log: `could not connect to Postgres at boot, attempt 1 of 3` | Il database non era raggiungibile quando il gateway è stato avviato, ad esempio su un'istanza fredda la cui rete è ancora in fase di avvio | Se il gateway finisce di avviarsi, non è necessaria alcuna azione. Quando il database non è raggiungibile, il gateway tenta la connessione tre volte, due secondi di distanza, prima di uscire. Se esce con `could not connect to Postgres`, controlla `store.postgres_url`, verificando anche che indichi un solo host, e il percorso di rete al database. Se i tentativi scadono piuttosto che essere rifiutati, aumenta [`store.connect_timeout_seconds`](/docs/it/claude-apps-gateway-config#store) per dare a ciascuno più tempo. |

403| `/oauth/callback` mostra "Sign-in could not be completed" | Dominio email rifiutato, convalida id\_token non riuscita, oppure `email_verified` è esplicitamente `false`, che il gateway rifiuta sempre senza override | Controlla `allowed_email_domains` e che l'IdP restituisca un'attestazione `email` verificata. Per `email_verified: false`, correggi la verifica lato IdP. Se il tuo IdP emette email con un nome di attestazione diverso, imposta `oidc.email_claim`. |409| `/oauth/callback` mostra "Sign-in could not be completed" | Dominio email rifiutato, convalida id\_token non riuscita, oppure `email_verified` è esplicitamente `false`, che il gateway rifiuta sempre senza override | Controlla `allowed_email_domains` e che l'IdP restituisca un'attestazione `email` verificata. Per `email_verified: false`, correggi la verifica lato IdP. Se il tuo IdP emette email con un nome di attestazione diverso, imposta `oidc.email_claim`. |

404| Log: `token exchange failed request_id=<id>: id_token missing email claim` | L'IdP non include `email` nell'id\_token per impostazione predefinita. Questo rifiuto si attiva solo quando `allowed_email_domains` è impostato; senza di esso, un'email mancante conia una sessione senza email | Configura l'IdP per emettere `email` nell'id\_token. Okta: aggiungi `email` alle attestazioni del token ID di un server di autorizzazione personalizzato. Entra: aggiungi `email` come attestazione facoltativa sulla registrazione dell'app. PingFederate: abilita una Politica OpenID Connect che emette `email`. Se l'IdP serve `email` dall'endpoint userinfo ma non lo includerà nell'id\_token, come il server di autorizzazione dell'organizzazione Okta, imposta `oidc.userinfo_fallback: true`. |410| Log: `token exchange failed request_id=<id>: id_token missing email claim` | L'IdP non include `email` nell'id\_token per impostazione predefinita. Questo rifiuto si attiva solo quando `allowed_email_domains` è impostato; senza di esso, un'email mancante conia una sessione senza email | Configura l'IdP per emettere `email` nell'id\_token. Okta: aggiungi `email` alle attestazioni del token ID di un server di autorizzazione personalizzato. Entra: aggiungi `email` come attestazione facoltativa sulla registrazione dell'app. PingFederate: abilita una Politica OpenID Connect che emette `email`. Se l'IdP serve `email` dall'endpoint userinfo ma non lo includerà nell'id\_token, come il server di autorizzazione dell'organizzazione Okta, imposta `oidc.userinfo_fallback: true`. |

405| Log: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, e gli sviluppatori vedono `Cloud gateway session expired` ogni `session.ttl_hours` | L'IdP ha accettato il token di aggiornamento ma non ha restituito alcun id\_token con esso, quindi il gateway ha chiesto all'endpoint userinfo dell'IdP le attestazioni dell'utente. L'IdP ha rifiutato il token di accesso aggiornato lì. Il gateway risponde `temporarily_unavailable`, quindi Claude Code mantiene il token di aggiornamento ma non può rinnovare la sessione. Le versioni del gateway precedenti a v2.1.260 registrano la stessa riga senza il dettaglio `(at …)`. | Imposta [`oidc.scope_on_refresh: true`](/docs/it/claude-apps-gateway-config#oidc), disponibile nel gateway v2.1.260 o successivo, in modo che la richiesta di aggiornamento chieda di nuovo `openid`. Alcuni IdP, come Okta, restituiscono un id\_token all'aggiornamento solo quando richiesto. Su PingFederate, abilita **Return ID Token On Refresh Grant** in **Applications > OAuth > OpenID Connect Policy Management** invece. La chiave non cambia il comportamento di PingFederate. Per altri IdP che ancora lo omettono, controlla se l'endpoint userinfo accetta token di accesso emessi da un aggiornamento. Come misura temporanea, aumenta [`session.ttl_hours`](/docs/it/claude-apps-gateway-config#session). Vedi [Identity provider setup](#identity-provider-setup) per il compromesso di deprovisioning. |411| Log: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, e gli sviluppatori vedono `Cloud gateway session expired` ogni `session.ttl_hours` | L'IdP ha accettato il token di aggiornamento ma non ha restituito alcun id\_token con esso, quindi il gateway ha chiesto all'endpoint userinfo dell'IdP le attestazioni dell'utente. L'IdP ha rifiutato il token di accesso aggiornato lì. Il gateway risponde `temporarily_unavailable`, quindi Claude Code mantiene il token di aggiornamento ma non può rinnovare la sessione. Le versioni del gateway precedenti a v2.1.260 registrano la stessa riga senza il dettaglio `(at …)`. | Imposta [`oidc.scope_on_refresh: true`](/docs/it/claude-apps-gateway-config#oidc), disponibile nel gateway v2.1.260 o successivo, in modo che la richiesta di aggiornamento chieda di nuovo `openid`. Alcuni IdP, come Okta, restituiscono un id\_token all'aggiornamento solo quando richiesto. Su PingFederate, abilita **Return ID Token On Refresh Grant** in **Applications > OAuth > OpenID Connect Policy Management** invece. La chiave non cambia il comportamento di PingFederate. Per altri IdP che ancora lo omettono, controlla se l'endpoint userinfo accetta token di accesso emessi da un aggiornamento. Come misura temporanea, aumenta [`session.ttl_hours`](/docs/it/claude-apps-gateway-config#session). Vedi [Identity provider setup](#identity-provider-setup) per il compromesso di deprovisioning. |

Details

70```70```

71 71 

72<h2 id="deploy-the-gateway">72<h2 id="deploy-the-gateway">

73 Distribuire il gateway73 Eseguire il deploy del gateway

74</h2>74</h2>

75 75 

76I passaggi seguenti eseguono il provisioning della distribuzione completa con comandi `aws`.76I passaggi seguenti eseguono il provisioning del deploy completo con comandi `aws`.

77 77 

78<Steps>78<Steps>

79 <Step title="Creare i gruppi di sicurezza">79 <Step title="Creare i gruppi di sicurezza">

80 Tre gruppi di sicurezza concatenano il percorso del traffico: la vostra rete aziendale raggiunge il load balancer sulla porta 443, il load balancer raggiunge il gateway sulla porta 8080 e il gateway raggiunge Postgres sulla porta 5432. Nient'altro è raggiungibile. Come li collegate dipende dal percorso di calcolo:80 Tre gruppi di sicurezza concatenano il percorso del traffico: la tua rete aziendale raggiunge il load balancer sulla porta 443, il load balancer raggiunge il gateway sulla porta 8080 e il gateway raggiunge Postgres sulla porta 5432. Nient'altro è raggiungibile. Il modo in cui li colleghi dipende dal percorso di calcolo:

81 81 

82 * Su ECS Fargate, il passaggio di distribuzione allega `$ALB_SG` al load balancer e `$GW_SG` al servizio.82 * Su ECS Fargate, il passaggio di deploy collega `$ALB_SG` al load balancer e `$GW_SG` al servizio.

83 * Su EKS, AWS Load Balancer Controller crea il proprio gruppo di sicurezza frontend per l'ALB, quindi `$ALB_SG` e `$GW_SG` non vengono utilizzati: l'annotazione `inbound-cidrs` del passaggio di distribuzione limita il listener alla vostra rete aziendale e il gruppo di sicurezza del database ammette il gruppo di sicurezza del cluster al posto di `$GW_SG`.83 * Su EKS, AWS Load Balancer Controller crea il proprio gruppo di sicurezza frontend per l'ALB, quindi `$ALB_SG` e `$GW_SG` non vengono utilizzati: l'annotazione `inbound-cidrs` del passaggio di deploy limita il listener alla tua rete aziendale e il gruppo di sicurezza del database ammette invece il gruppo di sicurezza del cluster.

84 84 

85 ```bash theme={null}85 ```bash theme={null}

86 ALB_SG="$(aws ec2 create-security-group --group-name claude-gateway-alb \86 ALB_SG="$(aws ec2 create-security-group --group-name claude-gateway-alb \


103 </Step>103 </Step>

104 104 

105 <Step title="Creare i ruoli IAM e inviare il modulo del caso d'uso">105 <Step title="Creare i ruoli IAM e inviare il modulo del caso d'uso">

106 Il gateway viene eseguito con un ruolo di attività dedicato la cui unica autorizzazione è invocare i modelli Claude su Bedrock. Secondo il [riferimento upstream Bedrock](/docs/it/claude-apps-gateway-config#amazon-bedrock), la politica deve coprire sia gli ARN del profilo di inferenza cross-region che gli ARN del modello di base sottostante:106 Il gateway viene eseguito con un ruolo di attività dedicato il cui unico permesso è invocare i modelli Claude su Bedrock. Secondo il [riferimento upstream Bedrock](/docs/it/claude-apps-gateway-config#amazon-bedrock), la policy deve coprire sia gli ARN dei profili di inferenza cross-region sia gli ARN dei modelli di base sottostanti:

107 107 

108 ```bash theme={null}108 ```bash theme={null}

109 cat > bedrock-invoke.json <<EOF109 cat > bedrock-invoke.json <<EOF


136 --policy-name bedrock-invoke --policy-document file://bedrock-invoke.json136 --policy-name bedrock-invoke --policy-document file://bedrock-invoke.json

137 ```137 ```

138 138 

139 ECS ha anche bisogno di un ruolo di esecuzione, che l'agente ECS stesso utilizza per estrarre l'immagine da ECR e iniettare i valori di Secrets Manager creati in seguito. È separato dal ruolo di attività che l'AWS SDK del gateway utilizza in fase di esecuzione:139 ECS ha anche bisogno di un ruolo di esecuzione, che l'agente ECS stesso utilizza per scaricare l'immagine da ECR e iniettare i valori di Secrets Manager creati in seguito. È separato dal ruolo di attività che l'AWS SDK del gateway utilizza in fase di esecuzione:

140 140 

141 ```bash theme={null}141 ```bash theme={null}

142 aws iam create-role --role-name claude-gateway-execution \142 aws iam create-role --role-name claude-gateway-execution \


161 --policy-name read-gateway-secrets --policy-document file://secrets-read.json161 --policy-name read-gateway-secrets --policy-document file://secrets-read.json

162 ```162 ```

163 163 

164 I nomi della politica specificano un ARN per segreto piuttosto che un wildcard semplice `gateway-*`, che in un account condiviso corrisponderebbe anche a segreti non correlati; il suffisso finale `-??????` corrisponde esattamente al suffisso di sei caratteri casuale che Secrets Manager aggiunge all'ARN di ogni segreto. Un `-*` finale sarebbe un glob di prefisso semplice e corrisponderebbe anche a nomi più lunghi come `gateway-postgres-url-prod`.164 La policy specifica un ARN per ogni segreto anziché un semplice wildcard `gateway-*`, che in un account condiviso corrisponderebbe anche a segreti non correlati; il suffisso finale `-??????` corrisponde esattamente al suffisso casuale di sei caratteri che Secrets Manager aggiunge all'ARN di ogni segreto. Un `-*` finale sarebbe un semplice glob di prefisso e corrisponderebbe anche a nomi più lunghi come `gateway-postgres-url-prod`.

165 165 

166 La politica IAM concede al gateway il permesso di chiamare Bedrock, e Bedrock abilita l'accesso al modello per impostazione predefinita nelle regioni commerciali. Il gate rimanente a livello di account è il modulo del caso d'uso una tantum di Anthropic: se nessuno nel vostro account lo ha inviato, aprite la [console Amazon Bedrock](https://console.aws.amazon.com/bedrock/), selezionate un modello Anthropic dal catalogo dei modelli e completate il modulo. L'accesso viene concesso immediatamente dopo l'invio; consultate [Claude Code su Amazon Bedrock](/docs/it/amazon-bedrock#1-submit-use-case-details) per il modulo AWS Organizations e i permessi IAM di cui il mittente ha bisogno.166 La policy IAM concede al gateway il permesso di chiamare Bedrock, e Bedrock abilita l'accesso ai modelli per impostazione predefinita nelle regioni commerciali. Il vincolo rimanente a livello di account è il modulo del caso d'uso una tantum di Anthropic: se nessuno nel tuo account lo ha inviato, apri la [console Amazon Bedrock](https://console.aws.amazon.com/bedrock/), seleziona un modello Anthropic dal catalogo dei modelli e compila il modulo. L'accesso viene concesso immediatamente dopo l'invio; consulta [Claude Code su Amazon Bedrock](/docs/it/amazon-bedrock#1-submit-use-case-details) per il modulo AWS Organizations e i permessi IAM di cui ha bisogno chi lo invia.

167 167 

168 Il percorso EKS riutilizza entrambi i documenti della politica su un ruolo IRSA al posto dei due ruoli ECS; consultate il passaggio di distribuzione.168 Il percorso EKS riutilizza entrambi i documenti di policy su un ruolo IRSA al posto dei due ruoli ECS; consulta il passaggio di deploy.

169 </Step>169 </Step>

170 170 

171 <Step title="Eseguire il provisioning di Amazon RDS per PostgreSQL">171 <Step title="Eseguire il provisioning di Amazon RDS per PostgreSQL">

172 L'istanza viene eseguita nelle subnet private senza indirizzo pubblico e con crittografia dell'archiviazione attivata. La versione del motore è fissata a Postgres 16, che soddisfa il limite supportato del gateway di PostgreSQL 14 e garantisce che la famiglia del gruppo di parametri sottostante corrisponda all'istanza.172 L'istanza esegue Postgres 16 nelle subnet private, senza indirizzo pubblico e con la crittografia dell'archiviazione attivata.

173 173 

174 Per prima cosa, create il gruppo di subnet che posiziona il database nelle subnet private e un gruppo di parametri con `rds.force_ssl=1` in modo che il server rifiuti le connessioni in testo semplice. La versione del motore è fissata una volta perché la famiglia del gruppo di parametri deve corrispondere alla versione principale del motore che l'istanza esegue:174 Per prima cosa, crea il gruppo di subnet che colloca il database nelle subnet private e un gruppo di parametri con `rds.force_ssl=1` in modo che il server rifiuti le connessioni in testo semplice. La versione del motore viene fissata una sola volta perché la famiglia del gruppo di parametri deve corrispondere alla versione principale del motore eseguita dall'istanza:

175 175 

176 ```bash theme={null}176 ```bash theme={null}

177 aws rds create-db-subnet-group --db-subnet-group-name claude-gateway-db \177 aws rds create-db-subnet-group --db-subnet-group-name claude-gateway-db \


186 --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate"186 --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate"

187 ```187 ```

188 188 

189 Quindi create l'istanza con una password principale generata:189 Quindi crea l'istanza con una password principale generata:

190 190 

191 ```bash theme={null}191 ```bash theme={null}

192 PGPASS="$(openssl rand -hex 24)"192 PGPASS="$(openssl rand -hex 24)"


201 --no-publicly-accessible --storage-encrypted201 --no-publicly-accessible --storage-encrypted

202 ```202 ```

203 203 

204 L'argomento letterale `--master-user-password` è visibile nella tabella dei processi e nei log di audit/EDR mentre il comando viene eseguito, la stessa esposizione che la nota del passaggio dei segreti copre. Su un host condiviso o monitorato, passate la password tramite `--cli-input-json` da un file `0600` al posto, il modo in cui `setup.sh` del bundle lo fa.204 L'argomento letterale `--master-user-password` è visibile nella tabella dei processi e nei log di audit/EDR mentre il comando è in esecuzione, la stessa esposizione trattata nella nota del passaggio dei segreti. Su un host condiviso o monitorato, passa invece la password tramite `--cli-input-json` da un file `0600`, come fa il `setup.sh` del bundle.

205 205 

206 Attendete che l'istanza si avvii, il che può richiedere diversi minuti, quindi leggete il suo endpoint privato e assemblate la stringa di connessione che il gateway utilizzerà:206 Attendi che l'istanza sia disponibile, il che può richiedere diversi minuti, quindi leggi il suo endpoint privato e componi la stringa di connessione che il gateway utilizzerà:

207 207 

208 ```bash theme={null}208 ```bash theme={null}

209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db


212 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"212 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"

213 ```213 ```

214 214 

215 `sslmode=verify-full` fa sì che il gateway verifichi la catena del certificato del server RDS e il nome host, non solo crittografare. L'ancora di fiducia è il [bundle di certificati AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), che il passaggio di compilazione dell'immagine sottostante copia in `/etc/claude/rds-global-bundle.pem` e affida tramite `NODE_EXTRA_CA_CERTS`. Non aggiungete un parametro `sslrootcert=` in stile libpq all'URL: il driver del gateway legge solo `sslmode` dalla stringa di query e inoltrerebbe `sslrootcert` a Postgres come parametro di avvio, che il server rifiuta.215 `sslmode=verify-full` fa sì che il gateway verifichi la catena e il nome host del certificato del server RDS, e non si limiti a crittografare. L'ancora di fiducia è il [bundle di certificati AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), che il passaggio di build dell'immagine più avanti copia in `/etc/claude/rds-global-bundle.pem` e considera attendibile tramite `NODE_EXTRA_CA_CERTS`. Non aggiungere all'URL un parametro `sslrootcert=` in stile libpq: il driver del gateway legge solo `sslmode` dalla stringa di query e inoltrerebbe `sslrootcert` a Postgres come parametro di avvio, che il server rifiuta.

216 216 

217 Il servizio ECS o i pod EKS devono essere eseguiti in questo VPC in modo che possano raggiungere l'endpoint privato dell'istanza, e il gruppo di sicurezza `claude-gateway-db` ammette solo il gruppo di sicurezza del gateway.217 Il servizio ECS o i pod EKS devono essere eseguiti in questo VPC per poter raggiungere l'endpoint privato dell'istanza, e il gruppo di sicurezza `claude-gateway-db` ammette solo il gruppo di sicurezza del gateway.

218 </Step>218 </Step>

219 219 

220 <Step title="Scrivere gateway.yaml">220 <Step title="Scrivere gateway.yaml">

221 Il blocco `upstreams` punta a Bedrock con `auth: {}`, quindi il gateway si autentica tramite la catena di credenziali predefinita di AWS dal ruolo di attività su ECS o dal ruolo IRSA su EKS. Consultate il [riferimento di configurazione](/docs/it/claude-apps-gateway-config) per ogni campo.221 Il blocco `upstreams` punta a Bedrock con `auth: {}`, quindi il gateway si autentica tramite la catena di credenziali predefinita di AWS, dal ruolo di attività su ECS o dal ruolo IRSA su EKS. Consulta il [riferimento di configurazione](/docs/it/claude-apps-gateway-config) per ogni campo.

222 222 

223 Due campi `listen` descrivono cosa sta davanti al gateway:223 Due campi `listen` descrivono ciò che sta davanti al gateway:

224 224 

225 * `public_url`: l'origine esterna `https://`, obbligatoria per qualsiasi bind non-loopback; consultate il [riferimento `listen`](/docs/it/claude-apps-gateway-config#listen). Il gateway costruisce l'`redirect_uri` dell'IdP e il suo documento di scoperta solo da questo valore, mai da intestazioni `X-Forwarded-*`.225 * `public_url`: l'origine esterna `https://`, obbligatoria per qualsiasi bind non di loopback; consulta il [riferimento `listen`](/docs/it/claude-apps-gateway-config#listen). Il gateway costruisce il `redirect_uri` dell'IdP e il proprio documento di discovery solo da questo valore, mai dalle intestazioni `X-Forwarded-*`.

226 * `trusted_proxies`: gli intervalli di origine del front end. Il gateway onora `X-Forwarded-For` solo quando il peer TCP è in questo elenco, quindi cammina nella catena oltre i hop affidabili, in modo che i limiti di velocità di accesso per IP e gli eventi di audit registrino gli IP degli sviluppatori al posto di quello del load balancer.226 * `trusted_proxies`: gli intervalli di origine del front end. Il gateway considera `X-Forwarded-For` solo quando il peer TCP è in questo elenco, quindi percorre la catena oltre gli hop attendibili, in modo che i rate limit di accesso per IP e gli eventi di audit registrino gli IP degli sviluppatori anziché quelli del load balancer.

227 227 

228 Su entrambi i percorsi il front end è un ALB interno, creato direttamente o da AWS Load Balancer Controller, e i nodi di un ALB prendono indirizzi dalle subnet a cui è collegato, quindi impostate `trusted_proxies` ai CIDR di quelle subnet. Questo affida ogni host in quelle subnet come proxy. Evitate che l'origine di ingresso dell'ALB, il vostro CIDR aziendale, si sovrapponga ad essi, e non condividete le subnet con carichi di lavoro non affidabili che potrebbero falsificare gli IP dei client tramite `X-Forwarded-For`.228 Su entrambi i percorsi il front end è un ALB interno, creato direttamente o da AWS Load Balancer Controller, e i nodi di un ALB prendono gli indirizzi dalle subnet a cui è collegato, quindi imposta `trusted_proxies` sui CIDR di quelle subnet. In questo modo ogni host in quelle subnet viene considerato un proxy attendibile. Evita che l'origine di ingresso dell'ALB, il tuo CIDR aziendale, si sovrapponga a esse, e non condividere le subnet con carichi di lavoro non attendibili che potrebbero falsificare gli IP dei client tramite `X-Forwarded-For`.

229 229 

230 L'attributo di conservazione del client port dell'ALB, `routing.http.xff_client_port.enabled`, può rimanere a entrambe le impostazioni: con esso attivato, l'ALB scrive il client come `203.0.113.7:54321` o `[2001:db8::1]:54321`, e il gateway legge entrambi con la porta eliminata.230 L'attributo di conservazione della porta del client dell'ALB, `routing.http.xff_client_port.enabled`, può restare su entrambe le impostazioni: se è attivo, l'ALB scrive il client come `203.0.113.7:54321` o `[2001:db8::1]:54321`, e il gateway legge entrambi i formati scartando la porta.

231 231 

232 ```yaml gateway.yaml theme={null}232 ```yaml gateway.yaml theme={null}

233 listen:233 listen:


241 client_id: 0oa1example2241 client_id: 0oa1example2

242 client_secret: ${OIDC_CLIENT_SECRET} # EKS: ${file:/secrets/oidc-client-secret}242 client_secret: ${OIDC_CLIENT_SECRET} # EKS: ${file:/secrets/oidc-client-secret}

243 allowed_email_domains: [example.com]243 allowed_email_domains: [example.com]

244 # Il server di autorizzazione dell'organizzazione Okta restituisce un id_token sottile che omette244 # Il server di autorizzazione dell'organizzazione Okta restituisce un id_token ridotto che omette

245 # email e gruppi; il gateway li riempie da /userinfo.245 # email e gruppi; il gateway li ricava da /userinfo.

246 userinfo_fallback: true246 userinfo_fallback: true

247 # Okta emette gruppi solo quando viene richiesto lo scope `groups` e il247 # Okta emette i gruppi solo quando viene richiesto lo scope `groups` e il

248 # filtro della rivendicazione dei gruppi dell'app lo consente.248 # filtro del claim dei gruppi dell'app li consente.

249 scopes: [openid, profile, email, offline_access, groups]249 scopes: [openid, profile, email, offline_access, groups]

250 250 

251 session:251 session:

252 jwt_secret: ${GATEWAY_JWT_SECRET} # EKS: ${file:/secrets/jwt-secret}252 jwt_secret: ${GATEWAY_JWT_SECRET} # EKS: ${file:/secrets/jwt-secret}

253 ttl_hours: 8 # limita la latenza di deprovisioning; abbassate253 ttl_hours: 8 # limita la latenza di deprovisioning; abbassa

254 # verso 1 per una revoca più stretta254 # verso 1 per una revoca più rapida

255 255 

256 store:256 store:

257 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}257 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}

258 # readiness_grace_seconds: 300 # mantieni il passaggio del controllo di stato258 # readiness_grace_seconds: 300 # continua a superare il controllo di stato

259 # attraverso un failover RDS259 # durante un failover RDS

260 260 

261 upstreams:261 upstreams:

262 - provider: bedrock262 - provider: bedrock

263 region: <your-region> # corrispondere a $AWS_REGION in modo che gli ARN della politica IAM263 region: <your-region> # uguale a $AWS_REGION affinché gli ARN della

264 # lo coprano264 # policy IAM la coprano

265 auth: {} # catena di credenziali predefinita di AWS:265 auth: {} # catena di credenziali predefinita di AWS:

266 # ruolo di attività ECS, o IRSA su EKS266 # ruolo di attività ECS, o IRSA su EKS

267 ```267 ```

268 268 

269 <Note>269 <Note>

270 Solo il blocco `oidc` è specifico di Okta. Per utilizzare Microsoft Entra ID al posto, impostate `issuer` su `https://login.microsoftonline.com/<tenant-id>/v2.0`, eliminate `userinfo_fallback` e lo scope `groups`, e notate che Entra emette Object ID dei gruppi piuttosto che nomi, quindi [`managed.policies`](/docs/it/claude-apps-gateway-config#managed) deve corrispondere ai GUID, o su App Roles con `oidc.groups_claim: roles`. Consultate [Configurazione del provider di identità](/docs/it/claude-apps-gateway-deploy#identity-provider-setup).270 Solo il blocco `oidc` è specifico di Okta. Per utilizzare invece Microsoft Entra ID, imposta `issuer` su `https://login.microsoftonline.com/<tenant-id>/v2.0`, rimuovi `userinfo_fallback` e lo scope `groups`, e tieni presente che Entra emette gli Object ID dei gruppi anziché i nomi, quindi [`managed.policies`](/docs/it/claude-apps-gateway-config#managed) deve corrispondere ai GUID, oppure agli App Roles con `oidc.groups_claim: roles`. Consulta [Configurazione del provider di identità](/docs/it/claude-apps-gateway-deploy#identity-provider-setup).

271 </Note>271 </Note>

272 </Step>272 </Step>

273 273 

274 <Step title="Archiviare i segreti in AWS Secrets Manager">274 <Step title="Archiviare i segreti in AWS Secrets Manager">

275 Create tre segreti; il ruolo di esecuzione dal passaggio IAM può già leggerli:275 Crea tre segreti; il ruolo di esecuzione del passaggio IAM può già leggerli:

276 276 

277 ```bash theme={null}277 ```bash theme={null}

278 aws secretsmanager create-secret --name gateway-jwt-secret \278 aws secretsmanager create-secret --name gateway-jwt-secret \


283 --secret-string "$GATEWAY_POSTGRES_URL"283 --secret-string "$GATEWAY_POSTGRES_URL"

284 ```284 ```

285 285 

286 Notate l'ARN che ogni chiamata stampa; la definizione di attività ECS fa riferimento ai segreti per ARN.286 Annota l'ARN stampato da ogni chiamata; la definizione di attività ECS fa riferimento ai segreti tramite ARN.

287 287 

288 <Note>288 <Note>

289 Gli argomenti letterali `--secret-string` sono visibili nella tabella dei processi e nei log di audit/EDR mentre ogni comando viene eseguito. Su un host condiviso o monitorato, mettete il valore in un file `0600` e passate `--secret-string file://<path>` al posto. `setup.sh` del bundle mantiene i valori dei segreti fuori da argv del processo allo stesso modo, passando file temporanei `0600` a `--cli-input-json`.289 Gli argomenti letterali `--secret-string` sono visibili nella tabella dei processi e nei log di audit/EDR mentre ogni comando è in esecuzione. Su un host condiviso o monitorato, inserisci invece il valore in un file `0600` e passa `--secret-string file://<path>`. Il `setup.sh` del bundle tiene allo stesso modo i valori dei segreti fuori dagli argv dei processi, passando file temporanei `0600` a `--cli-input-json`.

290 </Note>290 </Note>

291 291 

292 A differenza dei segreti, `gateway.yaml` stesso non contiene valori segreti, perché ogni credenziale si risolve all'avvio tramite l'espansione [`${VAR}` o `${file:...}`](/docs/it/claude-apps-gateway-config#secret-expansion). Come tutto raggiunge il contenitore differisce per percorso:292 A differenza dei segreti, `gateway.yaml` non contiene valori segreti, perché ogni credenziale viene risolta all'avvio tramite l'[espansione `${VAR}` o `${file:...}`](/docs/it/claude-apps-gateway-config#secret-expansion). Il modo in cui tutto arriva al container varia in base al percorso:

293 293 

294 * Su ECS, il passaggio di compilazione successivo copia `gateway.yaml` nell'immagine a `/etc/claude/gateway.yaml`, e la definizione di attività inietta i tre segreti come variabili di ambiente tramite il suo campo `secrets`, quindi lo YAML fa riferimento a `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` e `${GATEWAY_POSTGRES_URL}`.294 * Su ECS, la build del passaggio successivo copia `gateway.yaml` nell'immagine in `/etc/claude/gateway.yaml`, e la definizione di attività inietta i tre segreti come variabili d'ambiente tramite il suo campo `secrets`, quindi lo YAML fa riferimento a `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` e `${GATEWAY_POSTGRES_URL}`.

295 * Su EKS, montate `gateway.yaml` da una ConfigMap e i segreti come file a `/secrets`, referenziati come `${file:/secrets/...}`. Originare i Kubernetes Secrets da Secrets Manager con External Secrets Operator o il provider AWS del driver CSI Secrets Store, o crearli direttamente con `kubectl`.295 * Su EKS, monta `gateway.yaml` da una ConfigMap e i segreti come file in `/secrets`, referenziati come `${file:/secrets/...}`. Ricava i Kubernetes Secrets da Secrets Manager con External Secrets Operator o con il provider AWS del driver CSI Secrets Store, oppure creali direttamente con `kubectl`.

296 </Step>296 </Step>

297 297 

298 <Step title="Compilare e spingere l'immagine ad Amazon ECR">298 <Step title="Eseguire la build e il push dell'immagine su Amazon ECR">

299 Compilate l'immagine secondo i [requisiti dell'immagine del contenitore](/docs/it/claude-apps-gateway-deploy#container-image), posizionando il binario glibc `linux-x64` a `./claude` nel contesto di compilazione. Scrivete il vostro Dockerfile secondo questi requisiti o iniziate dal [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) del bundle, che copia il `gateway.yaml` compilato dai passaggi precedenti nell'immagine a `/etc/claude/gateway.yaml`. Su ECS quella copia incorporata è come la configurazione raggiunge il contenitore, motivo per cui la compilazione viene dopo che il file è stato scritto. Il percorso EKS al posto monta `gateway.yaml` da una ConfigMap al momento della distribuzione, quindi la copia incorporata non viene utilizzata lì.299 Esegui la build dell'immagine secondo i [requisiti dell'immagine del container](/docs/it/claude-apps-gateway-deploy#container-image), posizionando il binario glibc `linux-x64` in `./claude` nel contesto di build. Scrivi il tuo Dockerfile secondo questi requisiti oppure parti dal [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) del bundle, che copia il `gateway.yaml` compilato nei passaggi precedenti nell'immagine in `/etc/claude/gateway.yaml`. Su ECS è questa copia incorporata a portare la configurazione nel container, ed è per questo che la build viene dopo la scrittura del file. Il percorso EKS monta invece `gateway.yaml` da una ConfigMap al momento del deploy, quindi lì la copia incorporata non viene utilizzata.

300 300 

301 L'immagine porta anche il bundle di certificati AWS RDS come ancora di fiducia per la stringa di connessione `sslmode=verify-full`, quindi scaricatelo nel contesto di compilazione per primo. AWS ruota il bundle (nuove CA regionali vengono aggiunte), quindi scaricatelo per compilazione piuttosto che fissare un checksum o impegnarlo:301 L'immagine contiene anche il bundle di certificati AWS RDS come ancora di fiducia per il `sslmode=verify-full` della stringa di connessione, quindi scaricalo prima nel contesto di build. AWS aggiorna periodicamente il bundle (vengono aggiunte nuove CA regionali), quindi scaricalo a ogni build anziché fissarne un checksum o eseguirne il commit:

302 302 

303 ```bash theme={null}303 ```bash theme={null}

304 curl -fL --proto '=https' -o rds-global-bundle.pem \304 curl -fL --proto '=https' -o rds-global-bundle.pem \

305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

306 ```306 ```

307 307 

308 I requisiti dell'immagine del contenitore non coprono il bundle, quindi se scrivete il vostro Dockerfile, aggiungete le due righe che lo copiano e lo affidano; il `Dockerfile` del bundle include già entrambi:308 I requisiti dell'immagine del container non coprono il bundle, quindi se scrivi il tuo Dockerfile, aggiungi le due righe che lo copiano e lo rendono attendibile; il `Dockerfile` del bundle le include già entrambe:

309 309 

310 ```dockerfile theme={null}310 ```dockerfile theme={null}

311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem

312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem

313 ```313 ```

314 314 

315 Create il repository ECR e accedete Docker ad esso. I tag immutabili significano che il tag `<version>` che il passaggio di distribuzione fissa non può essere successivamente reindirizzato silenziosamente a un'immagine diversa:315 Crea il repository ECR ed esegui l'accesso di Docker a esso. I tag immutabili fanno sì che il tag `<version>` fissato nel passaggio di deploy non possa essere in seguito reindirizzato silenziosamente a un'immagine diversa:

316 316 

317 ```bash theme={null}317 ```bash theme={null}

318 aws ecr create-repository --repository-name claude-gateway \318 aws ecr create-repository --repository-name claude-gateway \


323 "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"323 "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"

324 ```324 ```

325 325 

326 Compilate e spingete l'immagine. La definizione di attività sottostante esegue `linux/amd64`, quindi la piattaforma deve corrispondere qui; per Fargate su ARM64 (Graviton), compilate `linux/arm64` con il binario `linux-arm64` e impostate `cpuArchitecture` su `ARM64` al posto:326 Esegui la build e il push dell'immagine. La definizione di attività più avanti esegue `linux/amd64`, quindi la piattaforma deve corrispondere qui; per Fargate su ARM64 (Graviton), esegui invece la build per `linux/arm64` con il binario `linux-arm64` e imposta `cpuArchitecture` su `ARM64`:

327 327 

328 ```bash theme={null}328 ```bash theme={null}

329 docker build --platform=linux/amd64 \329 docker build --platform=linux/amd64 \


332 ```332 ```

333 </Step>333 </Step>

334 334 

335 <Step title="Distribuire">335 <Step title="Eseguire il deploy">

336 <Tabs>336 <Tabs>

337 <Tab title="ECS Fargate">337 <Tab title="ECS Fargate">

338 Create il cluster e un gruppo di log per stderr del gateway, che porta sia i suoi eventi di audit che i log operazionali. La conservazione è una chiamata separata, e senza una CloudWatch mantiene i log per sempre; allineate i 90 giorni con la vostra politica di conservazione dell'audit:338 Crea il cluster e un gruppo di log per lo stderr del gateway, che contiene sia gli eventi di audit sia i log operativi. La conservazione richiede una chiamata separata, e senza di essa CloudWatch conserva i log per sempre; allinea i 90 giorni alla tua policy di conservazione dell'audit:

339 339 

340 ```bash theme={null}340 ```bash theme={null}

341 aws ecs create-cluster --cluster-name claude-gateway341 aws ecs create-cluster --cluster-name claude-gateway


344 --retention-in-days 90344 --retention-in-days 90

345 ```345 ```

346 346 

347 Scrivete la definizione di attività. Il ruolo di attività porta il permesso Bedrock e il ruolo di esecuzione inietta i segreti; utilizzate gli ARN dei segreti dal passaggio Secrets Manager:347 Scrivi la definizione di attività. Il ruolo di attività ha il permesso per Bedrock e il ruolo di esecuzione inietta i segreti; usa gli ARN dei segreti del passaggio Secrets Manager:

348 348 

349 ```json claude-gateway-task.json theme={null}349 ```json claude-gateway-task.json theme={null}

350 {350 {


379 }379 }

380 ```380 ```

381 381 

382 Registratela:382 Registrala:

383 383 

384 ```bash theme={null}384 ```bash theme={null}

385 aws ecs register-task-definition --cli-input-json file://claude-gateway-task.json385 aws ecs register-task-definition --cli-input-json file://claude-gateway-task.json

386 ```386 ```

387 387 

388 Mettete un ALB interno davanti con un gruppo di destinazione che verifica lo stato del gateway. `--ip-address-type ipv4` è importante: un ALB interno dual-stack pubblica record AAAA di intervallo pubblico, che il controllo della rete privata `/login` rifiuta:388 Metti davanti un ALB interno con un gruppo di destinazione che verifica lo stato del gateway. `--ip-address-type ipv4` è importante: un ALB interno dual-stack pubblica record AAAA di intervallo pubblico, che il controllo della rete privata di `/login` rifiuta:

389 389 

390 ```bash theme={null}390 ```bash theme={null}

391 ALB_ARN="$(aws elbv2 create-load-balancer --name claude-gateway \391 ALB_ARN="$(aws elbv2 create-load-balancer --name claude-gateway \


399 --query 'TargetGroups[0].TargetGroupArn' --output text)"399 --query 'TargetGroups[0].TargetGroupArn' --output text)"

400 ```400 ```

401 401 

402 Aggiungete il listener HTTPS. `--ssl-policy` fissa un limite TLS moderno, poiché ometterlo ricade nella politica predefinita legacy `ELBSecurityPolicy-2016-08`, che ancora accetta TLS 1.0/1.1.402 Aggiungi il listener HTTPS. `--ssl-policy` fissa un livello minimo di TLS moderno, poiché ometterlo fa ricadere sulla policy predefinita legacy `ELBSecurityPolicy-2016-08`, che accetta ancora TLS 1.0/1.1.

403 403 

404 L'ALB chiude una connessione dopo 60 secondi senza dati per impostazione predefinita. I ping di keepalive del gateway mantengono i flussi entro quel default, quindi aumentare il timeout aggiunge margine sopra la cadenza del ping; la riga [Troubleshooting](#troubleshooting) sui flussi interrotti copre il meccanismo e i gateway più vecchi. I comandi sottostanti aggiungono il listener e aumentano il timeout:404 Per impostazione predefinita, l'ALB chiude una connessione dopo 60 secondi senza dati. I ping di keepalive del gateway mantengono i flussi entro questo valore predefinito, quindi aumentare il timeout aggiunge margine rispetto alla cadenza dei ping; la riga di [Risoluzione dei problemi](#troubleshooting) sui flussi interrotti descrive il meccanismo e i gateway meno recenti. I comandi seguenti aggiungono il listener e aumentano il timeout:

405 405 

406 ```bash theme={null}406 ```bash theme={null}

407 aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \407 aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \


414 --attributes Key=idle_timeout.timeout_seconds,Value=3600414 --attributes Key=idle_timeout.timeout_seconds,Value=3600

415 ```415 ```

416 416 

417 Create il servizio. Il circuito di distribuzione del deployment fa rotolare una distribuzione le cui attività continuano a fallire, da un'immagine cattiva o una configurazione non avviabile, indietro allo stato stabile precedente al posto di rilanciare attività fallite per sempre:417 Crea il servizio. Il circuit breaker del deploy riporta all'ultimo stato stabile un deploy le cui attività continuano a fallire, a causa di un'immagine difettosa o di una configurazione che non si avvia, anziché rilanciare all'infinito attività che falliscono:

418 418 

419 ```bash theme={null}419 ```bash theme={null}

420 aws ecs create-service --cluster claude-gateway --service-name claude-gateway \420 aws ecs create-service --cluster claude-gateway --service-name claude-gateway \


425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"

426 ```426 ```

427 427 

428 Il periodo di grazia di 60 secondi dà a un'attività fredda il tempo di estrarre l'immagine, connettersi allo store e rispondere al suo primo controllo di stato prima che ECS inizi a contare i fallimenti rispetto alla distribuzione. Il controllo di stato del gruppo di destinazione su `GET /readyz` verifica che lo store sia raggiungibile, quindi un'attività che non può raggiungere Postgres non entra mai in rotazione. Per mantenere le attività che passano il controllo attraverso una breve interruzione del database come un failover RDS, impostate `store.readiness_grace_seconds` come descritto in [Comportamento di interruzione](/docs/it/claude-apps-gateway-deploy#outage-behavior), che copre anche l'alternativa `/healthz`.428 Il periodo di tolleranza di 60 secondi dà a un'attività avviata a freddo il tempo di scaricare l'immagine, connettersi allo store e rispondere al primo controllo di stato prima che ECS inizi a contare i fallimenti a carico del deploy.

429 429 

430 Le attività vengono eseguite in subnet private senza IP pubblico, quindi tutto l'egresso (verso Bedrock, il vostro IdP, Secrets Manager, ECR e CloudWatch Logs) passa attraverso il gateway NAT. Per mantenere il traffico Bedrock fuori dal percorso pubblico, create un endpoint VPC dell'interfaccia `bedrock-runtime` e puntate l'`base_url` dell'upstream ad esso, come mostrato nel [riferimento upstream Bedrock](/docs/it/claude-apps-gateway-config#amazon-bedrock); l'IdP ha ancora bisogno di uscita a Internet.430 Il controllo di stato del gruppo di destinazione su `GET /readyz` verifica che lo store sia raggiungibile, quindi un'attività che non riesce a raggiungere Postgres non entra mai in rotazione. Per far sì che le attività continuino a superare il controllo durante una breve interruzione del database, come un failover RDS, imposta `store.readiness_grace_seconds` come descritto in [Comportamento in caso di interruzione](/docs/it/claude-apps-gateway-deploy#outage-behavior), che tratta anche l'alternativa `/healthz`.

431 431 

432 Finite dando agli sviluppatori un nome host risolvibile privatamente: in una zona ospitata privata Route 53, alias il nome DNS interno del gateway all'ALB, e impostate `listen.public_url` a quel nome host. Il nome `*.elb.amazonaws.com` dell'ALB stesso si risolve in indirizzi privati su un ALB interno, ma non può portare il vostro certificato ACM, quindi utilizzate il vostro nome.432 Le attività vengono eseguite in subnet private senza IP pubblico, quindi tutto il traffico in uscita (verso Bedrock, il tuo IdP, Secrets Manager, ECR e CloudWatch Logs) passa attraverso il gateway NAT. Per tenere il traffico Bedrock fuori dal percorso pubblico, crea un endpoint VPC di interfaccia `bedrock-runtime` e punta il `base_url` dell'upstream a esso, come mostrato nel [riferimento upstream Bedrock](/docs/it/claude-apps-gateway-config#amazon-bedrock); l'IdP ha comunque bisogno di uscita verso Internet.

433 433 

434 Aggiornate l'URI di reindirizzamento autorizzato del client OAuth a `<public_url>/oauth/callback` prima del primo accesso. Dopo aver cambiato `public_url`, ricompilate e spingete l'immagine sotto un nuovo tag, registrate una nuova revisione della definizione di attività e ridistribuite. Su ECS l'impostazione vive nel `gateway.yaml` incorporato dell'immagine, e il gateway costruisce la sua origine pubblica solo da quell'impostazione, ignorando `X-Forwarded-Host` e `X-Forwarded-Proto`. `X-Forwarded-For` è onorato per gli IP dei client solo quando `listen.trusted_proxies` è impostato.434 Per finire, fornisci agli sviluppatori un nome host risolvibile privatamente: in una zona ospitata privata di Route 53, crea un alias dal nome DNS interno del gateway all'ALB e imposta `listen.public_url` su quel nome host. Il nome `*.elb.amazonaws.com` dell'ALB si risolve in indirizzi privati su un ALB interno, ma non può usare il tuo certificato ACM, quindi usa un nome tuo.

435 

436 Aggiorna l'URI di reindirizzamento autorizzato del client OAuth a `<public_url>/oauth/callback` prima del primo accesso. Dopo aver modificato `public_url`, esegui di nuovo la build e il push dell'immagine con un nuovo tag, registra una nuova revisione della definizione di attività ed esegui di nuovo il deploy. Su ECS l'impostazione si trova nel `gateway.yaml` incorporato nell'immagine, e il gateway costruisce la propria origine pubblica solo da quell'impostazione, ignorando `X-Forwarded-Host` e `X-Forwarded-Proto`. `X-Forwarded-For` viene considerato per gli IP dei client solo quando `listen.trusted_proxies` è impostato.

435 </Tab>437 </Tab>

436 438 

437 <Tab title="EKS">439 <Tab title="EKS">

438 Questo percorso ha bisogno di `kubectl` e `eksctl` installati localmente, e di un cluster EKS esistente con un provider OIDC IAM e AWS Load Balancer Controller installato. Il cluster deve essere su `$VPC_ID` in modo che i pod possano raggiungere l'endpoint privato RDS, e il gruppo di sicurezza `claude-gateway-db` deve ammettere il gruppo di sicurezza del pod o del nodo del cluster al posto di `$GW_SG`.440 Questo percorso richiede `kubectl` ed `eksctl` installati localmente e un cluster EKS esistente con un provider OIDC IAM e AWS Load Balancer Controller installato. Il cluster deve trovarsi su `$VPC_ID` affinché i pod possano raggiungere l'endpoint privato RDS, e il gruppo di sicurezza `claude-gateway-db` deve ammettere il gruppo di sicurezza dei pod o dei nodi del cluster al posto di `$GW_SG`.

439 441 

440 Su EKS il gateway ottiene le sue credenziali Bedrock tramite IRSA piuttosto che i ruoli ECS. La politica di fiducia `ecs-tasks.amazonaws.com` dal passaggio IAM non si applica qui; IRSA ha bisogno di un ruolo la cui politica di fiducia si federi sul provider OIDC del cluster, scoped a `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` crea quel ruolo, allega le politiche e annota l'account di servizio Kubernetes con l'ARN del ruolo in un passaggio. Trasformate i due documenti della politica dal passaggio IAM in politiche gestite che può allegare:442 Su EKS il gateway ottiene le credenziali Bedrock tramite IRSA anziché tramite i ruoli ECS. La policy di attendibilità `ecs-tasks.amazonaws.com` del passaggio IAM non si applica qui; IRSA ha bisogno di un ruolo la cui policy di attendibilità sia federata sul provider OIDC del cluster, limitata a `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` crea quel ruolo, collega le policy e annota l'account di servizio Kubernetes con l'ARN del ruolo in un unico passaggio. Trasforma i due documenti di policy del passaggio IAM in policy gestite che il comando può collegare:

441 443 

442 ```bash theme={null}444 ```bash theme={null}

443 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \445 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \


453 --approve455 --approve

454 ```456 ```

455 457 

456 La politica dei segreti è necessaria solo quando i pod leggono Secrets Manager stessi, come fa il provider AWS del driver CSI Secrets Store utilizzando l'account di servizio del pod di montaggio; eliminatela se create i Kubernetes Secrets in un altro modo. Il provider ha bisogno di entrambe le azioni della politica: chiama `DescribeSecret` quando riconcilia i segreti ruotati, quindi una concessione `GetSecretValue`-only monta sulla prima distribuzione ma smette di raccogliere rotazioni.458 La policy dei segreti è necessaria solo quando i pod leggono direttamente Secrets Manager, come fa il provider AWS del driver CSI Secrets Store usando l'account di servizio del pod che esegue il montaggio; rimuovila se crei i Kubernetes Secrets in un altro modo. Il provider ha bisogno di entrambe le azioni della policy: chiama `DescribeSecret` quando riconcilia i segreti ruotati, quindi una concessione limitata a `GetSecretValue` esegue il montaggio al primo deploy ma smette di recepire le rotazioni.

457 459 

458 Distribuite il gateway come Deployment standard più un Service e un Ingress, come descritto in [Distribuzione Kubernetes](/docs/it/claude-apps-gateway-deploy#kubernetes), con:460 Esegui il deploy del gateway come Deployment standard più un Service e un Ingress, come descritto in [Deploy su Kubernetes](/docs/it/claude-apps-gateway-deploy#kubernetes), con:

459 461 

460 * `serviceAccountName: gateway`462 * `serviceAccountName: gateway`

461 * `gateway.yaml` montato da una ConfigMap e i segreti montati a `/secrets`463 * `gateway.yaml` montato da una ConfigMap e i segreti montati in `/secrets`

462 * il probe di prontezza puntato a `GET /readyz`464 * il readiness probe puntato a `GET /readyz`

463 465 

464 Per il front end, un Ingress gestito da AWS Load Balancer Controller esegue il provisioning dell'ALB interno. Annotatelo con:466 Per il front end, un Ingress gestito da AWS Load Balancer Controller esegue il provisioning dell'ALB interno. Annotalo con:

465 467 

466 * `alb.ingress.kubernetes.io/scheme: internal` e `alb.ingress.kubernetes.io/target-type: ip`468 * `alb.ingress.kubernetes.io/scheme: internal` e `alb.ingress.kubernetes.io/target-type: ip`

467 * `alb.ingress.kubernetes.io/ip-address-type: ipv4`, in modo che nessun record AAAA di intervallo pubblico venga pubblicato per il controllo della rete privata `/login` [private-network check](/docs/it/claude-apps-gateway#prerequisites) da rifiutare469 * `alb.ingress.kubernetes.io/ip-address-type: ipv4`, in modo che non vengano pubblicati record AAAA di intervallo pubblico che il [controllo della rete privata](/docs/it/claude-apps-gateway#prerequisites) di `/login` rifiuterebbe

468 * `alb.ingress.kubernetes.io/inbound-cidrs: <your-corporate-cidr>`, in modo che il gruppo di sicurezza gestito dal controller ammetta solo la vostra rete aziendale al posto del suo default `0.0.0.0/0`470 * `alb.ingress.kubernetes.io/inbound-cidrs: <your-corporate-cidr>`, in modo che il gruppo di sicurezza frontend gestito dal controller ammetta solo la tua rete aziendale al posto del suo valore predefinito `0.0.0.0/0`

469 * `alb.ingress.kubernetes.io/certificate-arn` con il certificato ACM471 * `alb.ingress.kubernetes.io/certificate-arn` con il certificato ACM

470 * `alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS13-1-2-2021-06`, in modo che il listener non ricada nella politica predefinita legacy che accetta TLS 1.0 e 1.1472 * `alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS13-1-2-2021-06`, in modo che il listener non ricada sulla policy predefinita legacy che accetta TLS 1.0 e 1.1

471 * `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, un margine sopra il keepalive di streaming del gateway; consultate [Troubleshooting](#troubleshooting)473 * `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, un margine rispetto al keepalive di streaming del gateway; consulta [Risoluzione dei problemi](#troubleshooting)

472 474 

473 Con IRSA, l'AWS SDK legge un token dell'account di servizio proiettato e lo scambia con AWS STS, quindi il pod non ha mai bisogno del servizio di metadati dell'istanza EC2; una NetworkPolicy di egresso può bloccare `169.254.169.254` per i pod del gateway. Il problema del limite di hop del nodo in [Troubleshooting](#troubleshooting) sottostante si applica solo ai cluster che saltano IRSA e si affidano ai ruoli dell'istanza del nodo.475 Con IRSA, l'AWS SDK legge un token proiettato dell'account di servizio e lo scambia con AWS STS, quindi il pod non ha mai bisogno del servizio di metadati dell'istanza EC2; una NetworkPolicy in uscita può bloccare `169.254.169.254` per i pod del gateway. Il problema del limite di hop dei nodi descritto in [Risoluzione dei problemi](#troubleshooting) più avanti riguarda solo i cluster che non usano IRSA e si affidano ai ruoli delle istanze dei nodi.

474 </Tab>476 </Tab>

475 </Tabs>477 </Tabs>

476 </Step>478 </Step>

477 479 

478 <Step title="Spingere l'URL del gateway alle macchine degli sviluppatori">480 <Step title="Distribuire l'URL del gateway ai computer degli sviluppatori">

479 Il gateway è ora in esecuzione, ma gli sviluppatori non possono raggiungerlo da `/login` fino a quando l'URL del gateway non è sulle loro macchine. Impostate `forceLoginMethod` e `forceLoginGatewayUrl` nel [file delle impostazioni gestite](/docs/it/claude-apps-gateway#set-the-gateway-url) che distribuite a ogni dispositivo tramite MDM. Non c'è opzione di gateway nel selettore di accesso per uno sviluppatore da selezionare manualmente.481 Il gateway è ora in esecuzione, ma gli sviluppatori non possono raggiungerlo da `/login` finché l'URL del gateway non è presente sui loro computer. Imposta `forceLoginMethod` e `forceLoginGatewayUrl` nel [file delle impostazioni gestite](/docs/it/claude-apps-gateway#set-the-gateway-url) che distribuisci su ogni dispositivo tramite MDM. Nel selettore di accesso non esiste un'opzione gateway che uno sviluppatore possa selezionare manualmente.

480 </Step>482 </Step>

481</Steps>483</Steps>

482 484 

Details

442`claude --cloud` e `claude --teleport` richiedono l'accesso con un account claude.ai. Se ti autentichi con una chiave API, o i dettagli dell'account archiviati sono obsoleti, vedrai uno di questi:442`claude --cloud` e `claude --teleport` richiedono l'accesso con un account claude.ai. Se ti autentichi con una chiave API, o i dettagli dell'account archiviati sono obsoleti, vedrai uno di questi:

443 443 

444* `Unable to get organization UUID`444* `Unable to get organization UUID`

445* Un messaggio che indica che l'autenticazione con chiave API non è sufficiente445* ``Cloud sessions need a claude.ai sign-in. Run `claude auth login` (or /login in a local session), then try again.``

446* `Error loading Claude Code sessions` nel selettore di sessione, quando esegui `claude --teleport` senza un ID di sessione446* `Error loading Claude Code sessions` nel selettore di sessione, quando esegui `claude --teleport` senza un ID di sessione

447 447 

448Esegui `/login` per accedere con il tuo account claude.ai, quindi riprova il comando. Se invece l'errore nomina il tuo provider, vedi la [tabella degli errori](#errors-when-sending-to-a-cloud-session): le sessioni cloud non sono disponibili tramite provider di terze parti.448Esegui [`claude auth login`](/docs/it/cli-reference#cli-commands) nella tua shell per accedere con il tuo account claude.ai, quindi riprova il comando. All'interno di una sessione in esecuzione, `/login` fa la stessa cosa. Se invece l'errore nomina il tuo provider, vedi la [tabella degli errori](#errors-when-sending-to-a-cloud-session): le sessioni cloud non sono disponibili tramite provider di terze parti.

449 

450Dalla v2.1.274 alla v2.1.289, il messaggio di accesso era `Claude Code cloud sessions require authentication with a Claude.ai account. API key authentication is not sufficient. Please run /login to authenticate, or check your authentication status with /status.`

449 451 

450<h3 id="remote-control-session-expired-or-access-denied">452<h3 id="remote-control-session-expired-or-access-denied">

451 Sessione Remote Control scaduta o accesso negato453 Sessione Remote Control scaduta o accesso negato

Details

34 oneLiner: 'Project instructions Claude reads every session',34 oneLiner: 'Project instructions Claude reads every session',

35 when: 'Loaded into context at the start of every session',35 when: 'Loaded into context at the start of every session',

36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',

37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/docs/en/skills">skill</A> or a path-scoped <A href="/docs/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>, <>If your repo already has an <C>AGENTS.md</C> for other coding agents, Claude Code <A href="/docs/en/memory#agents-md">can read that</A> on its own or alongside CLAUDE.md</>],37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/docs/en/skills">skill</A> or a path-scoped <A href="/docs/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>, <>If your repo already has an <C>AGENTS.md</C> for other coding agents, Claude Code <A href="/docs/en/memory#agents-md">can read that</A> in place of a <C>CLAUDE.md</C></>],

38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',

39 example: `# Project conventions39 example: `# Project conventions

40 40 


1434 1434 

1435Su Windows, `~/.claude` si risolve in `%USERPROFILE%\.claude`. Se imposti [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars), ogni percorso `~/.claude` in questa pagina si trova invece in quella directory.1435Su Windows, `~/.claude` si risolve in `%USERPROFILE%\.claude`. Se imposti [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars), ogni percorso `~/.claude` in questa pagina si trova invece in quella directory.

1436 1436 

1437La maggior parte degli utenti modifica solo `CLAUDE.md` e `settings.json`. Se il tuo repository ha già un `AGENTS.md` per altri agenti di codifica, Claude Code [può leggerlo](/docs/it/memory#agents-md) da solo o insieme a `CLAUDE.md`. Il resto della directory è facoltativo: aggiungi skills, rules o subagents secondo le tue necessità.1437La maggior parte degli utenti modifica solo `CLAUDE.md` e `settings.json`. Se il tuo repository ha già un `AGENTS.md` per altri agenti di codifica, Claude Code [può leggerlo](/docs/it/memory#agents-md) al posto di un `CLAUDE.md`. Il resto della directory è facoltativo: aggiungi skill, regole o subagent secondo le tue necessità.

1438 1438 

1439<h2 id="explore-the-directory">1439<h2 id="explore-the-directory">

1440 Esplora la directory1440 Esplora la directory


1454| - | - | - |1454| - | - | - |

1455| `managed-settings.json` | A livello di sistema, varia in base al sistema operativo | Impostazioni applicate dall'azienda che non puoi ignorare, a parte [eccezioni ristrette](/docs/it/settings#security-keys-where-the-stricter-value-applies). Vedi [dove salvare il file](/docs/it/managed-settings#deploy-a-managed-settings-file) e [quale fonte gestita Claude Code utilizza](/docs/it/managed-settings#precedence-within-the-managed-tier). |1455| `managed-settings.json` | A livello di sistema, varia in base al sistema operativo | Impostazioni applicate dall'azienda che non puoi ignorare, a parte [eccezioni ristrette](/docs/it/settings#security-keys-where-the-stricter-value-applies). Vedi [dove salvare il file](/docs/it/managed-settings#deploy-a-managed-settings-file) e [quale fonte gestita Claude Code utilizza](/docs/it/managed-settings#precedence-within-the-managed-tier). |

1456| `CLAUDE.local.md` | Radice del progetto | Le tue preferenze private per questo progetto, caricate insieme a CLAUDE.md. Crealo manualmente e aggiungilo a `.gitignore`. |1456| `CLAUDE.local.md` | Radice del progetto | Le tue preferenze private per questo progetto, caricate insieme a CLAUDE.md. Crealo manualmente e aggiungilo a `.gitignore`. |

1457| `AGENTS.md` | Radice del progetto, `.claude/`, o qualsiasi directory | Istruzioni di progetto che scrivi per gli agenti di codifica AI. Claude Code può [caricarlo](/docs/it/memory#agents-md) autonomamente o insieme a `CLAUDE.md`. |1457| `AGENTS.md` | Radice del progetto, `.claude/`, o qualsiasi directory | Istruzioni di progetto che scrivi per gli agenti di codifica AI. Claude Code può [caricarlo](/docs/it/memory#agents-md) al posto di un `CLAUDE.md`. |

1458| Plugin installati | `~/.claude/plugins` | Marketplace clonati, versioni plugin installate, il record di installazione `installed_plugins.json` e dati per plugin, gestiti dai comandi `claude plugin`. I plugin [sincronizzati dal tuo account claude.ai](/docs/it/plugins/loading#synced-plugins) vengono scaricati in `~/.claude/plugins/synced/`. Per un plugin installato da un marketplace con [fonte `command`](/docs/it/plugins/marketplace-reference#command-plugin-source) in modalità link, Claude Code memorizza i link qui invece di una copia, e i file del plugin rimangono nella directory che il comando stampa. Una fonte `command` richiede Claude Code v2.1.229 o successivo. Anche un plugin elencato per percorso relativo in un marketplace che hai aggiunto da un percorso locale [viene caricato sul posto](/docs/it/plugins/loading#find-plugins-on-disk) dalla sua directory di origine anziché da una copia nella cache. Vedi [plugin caching](/docs/it/plugins/loading#find-plugins-on-disk) per come le versioni orfane vengono pulite. |1458| Plugin installati | `~/.claude/plugins` | Marketplace clonati, versioni plugin installate, il record di installazione `installed_plugins.json` e dati per plugin, gestiti dai comandi `claude plugin`. I plugin [sincronizzati dal tuo account claude.ai](/docs/it/plugins/loading#synced-plugins) vengono scaricati in `~/.claude/plugins/synced/`. Per un plugin installato da un marketplace con [fonte `command`](/docs/it/plugins/marketplace-reference#command-plugin-source) in modalità link, Claude Code memorizza i link qui invece di una copia, e i file del plugin rimangono nella directory che il comando stampa. Una fonte `command` richiede Claude Code v2.1.229 o successivo. Anche un plugin elencato per percorso relativo in un marketplace che hai aggiunto da un percorso locale [viene caricato sul posto](/docs/it/plugins/loading#find-plugins-on-disk) dalla sua directory di origine anziché da una copia nella cache. Vedi [plugin caching](/docs/it/plugins/loading#find-plugins-on-disk) per come le versioni orfane vengono pulite. |

1459 1459 

1460`~/.claude` contiene anche dati che Claude Code scrive mentre lavori: trascrizioni, cronologia dei prompt, snapshot dei file, cache e log. Vedi [dati dell'applicazione](#application-data) di seguito.1460`~/.claude` contiene anche dati che Claude Code scrive mentre lavori: trascrizioni, cronologia dei prompt, snapshot dei file, cache e log. Vedi [dati dell'applicazione](#application-data) di seguito.

Details

31| `claude attach <id\|name>` | Collegati a una [sessione in background](/docs/it/agent-view#manage-sessions-from-the-shell) in questo terminale. Passare parte del nome di una sessione in esecuzione al posto dell'ID richiede Claude Code v2.1.290 o successivo | `claude attach 7c5dcf5d` |31| `claude attach <id\|name>` | Collegati a una [sessione in background](/docs/it/agent-view#manage-sessions-from-the-shell) in questo terminale. Passare parte del nome di una sessione in esecuzione al posto dell'ID richiede Claude Code v2.1.290 o successivo | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | Stampa le regole del classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) integrate come JSON. Usa `claude auto-mode config` per visualizzare la tua configurazione effettiva con le impostazioni applicate. `--label <prefix>` stampa solo le regole la cui etichetta inizia con quel prefisso, con corrispondenza case-insensitive. Richiede Claude Code v2.1.208 o successivo | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | Stampa le regole del classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) integrate come JSON. Usa `claude auto-mode config` per visualizzare la tua configurazione effettiva con le impostazioni applicate. `--label <prefix>` stampa solo le regole la cui etichetta inizia con quel prefisso, con corrispondenza case-insensitive. Richiede Claude Code v2.1.208 o successivo | `claude auto-mode defaults --label 'Git Destructive'` |

33| `claude auto-mode reset` | Ripristina la configurazione predefinita della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) rimuovendo la sezione `autoMode` dal file di impostazioni dell'utente. Richiede conferma prima di scrivere; passa `-y`/`--yes` per saltare il prompt. Le regole dalle [impostazioni gestite](/docs/it/server-managed-settings) o dal flag `--settings` si applicano comunque. Richiede Claude Code v2.1.212 o successivo. Vedi [Ispeziona i valori predefiniti e la tua configurazione effettiva](/docs/it/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |33| `claude auto-mode reset` | Ripristina la configurazione predefinita della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) rimuovendo la sezione `autoMode` dal file di impostazioni dell'utente. Richiede conferma prima di scrivere; passa `-y`/`--yes` per saltare il prompt. Le regole dalle [impostazioni gestite](/docs/it/server-managed-settings) o dal flag `--settings` si applicano comunque. Richiede Claude Code v2.1.212 o successivo. Vedi [Ispeziona i valori predefiniti e la tua configurazione effettiva](/docs/it/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |

34| `claude daemon logs` | Segui il file di log del [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background, `~/.claude/daemon.log`, stampando le nuove righe man mano che arrivano finché non premi `Ctrl+C` | `claude daemon logs` |

35| `claude daemon run` | Esegui il [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background in primo piano in questo terminale, stampando il suo log | `claude daemon run` |

34| `claude daemon status` | Stampa lo stato del [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background, versione, directory socket e numero di worker per la diagnostica. Esce con 1 se il supervisore non è in esecuzione | `claude daemon status` |36| `claude daemon status` | Stampa lo stato del [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background, versione, directory socket e numero di worker per la diagnostica. Esce con 1 se il supervisore non è in esecuzione | `claude daemon status` |

35| `claude daemon stop --any` | Interrompi il [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background e le sessioni che ospita. Passa `--keep-workers` per lasciare le sessioni in background in esecuzione in modo che il supervisore successivo si riconnetta ad esse. `--any` conferma l'interruzione di un supervisore su richiesta, che è l'impostazione predefinita. Usa questo per recuperare da un [supervisore che non risponde](/docs/it/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |37| `claude daemon stop --any` | Interrompi il [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background e le sessioni che ospita. Passa `--keep-workers` per lasciare le sessioni in background in esecuzione in modo che il supervisore successivo si riconnetta ad esse. `--any` conferma l'interruzione di un supervisore su richiesta, che è l'impostazione predefinita. Usa questo per recuperare da un [supervisore che non risponde](/docs/it/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |

36| `claude doctor` | Stampa diagnostica di installazione e impostazioni di sola lettura dal terminale senza avviare una sessione, inclusa la salute dell'installazione, errori di convalida del file di impostazioni e idoneità a Remote Control. Per il controllo di configurazione in-sessione che può anche applicare correzioni, esegui [`/doctor`](/docs/it/commands#all-commands) | `claude doctor` |38| `claude doctor` | Stampa diagnostica di installazione e impostazioni di sola lettura dal terminale senza avviare una sessione, inclusa la salute dell'installazione, errori di convalida del file di impostazioni e idoneità a Remote Control. Per il controllo di configurazione in-sessione che può anche applicare correzioni, esegui [`/doctor`](/docs/it/commands#all-commands) | `claude doctor` |

Details

1586 1586 

1587La sessione illustra un flusso realistico con conteggi di token rappresentativi:1587La sessione illustra un flusso realistico con conteggi di token rappresentativi:

1588 1588 

1589* **Prima di digitare qualcosa**: CLAUDE.md, memoria automatica, nomi degli strumenti MCP e descrizioni delle skill si caricano tutti nel contesto. I file [AGENTS.md](/docs/it/memory#agents-md) possono caricarsi anche loro, da soli o insieme a CLAUDE.md. La tua configurazione personale potrebbe aggiungere altro qui, come uno [stile di output](/docs/it/output-styles) o testo da [`--append-system-prompt`](/docs/it/cli-reference).1589* **Prima di digitare qualcosa**: CLAUDE.md, memoria automatica, nomi degli strumenti MCP e descrizioni delle skill si caricano tutti nel contesto. I file [AGENTS.md](/docs/it/memory#agents-md) possono caricarsi al posto di CLAUDE.md. La tua configurazione personale potrebbe aggiungere altro qui, come uno [stile di output](/docs/it/output-styles) o testo da [`--append-system-prompt`](/docs/it/cli-reference).

1590* **Mentre Claude lavora**: ogni lettura di file si aggiunge al contesto, le [regole con ambito di percorso](/docs/it/memory#path-specific-rules) si caricano automaticamente insieme ai file corrispondenti e un [hook PostToolUse](/docs/it/hooks-guide) si attiva dopo ogni modifica.1590* **Mentre Claude lavora**: ogni lettura di file si aggiunge al contesto, le [regole con ambito di percorso](/docs/it/memory#path-specific-rules) si caricano automaticamente insieme ai file corrispondenti e un [hook PostToolUse](/docs/it/hooks-guide) si attiva dopo ogni modifica.

1591* **Il prompt di follow-up**: un [subagent](/docs/it/sub-agents) gestisce la ricerca nella sua propria finestra di contesto separata, quindi le letture di file di grandi dimensioni rimangono fuori dalla tua. Solo il riepilogo e un piccolo trailer di metadati tornano indietro.1591* **Il prompt di follow-up**: un [subagent](/docs/it/sub-agents) gestisce la ricerca nella sua propria finestra di contesto separata, quindi le letture di file di grandi dimensioni rimangono fuori dalla tua. Solo il riepilogo e un piccolo trailer di metadati tornano indietro.

1592* **Alla fine della procedura dettagliata**: esegui `/compact`, che sostituisce la conversazione con un riepilogo strutturato. La maggior parte del contenuto di avvio si ricarica automaticamente; la tabella sottostante mostra cosa accade a ogni meccanismo.1592* **Alla fine della procedura dettagliata**: esegui `/compact`, che sostituisce la conversazione con un riepilogo strutturato. La maggior parte del contenuto di avvio si ricarica automaticamente; la tabella sottostante mostra cosa accade a ogni meccanismo.

desktop.md +1 −1

Details

1092Per vedere quale versione dell'app desktop stai eseguendo:1092Per vedere quale versione dell'app desktop stai eseguendo:

1093 1093 

1094* **macOS**: fai clic su **Claude** nella barra dei menu, quindi **About Claude**1094* **macOS**: fai clic su **Claude** nella barra dei menu, quindi **About Claude**

1095* **Windows**: fai clic su **Help**, quindi **About**1095* **Windows**: fai clic su **Help**, quindi **About Claude**

1096 1096 

1097Fai clic sul numero di versione per copiarlo negli appunti.1097Fai clic sul numero di versione per copiarlo negli appunti.

1098 1098 

Details

92* Salvare uno screenshot con **Cmd+S** o una registrazione dello schermo con **Cmd+R**, utilizzando i pulsanti di acquisizione del riquadro o le scorciatoie da tastiera; i file vengono salvati sul tuo Desktop92* Salvare uno screenshot con **Cmd+S** o una registrazione dello schermo con **Cmd+R**, utilizzando i pulsanti di acquisizione del riquadro o le scorciatoie da tastiera; i file vengono salvati sul tuo Desktop

93* Interrompere lo streaming di un dispositivo senza spegnerlo facendo clic su **Detach simulator**, che riporta il riquadro allo stato **Attach simulator**93* Interrompere lo streaming di un dispositivo senza spegnerlo facendo clic su **Detach simulator**, che riporta il riquadro allo stato **Attach simulator**

94 94 

95Per regolare il flusso video dal simulatore, apri il menu **Display** del riquadro. Abbassa **Frame rate** o **Resolution** se il riquadro affatica il tuo Mac. Entrambe le impostazioni cambiano il modo in cui il riquadro visualizza il dispositivo, non il modo in cui l'app viene eseguita.95Se il riquadro mostra un menu **Display**, usalo per regolare il flusso video dal simulatore. Abbassa **Frame rate** o **Resolution** se il riquadro affatica il tuo Mac. Entrambe le impostazioni cambiano il modo in cui il riquadro visualizza il dispositivo, non il modo in cui l'app viene eseguita.

96 96 

97Tu e Claude controllate lo stesso dispositivo, quindi i tuoi tocchi cambiano lo stato dell'app che Claude vede. Per fare in modo che Claude verifichi uno schermo specifico, navigaci toccando, quindi chiedi. Mentre Claude controlla il dispositivo, il riquadro mostra un badge **Claude is using this device** sopra lo schermo; aspetta che il badge scompaia prima di toccare, in modo che il risultato rifletta l'app piuttosto che il tuo input.97Tu e Claude controllate lo stesso dispositivo, quindi i tuoi tocchi cambiano lo stato dell'app che Claude vede. Per fare in modo che Claude verifichi uno schermo specifico, navigaci toccando, quindi chiedi. Mentre Claude controlla il dispositivo, il riquadro mostra un badge **Claude is using this device** sopra lo schermo; aspetta che il badge scompaia prima di toccare, in modo che il risultato rifletta l'app piuttosto che il tuo input.

98 98 

env-vars.md +1 −0

Details

354| `CLAUDE_CODE_PERFORCE_MODE` | Imposta su `1` per abilitare la protezione in scrittura compatibile con Perforce. Quando è impostata, Edit, Write e NotebookEdit falliscono con un suggerimento `p4 edit <file>` se il file di destinazione non ha il bit di scrittura del proprietario, che Perforce rimuove dai file sincronizzati finché `p4 edit` non li apre. Questo impedisce a Claude Code di aggirare il tracciamento delle modifiche di Perforce |354| `CLAUDE_CODE_PERFORCE_MODE` | Imposta su `1` per abilitare la protezione in scrittura compatibile con Perforce. Quando è impostata, Edit, Write e NotebookEdit falliscono con un suggerimento `p4 edit <file>` se il file di destinazione non ha il bit di scrittura del proprietario, che Perforce rimuove dai file sincronizzati finché `p4 edit` non li apre. Questo impedisce a Claude Code di aggirare il tracciamento delle modifiche di Perforce |

355| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sovrascrive la directory radice dei plugin. Nonostante il nome, imposta la directory padre, non la cache stessa: i marketplace e la cache dei plugin si trovano in sottodirectory di questo percorso. Il valore predefinito è `~/.claude/plugins` |355| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sovrascrive la directory radice dei plugin. Nonostante il nome, imposta la directory padre, non la cache stessa: i marketplace e la cache dei plugin si trovano in sottodirectory di questo percorso. Il valore predefinito è `~/.claude/plugins` |

356| `CLAUDE_CODE_PLUGIN_DIRS` | Directory dei plugin da caricare per la sessione, ciascuna caricata come la caricherebbe un flag [`--plugin-dir`](/docs/it/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Separa più percorsi con `:` su Unix o `;` su Windows. Indica ogni percorso come percorso assoluto o fallo iniziare con `~`, perché Claude Code salta i percorsi relativi. Richiede Claude Code v2.1.280 o successiva. Consulta [Caricare un plugin per una sessione](/docs/it/plugins/create#load-a-directory-or-archive-for-one-session) |356| `CLAUDE_CODE_PLUGIN_DIRS` | Directory dei plugin da caricare per la sessione, ciascuna caricata come la caricherebbe un flag [`--plugin-dir`](/docs/it/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Separa più percorsi con `:` su Unix o `;` su Windows. Indica ogni percorso come percorso assoluto o fallo iniziare con `~`, perché Claude Code salta i percorsi relativi. Richiede Claude Code v2.1.280 o successiva. Consulta [Caricare un plugin per una sessione](/docs/it/plugins/create#load-a-directory-or-archive-for-one-session) |

357| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Controlla se Claude Code ricarica un [mod](/docs/it/plugins/mods/overview) quando i file del mod cambiano. Il ricaricamento si applica a un mod che carichi da una directory con `--plugin-dir` ed è attivo per impostazione predefinita nelle sessioni interattive. Imposta su `1` per attivarlo anche nelle sessioni non interattive, oppure su `0` per disattivarlo in ogni sessione. Richiede Claude Code v2.1.287 o successiva. Consulta [impostazioni e variabili d'ambiente dei mod](/docs/it/plugins/mods/reference#settings-and-environment-variables) |

357| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Timeout in millisecondi per la clonazione o l'aggiornamento di un marketplace di plugin (predefinito: 120000). Aumenta questo valore per repository di grandi dimensioni o connessioni di rete lente. Consulta [Git clone timed out](/docs/it/plugins/troubleshooting#git-clone-timed-out-after-120s) |358| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Timeout in millisecondi per la clonazione o l'aggiornamento di un marketplace di plugin (predefinito: 120000). Aumenta questo valore per repository di grandi dimensioni o connessioni di rete lente. Consulta [Git clone timed out](/docs/it/plugins/troubleshooting#git-clone-timed-out-after-120s) |

358| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Imposta su `1` per saltare il tentativo di nuova clonazione e continuare a usare il checkout esistente del marketplace quando un aggiornamento del marketplace non riesce a raggiungere il remoto o ad autenticarsi. Utile in ambienti offline o air-gapped in cui una nuova clonazione fallirebbe allo stesso modo. Consulta [Gli aggiornamenti del marketplace non riescono negli ambienti offline](/docs/it/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |359| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Imposta su `1` per saltare il tentativo di nuova clonazione e continuare a usare il checkout esistente del marketplace quando un aggiornamento del marketplace non riesce a raggiungere il remoto o ad autenticarsi. Utile in ambienti offline o air-gapped in cui una nuova clonazione fallirebbe allo stesso modo. Consulta [Gli aggiornamenti del marketplace non riescono negli ambienti offline](/docs/it/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |

359| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Imposta su `1` per clonare le sorgenti GitHub in forma abbreviata `owner/repo` tramite HTTPS invece che SSH. Si applica all'installazione e all'aggiornamento dei plugin, e a `/plugin marketplace add` e `update`. Utile nei runner CI, nei container o in qualsiasi ambiente senza una chiave SSH configurata per `github.com` |360| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Imposta su `1` per clonare le sorgenti GitHub in forma abbreviata `owner/repo` tramite HTTPS invece che SSH. Si applica all'installazione e all'aggiornamento dei plugin, e a `/plugin marketplace add` e `update`. Utile nei runner CI, nei container o in qualsiasi ambiente senza una chiave SSH configurata per `github.com` |

errors.md +2 −3

Details

197| `Cloud sessions cannot be created from a --restricted session` | [Errori della riga di comando](#cloud-sessions-cannot-be-created-from-a-restricted-session) |197| `Cloud sessions cannot be created from a --restricted session` | [Errori della riga di comando](#cloud-sessions-cannot-be-created-from-a-restricted-session) |

198| `Cloud sessions are disabled by your organization's policy` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |198| `Cloud sessions are disabled by your organization's policy` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |

199| `Couldn't verify your organization's policy for cloud sessions` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |199| `Couldn't verify your organization's policy for cloud sessions` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |

200| `Cloud sessions need a claude.ai sign-in` | [Unable to get organization UUID](/docs/it/claude-code-on-the-web#unable-to-get-organization-uuid) |

200| `Error: --json-schema is not a valid JSON Schema` | [Errori della riga di comando](#the-json-schema-value-is-not-a-valid-json-schema) |201| `Error: --json-schema is not a valid JSON Schema` | [Errori della riga di comando](#the-json-schema-value-is-not-a-valid-json-schema) |

201| `Error: Invalid --agents configuration:` | [Errori della riga di comando](#invalid-agents-configuration) |202| `Error: Invalid --agents configuration:` | [Errori della riga di comando](#invalid-agents-configuration) |

202| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Errori della riga di comando](#invalid-agents-configuration) |203| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Errori della riga di comando](#invalid-agents-configuration) |


387* 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`.388* 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`.

388* 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 invia nuovamente la richiesta al massimo una volta, al di fuori del budget di 10 tentativi sopra. 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`.389* 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 invia nuovamente la richiesta al massimo una volta, al di fuori del budget di 10 tentativi sopra. 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`.

389* 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.390* 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.

391* 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.

390* 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).392* 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).

391 * 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.393 * 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.

392* Una richiesta rifiutata perché l'input più `max_tokens` supera il limite di contesto. Inviarla nuovamente invariata fallirebbe allo stesso modo, quindi Claude Code ritenta con un `max_tokens` ridotto, e smette di ritentare e compatta invece in due casi:394* Una richiesta rifiutata perché l'input più `max_tokens` supera il limite di contesto. Inviarla nuovamente invariata fallirebbe allo stesso modo, quindi Claude Code ritenta con un `max_tokens` ridotto, e smette di ritentare e compatta invece in due casi:


405* Una [Amazon Bedrock streaming response with an unexpected content-type](#bedrock-streaming-response-has-an-unexpected-content-type), perché il gateway o il proxy che riscrive la risposta riscriverebbero il tentativo allo stesso modo. Richiede Claude Code v2.1.208 o successivo.407* Una [Amazon Bedrock streaming response with an unexpected content-type](#bedrock-streaming-response-has-an-unexpected-content-type), perché il gateway o il proxy che riscrive la risposta riscriverebbero il tentativo allo stesso modo. Richiede Claude Code v2.1.208 o successivo.

406* Un tentativo non in streaming di una richiesta in streaming non riuscita che ottiene uno stato di successo ma [no Claude API message in the body](#api-returned-an-empty-or-malformed-response). Claude Code termina il turno con quell'errore.408* Un tentativo non in streaming di una richiesta in streaming non riuscita che ottiene uno stato di successo ma [no Claude API message in the body](#api-returned-an-empty-or-malformed-response). Claude Code termina il turno con quell'errore.

407* Una richiesta che il controllo della politica della tua organizzazione ha negato, che emerge come una riga `API Error:` che porta il messaggio di negazione. Gli amministratori della tua organizzazione hanno configurato il controllo con [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks), una funzione Claude Enterprise, e il messaggio termina con le istruzioni che hanno configurato, o per impostazione predefinita ti dice di contattarli. Claude Code non invia nuovamente la richiesta negata allo stesso modello o a un [fallback model](/docs/it/model-config#fallback-model-chains), perché il diniego riguarda il contenuto della richiesta piuttosto che il modello. Prima della v2.1.239, Claude Code poteva inviare nuovamente una richiesta negata, senza streaming o su un fallback model configurato, prima di mostrarti il diniego.409* Una richiesta che il controllo della politica della tua organizzazione ha negato, che emerge come una riga `API Error:` che porta il messaggio di negazione. Gli amministratori della tua organizzazione hanno configurato il controllo con [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks), una funzione Claude Enterprise, e il messaggio termina con le istruzioni che hanno configurato, o per impostazione predefinita ti dice di contattarli. Claude Code non invia nuovamente la richiesta negata allo stesso modello o a un [fallback model](/docs/it/model-config#fallback-model-chains), perché il diniego riguarda il contenuto della richiesta piuttosto che il modello. Prima della v2.1.239, Claude Code poteva inviare nuovamente una richiesta negata, senza streaming o su un fallback model configurato, prima di mostrarti il diniego.

408* Una risposta bloccata dal filtro dei contenuti di output dell'API. Claude Code mostra subito [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) e non ritenta né invia nuovamente quella richiesta.

409 410 

410<h3 id="what-you-see-while-claude-code-retries-or-waits">411<h3 id="what-you-see-while-claude-code-retries-or-waits">

411 Cosa vedi mentre Claude Code ritenta o attende412 Cosa vedi mentre Claude Code ritenta o attende


2905API Error: Output blocked by content filtering policy2906API Error: Output blocked by content filtering policy

2906```2907```

2907 2908 

2908Claude Code mostra l'errore non appena arriva il blocco e termina lì la richiesta. Non riprova la richiesta, non la reinvia senza streaming e non passa a un [modello di fallback](/docs/it/model-config#fallback-model-chains). Prima della v2.1.285, Claude Code poteva reinviare e riprovare una richiesta bloccata, a volte per minuti, prima di mostrarti l'errore.

2909 

2910**Cosa fare:**2909**Cosa fare:**

2911 2910 

2912* Riformula il tuo ultimo messaggio o adotta un approccio diverso2911* Riformula il tuo ultimo messaggio o adotta un approccio diverso

glossary.md +1 −1

Details

130 130 

131Un file markdown di istruzioni persistenti che scrivi per Claude, caricato all'inizio di ogni sessione come messaggio utente dopo il prompt di sistema. Metti qui le convenzioni di progetto, le note sull'architettura e le regole "fai sempre X". CLAUDE.md a livello di radice del progetto sopravvive alla [compaction](#compaction) e viene riletto fresco dal disco in seguito.131Un file markdown di istruzioni persistenti che scrivi per Claude, caricato all'inizio di ogni sessione come messaggio utente dopo il prompt di sistema. Metti qui le convenzioni di progetto, le note sull'architettura e le regole "fai sempre X". CLAUDE.md a livello di radice del progetto sopravvive alla [compaction](#compaction) e viene riletto fresco dal disco in seguito.

132 132 

133Puoi posizionare CLAUDE.md a livello di progetto in `./CLAUDE.md` o `./.claude/CLAUDE.md`, a livello di utente in `~/.claude/CLAUDE.md`, o come [managed policy](#managed-settings) per la tua organizzazione. Tutti i file scoperti vengono concatenati nel contesto piuttosto che sovrascriversi a vicenda, ordinati dall'ambito più ampio al più specifico. Claude Code può anche caricare i file [AGENTS.md](#agents-md) di un progetto, da soli o insieme a CLAUDE.md.133Puoi posizionare CLAUDE.md a livello di progetto in `./CLAUDE.md` o `./.claude/CLAUDE.md`, a livello di utente in `~/.claude/CLAUDE.md`, o come [policy gestita](#managed-settings) per la tua organizzazione. Tutti i file scoperti vengono concatenati nel contesto piuttosto che sovrascriversi a vicenda, ordinati dall'ambito più ampio al più specifico. Claude Code può anche caricare i file [AGENTS.md](#agents-md) di un progetto al posto di CLAUDE.md.

134 134 

135Scopri di più: [CLAUDE.md files](/docs/it/memory#claude-md-files)135Scopri di più: [CLAUDE.md files](/docs/it/memory#claude-md-files)

136 136 

Details

210export VERTEX_REGION_CLAUDE_4_6_SONNET=europe-west1210export VERTEX_REGION_CLAUDE_4_6_SONNET=europe-west1

211```211```

212 212 

213La maggior parte delle versioni del modello ha una variabile `VERTEX_REGION_CLAUDE_*` corrispondente. Consulta il [riferimento delle variabili di ambiente](/docs/it/env-vars) per l'elenco completo. Controlla [Google Cloud's Agent Platform Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) per determinare quali modelli supportano endpoint globali rispetto a quelli solo regionali.213La maggior parte delle versioni del modello ha una variabile `VERTEX_REGION_CLAUDE_*` corrispondente. Consulta il [riferimento delle variabili d'ambiente](/docs/it/env-vars#variables) per l'elenco completo. Controlla [Google Cloud's Agent Platform Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) per determinare quali modelli supportano endpoint globali rispetto a quelli solo regionali.

214 214 

215Se un valore di regione non ha la forma di un nome di regione o posizione, Claude Code lo tratta come non impostato. Ad esempio, Claude Code tratta un valore contenente una barra, un punto o uno spazio come non impostato. Claude Code ritorna a una fonte diversa per ogni variabile:215Se un valore di regione non ha la forma di un nome di regione o posizione, Claude Code lo tratta come non impostato. Ad esempio, Claude Code tratta un valore contenente una barra, un punto o uno spazio come non impostato. Claude Code ritorna a una fonte diversa per ogni variabile:

216 216 


366* Verifica che il modello sia disponibile nella posizione che hai specificato. Alcuni modelli sono offerti solo su posizioni `global` o multi-regione come `eu` e `us`, non in regioni specifiche366* Verifica che il modello sia disponibile nella posizione che hai specificato. Alcuni modelli sono offerti solo su posizioni `global` o multi-regione come `eu` e `us`, non in regioni specifiche

367* Se utilizzi `CLOUD_ML_REGION=global`, controlla che i tuoi modelli supportino endpoint globali in [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) in "Supported features". Per i modelli che non supportano endpoint globali, puoi:367* Se utilizzi `CLOUD_ML_REGION=global`, controlla che i tuoi modelli supportino endpoint globali in [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) in "Supported features". Per i modelli che non supportano endpoint globali, puoi:

368 * Specificare un modello supportato tramite `ANTHROPIC_MODEL` o `ANTHROPIC_DEFAULT_HAIKU_MODEL`, oppure368 * Specificare un modello supportato tramite `ANTHROPIC_MODEL` o `ANTHROPIC_DEFAULT_HAIKU_MODEL`, oppure

369 * Impostare una regione o una posizione multi-regione utilizzando le variabili di ambiente `VERTEX_REGION_<MODEL_NAME>`369 * Impostare una regione o una posizione multi-regione utilizzando la variabile `VERTEX_REGION_CLAUDE_*` del modello, elencata nel [riferimento delle variabili d'ambiente](/docs/it/env-vars#variables)

370 370 

371Se riscontri errori 429:371Se riscontri errori 429:

372 372 

hooks.md +4 −5

Details

63| `DirectoryAdded` | Quando una directory di lavoro viene aggiunta a metà sessione tramite `/add-dir` o la richiesta di controllo SDK `register_repo_root` |63| `DirectoryAdded` | Quando una directory di lavoro viene aggiunta a metà sessione tramite `/add-dir` o la richiesta di controllo SDK `register_repo_root` |

64| `FileChanged` | Quando un file osservato cambia su disco. Il campo `matcher` specifica quali nomi di file osservare |64| `FileChanged` | Quando un file osservato cambia su disco. Il campo `matcher` specifica quali nomi di file osservare |

65| `WorktreeCreate` | Quando un worktree viene creato tramite `--worktree`, `isolation: "worktree"`, o per una sessione in background. Sostituisce il comportamento git predefinito |65| `WorktreeCreate` | Quando un worktree viene creato tramite `--worktree`, `isolation: "worktree"`, o per una sessione in background. Sostituisce il comportamento git predefinito |

66| `WorktreeRemove` | Quando un worktree viene rimosso all'uscita della sessione, quando un subagente termina, o quando elimini una sessione in background |66| `WorktreeRemove` | Quando viene rimosso un worktree creato da un hook `WorktreeCreate` |

67| `PreCompact` | Prima della compattazione del contesto |67| `PreCompact` | Prima della compattazione del contesto |

68| `PostCompact` | Dopo che la compattazione del contesto è completata |68| `PostCompact` | Dopo che la compattazione del contesto è completata |

69| `PreModelSwitch` | Prima che Claude Code applichi un cambio di modello che hai richiesto tu o un client. Può bloccare il cambio |69| `PreModelSwitch` | Prima che Claude Code applichi un cambio di modello che hai richiesto tu o un client. Può bloccare il cambio |


3274 WorktreeRemove3274 WorktreeRemove

3275</h3>3275</h3>

3276 3276 

3277Viene eseguito quando un worktree sta per essere rimosso. È la controparte di pulizia di [WorktreeCreate](#worktreecreate). L'evento si attiva quando:3277Viene eseguito quando Claude Code ripulisce un worktree creato dal tuo hook [`WorktreeCreate`](#worktreecreate). L'evento si attiva quando:

3278 3278 

3279* esci da una sessione `--worktree` e scegli di rimuoverlo3279* Esci da una sessione `--worktree` e scegli di rimuovere il worktree

3280* un subagent con `isolation: "worktree"` termina3280* Elimini una [sessione in background](/docs/it/agent-view#what-deleting-a-session-removes) che viene eseguita nel worktree

3281* elimini una [sessione in background](/docs/it/agent-view#what-deleting-a-session-removes) il cui worktree è stato creato dall'hook

3282 3281 

3283Per i worktree basati su git, Claude Code gestisce la pulizia automaticamente con `git worktree remove`. Se hai configurato un hook WorktreeCreate, abbinalo a un hook WorktreeRemove per controllare la pulizia dei worktree che crea:3282Per i worktree basati su git, Claude Code gestisce la pulizia automaticamente con `git worktree remove`. Se hai configurato un hook WorktreeCreate, abbinalo a un hook WorktreeRemove per controllare la pulizia dei worktree che crea:

3284 3283 

hooks-guide.md +1 −1

Details

526| `DirectoryAdded` | Quando una directory di lavoro viene aggiunta a metà sessione tramite `/add-dir` o la richiesta di controllo SDK `register_repo_root` |526| `DirectoryAdded` | Quando una directory di lavoro viene aggiunta a metà sessione tramite `/add-dir` o la richiesta di controllo SDK `register_repo_root` |

527| `FileChanged` | Quando un file osservato cambia su disco. Il campo `matcher` specifica quali nomi di file osservare |527| `FileChanged` | Quando un file osservato cambia su disco. Il campo `matcher` specifica quali nomi di file osservare |

528| `WorktreeCreate` | Quando un worktree viene creato tramite `--worktree`, `isolation: "worktree"`, o per una sessione in background. Sostituisce il comportamento git predefinito |528| `WorktreeCreate` | Quando un worktree viene creato tramite `--worktree`, `isolation: "worktree"`, o per una sessione in background. Sostituisce il comportamento git predefinito |

529| `WorktreeRemove` | Quando un worktree viene rimosso all'uscita della sessione, quando un subagente termina, o quando elimini una sessione in background |529| `WorktreeRemove` | Quando viene rimosso un worktree creato da un hook `WorktreeCreate` |

530| `PreCompact` | Prima della compattazione del contesto |530| `PreCompact` | Prima della compattazione del contesto |

531| `PostCompact` | Dopo che la compattazione del contesto è completata |531| `PostCompact` | Dopo che la compattazione del contesto è completata |

532| `PreModelSwitch` | Prima che Claude Code applichi un cambio di modello che hai richiesto tu o un client. Può bloccare il cambio |532| `PreModelSwitch` | Prima che Claude Code applichi un cambio di modello che hai richiesto tu o un client. Può bloccare il cambio |

Details

76* **Il tuo progetto.** File nella tua directory e sottodirectory, più file altrove con la tua autorizzazione.76* **Il tuo progetto.** File nella tua directory e sottodirectory, più file altrove con la tua autorizzazione.

77* **Il tuo terminale.** Qualsiasi comando che potresti eseguire: strumenti di build, git, gestori di pacchetti, utilità di sistema, script. Se puoi farlo dalla riga di comando, Claude può farlo anche lui.77* **Il tuo terminale.** Qualsiasi comando che potresti eseguire: strumenti di build, git, gestori di pacchetti, utilità di sistema, script. Se puoi farlo dalla riga di comando, Claude può farlo anche lui.

78* **Il tuo stato git.** Ramo corrente, modifiche non committate e cronologia dei commit recenti.78* **Il tuo stato git.** Ramo corrente, modifiche non committate e cronologia dei commit recenti.

79* **Il tuo [CLAUDE.md](/docs/it/memory).** Un file markdown dove memorizzi istruzioni specifiche del progetto, convenzioni e contesto che Claude dovrebbe conoscere ogni sessione. Se il tuo repository ha un AGENTS.md per altri agenti di codifica, Claude [può leggerlo](/docs/it/memory#agents-md) da solo o insieme a CLAUDE.md.79* **Il tuo [CLAUDE.md](/docs/it/memory).** Un file markdown dove memorizzi istruzioni specifiche del progetto, convenzioni e contesto che Claude dovrebbe conoscere ogni sessione. Se il tuo repository ha un AGENTS.md per altri agenti di codifica, Claude [può leggerlo](/docs/it/memory#agents-md) al posto di un CLAUDE.md.

80* **[Auto memory](/docs/it/memory#auto-memory).** Apprendimenti che Claude salva automaticamente mentre lavori, come le tue preferenze. Le prime 200 righe o 25KB di MEMORY.md, a seconda di quale viene raggiunto per primo, si caricano all'inizio di ogni sessione.80* **[Auto memory](/docs/it/memory#auto-memory).** Apprendimenti che Claude salva automaticamente mentre lavori, come le tue preferenze. Le prime 200 righe o 25KB di MEMORY.md, a seconda di quale viene raggiunto per primo, si caricano all'inizio di ogni sessione.

81* **Estensioni che configuri.** [Server MCP](/docs/it/mcp) per servizi esterni, [skills](/docs/it/skills) per flussi di lavoro, [subagents](/docs/it/sub-agents) per lavoro delegato e [Claude in Chrome](/docs/it/chrome) per l'interazione del browser.81* **Estensioni che configuri.** [Server MCP](/docs/it/mcp) per servizi esterni, [skills](/docs/it/skills) per flussi di lavoro, [subagents](/docs/it/sub-agents) per lavoro delegato e [Claude in Chrome](/docs/it/chrome) per l'interazione del browser.

82 82 

memory.md +2 −2

Details

8 8 

9Ogni sessione di Claude Code inizia con una finestra di contesto nuova. Due meccanismi trasportano la conoscenza tra le sessioni:9Ogni sessione di Claude Code inizia con una finestra di contesto nuova. Due meccanismi trasportano la conoscenza tra le sessioni:

10 10 

11* **File CLAUDE.md**: istruzioni che scrivi per dare a Claude un contesto persistente. Claude può anche leggere i file [`AGENTS.md`](#agents-md) di un repository, da soli o insieme a CLAUDE.md11* **File CLAUDE.md**: istruzioni che scrivi per dare a Claude un contesto persistente. Claude può anche leggere i [file `AGENTS.md`](#agents-md) di un repository al posto di CLAUDE.md

12* **Memoria automatica**: note che Claude scrive da solo in base alle tue correzioni e preferenze12* **Memoria automatica**: note che Claude scrive da solo in base alle tue correzioni e preferenze

13 13 

14Questa pagina spiega come:14Questa pagina spiega come:

15 15 

16* [Scrivere e organizzare file CLAUDE.md](#claude-md-files)16* [Scrivere e organizzare file CLAUDE.md](#claude-md-files)

17* [Utilizzare un file AGENTS.md esistente](#agents-md) come istruzioni del tuo progetto, da solo o insieme a CLAUDE.md17* [Utilizzare un file AGENTS.md esistente](#agents-md) come istruzioni del tuo progetto

18* [Limitare le regole a tipi di file specifici](#organize-rules-with-claude/rules/) con `.claude/rules/`18* [Limitare le regole a tipi di file specifici](#organize-rules-with-claude/rules/) con `.claude/rules/`

19* [Configurare la memoria automatica](#auto-memory) in modo che Claude prenda note automaticamente19* [Configurare la memoria automatica](#auto-memory) in modo che Claude prenda note automaticamente

20* [Risolvere i problemi](#troubleshoot-memory-issues) quando le istruzioni non vengono seguite20* [Risolvere i problemi](#troubleshoot-memory-issues) quando le istruzioni non vengono seguite

overview.md +2 −2

Details

170 Il [Model Context Protocol (MCP)](/docs/it/mcp) è uno standard aperto per connettere gli strumenti di IA alle fonti di dati esterne. Con MCP, Claude Code può leggere i tuoi documenti di progettazione in Google Drive, aggiornare i ticket in Jira, estrarre dati da Slack o utilizzare i tuoi strumenti personalizzati. La [guida rapida MCP](/docs/it/mcp-quickstart) connette il tuo primo server da capo a fondo.170 Il [Model Context Protocol (MCP)](/docs/it/mcp) è uno standard aperto per connettere gli strumenti di IA alle fonti di dati esterne. Con MCP, Claude Code può leggere i tuoi documenti di progettazione in Google Drive, aggiornare i ticket in Jira, estrarre dati da Slack o utilizzare i tuoi strumenti personalizzati. La [guida rapida MCP](/docs/it/mcp-quickstart) connette il tuo primo server da capo a fondo.

171 </Accordion>171 </Accordion>

172 172 

173 <Accordion title="Personalizza con istruzioni, skills e hooks" icon="sliders">173 <Accordion title="Personalizza con istruzioni, skill e hook" icon="sliders">

174 [`CLAUDE.md`](/docs/it/memory) è un file markdown che aggiungi alla radice del tuo progetto che Claude Code legge all'inizio di ogni sessione. Usalo per impostare standard di codifica, decisioni architettoniche, librerie preferite e checklist di revisione. Se il tuo repository ha già un `AGENTS.md` per altri agenti di codifica, Claude Code [può leggerlo](/docs/it/memory#agents-md) da solo o insieme a `CLAUDE.md`. Claude costruisce anche [memoria automatica](/docs/it/memory#auto-memory) mentre lavora, salvando insegnamenti tra le sessioni senza che tu debba scrivere nulla.174 [`CLAUDE.md`](/docs/it/memory) è un file markdown che aggiungi alla radice del tuo progetto che Claude Code legge all'inizio di ogni sessione. Usalo per impostare standard di codifica, decisioni architettoniche, librerie preferite e checklist di revisione. Se il tuo repository ha già un `AGENTS.md` per altri agenti di codifica, Claude Code [può leggerlo](/docs/it/memory#agents-md) al posto di un `CLAUDE.md`. Claude costruisce anche [memoria automatica](/docs/it/memory#auto-memory) mentre lavora, salvando insegnamenti tra le sessioni senza che tu debba scrivere nulla.

175 175 

176 Crea [skills](/docs/it/skills) per pacchettizzare flussi di lavoro ripetibili che il tuo team può condividere, come `/review-pr` o `/deploy-staging`.176 Crea [skills](/docs/it/skills) per pacchettizzare flussi di lavoro ripetibili che il tuo team può condividere, come `/review-pr` o `/deploy-staging`.

177 177 

Details

733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.

734```734```

735 735 

736Questo agente è denominato `my-plugin:security-reviewer`, e l'utente può [invocarlo esplicitamente](/docs/it/sub-agents#invoke-subagents-explicitly) con `@agent-my-plugin:security-reviewer`. La forma del nome è `<plugin>:<name>`, dove `<name>` viene dal frontmatter, o dal nome del file quando non c'è.736Questo agente è denominato `my-plugin:security-reviewer`, e l'utente può [invocarlo esplicitamente](/docs/it/sub-agents#invoke-subagents-explicitly) con `@agent-my-plugin:security-reviewer`. La forma del nome è `<plugin>:<name>`, dove `<name>` viene dal campo `name` del frontmatter, o dal nome del file quando quel campo manca.

737 737 

738La chiave manifest `agents` sostituisce la scansione `agents/`.738La chiave manifest `agents` sostituisce la scansione `agents/`.

739 739 

Details

428 428 

429| Elemento | Cosa disegna | Dove |429| Elemento | Cosa disegna | Dove |

430| :- | :- | :- |430| :- | :- | :- |

431| `Box` | Un contenitore flex. Accetta prop di layout come `flexDirection`, `columnGap`, `padding`, `borderStyle` e `width`. | Ovunque |431| `Box` | Un contenitore flex. Accetta prop di layout come `flexDirection`, `columnGap`, `padding`, [`borderStyle`](/docs/it/plugins/mods/reference#box-border-styles) e `width`. | Ovunque |

432| `Text` | Testo con stile. Accetta `color`, `bold`, `dimColor`, `italic` e `wrap`. Un `color` è una chiave del tema o un colore come `'red'`. Un `wrap` è `'wrap'`, `'truncate'`, `'truncate-start'`, `'truncate-middle'` o `'truncate-end'`. | Ovunque |432| `Text` | Testo con stile. Accetta `color`, `bold`, `dimColor`, `italic` e `wrap`. Un `color` è una chiave del tema o un colore come `'red'`. Un `wrap` è `'wrap'`, `'truncate'`, `'truncate-start'`, `'truncate-middle'` o `'truncate-end'`. | Ovunque |

433| `Button` | Un controllo che chiama `onPress` | Ovunque |433| `Button` | Un controllo che chiama `onPress` | Ovunque |

434| `Link`, `Code`, `Markdown` | Un link con `href` e un `label` facoltativo, un blocco di codice e testo formattato come le risposte di Claude. `Markdown` riceve il suo contenuto nella prop `text`, non in `children`, e richiede una `key` quando passi `onLinkPress`. | Ovunque |434| `Link`, `Code`, `Markdown` | Un link con `href` e un `label` facoltativo, un blocco di codice e testo formattato come le risposte di Claude. `Markdown` riceve il suo contenuto nella prop `text`, non in `children`, e richiede una `key` quando passi `onLinkPress`. | Ovunque |


563Molti pannelli sono un campo di testo con un elenco sotto. L'esempio in questa sezione è un pannello di note: digiti una nota e premi Invio per aggiungerla, e ogni nota ha un pulsante `x` che la elimina. Con due note aggiunte, il terminale disegna il pannello in questo modo:563Molti pannelli sono un campo di testo con un elenco sotto. L'esempio in questa sezione è un pannello di note: digiti una nota e premi Invio per aggiungerla, e ogni nota ha un pulsante `x` che la elimina. Con due note aggiunte, il terminale disegna il pannello in questo modo:

564 564 

565```text theme={null}565```text theme={null}

566╭──────────────────────────────────────────────────────────╮566╭────────────────────────────────────────────────────────✕─╮

567│ Note: Type a note and press Enter ⏎ add ✕ │567│ Note: Type a note and press Enter ⏎ add │

568│ x buy milk │568│ x buy milk │

569│ x call bob │569│ x call bob │

570╰──────────────────────────────────────────────────────────╯570╰──────────────────────────────────────────────────────────╯

571```571```

572 572 

573Il simbolo `✕` sul bordo superiore è il segno proprio di Claude Code per chiudere il pannello.

574 

573L'esempio usa queste tecniche:575L'esempio usa queste tecniche:

574 576 

575* **Ricevere input digitato**: un `Input` chiama `onSubmit(value)` con il testo del campo quando l'utente preme Invio, e `onInput(value)` a ogni modifica577* **Ricevere input digitato**: un `Input` chiama `onSubmit(value)` con il testo del campo quando l'utente preme Invio, e `onInput(value)` a ogni modifica

Details

242Per adattare un albero al suo punto, leggi queste prop nell'hook:242Per adattare un albero al suo punto, leggi queste prop nell'hook:

243 243 

244* **Larghezza di un `Pane` o della fascia**: disegna fino a `e.props.bodyColumns`244* **Larghezza di un `Pane` o della fascia**: disegna fino a `e.props.bodyColumns`

245* **Altezza di un `Pane` accanto alla trascrizione**: quando `e.props.placement` è `'dock'`, `e.props.scroll.bodyRows` è il numero di righe di cui dispone il pannello245* **Altezza di un `Pane` accanto alla trascrizione**: quando `e.props.placement` è `'dock'`, `e.props.scroll.bodyRows` è il numero di righe di cui dispone il pannello per il tuo albero

246* **Altezza di un `Pane` sopra il prompt**: quando `e.props.placement` è `'inline'`, il pannello cresce insieme al tuo albero fino a un limite, e `bodyRows` è quel limite. Il [campo `rows` di `$.ui.open`](/docs/it/plugins/mods/interface#open-a-pane-at-the-right-time) richiede un limite diverso.246* **Altezza di un `Pane` sopra il prompt**: quando `e.props.placement` è `'inline'`, il pannello cresce insieme al tuo albero fino a un limite, e `bodyRows` è quel limite. Il [campo `rows` di `$.ui.open`](/docs/it/plugins/mods/interface#open-a-pane-at-the-right-time) richiede un limite diverso.

247 247 

248Un albero più alto del pannello scorre nel suo insieme.248Un albero più alto del pannello scorre nel suo insieme.


255 255 

256| Elemento | Prop principali | Terminale | Desktop |256| Elemento | Prop principali | Terminale | Desktop |

257| :- | :- | :-: | :-: |257| :- | :- | :-: | :-: |

258| [`Box`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `key`, layout flex, `gap`, `padding`, `margin`, `width`, `height`, `borderStyle`, `backgroundColor`, `position`, `hover` | ✓ | ✓ |258| [`Box`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `key`, layout flex, `gap`, `padding`, `margin`, `width`, `height`, [`borderStyle`](#box-border-styles), `backgroundColor`, `position`, `hover` | ✓ | ✓ |

259| [`Text`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, `bold`, `italic`, `underline`, `dimColor`, `inverse`, `wrap` | ✓ | ✓ |259| [`Text`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, `bold`, `italic`, `underline`, `dimColor`, `inverse`, `wrap` | ✓ | ✓ |

260| [`Button`](/docs/it/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action` | ✓ | ✓ |260| [`Button`](/docs/it/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action` | ✓ | ✓ |

261| `Link` | `href`, `label` | ✓ | ✓ |261| `Link` | `href`, `label` | ✓ | ✓ |


270 270 

271Altre regole per `Button`: `action` indica una delle [scorciatoie da tastiera](/docs/it/keybindings) di Claude Code, e la combinazione assegnata dall'utente a quell'azione preme il pulsante quando si tratta di un accordo o di un tasto con modificatore. Un `hotkey` numerico su un pulsante nella banda si attiva anche quando l'utente digita solo quella cifra in un prompt vuoto e si ferma. Quando due pulsanti nello stesso disegno indicano lo stesso `hotkey`, lo ottiene quello successivo. `autoFocus` accetta solo `true` su qualsiasi controllo, quindi ometti la prop per lasciarlo disattivato.271Altre regole per `Button`: `action` indica una delle [scorciatoie da tastiera](/docs/it/keybindings) di Claude Code, e la combinazione assegnata dall'utente a quell'azione preme il pulsante quando si tratta di un accordo o di un tasto con modificatore. Un `hotkey` numerico su un pulsante nella banda si attiva anche quando l'utente digita solo quella cifra in un prompt vuoto e si ferma. Quando due pulsanti nello stesso disegno indicano lo stesso `hotkey`, lo ottiene quello successivo. `autoFocus` accetta solo `true` su qualsiasi controllo, quindi ometti la prop per lasciarlo disattivato.

272 272 

273<h3 id="box-border-styles">

274 Stili del bordo di `Box`

275</h3>

276 

277Per disegnare un bordo attorno a un `Box`, imposta la sua `borderStyle` su uno di questi nomi, come in `borderStyle: 'round'`. Ogni riga indica cosa disegna il terminale per quel nome e mostra il bordo superiore.

278 

279| `borderStyle` | Cosa disegna il terminale | Bordo superiore |

280| :- | :- | :- |

281| `'single'` | Linee sottili con angoli squadrati | `┌──┐` |

282| `'double'` | Linee doppie | `╔══╗` |

283| `'round'` | Linee sottili con angoli arrotondati | `╭──╮` |

284| `'bold'` | Linee spesse | `┏━━┓` |

285| `'singleDouble'` | Linee sottili in alto e in basso, linee doppie sui lati | `╓──╖` |

286| `'doubleSingle'` | Linee doppie in alto e in basso, linee sottili sui lati | `╒══╕` |

287| `'classic'` | I caratteri ASCII `+`, `-` e `\|` | `+--+` |

288| `'arrow'` | Frecce che puntano verso l'interno del `Box` | `↘↓↓↙` |

289| `'dashed'` | Linee tratteggiate con angoli vuoti | `╌╌` |

290| `'quote'` | Una barra, `▎`, lungo il lato sinistro e celle vuote sugli altri tre lati | Vuoto |

291 

292Un `Box` la cui `borderStyle` indica qualsiasi altro nome, come `'rounded'`, viene disegnato senza bordo.

293 

273<h2 id="limits">294<h2 id="limits">

274 Limiti295 Limiti

275</h2>296</h2>

Details

17 17 

18 * **Perché gli ambiti, la cache e la precedenza si comportano nel modo in cui lo fanno**: leggi [Plugin loading reference](/docs/it/plugins/loading)18 * **Perché gli ambiti, la cache e la precedenza si comportano nel modo in cui lo fanno**: leggi [Plugin loading reference](/docs/it/plugins/loading)

19 * **Ricerca di un flag, un campo o un comando**: utilizza il [plugin commands reference](/docs/it/plugins/cli-reference), il [manifest reference](/docs/it/plugins/manifest-reference) o il [marketplace reference](/docs/it/plugins/marketplace-reference)19 * **Ricerca di un flag, un campo o un comando**: utilizza il [plugin commands reference](/docs/it/plugins/cli-reference), il [manifest reference](/docs/it/plugins/manifest-reference) o il [marketplace reference](/docs/it/plugins/marketplace-reference)

20 * **Un messaggio `hooks module not loaded` o `hooks module did not load`**: il plugin è un [mod](/docs/it/plugins/mods/overview), quindi leggi [The mod doesn't load](/docs/it/plugins/mods/troubleshoot#the-mod-doesn’t-load)

20</Note>21</Note>

21 22 

22Cerca il messaggio esatto che hai visto. Ogni messaggio è elencato sotto la fase che lo produce, che non è sempre il comando che hai eseguito. Ad esempio, un'installazione può fallire perché manca un marketplace, quindi quel messaggio è sotto [Add a marketplace](#add-a-marketplace).23Cerca il messaggio esatto che hai visto. Ogni messaggio è elencato sotto la fase che lo produce, che non è sempre il comando che hai eseguito. Ad esempio, un'installazione può fallire perché manca un marketplace, quindi quel messaggio è sotto [Add a marketplace](#add-a-marketplace).

quickstart.md +5 −5

Details

33 <Tab title="Installazione nativa (consigliata)">33 <Tab title="Installazione nativa (consigliata)">

34 **macOS, Linux, WSL:**34 **macOS, Linux, WSL:**

35 35 

36 ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}36 ```bash theme={null}

37 curl -fsSL https://claude.ai/install.sh | bash37 curl -fsSL https://claude.ai/install.sh | bash

38 ```38 ```

39 39 

40 **Windows PowerShell:**40 **Windows PowerShell:**

41 41 

42 ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}42 ```powershell theme={null}

43 irm https://claude.ai/install.ps1 | iex43 irm https://claude.ai/install.ps1 | iex

44 ```44 ```

45 45 

46 **Windows CMD:**46 **Windows CMD:**

47 47 

48 ```batch theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}48 ```batch theme={null}

49 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd49 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

50 ```50 ```

51 51 


63 </Tab>63 </Tab>

64 64 

65 <Tab title="Homebrew">65 <Tab title="Homebrew">

66 ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}66 ```bash theme={null}

67 brew install --cask claude-code67 brew install --cask claude-code

68 ```68 ```

69 69 


75 </Tab>75 </Tab>

76 76 

77 <Tab title="WinGet">77 <Tab title="WinGet">

78 ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}78 ```powershell theme={null}

79 winget install Anthropic.ClaudeCode79 winget install Anthropic.ClaudeCode

80 ```80 ```

81 81 

Details

104 Script di esempio104 Script di esempio

105</h2>105</h2>

106 106 

107Lo script seguente esegue il ciclo completo contro `$CLAUDE_TEST_ENVIRONMENT_ID`, l'ID `ccpool_...` del vostro ambiente di test, mostrato nella finestra di dialogo dei dettagli dell'ambiente nella pagina di amministrazione o restituito dalla [chiamata create-environment](#create-a-dedicated-test-environment), e asserisce su una frase sentinella in ogni risposta. Eseguitelo da un checkout git del repository su cui desiderate che la sessione funzioni, dopo aver avviato un runner su questo host con l'hook di cattura installato e `E2E_REPLY_DIR` esportato.107Lo script seguente esegue il ciclo completo contro `$CLAUDE_TEST_ENVIRONMENT_ID`, l'ID `ccpool_...` del tuo ambiente di test, mostrato nella finestra di dialogo dei dettagli dell'ambiente nella pagina di amministrazione o restituito dalla [chiamata create-environment](#create-a-dedicated-test-environment), e asserisce su una frase sentinella in ogni risposta. Eseguilo da un checkout git del repository su cui desideri che la sessione lavori, dopo aver avviato un runner su questo host con l'hook di cattura installato e `E2E_REPLY_DIR` esportato. Per prima cosa, accedi con un account claude.ai sulla macchina che esegue lo script, come descritto in [Autenticarsi dalla CI](#authenticate-from-ci). Senza tale accesso, il primo invio non riesce con un errore come `Unable to get organization UUID for cloud session creation`.

108 108 

109```bash theme={null}109```bash theme={null}

110#!/usr/bin/env bash110#!/usr/bin/env bash

Details

43 <Step title="Aprire la console di amministrazione">43 <Step title="Aprire la console di amministrazione">

44 Nella console claude.ai, vai a [**Organization settings > Claude Code > Managed settings**](https://claude.ai/admin-settings/claude-code).44 Nella console claude.ai, vai a [**Organization settings > Claude Code > Managed settings**](https://claude.ai/admin-settings/claude-code).

45 45 

46 Se il collegamento ti reindirizza a una pagina Organization settings diversa invece della pagina Claude Code, il tuo account non dispone del ruolo richiesto. I ruoli Admin e gli altri ruoli non-Owner non possono visualizzare o modificare le impostazioni gestite, quindi chiedi a un Owner o Primary Owner della tua organizzazione di apportare la modifica. Consulta [Controllo di accesso](#access-control).46 In un'organizzazione Team o Enterprise, se la pagina indica che non hai accesso, chiedi a un [Owner o Primary Owner](#access-control) di apportare la modifica.

47 </Step>47 </Step>

48 48 

49 <Step title="Definire le impostazioni">49 <Step title="Definire le impostazioni">

sessions.md +3 −3

Details

83* Terminale: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` quando il nome corrisponde a una sessione, senza `-p`. Claude Code ripristina la modalità di autorizzazione in cui era la sessione, tranne nei casi nella tabella. Passa `--permission-mode` o `--dangerously-skip-permissions` per ignorare la modalità ripristinata.83* Terminale: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` quando il nome corrisponde a una sessione, senza `-p`. Claude Code ripristina la modalità di autorizzazione in cui era la sessione, tranne nei casi nella tabella. Passa `--permission-mode` o `--dangerously-skip-permissions` per ignorare la modalità ripristinata.

84* Non interattivo: `claude -p --resume` o `claude -p --continue`. Claude Code avvia l'esecuzione nella modalità di autorizzazione in cui una nuova esecuzione `claude -p` si avvierebbe, tranne che una sessione che è terminata in modalità piano riprende in modalità piano secondo le [condizioni di seguito](#resume-in-plan-mode-with-p).84* Non interattivo: `claude -p --resume` o `claude -p --continue`. Claude Code avvia l'esecuzione nella modalità di autorizzazione in cui una nuova esecuzione `claude -p` si avvierebbe, tranne che una sessione che è terminata in modalità piano riprende in modalità piano secondo le [condizioni di seguito](#resume-in-plan-mode-with-p).

85* VS Code: il pannello di conversazione dell'estensione. La tabella copre solo una conversazione che è terminata in modalità piano; per il resto, vedi [riprendere conversazioni passate](/docs/it/vs-code#resume-past-conversations).85* VS Code: il pannello di conversazione dell'estensione. La tabella copre solo una conversazione che è terminata in modalità piano; per il resto, vedi [riprendere conversazioni passate](/docs/it/vs-code#resume-past-conversations).

86* Selezionatore di sessioni al lancio: una sessione che selezioni dal [selezionatore di sessioni](#use-the-session-picker), che tu l'abbia aperto con `claude --resume` da solo, `claude --from-pr` o un nome che corrisponde a più di una sessione. Claude Code non ripristina la modalità di autorizzazione archiviata. Avvia la sessione nella modalità di autorizzazione in cui avvierebbe una nuova sessione dalla stessa riga di comando.86* Selezionatore di sessioni al lancio: una sessione che selezioni dal [selezionatore di sessioni](#use-the-session-picker), che tu l'abbia aperto con `claude --resume` da solo, `claude --from-pr` o un nome che corrisponde a più di una sessione. Claude Code avvia la sessione nella modalità di permesso in cui avvierebbe una nuova sessione dalla stessa riga di comando, tranne che una sessione che è terminata in plan mode riprende in plan mode a meno che tu non passi `--permission-mode`, `--dangerously-skip-permissions` o `--fork-session`. Nessun'altra modalità di permesso archiviata viene ripristinata.

87* `/resume` dentro una sessione, con o senza argomento: Claude Code non ripristina la modalità di autorizzazione archiviata. La conversazione a cui passi continua nella modalità di autorizzazione in cui è la tua sessione corrente.87* `/resume` dentro una sessione, con o senza argomento: la conversazione a cui passi continua nella modalità di permesso in cui è la tua sessione corrente, tranne che una conversazione che è terminata in plan mode riprende in plan mode, anche se hai avviato Claude Code con `--permission-mode` o `--dangerously-skip-permissions`. Se quella conversazione era già stata aperta in precedenza in questa esecuzione di Claude Code, come la conversazione in cui hai iniziato o una che hai lasciato con `/clear` o `/resume`, continua invece nella tua modalità di permesso corrente.

88 88 

89Il ripristino della modalità piano sui percorsi non interattivi e VS Code richiede Claude Code v2.1.246 o successiva. Ogni riga nomina la modalità di autorizzazione in cui la sessione è terminata, quale dei percorsi terminale, non interattivo e VS Code la riprendi, e la modalità di autorizzazione in cui Claude Code avvia la sessione ripresa.89Il ripristino della modalità piano sui percorsi non interattivi e VS Code richiede Claude Code v2.1.246 o successiva. Ogni riga nomina la modalità di autorizzazione in cui la sessione è terminata, quale dei percorsi terminale, non interattivo e VS Code la riprendi, e la modalità di autorizzazione in cui Claude Code avvia la sessione ripresa.

90 90 

91| La sessione è terminata in | Come la riprendi | Modalità di autorizzazione dopo il ripristino |91| La sessione è terminata in | Come la riprendi | Modalità di autorizzazione dopo il ripristino |

92| :- | :- | :- |92| :- | :- | :- |

93| `bypassPermissions` | Terminale | La modalità di autorizzazione in cui una nuova sessione si avvierebbe. Per [ignorare le autorizzazioni](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) di nuovo, abilitala al lancio con uno dei suoi flag di lancio o `permissions.defaultMode: "bypassPermissions"` in [impostazioni utente, `--settings` o impostazioni gestite](/docs/it/settings-reference#permissions-defaultmode) |93| `bypassPermissions` | Terminale | La modalità di autorizzazione in cui una nuova sessione si avvierebbe. Per [ignorare le autorizzazioni](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) di nuovo, abilitala al lancio con uno dei suoi flag di lancio o `permissions.defaultMode: "bypassPermissions"` in [impostazioni utente, `--settings` o impostazioni gestite](/docs/it/settings-reference#permissions-defaultmode) |

94| `plan` | Terminale | La modalità di autorizzazione in cui una nuova sessione si avvierebbe |94| `plan` | Terminale | Plan mode. Con `--fork-session`, la modalità di permesso in cui una nuova sessione si avvierebbe |

95| `auto` | Terminale | `auto`, solo quando il tuo account soddisfa ancora i [requisiti della modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) |95| `auto` | Terminale | `auto`, solo quando il tuo account soddisfa ancora i [requisiti della modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) |

96| Manuale | Terminale | Manuale quando una nuova sessione si avvierebbe in modalità auto dal [default integrato](/docs/it/permission-modes#which-mode-a-session-starts-in). Quando un `defaultMode` da un file di impostazioni [ha effetto](/docs/it/permission-modes#which-mode-a-session-starts-in), Claude Code avvia la sessione ripresa in quella modalità invece |96| Manuale | Terminale | Manuale quando una nuova sessione si avvierebbe in modalità auto dal [default integrato](/docs/it/permission-modes#which-mode-a-session-starts-in). Quando un `defaultMode` da un file di impostazioni [ha effetto](/docs/it/permission-modes#which-mode-a-session-starts-in), Claude Code avvia la sessione ripresa in quella modalità invece |

97| `plan` | Non interattivo, secondo le [condizioni di seguito](#resume-in-plan-mode-with-p) | Modalità piano |97| `plan` | Non interattivo, secondo le [condizioni di seguito](#resume-in-plan-mode-with-p) | Modalità piano |

sub-agents.md +2 −2

Details

310 310 

311| Field | Required | Description |311| Field | Required | Description |

312| :- | :- | :- |312| :- | :- | :- |

313| `name` | Yes | Identificatore univoco, come `code-reviewer` o `reviewer-v2`. [Hooks](/docs/it/hooks#subagentstart) ricevono questo valore come `agent_type`. Il nome del file non deve corrispondere. I nomi non possono contenere `:`, che è riservato per [identificatori con ambito plugin](/docs/it/plugins/overview) come `my-plugin:reviewer`. Claude Code non carica un file il cui nome contiene uno e registra un errore nel log di debug. Prima di v2.1.218, tali nomi erano accettati |313| `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` |

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

315| `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 |315| `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 |

316| `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) |316| `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) |


348 348 

349* **No `name`**: Claude Code tratta il file come documentazione mantenuta accanto ai suoi agenti.349* **No `name`**: Claude Code tratta il file come documentazione mantenuta accanto ai suoi agenti.

350* **Un `---` di apertura che non è la prima riga del file**: Claude Code legge il file come non avente frontmatter e lo tratta come documentazione.350* **Un `---` di apertura che non è la prima riga del file**: Claude Code legge il file come non avente frontmatter e lo tratta come documentazione.

351* **Un `name` che inizia con `-` o contiene `:`**: Claude Code salta il file e scrive un errore nel log di debug. Consulti la riga `name` nella tabella sopra.351* **Un `name` che inizia con `-`, contiene `:` o supera i 256 caratteri**: Claude Code salta il file e scrive un errore nel log di debug.

352* **Un `name` ma nessuna `description`**: Claude Code salta il file e scrive il motivo nel log di debug.352* **Un `name` ma nessuna `description`**: Claude Code salta il file e scrive il motivo nel log di debug.

353* **YAML che non analizza**: Claude Code non legge alcun campo dal file, lo salta e scrive l'errore di analisi nel log di debug.353* **YAML che non analizza**: Claude Code non legge alcun campo dal file, lo salta e scrive l'errore di analisi nel log di debug.

354 354 

vs-code.md +1 −1

Details

606| `environmentVariables` | `[]` | Imposta le variabili d'ambiente per il processo Claude. Per la configurazione condivisa usa invece le impostazioni di Claude Code. Una voce [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars) si applica solo quando il suo valore è un percorso assoluto; l'estensione non espande `~` e ignora un valore relativo. |606| `environmentVariables` | `[]` | Imposta le variabili d'ambiente per il processo Claude. Per la configurazione condivisa usa invece le impostazioni di Claude Code. Una voce [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars) si applica solo quando il suo valore è un percorso assoluto; l'estensione non espande `~` e ignora un valore relativo. |

607| `disableLoginPrompt` | `false` | Salta i prompt di autenticazione (per configurazioni di provider di terze parti) |607| `disableLoginPrompt` | `false` | Salta i prompt di autenticazione (per configurazioni di provider di terze parti) |

608| `allowDangerouslySkipPermissions` | `false` | Aggiunge Bypass permissions al selettore di modalità. Utilizzarlo solo in sandbox senza accesso a Internet. |608| `allowDangerouslySkipPermissions` | `false` | Aggiunge Bypass permissions al selettore di modalità. Utilizzarlo solo in sandbox senza accesso a Internet. |

609| `claudeProcessWrapper` | - | Eseguibile utilizzato per avviare il processo Claude. Il percorso binario in bundle viene passato come argomento quando presente. Impostarlo su un binario `claude` installato separatamente se la build dell'estensione non ne include uno per la vostra piattaforma. In una configurazione con wrapper, le conversazioni iniziano in modalità Manual a meno che non impostiate `initialPermissionMode` o non abbiate scelto Manual, Edit automatically o Auto in una conversazione precedente, perché l'estensione salta i passaggi delle impostazioni e del valore predefinito incorporato lì; vedere [Switch permission modes](/docs/it/permission-modes#switch-permission-modes). Un errore "Unsupported platform" all'attivazione significa che nessun binario è in bundle per la vostra piattaforma; vedere [which platforms have prebuilt binaries](/docs/it/troubleshoot-install#native-binary-not-found-after-npm-install). |609| `claudeProcessWrapper` | - | Eseguibile utilizzato per avviare il processo Claude. Il percorso del binario in bundle viene passato come argomento quando presente. Impostalo su un binario `claude` installato separatamente se la build dell'estensione non ne include uno per la tua piattaforma. |

610 610 

611<h2 id="use-a-screen-reader">611<h2 id="use-a-screen-reader">

612 Utilizzare un lettore di schermo612 Utilizzare un lettore di schermo

worktrees.md +3 −1

Details

6 6 

7> Isolare sessioni parallele di Claude Code in worktrees git separati in modo che i cambiamenti non si scontrino. Copre il flag `--worktree`, l'isolamento dei subagent, `.worktreeinclude`, la pulizia e gli hook VCS non-git.7> Isolare sessioni parallele di Claude Code in worktrees git separati in modo che i cambiamenti non si scontrino. Copre il flag `--worktree`, l'isolamento dei subagent, `.worktreeinclude`, la pulizia e gli hook VCS non-git.

8 8 

9Un [git worktree](https://git-scm.com/docs/git-worktree) è una directory di lavoro separata con i propri file e branch, che condivide la stessa cronologia del repository e il remote come il vostro checkout principale. Eseguire ogni sessione di Claude Code nel proprio worktree significa che le modifiche in una sessione non toccheranno mai i file in un'altra, quindi una sessione può costruire una funzionalità mentre una seconda corregge un bug.9Un [git worktree](https://git-scm.com/docs/git-worktree) è una directory di lavoro separata con i propri file e branch, che condivide la stessa cronologia del repository e lo stesso remote del tuo checkout principale. Eseguire ogni sessione di Claude Code nel proprio worktree le fornisce una copia separata dei file da modificare, quindi una sessione può sviluppare una funzionalità mentre una seconda corregge un bug.

10 10 

11<Note>11<Note>

12 I worktree richiedono un repository git; per altri sistemi di controllo versione, [configurate gli hook per sostituire la logica git](#non-git-version-control). Nell'[app desktop](/docs/it/desktop#work-in-parallel-with-sessions), selezionate l'opzione **worktree** quando avviate una sessione per darle il proprio worktree.12 I worktree richiedono un repository git; per altri sistemi di controllo versione, [configurate gli hook per sostituire la logica git](#non-git-version-control). Nell'[app desktop](/docs/it/desktop#work-in-parallel-with-sessions), selezionate l'opzione **worktree** quando avviate una sessione per darle il proprio worktree.


104* **Reindirizzamenti git**: Claude Code blocca un comando Bash o Monitor che reindirizza git nel checkout principale. Il reindirizzamento può provenire attraverso `git -C`, `--git-dir`, una variabile `GIT_DIR` o `GIT_WORK_TREE`, o un `cd` nel checkout principale prima di eseguire git.104* **Reindirizzamenti git**: Claude Code blocca un comando Bash o Monitor che reindirizza git nel checkout principale. Il reindirizzamento può provenire attraverso `git -C`, `--git-dir`, una variabile `GIT_DIR` o `GIT_WORK_TREE`, o un `cd` nel checkout principale prima di eseguire git.

105* **Forma del comando**: Claude Code blocca un comando Bash o Monitor quando non può verificare dal testo del comando che qualsiasi git che il comando esegue rimane all'interno del worktree. Questo accade, ad esempio, quando il nome del comando è calcolato a runtime, quando la sintassi non può essere analizzata, o quando un'espansione come `${!name}` o `${ command; }` potrebbe eseguire un comando che il testo non esplicita. Claude Code dice a Claude come riscrivere il comando rifiutato, come dividerlo in comandi semplici e separati. Non potete disattivare questo controllo.105* **Forma del comando**: Claude Code blocca un comando Bash o Monitor quando non può verificare dal testo del comando che qualsiasi git che il comando esegue rimane all'interno del worktree. Questo accade, ad esempio, quando il nome del comando è calcolato a runtime, quando la sintassi non può essere analizzata, o quando un'espansione come `${!name}` o `${ command; }` potrebbe eseguire un comando che il testo non esplicita. Claude Code dice a Claude come riscrivere il comando rifiutato, come dividerlo in comandi semplici e separati. Non potete disattivare questo controllo.

106 106 

107Questi controlli leggono il percorso a cui è destinata una modifica, la directory in cui viene eseguito un comando e il testo del comando. Nessuno di essi tiene traccia di quali file scrive un comando della shell, quindi un comando che scrive nel checkout principale senza eseguirvi git, come `cp` o un reindirizzamento della shell, non viene rifiutato da questi controlli. Claude Code tratta quel comando come qualsiasi altro comando della shell, quindi se viene eseguito o se ti chiede conferma dipende dalla tua [modalità di permesso](/docs/it/permission-modes) e dalle tue regole.

108 

107I controlli si applicano al repository da cui avete lanciato Claude Code. Coprono anche il checkout principale da cui un worktree collegato è collegato. Per i comandi PowerShell, Claude Code applica solo il controllo della directory di lavoro.109I controlli si applicano al repository da cui avete lanciato Claude Code. Coprono anche il checkout principale da cui un worktree collegato è collegato. Per i comandi PowerShell, Claude Code applica solo il controllo della directory di lavoro.

108 110 

109Claude vede ogni rifiuto come un errore di strumento che nomina il worktree e dice come procedere. Per un comando rifiutato, consultate [cosa significa il messaggio di rifiuto e come cancellarlo](/docs/it/errors#command-blocked-by-the-worktree-isolation-checks).111Claude vede ogni rifiuto come un errore di strumento che nomina il worktree e dice come procedere. Per un comando rifiutato, consultate [cosa significa il messaggio di rifiuto e come cancellarlo](/docs/it/errors#command-blocked-by-the-worktree-isolation-checks).