SpyBara
Go Premium

Documentation 2026-10-08 22:58 UTC to 2026-10-09 21:01 UTC

50 files changed +674 −206. View all changes and history on the product overview
2026
Fri 9 22:01 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

216| Opzione | Cosa controlla | Predefinito |216| Opzione | Cosa controlla | Predefinito |

217| :- | :- | :- |217| :- | :- | :- |

218| Max turni (`max_turns` / `maxTurns`) | Massimi round trip di utilizzo degli strumenti | Nessun limite |218| Max turni (`max_turns` / `maxTurns`) | Massimi round trip di utilizzo degli strumenti | Nessun limite |

219| Max budget (`max_budget_usd` / `maxBudgetUsd`) | Costo massimo prima di fermarsi | Nessun limite |219| Max budget (`max_budget_usd` / `maxBudgetUsd`) | Spesa stimata alla quale il ciclo si ferma | Nessun limite |

220 220 

221Quando uno dei due limiti viene raggiunto, l'SDK restituisce un `ResultMessage` con un sottotipo di errore corrispondente (`error_max_turns` o `error_max_budget_usd`). Vedere [Gestire il risultato](#handle-the-result) per come controllare questi sottotipi e [`ClaudeAgentOptions`](/docs/it/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/it/agent-sdk/typescript#options) per la sintassi.221Quando uno dei due limiti viene raggiunto, l'SDK restituisce un `ResultMessage` con un sottotipo di errore corrispondente (`error_max_turns` o `error_max_budget_usd`). Vedere [Gestire il risultato](#handle-the-result) per come controllare questi sottotipi e [`ClaudeAgentOptions`](/docs/it/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/it/agent-sdk/typescript#options) per la sintassi.

222 222 


224 224 

225Con [streaming input](/docs/it/agent-sdk/streaming-vs-single-mode), un messaggio che è ancora in coda quando un turno termina al limite di max-turni rimane in coda. Claude Code non lo aggiunge alla chiamata del modello finale di quel turno. Inizia un nuovo turno per il messaggio e il conteggio di max-turni ricomincia da capo per quel turno. Il totale del budget continua ad accumularsi tra i messaggi e una volta che la spesa raggiunge `maxBudgetUsd`, i messaggi successivi nella stessa conversazione terminano con il risultato `error_max_budget_usd`. Un [`/clear`](/docs/it/agent-sdk/cost-tracking) ricomincia il budget da capo.225Con [streaming input](/docs/it/agent-sdk/streaming-vs-single-mode), un messaggio che è ancora in coda quando un turno termina al limite di max-turni rimane in coda. Claude Code non lo aggiunge alla chiamata del modello finale di quel turno. Inizia un nuovo turno per il messaggio e il conteggio di max-turni ricomincia da capo per quel turno. Il totale del budget continua ad accumularsi tra i messaggi e una volta che la spesa raggiunge `maxBudgetUsd`, i messaggi successivi nella stessa conversazione terminano con il risultato `error_max_budget_usd`. Un [`/clear`](/docs/it/agent-sdk/cost-tracking) ricomincia il budget da capo.

226 226 

227<h4 id="budget-headroom">

228 Margine del budget

229</h4>

230 

231Claude Code confronta la spesa con il limite `max_budget_usd` / `maxBudgetUsd` dopo l'arrivo delle risposte del modello, perché il costo di ogni risposta deriva dall'utilizzo di token che l'API restituisce insieme ad essa. La risposta che raggiunge il limite viene comunque completata e conta in [`total_cost_usd`](/docs/it/agent-sdk/cost-tracking#get-the-total-cost-of-a-query). La spesa può quindi superare il limite fino al costo di quella singola risposta, più quanto spendono i subagent ancora in esecuzione in quel momento prima di fermarsi. Lascia un margine per questo quando imposti il limite.

232 

227<h3 id="effort-level">233<h3 id="effort-level">

228 Livello di sforzo234 Livello di sforzo

229</h3>235</h3>

Details

146| `auto` | Approvazioni classificate dal modello | Un classificatore del modello esamina azioni come comandi shell e richieste di rete, consentendo o bloccando ciascuna che esamina. Vedere [Modalità Auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) per la disponibilità e l'ordine di decisione |146| `auto` | Approvazioni classificate dal modello | Un classificatore del modello esamina azioni come comandi shell e richieste di rete, consentendo o bloccando ciascuna che esamina. Vedere [Modalità Auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) per la disponibilità e l'ordine di decisione |

147 147 

148<Warning>148<Warning>

149 **Ereditarietà dei subagent:** Un subagent viene eseguito nella modalità di autorizzazione della sessione padre a meno che non si imposti `permissionMode` sulla sua [`AgentDefinition`](/docs/it/agent-sdk/typescript#agentdefinition) e la sessione padre sia in modalità `default`, `dontAsk` o `plan`. Anche in questo caso, Claude Code non applica mai un valore `"bypassPermissions"`. Un subagent viene eseguito in modalità `bypassPermissions` solo quando la sessione padre stessa lo fa. L'eccezione `bypassPermissions` richiede Claude Code v2.1.267 o successivo.149 **Ereditarietà dei subagent:** Un subagent viene eseguito nella modalità di permesso della sessione padre a meno che tu non imposti `permissionMode` sulla sua [`AgentDefinition`](/docs/it/agent-sdk/typescript#agentdefinition) e la sessione padre sia in modalità `default`, `dontAsk` o `plan`. Anche in questo caso, Claude Code non applica mai un valore `"bypassPermissions"` e applica un valore `"auto"` solo quando la [modalità auto è disponibile](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) per quel subagent. Un subagent viene eseguito in modalità `bypassPermissions` solo quando lo è la sessione padre stessa. L'eccezione `bypassPermissions` richiede Claude Code v2.1.267 o successivo.

150 150 

151 I subagent possono avere prompt di sistema diversi e comportamenti meno vincolati rispetto all'agente principale, quindi ereditare `bypassPermissions` concede loro accesso completo e autonomo al sistema. Le [azioni che nessuna modalità approva automaticamente](/docs/it/permission-modes#actions-no-mode-auto-approves) si applicano comunque.151 I subagent possono avere prompt di sistema diversi e comportamenti meno vincolati rispetto all'agente principale, quindi ereditare `bypassPermissions` concede loro accesso completo e autonomo al sistema. Le [azioni che nessuna modalità approva automaticamente](/docs/it/permission-modes#actions-no-mode-auto-approves) si applicano comunque.

152</Warning>152</Warning>

Details

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 degli strumenti) |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. La stima può superare questo valore, quindi [lascia un margine](/docs/it/agent-sdk/agent-loop#budget-headroom). 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 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) |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) |


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 subagent.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 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.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`.

991 

992 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 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`.993* `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 994 

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.995 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.


3327{3329{

3328 "url": str, # L'URL da cui recuperare il contenuto3330 "url": str, # L'URL da cui recuperare il contenuto

3329 "prompt": str, # Il prompt da eseguire sul contenuto recuperato3331 "prompt": str, # Il prompt da eseguire sul contenuto recuperato

3332 "offset": int | None, # Numero di caratteri da saltare dall'inizio della pagina. Richiede Python Agent SDK 0.2.164 o successivo

3330}3333}

3331```3334```

3332 3335 

Details

323 Rilevare l'invocazione di subagent323 Rilevare l'invocazione di subagent

324</h2>324</h2>

325 325 

326Claude invoca i subagent tramite lo strumento Agent. Per rilevare quando un subagent viene invocato, verificare i blocchi `tool_use` dove `name` è `"Agent"`. I messaggi provenienti dal contesto di un subagent includono un campo `parent_tool_use_id`.326Claude invoca i subagent tramite lo strumento Agent. Per rilevare quando un subagent viene invocato, verifica i blocchi `tool_use` dove `name` è `"Agent"`.

327 

328I messaggi provenienti dal contesto di un subagent includono un campo `parent_tool_use_id`. In TypeScript, ogni messaggio assistant e user prodotto da un subagent contiene anche [`agent_id`](/docs/it/agent-sdk/typescript#sdkassistantmessage): il `task_id` degli [eventi task](/docs/it/agent-sdk/typescript#sdktaskstartedmessage) di quel subagent. `agent_id` richiede TypeScript Agent SDK v0.3.292 o versioni successive.

327 329 

328<Note>330<Note>

329 Lo strumento appare come `"Agent"` nei blocchi `tool_use` ma come `"Task"` nell'elenco degli strumenti `system:init`. Prima di Claude Code v2.1.63, i blocchi `tool_use` lo denominano anche `"Task"`. Per mantenere il rilevamento funzionante tra le versioni dell'SDK, abbinare entrambi i valori in `block.name`.331 Lo strumento appare come `"Agent"` nei blocchi `tool_use` ma come `"Task"` nell'elenco degli strumenti `system:init`. Prima di Claude Code v2.1.63, i blocchi `tool_use` lo denominano anche `"Task"`. Per mantenere il rilevamento funzionante tra le versioni dell'SDK, abbinare entrambi i valori in `block.name`.


331 333 

332La struttura del messaggio differisce tra gli SDK. In Python, si accede ai blocchi di contenuto direttamente tramite `message.content`. In TypeScript, `SDKAssistantMessage` racchiude il messaggio dell'API Claude, quindi si accede al contenuto tramite `message.message.content`.334La struttura del messaggio differisce tra gli SDK. In Python, si accede ai blocchi di contenuto direttamente tramite `message.content`. In TypeScript, `SDKAssistantMessage` racchiude il messaggio dell'API Claude, quindi si accede al contenuto tramite `message.message.content`.

333 335 

334Questo esempio itera attraverso i messaggi in streaming, registrando quando un subagent viene invocato e quando i messaggi successivi provengono dal contesto di esecuzione di quel subagent.336Questo esempio itera attraverso i messaggi in streaming, registrando quando un subagent viene invocato e quando i messaggi successivi provengono dal contesto di esecuzione di quel subagent. La versione TypeScript registra anche l'`agent_id` di ogni messaggio del subagent che ne contiene uno.

335 337 

336<CodeGroup>338<CodeGroup>

337 ```python Python theme={null}339 ```python Python theme={null}


403 // Check if this message is from within a subagent's context405 // Check if this message is from within a subagent's context

404 if (msg.parent_tool_use_id) {406 if (msg.parent_tool_use_id) {

405 console.log(" (running inside subagent)");407 console.log(" (running inside subagent)");

408 // On assistant and user messages, agent_id matches the task_id

409 // on that subagent's task_started and other task events

410 if (msg.agent_id) {

411 console.log(` agent_id: ${msg.agent_id}`);

412 }

406 }413 }

407 414 

408 if ("result" in message) {415 if ("result" in message) {

Details

569| `includePartialMessages` | `boolean` | `false` | Include gli eventi dei messaggi parziali |569| `includePartialMessages` | `boolean` | `false` | Include gli eventi dei messaggi parziali |

570| `loadTimeoutMs` | `number` | `60000` | *Alpha.* Timeout in millisecondi per ogni chiamata a `sessionStore.load()` e `sessionStore.listSubkeys()` durante la materializzazione della ripresa. Se l'adattatore non si risolve entro questo intervallo, la query fallisce invece di bloccarsi. Ignorato quando `sessionStore` non è impostato |570| `loadTimeoutMs` | `number` | `60000` | *Alpha.* Timeout in millisecondi per ogni chiamata a `sessionStore.load()` e `sessionStore.listSubkeys()` durante la materializzazione della ripresa. Se l'adattatore non si risolve entro questo intervallo, la query fallisce invece di bloccarsi. Ignorato quando `sessionStore` non è impostato |

571| `managedSettings` | `Settings` | `undefined` | Impostazioni di livello policy che il tuo processo host fornisce alla sessione avviata. Sui computer con impostazioni gestite distribuite dall'amministratore, Claude Code le ignora a meno che la fonte gestita con la massima priorità dell'amministratore non imposti `parentSettingsBehavior: 'merge'`, e non ne esegue mai il merge mentre un [`policyHelper`](/docs/it/settings-reference#policyhelper) fornisce impostazioni gestite. I valori sottoposti a merge passano attraverso un filtro solo restrittivo; [Limitare le impostazioni padre](/docs/it/claude-apps-gateway#restrict-parent-settings) descrive cosa ammette il filtro e i blocchi `allowManaged*Only`. Un host che imposta [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/it/env-vars) legge invece tre chiavi direttamente da questo payload: la sua [configurazione del modello](/docs/it/model-config#restrict-model-selection) su Claude Code v2.1.222 o successivo, [`modelPricing`](/docs/it/settings-reference#modelpricing) quando nessuna fonte gestita lo imposta su v2.1.246 o successivo, e la sua voce env `ENABLE_TOOL_SEARCH` su v2.1.247 o successivo |571| `managedSettings` | `Settings` | `undefined` | Impostazioni di livello policy che il tuo processo host fornisce alla sessione avviata. Sui computer con impostazioni gestite distribuite dall'amministratore, Claude Code le ignora a meno che la fonte gestita con la massima priorità dell'amministratore non imposti `parentSettingsBehavior: 'merge'`, e non ne esegue mai il merge mentre un [`policyHelper`](/docs/it/settings-reference#policyhelper) fornisce impostazioni gestite. I valori sottoposti a merge passano attraverso un filtro solo restrittivo; [Limitare le impostazioni padre](/docs/it/claude-apps-gateway#restrict-parent-settings) descrive cosa ammette il filtro e i blocchi `allowManaged*Only`. Un host che imposta [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/it/env-vars) legge invece tre chiavi direttamente da questo payload: la sua [configurazione del modello](/docs/it/model-config#restrict-model-selection) su Claude Code v2.1.222 o successivo, [`modelPricing`](/docs/it/settings-reference#modelpricing) quando nessuna fonte gestita lo imposta su v2.1.246 o successivo, e la sua voce env `ENABLE_TOOL_SEARCH` su v2.1.247 o successivo |

572| `maxBudgetUsd` | `number` | `undefined` | Interrompe la query quando la stima dei costi lato client raggiunge questo valore in USD. Conta solo la spesa della chiamata stessa; i totali ripristinati da una sessione ripresa non vengono conteggiati. Per le avvertenze sulla precisione e il comportamento di azzeramento, consulta [Tracciare costi e utilizzo](/docs/it/agent-sdk/cost-tracking) |572| `maxBudgetUsd` | `number` | `undefined` | Interrompe la query quando la stima dei costi lato client raggiunge questo valore in USD. La stima può superare questo valore, quindi [lascia un margine](/docs/it/agent-sdk/agent-loop#budget-headroom). Conta solo la spesa della chiamata stessa; i totali ripristinati da una sessione ripresa non vengono conteggiati. Per le avvertenze sull'accuratezza e il comportamento di reimpostazione, consulta [Monitorare costi e utilizzo](/docs/it/agent-sdk/cost-tracking) |

573| `maxThinkingTokens` | `number` | `undefined` | *Deprecato:* usa invece `thinking`. Numero massimo di token per il processo di ragionamento |573| `maxThinkingTokens` | `number` | `undefined` | *Deprecato:* usa invece `thinking`. Numero massimo di token per il processo di ragionamento |

574| `maxTurns` | `number` | `undefined` | Numero massimo di turni agentici (round trip di uso degli strumenti) |574| `maxTurns` | `number` | `undefined` | Numero massimo di turni agentici (round trip di uso degli strumenti) |

575| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | Configurazioni dei server MCP |575| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | Configurazioni dei server MCP |


631```631```

632 632 

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

634* `CLAUDE_CODE_MAX_RETRIES`: numero massimo di nuovi tentativi delle API. Valore predefinito `10`, con un limite di `15`. Ogni nuovo tentativo ha la propria finestra `API_TIMEOUT_MS`, quindi il tempo reale nel caso peggiore è circa `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` più il backoff. Per le esecuzioni non presidiate 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, su Claude Code v2.1.199 o successivo, porta il valore predefinito per gli altri errori transitori a `300` e rimuove il limite su questa variabile.634* `CLAUDE_CODE_MAX_RETRIES`: numero massimo di nuovi tentativi API. Valore predefinito `10`, con un limite di `15`. Ogni nuovo tentativo ha la propria finestra `API_TIMEOUT_MS`.

635 

636 Per le esecuzioni non presidiate che devono attendere durante 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, su Claude Code v2.1.199 o successive, alza il valore predefinito per gli altri errori transitori a `300` e rimuove il limite su questa variabile.

635* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog dei blocchi per i subagent. Mentre il watchdog dello stream è attivo, il valore predefinito è `CLAUDE_STREAM_IDLE_TIMEOUT_MS` più 5 minuti, ovvero `600000` a meno che tu non aumenti quella variabile. Con il watchdog dello stream disattivato, il valore predefinito è `600000`. Prima della v2.1.257, il valore predefinito era sempre `600000`.637* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog dei blocchi per i subagent. Mentre il watchdog dello stream è attivo, il valore predefinito è `CLAUDE_STREAM_IDLE_TIMEOUT_MS` più 5 minuti, ovvero `600000` a meno che tu non aumenti quella variabile. Con il watchdog dello stream disattivato, il valore predefinito è `600000`. Prima della v2.1.257, il valore predefinito era sempre `600000`.

636 638 

637 Il timer si azzera a ogni evento dello stream. In caso di blocco, Claude Code interrompe il subagent e segnala il blocco al padre. Per un subagent in background, contrassegna anche l'attività come non riuscita e allega l'eventuale risultato parziale.639 Il timer si azzera a ogni evento dello stream. In caso di blocco, Claude Code interrompe il subagent e segnala il blocco al padre. Per un subagent in background, contrassegna anche l'attività come non riuscita e allega l'eventuale risultato parziale.


1557 type: "assistant";1559 type: "assistant";

1558 uuid: UUID;1560 uuid: UUID;

1559 session_id: string;1561 session_id: string;

1560 message: BetaMessage; // Dall'SDK Anthropic1562 message: BetaMessage; // From Anthropic SDK

1561 parent_tool_use_id: string | null;1563 parent_tool_use_id: string | null;

1562 error?: SDKAssistantMessageError;1564 error?: SDKAssistantMessageError;

1563 aborted?: true;1565 aborted?: true;

1566 agent_id?: string;

1564 timestamp?: string;1567 timestamp?: string;

1565 context_usage?: SDKContextUsage;1568 context_usage?: SDKContextUsage;

1566 user_message_uuid?: string;1569 user_message_uuid?: string;


1580 1583 

1581`aborted` è `true` quando un'interruzione o un annullamento ha troncato il messaggio dell'assistente prima del completamento del flusso: il messaggio non ha `stop_reason` e il contenuto può terminare a metà parola. Il campo è assente sui messaggi completati normalmente. Richiede Agent SDK v0.3.214 o successivo.1584`aborted` è `true` quando un'interruzione o un annullamento ha troncato il messaggio dell'assistente prima del completamento del flusso: il messaggio non ha `stop_reason` e il contenuto può terminare a metà parola. Il campo è assente sui messaggi completati normalmente. Richiede Agent SDK v0.3.214 o successivo.

1582 1585 

1586`agent_id` identifica il subagent che ha prodotto il messaggio ed è assente nei messaggi del thread principale. Il valore è uguale al `task_id` nel [`task_started`](#sdktaskstartedmessage) di quel subagent e negli altri eventi di attività, e non cambia quando il subagent viene [ripreso](/docs/it/agent-sdk/subagents#resume-subagents). Il campo richiede Agent SDK v0.3.292 o successiva.

1587 

1588Associa i messaggi di un subagent ai suoi eventi di attività tramite `agent_id`, anziché abbinare il `parent_tool_use_id` di un messaggio con il `tool_use_id` di un evento di attività. Quando una chiamata a uno strumento riprende il subagent, gli eventi di attività riportano il `tool_use_id` di quella chiamata, mentre i messaggi mantengono il `parent_tool_use_id` della chiamata allo strumento che ha avviato per primo il subagent, quindi i due non corrispondono più.

1589 

1583Claude Code imposta `user_message_uuid` e `user_message_uuids` sul primo messaggio dell'assistente del turno, secondo le condizioni descritte in [`user_message_uuid`](#user_message_uuid). Quando Claude Code riesegue un turno che un riavvio ha interrotto, i messaggi dell'assistente della riesecuzione che contengono questi campi contengono anche [`resume_reason`](#resume_reason).1590Claude Code imposta `user_message_uuid` e `user_message_uuids` sul primo messaggio dell'assistente del turno, secondo le condizioni descritte in [`user_message_uuid`](#user_message_uuid). Quando Claude Code riesegue un turno che un riavvio ha interrotto, i messaggi dell'assistente della riesecuzione che contengono questi campi contengono anche [`resume_reason`](#resume_reason).

1584 1591 

1585`timestamp` è l'ora ISO 8601 in cui il contenuto del messaggio ha finito di essere generato sul processo che lo ha prodotto. Il valore proviene dall'orologio di quella macchina, quindi usalo solo per la visualizzazione e non ordinare i messaggi in base a esso. Un turno API può produrre diversi messaggi dell'assistente che condividono un `message.id`, ciascuno con il proprio `timestamp`. Quando il campo è assente, usa come ripiego il momento in cui hai ricevuto il messaggio.1592`timestamp` è l'ora ISO 8601 in cui il contenuto del messaggio ha finito di essere generato sul processo che lo ha prodotto. Il valore proviene dall'orologio di quella macchina, quindi usalo solo per la visualizzazione e non ordinare i messaggi in base a esso. Un turno API può produrre diversi messaggi dell'assistente che condividono un `message.id`, ciascuno con il proprio `timestamp`. Quando il campo è assente, usa come ripiego il momento in cui hai ricevuto il messaggio.


1597 type: "user";1604 type: "user";

1598 uuid?: UUID;1605 uuid?: UUID;

1599 session_id?: string;1606 session_id?: string;

1607 agent_id?: string;

1600 message: MessageParam; // From Anthropic SDK1608 message: MessageParam; // From Anthropic SDK

1601 pasted_content?: MessageParam["content"][];1609 pasted_content?: MessageParam["content"][];

1602 parent_tool_use_id: string | null;1610 parent_tool_use_id: string | null;


1636};1644};

1637```1645```

1638 1646 

1647Un messaggio dell'utente prodotto da un subagent, come il `tool_result` di una delle sue chiamate a strumenti, riporta `agent_id`. Consulta [`SDKAssistantMessage`](#sdkassistantmessage), che definisce il campo e il relativo requisito di versione.

1648 

1639In un messaggio che contiene un blocco `tool_result`, `tool_use_result` è l'oggetto di output strutturato dello strumento anziché il testo inviato al modello. La sua forma dipende dallo strumento indicato dal blocco `tool_use` corrispondente, quindi il campo è di tipo `unknown`; le forme integrate sono elencate in [Tool Output Types](#tool-output-types). Questi risultati richiedono una gestione che va oltre la forma elencata:1649In un messaggio che contiene un blocco `tool_result`, `tool_use_result` è l'oggetto di output strutturato dello strumento anziché il testo inviato al modello. La sua forma dipende dallo strumento indicato dal blocco `tool_use` corrispondente, quindi il campo è di tipo `unknown`; le forme integrate sono elencate in [Tool Output Types](#tool-output-types). Questi risultati richiedono una gestione che va oltre la forma elencata:

1640 1650 

1641* Lo strumento `Agent`: `tool_use_result` è [`AgentOutput`](#agent-2). Esegui il rendering a partire da esso anziché analizzare il testo di `tool_result`. Il `content` di un risultato `completed` contiene il report del subagent oppure, per un subagent il cui report passa attraverso una chiamata allo strumento `SubagentHandback`, una breve nota su quella restituzione al posto del report. In [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) su Claude Code v2.1.271 o successiva, ogni subagent che produce un risultato `completed` riporta in quel modo a meno che non sia un [fork](/docs/it/sub-agents#fork-the-current-conversation), e Claude riceve il report come messaggio separato dal subagent.1651* Lo strumento `Agent`: `tool_use_result` è [`AgentOutput`](#agent-2). Esegui il rendering a partire da esso anziché analizzare il testo di `tool_result`. Il `content` di un risultato `completed` contiene il report del subagent oppure, per un subagent il cui report passa attraverso una chiamata allo strumento `SubagentHandback`, una breve nota su quella restituzione al posto del report. In [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) su Claude Code v2.1.271 o successiva, ogni subagent che produce un risultato `completed` riporta in quel modo a meno che non sia un [fork](/docs/it/sub-agents#fork-the-current-conversation), e Claude riceve il report come messaggio separato dal subagent.


1992 `SDKPartialAssistantMessage`2002 `SDKPartialAssistantMessage`

1993</h3>2003</h3>

1994 2004 

1995Messaggio parziale in streaming (solo quando `includePartialMessages` è true). Il campo `parent_tool_use_id` è sempre `null`: gli eventi di flusso vengono emessi solo per la sessione principale. Per attribuire i messaggi ai subagent, usa i messaggi completi, che contengono `parent_tool_use_id`, oppure abilita [`forwardSubagentText`](#options) per ricevere il testo e il ragionamento dei subagent come messaggi completi.2005Messaggio parziale in streaming (solo quando `includePartialMessages` è true).

2006 

2007Il campo `parent_tool_use_id` è sempre `null`: gli eventi di stream vengono emessi solo per la sessione principale. Per l'attribuzione ai subagent, usa i messaggi completi, che riportano [`agent_id`](#sdkassistantmessage) e `parent_tool_use_id`, oppure abilita [`forwardSubagentText`](#options) per ricevere il testo e il ragionamento dei subagent come messaggi completi.

1996 2008 

1997```typescript theme={null}2009```typescript theme={null}

1998type SDKPartialAssistantMessage = {2010type SDKPartialAssistantMessage = {


3418type WebFetchInput = {3430type WebFetchInput = {

3419 url: string;3431 url: string;

3420 prompt: string;3432 prompt: string;

3433 offset?: number;

3421};3434};

3422```3435```

3423 3436 

3424Recupera il contenuto da un URL e lo elabora con un modello AI.3437Recupera il contenuto da un URL e lo elabora con un modello AI.

3425 3438 

3439`offset` è il numero di caratteri da saltare dall'inizio della pagina. Claude lo imposta per continuare a leggere una pagina lunga. Il campo richiede Agent SDK v0.3.290 o successivo.

3440 

3426<h3 id="websearch">3441<h3 id="websearch">

3427 WebSearch3442 WebSearch

3428</h3>3443</h3>


5777 task_type?: string;5792 task_type?: string;

5778 is_backgrounded?: boolean;5793 is_backgrounded?: boolean;

5779 spawn_depth?: number;5794 spawn_depth?: number;

5795 parent_task_id?: string;

5780 ambient?: boolean;5796 ambient?: boolean;

5781 uuid: UUID;5797 uuid: UUID;

5782 session_id: string;5798 session_id: string;


5794 5810 

5795Un [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`.5811Un [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`.

5796 5812 

5813`parent_task_id` contiene il `task_id` del subagent che ha avviato questa attività. Usalo per raggruppare ogni attività sotto il subagent che l'ha avviata. Claude Code lo imposta sulle attività di subagent, Bash e [Monitor](#monitor). Il campo richiede Agent SDK v0.3.292 o versioni successive. È assente quando:

5814 

5815* L'attività è stata avviata dal thread principale

5816* Claude Code non tiene più traccia dell'attività padre

5817* L'attività è stata avviata da un [membro di un team di agenti](/docs/it/agent-teams) o da un agente all'interno di un workflow

5818 

5819L'attività padre può essere un'attività in primo piano o un'attività già terminata, quindi tratta un ID che non riconosci come assenza di attività padre.

5820 

5797<h3 id="sdktaskprogressmessage">5821<h3 id="sdktaskprogressmessage">

5798 `SDKTaskProgressMessage`5822 `SDKTaskProgressMessage`

5799</h3>5823</h3>


5850 `SDKBackgroundTasksChangedMessage`5874 `SDKBackgroundTasksChangedMessage`

5851</h3>5875</h3>

5852 5876 

5853Emesso 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à.5877Emesso ogni volta che l'insieme delle attività in background attive cambia: un'attività inizia, viene completata o viene terminata; un agente in primo piano passa in background; oppure cambia il campo `description`, `ambient` o `parent_task_id` di un'attività. Per il campo `parent_task_id` di ciascuna voce, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), che lo definisce insieme al relativo requisito di versione.

5854 5878 

5855L'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.5879L'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.

5856 5880 

5857L'ordinamento rispetto a quegli eventi per singola attività non è specificato, quindi non correlare i due flussi.5881Quando un'attività termina, i suoi [`task_updated`](#sdktaskupdatedmessage) e [`task_notification`](#sdktasknotificationmessage) arrivano prima del `background_tasks_changed` che la rimuove dall'elenco. Per il resto, l'ordinamento rispetto agli eventi per singola attività non è specificato.

5858 5882 

5859All'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.5883All'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.

5860 5884 


5871 task_type: string;5895 task_type: string;

5872 subagent_type?: string;5896 subagent_type?: string;

5873 description: string;5897 description: string;

5898 parent_task_id?: string;

5874 ambient?: boolean;5899 ambient?: boolean;

5875 }[];5900 }[];

5876 uuid: UUID;5901 uuid: UUID;

Details

36 ```36 ```

37 37 

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

39 async function handleToolRequest(toolName, input, options) {39 import type { CanUseTool } from "@anthropic-ai/claude-agent-sdk";

40 

41 const handleToolRequest: CanUseTool = async (toolName, input, options) => {

40 // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] }42 // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] }

41 // Chiedi all'utente e restituisci allow o deny43 // Chiedi all'utente qui, poi restituisci allow o deny

42 }44 return { behavior: "deny", message: "User declined" };

45 };

43 46 

44 const options = { canUseTool: handleToolRequest };47 const options = { canUseTool: handleToolRequest };

45 ```48 ```


440 // Includi AskUserQuestion nella tua lista di strumenti443 // Includi AskUserQuestion nella tua lista di strumenti

441 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],444 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],

442 canUseTool: async (toolName, input) => {445 canUseTool: async (toolName, input) => {

443 // Gestisci le domande di chiarimento qui446 // Segnaposto che approva ogni chiamata. Il passaggio Rileva AskUserQuestion lo sostituisce.

447 return { behavior: "allow", updatedInput: input };

444 }448 }

445 }449 }

446 })) {450 })) {


763 767 

764 ```typescript TypeScript theme={null}768 ```typescript TypeScript theme={null}

765 import { query } from "@anthropic-ai/claude-agent-sdk";769 import { query } from "@anthropic-ai/claude-agent-sdk";

770 import type { PermissionResult } from "@anthropic-ai/claude-agent-sdk";

766 import * as readline from "readline/promises";771 import * as readline from "readline/promises";

767 772 

768 // Helper per chiedere all'utente l'input nel terminale773 // Helper per chiedere all'utente l'input nel terminale


783 }788 }

784 789 

785 // Visualizza le domande di Claude e raccogli le risposte dell'utente790 // Visualizza le domande di Claude e raccogli le risposte dell'utente

786 async function handleAskUserQuestion(input: any) {791 async function handleAskUserQuestion(input: any): Promise<PermissionResult> {

787 const answers: Record<string, string> = {};792 const answers: Record<string, string> = {};

788 793 

789 for (const q of input.questions) {794 for (const q of input.questions) {

agent-view.md +9 −6

Details

603 603 

604Al di fuori di un repository git, le sessioni scrivono direttamente nella directory di lavoro e non sono isolate l'una dall'altra, quindi evita di inviare sessioni parallele che modificano gli stessi file. Se usi un sistema di controllo della versione diverso, configura un [hook `WorktreeCreate`](/docs/it/worktrees#non-git-version-control) e Claude isola le modifiche nello stesso modo in cui lo fa per git.604Al di fuori di un repository git, le sessioni scrivono direttamente nella directory di lavoro e non sono isolate l'una dall'altra, quindi evita di inviare sessioni parallele che modificano gli stessi file. Se usi un sistema di controllo della versione diverso, configura un [hook `WorktreeCreate`](/docs/it/worktrees#non-git-version-control) e Claude isola le modifiche nello stesso modo in cui lo fa per git.

605 605 

606Quando l'hook fallisce in una directory che non è un repository git, Claude salta l'isolamento per quella directory e modifica la directory di lavoro in posizione. All'interno di un repository git, una sessione che Claude sposta in un worktree prima di modificare non può modificare i file nel checkout condiviso finché quello spostamento non avviene.606Quando l'hook fallisce in una directory che non è un repository git, Claude salta l'isolamento per quella directory e modifica la directory di lavoro in posizione. All'interno di un repository git, una sessione che Claude sposta in un worktree prima di modificare non può usare gli strumenti `Edit`, `Write` o `NotebookEdit` sul checkout condiviso finché quello spostamento non avviene.

607 607 

608Per trovare il percorso del worktree di una sessione, collegati e controlla la sua directory di lavoro.608Per trovare il percorso del worktree di una sessione, collegati e controlla la sua directory di lavoro.

609 609 


825| `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` |825| `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` |

826| `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 |826| `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 |

827 827 

828`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.828`claude attach` e `claude logs` possono accettare parte del nome di una sessione al posto dell'ID, come in `claude logs "auth refactor"`. Passare un nome richiede Claude Code v2.1.290 o successivo.

829 829 

830<h3 id="list-sessions-as-json">830<h3 id="list-sessions-as-json">

831 Elencare le sessioni come JSON831 Elencare le sessioni come JSON


979 L'apertura di una sessione dice che non ha trascrizione salvata979 L'apertura di una sessione dice che non ha trascrizione salvata

980</h3>980</h3>

981 981 

982Una sessione interrotta che è stata [messa in background da un'altra conversazione](#from-inside-a-session) e interrotta prima che la sua prima risposta finisse non ha nulla da riprendere: fino a quando quella prima risposta non finisce, la conversazione vive ancora solo nella sessione da cui è stata messa in background. `claude attach` rifiuta di aprirla con `This session has no saved transcript`.982Quando apri una sessione che hai [messo in background da un'altra conversazione](#from-inside-a-session) e che si è interrotta prima di eseguire un turno proprio, Claude Code riprende quella conversazione. Se Claude Code non riesce a trovare la conversazione, rifiuta di aprire la sessione:

983 983 

984In agent view, aprire quella riga mostra `Press enter again to restart this session fresh` sotto l'elenco. Premi `Enter` sulla stessa riga di nuovo per riavviare la sessione con una conversazione vuota, o esegui `claude respawn <id>` dalla shell.984* `claude attach` stampa `This session has no saved transcript`.

985* Agent view mostra `Press enter again to restart this session fresh` sotto l'elenco.

985 986 

986La conversazione originale è intatta; riprendila con `claude --resume` o continua a lavorarci. Vedi il [riferimento degli errori](/docs/it/errors#this-session-has-no-saved-transcript) per i dettagli.987Premi `Enter` sulla stessa riga di nuovo per riavviare la sessione con una conversazione vuota, o esegui `claude respawn <id>` dalla shell.

988 

989Vedi il [riferimento degli errori](/docs/it/errors#this-session-has-no-saved-transcript) per i dettagli.

987 990 

988<h3 id="the-terminal-host-died-or-the-session-stopped-responding">991<h3 id="the-terminal-host-died-or-the-session-stopped-responding">

989 L'host del terminale è morto o la sessione ha smesso di rispondere992 L'host del terminale è morto o la sessione ha smesso di rispondere


1095 1098 

1096| Versione | Cambiamento |1099| Versione | Cambiamento |

1097| - | - |1100| - | - |

1098| v2.1.290 | [`claude attach` e `claude logs`](#manage-sessions-from-the-shell) possono accettare parte del nome di una sessione in esecuzione al posto dell'ID. |1101| v2.1.290 | [`claude attach` e `claude logs`](#manage-sessions-from-the-shell) possono accettare parte del nome di una sessione al posto dell'ID. |

1099| v2.1.290 | `/model`, `/effort`, `/rename` e `/usage` inviati come [risposta dal pannello peek](#peek-and-reply) a una sessione al lavoro vengono eseguiti subito. |1102| v2.1.290 | `/model`, `/effort`, `/rename` e `/usage` inviati come [risposta dal pannello peek](#peek-and-reply) a una sessione al lavoro vengono eseguiti subito. |

1100| v2.1.290 | Una [risposta dal pannello peek](#peek-and-reply) che non può essere consegnata non viene più salvata per il riavvio successivo quando inizia con `/`, o quando risponde a una domanda con scelte predefinite mentre il processo della sessione è in esecuzione. |1103| v2.1.290 | Una [risposta dal pannello peek](#peek-and-reply) che non può essere consegnata non viene più salvata per il riavvio successivo quando inizia con `/`, o quando risponde a una domanda con scelte predefinite mentre il processo della sessione è in esecuzione. |

1101| v2.1.288 | `Ctrl+F` trova le sessioni per nome, e `Alt+↑` / `Alt+↓` saltano tra le intestazioni dei gruppi. Entrambe, e `Ctrl+R`, possono essere [riassegnate](/docs/it/keybindings#agents-actions). |1104| v2.1.288 | `Ctrl+F` trova le sessioni per nome, e `Alt+↑` / `Alt+↓` saltano tra le intestazioni dei gruppi. Entrambe, e `Ctrl+R`, possono essere [riassegnate](/docs/it/keybindings#agents-actions). |

Details

1237 1237 

1238La CLI invia metriche, log e, quando abilitate, tracce al gateway, che le inoltra alla lettera a ogni destinazione configurata. Le esportazioni utilizzano OpenTelemetry Protocol (OTLP) su HTTP. Per saltare l'inoltro e far esportare le sessioni direttamente al tuo collettore, [nomina il collettore in una policy](#export-directly-to-your-collector). Vedi [Monitoraggio dell'utilizzo](/docs/it/monitoring-usage) per le metriche e gli eventi che la CLI emette.1238La CLI invia metriche, log e, quando abilitate, tracce al gateway, che le inoltra alla lettera a ogni destinazione configurata. Le esportazioni utilizzano OpenTelemetry Protocol (OTLP) su HTTP. Per saltare l'inoltro e far esportare le sessioni direttamente al tuo collettore, [nomina il collettore in una policy](#export-directly-to-your-collector). Vedi [Monitoraggio dell'utilizzo](/docs/it/monitoring-usage) per le metriche e gli eventi che la CLI emette.

1239 1239 

1240Nelle sessioni con accesso effettuato tramite `/login`, la CLI contrassegna ogni esportazione con l'identità dell'utente autenticato, letta dal JWT emesso dal gateway: gli attributi `user.id`, `user.email` e `user.groups`. L'attribuzione di costi e utilizzo per sviluppatore funziona quindi senza alcuna configurazione lato sviluppatore.1240Nelle sessioni con accesso effettuato tramite `/login`, la CLI contrassegna ogni esportazione con l'identità dell'utente autenticato, letta dal JWT emesso dal gateway: gli attributi `user.id`, `user.email` e `user.groups`. L'attribuzione di costi e utilizzo per sviluppatore funziona quindi senza alcuna configurazione lato sviluppatore. Gli eventi che Claude Code registra prima che lo sviluppatore effettui l'accesso [non contengono questa identità](/docs/it/monitoring-usage#standard-attributes).

1241 1241 

1242Le sessioni di [Claude Desktop](#claude-desktop-overlay) e Cowork con accesso effettuato tramite il gateway contrassegnano la loro telemetria con `user.email` e `user.groups` insieme a `enduser.id`, quindi puoi coprire l'utilizzo da terminale, Desktop e Cowork con un'unica query su `user.email` o `user.groups`. `user.groups` è l'elenco dei gruppi IdP separati da virgole.1242Le sessioni di [Claude Desktop](#claude-desktop-overlay) e Cowork con accesso effettuato tramite il gateway contrassegnano la loro telemetria con `user.email` e `user.groups` insieme a `enduser.id`, quindi puoi coprire l'utilizzo da terminale, Desktop e Cowork con un'unica query su `user.email` o `user.groups`. `user.groups` è l'elenco dei gruppi IdP separati da virgole.

1243 1243 

Details

516 Telemetry516 Telemetry

517</h2>517</h2>

518 518 

519Il gateway fornisce metriche di utilizzo per sviluppatore senza alcuna configurazione OTEL per macchina. Claude Code emette metriche, log e tracce OpenTelemetry (OTLP) opzionali; [Monitoring usage](/docs/it/monitoring-usage) copre tutto ciò che il CLI segnala. Nelle sessioni accedute tramite `/login`, il CLI contrassegna ogni esportazione con gli attributi di identità IdP autenticati `user.id`, `user.email` e `user.groups`, in modo che l'utilizzo si accumuli per sviluppatore.519Il gateway ti fornisce metriche di utilizzo per sviluppatore senza alcuna configurazione OTEL per macchina. Claude Code emette metriche, log e tracce opzionali OpenTelemetry (OTLP); [Monitorare l'utilizzo](/docs/it/monitoring-usage) copre tutto ciò che il CLI segnala. Nelle sessioni in cui l'accesso è stato effettuato tramite `/login`, il CLI [contrassegna ogni esportazione](/docs/it/monitoring-usage#standard-attributes) con gli attributi di identità IdP autenticati `user.id`, `user.email` e `user.groups`, in modo che l'utilizzo venga aggregato per sviluppatore.

520 520 

521Il gateway stesso è un relay OTLP autenticato. Impostare [`telemetry.forward_to`](/docs/it/claude-apps-gateway-config#telemetry) insieme a `listen.public_url`, e spingerà le impostazioni dell'esportatore OTEL a ogni client connesso e inoltrerà il loro traffico OTLP verbatim a ogni destinazione che elencate. Ogni destinazione acconsente a metriche, log e tracce indipendentemente, e l'impostazione predefinita è solo metriche; vedere il [riferimento `telemetry`](/docs/it/claude-apps-gateway-config#telemetry) per i campi per segnale e i loro compromessi di sensibilità. Il gateway non memorizza nel buffer, non aggrega e non archivia telemetria, quindi il luogo in cui i dati arrivano dipende interamente dalla configurazione dell'esportatore del collector.521Il gateway stesso è un relay OTLP autenticato. Impostare [`telemetry.forward_to`](/docs/it/claude-apps-gateway-config#telemetry) insieme a `listen.public_url`, e spingerà le impostazioni dell'esportatore OTEL a ogni client connesso e inoltrerà il loro traffico OTLP verbatim a ogni destinazione che elencate. Ogni destinazione acconsente a metriche, log e tracce indipendentemente, e l'impostazione predefinita è solo metriche; vedere il [riferimento `telemetry`](/docs/it/claude-apps-gateway-config#telemetry) per i campi per segnale e i loro compromessi di sensibilità. Il gateway non memorizza nel buffer, non aggrega e non archivia telemetria, quindi il luogo in cui i dati arrivano dipende interamente dalla configurazione dell'esportatore del collector.

522 522 

Details

483Riapri la sessione da [claude.ai/code](https://claude.ai/code) per fornire una VM nuova:483Riapri la sessione da [claude.ai/code](https://claude.ai/code) per fornire una VM nuova:

484 484 

485* **Ripristinata**: la cronologia della conversazione485* **Ripristinata**: la cronologia della conversazione

486* **Non ripristinato**: il lavoro in background che era ancora in esecuzione quando la VM è stata recuperata, come subagent e comandi shell486* **Non ripristinato**: il lavoro in background che era ancora in esecuzione quando la VM è stata recuperata, come subagent e comandi shell, e il risveglio in sospeso di un [`/loop` a ritmo autonomo](/docs/it/scheduled-tasks#let-claude-choose-the-interval). Per riavviare il ciclo, esegui di nuovo `/loop`.

487 487 

488<h2 id="limitations">488<h2 id="limitations">

489 Limitazioni489 Limitazioni

Details

489* **Routine**: quando chiedi il lavoro programmato in un project, Claude crea una [routine](/docs/it/routines) che viene eseguita come thread in quel project e appare sulla sua scheda **Routines**. Le routine che crei al di fuori di un project continuano a funzionare da sole.489* **Routine**: quando chiedi il lavoro programmato in un project, Claude crea una [routine](/docs/it/routines) che viene eseguita come thread in quel project e appare sulla sua scheda **Routines**. Le routine che crei al di fuori di un project continuano a funzionare da sole.

490* **Remote Control**: [Remote Control](/docs/it/remote-control) connette claude.ai a una sessione Claude Code in esecuzione sulla tua macchina. Quando chiedi a Claude in un project di eseguire un thread sul tuo computer, il project [usa Remote Control per farlo](#run-a-thread-on-your-own-computer).490* **Remote Control**: [Remote Control](/docs/it/remote-control) connette claude.ai a una sessione Claude Code in esecuzione sulla tua macchina. Quando chiedi a Claude in un project di eseguire un thread sul tuo computer, il project [usa Remote Control per farlo](#run-a-thread-on-your-own-computer).

491* **Sessioni locali e agent view**: una sessione che avvii da solo nel tuo terminale, IDE o nell'ambiente locale dell'app desktop non può essere aggiunta a un project. [Agent view](/docs/it/agent-view) è una schermata per tracciare diverse sessioni locali fianco a fianco, e tu avvii ancora ognuna e le dai il suo compito da solo.491* **Sessioni locali e agent view**: una sessione che avvii da solo nel tuo terminale, IDE o nell'ambiente locale dell'app desktop non può essere aggiunta a un project. [Agent view](/docs/it/agent-view) è una schermata per tracciare diverse sessioni locali fianco a fianco, e tu avvii ancora ognuna e le dai il suo compito da solo.

492* **Worktrees**: un [worktree](/docs/it/worktrees) dà a ogni sessione locale la sua copia di lavoro di un repository in modo che le sessioni parallele sulla tua macchina non si sovrascrivano a vicenda. I thread cloud non ne hanno bisogno: ognuno clona i suoi repository nella sua sandbox cloud e lavora sul suo branch.492* **Worktree**: un [worktree](/docs/it/worktrees) dà a ogni sessione locale la sua copia di lavoro di un repository. I thread cloud non ne hanno bisogno: ognuno clona i suoi repository nella sua sandbox cloud e lavora sul suo branch.

493* **Agent teams**: un [agent team](/docs/it/agent-teams) è una sessione che avvia sessioni di compagno per un singolo compito, sulla tua macchina o dentro una sessione cloud, e finisce con quel compito.493* **Agent teams**: un [agent team](/docs/it/agent-teams) è una sessione che avvia sessioni di compagno per un singolo compito, sulla tua macchina o dentro una sessione cloud, e finisce con quel compito.

494* **Subagents**: un [subagent](/docs/it/sub-agents) viene eseguito dentro una sessione, esegue un compito secondario nella sua finestra di contesto propria, e restituisce un riepilogo a quella sessione. I thread di un project sono sessioni intere che Claude avvia e che riferiscono di nuovo alla conversazione del project, e un thread può comunque usare subagent per i suoi propri compiti secondari.494* **Subagents**: un [subagent](/docs/it/sub-agents) viene eseguito dentro una sessione, esegue un compito secondario nella sua finestra di contesto propria, e restituisce un riepilogo a quella sessione. I thread di un project sono sessioni intere che Claude avvia e che riferiscono di nuovo alla conversazione del project, e un thread può comunque usare subagent per i suoi propri compiti secondari.

495* **Projects in claude.ai chat e Cowork**: l'[esperienza Projects precedente](https://support.claude.com/en/articles/9517075-what-are-projects), che raggruppa conversazioni e file di riferimento senza thread o un coordinatore. Questi project continuano a funzionare come fanno oggi fino a quando l'esperienza riprogettata li raggiunge.495* **Projects in claude.ai chat e Cowork**: l'[esperienza Projects precedente](https://support.claude.com/en/articles/9517075-what-are-projects), che raggruppa conversazioni e file di riferimento senza thread o un coordinatore. Questi project continuano a funzionare come fanno oggi fino a quando l'esperienza riprogettata li raggiunge.

Details

28| `claude auth logout` | Esci dal tuo account Anthropic | `claude auth logout` |28| `claude auth logout` | Esci dal tuo account Anthropic | `claude auth logout` |

29| `claude auth status` | Mostra lo stato di autenticazione come JSON. Usa `--text` per output leggibile dall'uomo. Esce con codice 0 se connesso, 1 se no. Il JSON include un campo `configDirectory` che nomina la [directory di configurazione](/docs/it/claude-directory) che la CLI utilizza. Il campo richiede Claude Code v2.1.268 o successivo. Il campo `authMethod` del JSON è uno tra `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` o `third_party` | `claude auth status` |29| `claude auth status` | Mostra lo stato di autenticazione come JSON. Usa `--text` per output leggibile dall'uomo. Esce con codice 0 se connesso, 1 se no. Il JSON include un campo `configDirectory` che nomina la [directory di configurazione](/docs/it/claude-directory) che la CLI utilizza. Il campo richiede Claude Code v2.1.268 o successivo. Il campo `authMethod` del JSON è uno tra `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` o `third_party` | `claude auth status` |

30| `claude agents` | Apri la [visualizzazione agente](/docs/it/agent-view) per monitorare e inviare sessioni parallele in background. Usa `--cwd <path>` per mostrare solo le sessioni avviate in quella directory, oppure `--json` per stampare le sessioni attive come un array JSON per gli script (`--json --all` include anche le sessioni in background completate). Passa `--permission-mode`, `--model`, `--effort` o `--agent` per impostare i [valori predefiniti per le sessioni inviate](/docs/it/agent-view#permission-mode-model-and-effort). Accetta `--settings`, `--add-dir`, `--plugin-dir` e `--mcp-config` come il comando `claude` di livello superiore. L'apertura della visualizzazione agente richiede un terminale interattivo | `claude agents --json` |30| `claude agents` | Apri la [visualizzazione agente](/docs/it/agent-view) per monitorare e inviare sessioni parallele in background. Usa `--cwd <path>` per mostrare solo le sessioni avviate in quella directory, oppure `--json` per stampare le sessioni attive come un array JSON per gli script (`--json --all` include anche le sessioni in background completate). Passa `--permission-mode`, `--model`, `--effort` o `--agent` per impostare i [valori predefiniti per le sessioni inviate](/docs/it/agent-view#permission-mode-model-and-effort). Accetta `--settings`, `--add-dir`, `--plugin-dir` e `--mcp-config` come il comando `claude` di livello superiore. L'apertura della visualizzazione agente richiede un terminale interattivo | `claude agents --json` |

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 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` |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` |


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` |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` |

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` |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` |

39| `claude import [source]` | Avvia una sessione interattiva che esegue [`/import`](/docs/it/commands#all-commands) per portare la configurazione da altri agenti di codifica in Claude Code. Accetta le stesse opzioni `--dry-run` e `--yes` del comando. Non disponibile su Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry o Claude Platform su AWS. Anche non disponibile quando disattivi il [recupero dei feature flag](/docs/it/env-vars#features-that-need-feature-flag-fetching). Richiede Claude Code v2.1.213 o successivo | `claude import codex --dry-run` |39| `claude import [source]` | Avvia una sessione interattiva che esegue [`/import`](/docs/it/commands#all-commands) per portare la configurazione da altri agenti di codifica in Claude Code. Accetta le stesse opzioni `--dry-run` e `--yes` del comando. Non disponibile su Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry o Claude Platform su AWS. Anche non disponibile quando disattivi il [recupero dei feature flag](/docs/it/env-vars#features-that-need-feature-flag-fetching). Richiede Claude Code v2.1.213 o successivo | `claude import codex --dry-run` |

40| `claude logs <id\|name>` | Stampa l'output recente da una [sessione in background](/docs/it/agent-view#manage-sessions-from-the-shell). Passare parte del nome di una sessione in esecuzione al posto dell'ID richiede Claude Code v2.1.290 o successivo | `claude logs 7c5dcf5d` |40| `claude logs <id\|name>` | Stampa l'output recente da una [sessione in background](/docs/it/agent-view#manage-sessions-from-the-shell). Passare parte del nome di una sessione al posto dell'ID richiede Claude Code v2.1.290 o successivo | `claude logs 7c5dcf5d` |

41| `claude mcp` | Configura server Model Context Protocol (MCP) | Vedi la [documentazione MCP di Claude Code](/docs/it/mcp). |41| `claude mcp` | Configura server Model Context Protocol (MCP) | Vedi la [documentazione MCP di Claude Code](/docs/it/mcp). |

42| `claude mcp login <name>` | Esegui il flusso OAuth di un server MCP configurato senza aprire il pannello interattivo `/mcp`. Funziona per server HTTP, SSE e connettori claude.ai. Aggiungi `--no-browser` su SSH per stampare l'URL di autorizzazione invece di aprire un browser, quindi incolla l'URL di reindirizzamento al prompt. Vedi [Autentica dalla riga di comando](/docs/it/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |42| `claude mcp login <name>` | Esegui il flusso OAuth di un server MCP configurato senza aprire il pannello interattivo `/mcp`. Funziona per server HTTP, SSE e connettori claude.ai. Aggiungi `--no-browser` su SSH per stampare l'URL di autorizzazione invece di aprire un browser, quindi incolla l'URL di reindirizzamento al prompt. Vedi [Autentica dalla riga di comando](/docs/it/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |

43| `claude mcp logout <name>` | Cancella le credenziali OAuth archiviate per un server MCP | `claude mcp logout sentry` |43| `claude mcp logout <name>` | Cancella le credenziali OAuth archiviate per un server MCP | `claude mcp logout sentry` |


106| `--input-format` | Specifica il formato di input per la modalità print (opzioni: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |106| `--input-format` | Specifica il formato di input per la modalità print (opzioni: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |

107| `--json-schema` | Ottieni output JSON convalidato corrispondente a uno JSON Schema dopo che l'agente completa il suo flusso di lavoro (solo modalità print). Vedi [output strutturati](/docs/it/agent-sdk/structured-outputs). Claude Code esce con un errore su uno schema non valido e accetta la parola chiave `format` come annotazione senza convalida lato client | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |107| `--json-schema` | Ottieni output JSON convalidato corrispondente a uno JSON Schema dopo che l'agente completa il suo flusso di lavoro (solo modalità print). Vedi [output strutturati](/docs/it/agent-sdk/structured-outputs). Claude Code esce con un errore su uno schema non valido e accetta la parola chiave `format` come annotazione senza convalida lato client | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

108| `--maintenance` | Esegui gli [hook di Setup](/docs/it/hooks#setup) con il matcher `maintenance` prima della sessione (solo modalità print) | `claude -p --maintenance "query"` |108| `--maintenance` | Esegui gli [hook di Setup](/docs/it/hooks#setup) con il matcher `maintenance` prima della sessione (solo modalità print) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Importo massimo in dollari da spendere nelle chiamate API prima di fermarsi (solo modalità print). Claude Code confronta il limite con la sua [stima dei costi lato client](/docs/it/agent-sdk/cost-tracking#estimates-not-billing), che può differire dalla tua fattura. La spesa dei [subagent](/docs/it/sub-agents) conta verso il limite. Quando torni a una conversazione con `--continue` o `--resume`, i totali [ripristinati da esecuzioni precedenti](/docs/it/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) non contano verso di esso. Una volta che la spesa raggiunge il limite, generare un altro subagent fallisce con `Budget limit reached`, e Claude Code ferma i subagent in background ancora in esecuzione; i comportamenti di applicazione del limite richiedono Claude Code v2.1.217 o successivo | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Ferma l'esecuzione quando la spesa stimata per le chiamate API raggiunge questo importo (solo modalità print). Claude Code confronta il limite con la sua [stima dei costi lato client](/docs/it/agent-sdk/cost-tracking#estimates-not-billing), che può differire dalla tua fattura. La spesa dei [subagent](/docs/it/sub-agents) conta verso il limite. La spesa può superare il limite, quindi [lascia un margine](/docs/it/agent-sdk/agent-loop#budget-headroom). Quando torni a una conversazione con `--continue` o `--resume`, i totali [ripristinati da esecuzioni precedenti](/docs/it/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) non contano verso di esso. Una volta che la spesa raggiunge il limite, l'avvio di un altro subagent fallisce con `Budget limit reached`, e Claude Code ferma i subagent in background ancora in esecuzione; i comportamenti di applicazione del limite richiedono Claude Code v2.1.217 o successivo | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Limita il numero di turni agentici (solo modalità print). Esce con un errore quando il limite viene raggiunto. Nessun limite per impostazione predefinita. Con `--input-format stream-json`, un messaggio ancora in coda quando il limite termina un turno rimane in coda e inizia un nuovo turno con il suo proprio limite | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Limita il numero di turni agentici (solo modalità print). Esce con un errore quando il limite viene raggiunto. Nessun limite per impostazione predefinita. Con `--input-format stream-json`, un messaggio ancora in coda quando il limite termina un turno rimane in coda e inizia un nuovo turno con il suo proprio limite | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Carica i server MCP da file JSON o stringhe (separati da spazi). Quando passi questo flag con `-p`, Claude Code attende che i server ancora in sospeso si connettano prima di eseguire il primo turno, fino al timeout di avvio [`MCP_TIMEOUT`](/docs/it/env-vars), 30 secondi per impostazione predefinita; un server con un [elenco di strumenti memorizzato nella cache](/docs/it/mcp#managing-your-servers) salta l'attesa e si connette al primo utilizzo. L'attesa richiede Claude Code v2.1.221 o successivo | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Carica i server MCP da file JSON o stringhe (separati da spazi). Quando passi questo flag con `-p`, Claude Code attende che i server ancora in sospeso si connettano prima di eseguire il primo turno, fino al timeout di avvio [`MCP_TIMEOUT`](/docs/it/env-vars), 30 secondi per impostazione predefinita; un server con un [elenco di strumenti memorizzato nella cache](/docs/it/mcp#managing-your-servers) salta l'attesa e si connette al primo utilizzo. L'attesa richiede Claude Code v2.1.221 o successivo | `claude --mcp-config ./mcp.json` |

112| `--model` | Imposta il modello per la sessione corrente con un [alias di modello](/docs/it/model-config#model-aliases) come `sonnet`, `opus`, `haiku`, o `fable`, o il nome completo di un modello. Sostituisce l'impostazione [`model`](/docs/it/settings-reference#model) e [`ANTHROPIC_MODEL`](/docs/it/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Imposta il modello per la sessione corrente con un [alias di modello](/docs/it/model-config#model-aliases) come `sonnet`, `opus`, `haiku`, o `fable`, o il nome completo di un modello. Sostituisce l'impostazione [`model`](/docs/it/settings-reference#model) e [`ANTHROPIC_MODEL`](/docs/it/model-config#environment-variables) | `claude --model claude-sonnet-5` |

Details

307| | Disponibile nelle sessioni cloud | Perché |307| | Disponibile nelle sessioni cloud | Perché |

308| :- | :- | :- |308| :- | :- | :- |

309| Il `CLAUDE.md` del tuo repository | Sì | Parte del clone |309| Il `CLAUDE.md` del tuo repository | Sì | Parte del clone |

310| Gli hook e le regole di permesso in `.claude/settings.json` del tuo repository | Sì, in una sessione con un solo repository | Parte del clone. Una sessione con più repository, incluso un thread di [progetto](/docs/it/claude-projects#what-threads-pick-up-from-your-repositories), parte al di sopra dei clone e non li legge |310| Gli hook e le regole di permesso in `.claude/settings.json` del tuo repository | Sì, in una sessione con un solo repository | Parte del clone. Per una sessione con più repository, consulta [quali impostazioni legge](/docs/it/settings#settings-in-cloud-sessions) |

311| I server MCP in `.mcp.json` del tuo repository | Sì, in una sessione con un solo repository | Parte del clone, trovato a partire dalla directory di lavoro della sessione |311| I server MCP in `.mcp.json` del tuo repository | Sì, in una sessione con un solo repository | Parte del clone, trovato a partire dalla directory di lavoro della sessione. Per un ambiente self-hosted, consulta [quali impostazioni del repository si applicano](/docs/it/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

312| La directory `.claude/rules/` del tuo repository | Sì | Parte del clone |312| La directory `.claude/rules/` del tuo repository | Sì | Parte del clone |

313| Le directory `.claude/skills/`, `.claude/agents/`, `.claude/commands/` del tuo repository | Sì | Parte del clone |313| Le directory `.claude/skills/`, `.claude/agents/`, `.claude/commands/` del tuo repository | Sì | Parte del clone |

314| Plugin e marketplace dichiarati in `.claude/settings.json` del tuo repository | No | Una sessione cloud non installa i plugin che un repository attiva in [`enabledPlugins`](/docs/it/settings-reference#enabledplugins), inclusi quelli dei marketplace che elenca in [`extraKnownMarketplaces`](/docs/it/settings-reference#extraknownmarketplaces) |314| Plugin e marketplace dichiarati in `.claude/settings.json` del tuo repository | No | Una sessione cloud non installa i plugin che un repository attiva in [`enabledPlugins`](/docs/it/settings-reference#enabledplugins), inclusi quelli dei marketplace che elenca in [`extraKnownMarketplaces`](/docs/it/settings-reference#extraknownmarketplaces) |


575 575 

576Gli hook SessionStart si comportano allo stesso modo nel cloud che localmente, con questi avvertimenti:576Gli hook SessionStart si comportano allo stesso modo nel cloud che localmente, con questi avvertimenti:

577 577 

578* **Una repository per sessione**: una sessione con più repository non carica gli hook da nessuno dei `.claude/settings.json` della repository, quindi un hook SessionStart che si definisce lì non viene eseguito. Installare le dipendenze per quelle sessioni con uno [script di configurazione](#setup-scripts) invece.578* **Un repository per sessione**: in un ambiente ospitato da Anthropic, una sessione con più repository non carica gli hook dal `.claude/settings.json` di nessun repository, quindi un hook SessionStart che definisci lì non viene eseguito. Installa invece le dipendenze per quelle sessioni con uno [script di configurazione](#setup-scripts). Per un ambiente self-hosted, consulta [quali impostazioni del repository si applicano](/docs/it/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

579* **Nessun ambito solo cloud**: gli hook vengono eseguiti sia nelle sessioni locali che in quelle cloud. Per saltare l'esecuzione locale, uscire anticipatamente a meno che la variabile di ambiente `CLAUDE_CODE_REMOTE` non sia `true`, come fa lo [script di installazione delle dipendenze](#install-dependencies-with-a-sessionstart-hook).579* **Nessun ambito solo cloud**: gli hook vengono eseguiti sia nelle sessioni locali che in quelle cloud. Per saltare l'esecuzione locale, uscire anticipatamente a meno che la variabile di ambiente `CLAUDE_CODE_REMOTE` non sia `true`, come fa lo [script di installazione delle dipendenze](#install-dependencies-with-a-sessionstart-hook).

580* **Richiede accesso di rete**: i comandi di installazione devono raggiungere i registri dei pacchetti. Se l'ambiente utilizza accesso di rete **None**, questi hook non riescono. L'[elenco consentiti predefinito](#default-allowed-domains) sotto **Trusted** copre npm, PyPI, RubyGems e crates.io.580* **Richiede accesso di rete**: i comandi di installazione devono raggiungere i registri dei pacchetti. Se l'ambiente utilizza accesso di rete **None**, questi hook non riescono. L'[elenco consentiti predefinito](#default-allowed-domains) sotto **Trusted** copre npm, PyPI, RubyGems e crates.io.

581* **Compatibilità proxy**: negli ambienti ospitati da Anthropic, tutto il traffico in uscita passa attraverso un [proxy di sicurezza](#security-proxy), e alcuni gestori di pacchetti non funzionano correttamente con esso; Bun è un esempio noto. In un [ambiente self-hosted](/docs/it/self-hosted-environments-deploy#default-deny-egress), il traffico in uscita passa attraverso il proprio confine di rete.581* **Compatibilità proxy**: negli ambienti ospitati da Anthropic, tutto il traffico in uscita passa attraverso un [proxy di sicurezza](#security-proxy), e alcuni gestori di pacchetti non funzionano correttamente con esso; Bun è un esempio noto. In un [ambiente self-hosted](/docs/it/self-hosted-environments-deploy#default-deny-egress), il traffico in uscita passa attraverso il proprio confine di rete.

desktop.md +1 −1

Details

396 Lavora in parallelo con le sessioni396 Lavora in parallelo con le sessioni

397</h3>397</h3>

398 398 

399Fai clic su **+ New session** nella barra laterale, o premi **Cmd+N** su macOS o **Ctrl+N** su Windows, per lavorare su più compiti in parallelo. Premi **Ctrl+Tab** e **Ctrl+Shift+Tab** per scorrere le sessioni nella barra laterale. Per i repository Git, seleziona l'opzione **worktree** accanto al nome del branch per dare alla sessione la sua copia isolata del tuo progetto usando [Git worktrees](/docs/it/worktrees), in modo che le modifiche in una sessione non influiscano su altre sessioni fino a quando non ne esegui il commit.399Fai clic su **+ New session** nella barra laterale, o premi **Cmd+N** su macOS o **Ctrl+N** su Windows, per lavorare su più compiti in parallelo. Premi **Ctrl+Tab** e **Ctrl+Shift+Tab** per scorrere le sessioni nella barra laterale. Per i repository Git, seleziona l'opzione **worktree** accanto al nome del branch per dare alla sessione la sua copia isolata del tuo progetto usando [Git worktrees](/docs/it/worktrees).

400 400 

401Per visualizzare due sessioni contemporaneamente, tieni premuto **Cmd** su macOS o **Ctrl** su Windows e fai clic su una sessione nella barra laterale. La sessione si apre in un secondo riquadro accanto a quello che hai già aperto. Mentre la divisione è attiva, facendo clic su un'altra sessione della barra laterale si sostituisce il riquadro che ha il focus. Premi **Cmd+\\** su macOS o **Ctrl+\\** su Windows per chiudere il riquadro con focus e tornare a una singola sessione.401Per visualizzare due sessioni contemporaneamente, tieni premuto **Cmd** su macOS o **Ctrl** su Windows e fai clic su una sessione nella barra laterale. La sessione si apre in un secondo riquadro accanto a quello che hai già aperto. Mentre la divisione è attiva, facendo clic su un'altra sessione della barra laterale si sostituisce il riquadro che ha il focus. Premi **Cmd+\\** su macOS o **Ctrl+\\** su Windows per chiudere il riquadro con focus e tornare a una singola sessione.

402 402 

env-vars.md +2 −2

Details

204| `CLAUDE_AFK_TIMEOUT_MS` | Quanti millisecondi di inattività devono trascorrere prima che una finestra di dialogo [`AskUserQuestion`](/docs/it/tools-reference) senza risposta continui automaticamente senza di te. La continuazione automatica è disattivata per impostazione predefinita; attivala con l'impostazione [`askUserQuestionTimeout`](/docs/it/settings-reference#askuserquestiontimeout). Questa variabile è un override per demo e test automatizzati: quando è impostata, ha la precedenza su quell'impostazione e attiva la continuazione automatica anche quando l'impostazione non è impostata o è `never`. Impostare `0` non disattiva il timeout, ma chiude immediatamente la finestra di dialogo. Ignorata nelle [impostazioni di progetto e locali](/docs/it/settings-reference#variables-claude-code-ignores-in-env). Prima della v2.1.200, la continuazione automatica era attiva per impostazione predefinita con un timeout di `60000` (60 secondi). Richiede Claude Code v2.1.198 o successiva |204| `CLAUDE_AFK_TIMEOUT_MS` | Quanti millisecondi di inattività devono trascorrere prima che una finestra di dialogo [`AskUserQuestion`](/docs/it/tools-reference) senza risposta continui automaticamente senza di te. La continuazione automatica è disattivata per impostazione predefinita; attivala con l'impostazione [`askUserQuestionTimeout`](/docs/it/settings-reference#askuserquestiontimeout). Questa variabile è un override per demo e test automatizzati: quando è impostata, ha la precedenza su quell'impostazione e attiva la continuazione automatica anche quando l'impostazione non è impostata o è `never`. Impostare `0` non disattiva il timeout, ma chiude immediatamente la finestra di dialogo. Ignorata nelle [impostazioni di progetto e locali](/docs/it/settings-reference#variables-claude-code-ignores-in-env). Prima della v2.1.200, la continuazione automatica era attiva per impostazione predefinita con un timeout di `60000` (60 secondi). Richiede Claude Code v2.1.198 o successiva |

205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Imposta su `1` per disattivare tutti i tipi di [subagent](/docs/it/sub-agents) integrati, come Explore e Plan. Si applica solo in modalità non interattiva (il flag `-p`). Utile per gli utenti dell'SDK che vogliono partire da zero. Questo rimuove anche `general-purpose`, il subagent che Claude Code esegue quando una chiamata allo strumento Agent omette `subagent_type`. Una chiamata di questo tipo fallisce quindi con [`subagent_type is required`](/docs/it/errors#subagent-type-is-required) |205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Imposta su `1` per disattivare tutti i tipi di [subagent](/docs/it/sub-agents) integrati, come Explore e Plan. Si applica solo in modalità non interattiva (il flag `-p`). Utile per gli utenti dell'SDK che vogliono partire da zero. Questo rimuove anche `general-purpose`, il subagent che Claude Code esegue quando una chiamata allo strumento Agent omette `subagent_type`. Una chiamata di questo tipo fallisce quindi con [`subagent_type is required`](/docs/it/errors#subagent-type-is-required) |

206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Imposta su `1` per omettere il prefisso `mcp__<server>__` dai nomi degli strumenti dei server MCP creati dall'SDK. Gli strumenti usano i loro nomi originali. Solo per l'uso dell'SDK |206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Imposta su `1` per omettere il prefisso `mcp__<server>__` dai nomi degli strumenti dei server MCP creati dall'SDK. Gli strumenti usano i loro nomi originali. Solo per l'uso dell'SDK |

207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout di stallo in millisecondi per i subagent. Predefinito `600000` (10 minuti); se aumenti `CLAUDE_STREAM_IDLE_TIMEOUT_MS` mentre il watchdog dello stream è attivo, il valore predefinito aumenta di conseguenza, come descritto in [Gestire risposte API lente o bloccate](/docs/it/agent-sdk/typescript#handle-slow-or-stalled-api-responses). Il timer si azzera a ogni evento di avanzamento dello streaming; se non arriva alcun avanzamento entro la finestra, Claude Code interrompe il subagent e segnala lo stallo al processo padre |207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout di stallo in millisecondi per i subagent. Copre anche gli [agenti dei workflow](/docs/it/workflows#when-an-agent-stalls-and-restarts) su Claude Code v2.1.286 o successiva. Predefinito `600000` (10 minuti); se aumenti `CLAUDE_STREAM_IDLE_TIMEOUT_MS` mentre il watchdog dello streaming è attivo, il valore predefinito aumenta di conseguenza, come descritto in [Gestire le risposte API lente o bloccate](/docs/it/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |

208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Imposta la percentuale (1-100) della finestra di compattazione automatica alla quale si attiva la compattazione automatica. Usa valori più bassi come `50` per compattare prima; la variabile non può alzare la soglia, quindi i valori superiori alla percentuale predefinita vengono ignorati. Si applica solo nelle sessioni che [compattano prima del limite di contesto del modello](/docs/it/model-config#context-window-and-auto-compaction). Si applica sia alle conversazioni principali sia ai subagent |208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Imposta la percentuale (1-100) della finestra di compattazione automatica alla quale si attiva la compattazione automatica. Usa valori più bassi come `50` per compattare prima; la variabile non può alzare la soglia, quindi i valori superiori alla percentuale predefinita vengono ignorati. Si applica solo nelle sessioni che [compattano prima del limite di contesto del modello](/docs/it/model-config#context-window-and-auto-compaction). Si applica sia alle conversazioni principali sia ai subagent |

209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Imposta su `1` per forzare l'attivazione dello spostamento automatico in background delle attività degli agenti a lunga esecuzione. Quando è attivo, i subagent vengono spostati in background dopo circa due minuti di esecuzione. Attiva anche lo [spostamento automatico in background delle chiamate lunghe agli strumenti MCP](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls) in modalità non interattiva su Claude Code v2.1.212 o successiva |209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Imposta su `1` per forzare l'attivazione dello spostamento automatico in background delle attività degli agenti a lunga esecuzione. Quando è attivo, i subagent vengono spostati in background dopo circa due minuti di esecuzione. Attiva anche lo [spostamento automatico in background delle chiamate lunghe agli strumenti MCP](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls) in modalità non interattiva su Claude Code v2.1.212 o successiva |

210| `CLAUDE_AX_PREPARK_MS` | In [modalità screen reader](/docs/it/accessibility), quanti millisecondi Claude Code attende prima di scrivere una riga nuova o modificata. Predefinito `0`, quindi Claude Code non attende. Prima della v2.1.287, il valore predefinito era `50`. Claude Code limita l'attesa a `5000`. Richiede Claude Code v2.1.233 o successiva |210| `CLAUDE_AX_PREPARK_MS` | In [modalità screen reader](/docs/it/accessibility), quanti millisecondi Claude Code attende prima di scrivere una riga nuova o modificata. Predefinito `0`, quindi Claude Code non attende. Prima della v2.1.287, il valore predefinito era `50`. Claude Code limita l'attesa a `5000`. Richiede Claude Code v2.1.233 o successiva |


378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Età massima in millisecondi dell'ultimo messaggio della trascrizione affinché una sessione terminata a metà turno continui automaticamente alla ripresa. Quando l'ultimo messaggio è più vecchio di questo limite, Claude Code salta la ripresa automatica di `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` e il relativo messaggio di continuazione `CLAUDE_CODE_RESUME_PROMPT`, e la sessione si avvia inattiva, così prosegui in modo esplicito. Non impostata o `0` significa nessun limite, tranne per il fatto che un turno la cui ultima richiesta è fallita con un errore API riprende solo finché quell'errore ha meno di sei ore. Un valore positivo limita ogni turno, compresi quelli; un valore negativo o non numerico applica un limite di un'ora. Gli script di avvio per agenti a lunga esecuzione possono impostarla affinché un riavvio su una trascrizione vecchia non esegua di nuovo un prompt obsoleto. Claude Code imposta autonomamente un limite di un'ora quando riavvia una sessione della [vista agenti](/docs/it/agent-view) andata in crash che ha ereditato la conversazione da una sessione interattiva. Richiede Claude Code v2.1.211 o successiva |378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Età massima in millisecondi dell'ultimo messaggio della trascrizione affinché una sessione terminata a metà turno continui automaticamente alla ripresa. Quando l'ultimo messaggio è più vecchio di questo limite, Claude Code salta la ripresa automatica di `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` e il relativo messaggio di continuazione `CLAUDE_CODE_RESUME_PROMPT`, e la sessione si avvia inattiva, così prosegui in modo esplicito. Non impostata o `0` significa nessun limite, tranne per il fatto che un turno la cui ultima richiesta è fallita con un errore API riprende solo finché quell'errore ha meno di sei ore. Un valore positivo limita ogni turno, compresi quelli; un valore negativo o non numerico applica un limite di un'ora. Gli script di avvio per agenti a lunga esecuzione possono impostarla affinché un riavvio su una trascrizione vecchia non esegua di nuovo un prompt obsoleto. Claude Code imposta autonomamente un limite di un'ora quando riavvia una sessione della [vista agenti](/docs/it/agent-view) andata in crash che ha ereditato la conversazione da una sessione interattiva. Richiede Claude Code v2.1.211 o successiva |

379| `CLAUDE_CODE_RESUME_PROMPT` | Sovrascrive il messaggio di continuazione che Claude Code invia a Claude quando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continua un turno interrotto invece di inviarne di nuovo il prompt, o quando riprendi una [chiamata a uno strumento differita](/docs/it/hooks#defer-a-tool-call-for-later) con `-p`. Il valore predefinito è `Continue from where you left off.`. Una stringa vuota usa il valore predefinito |379| `CLAUDE_CODE_RESUME_PROMPT` | Sovrascrive il messaggio di continuazione che Claude Code invia a Claude quando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continua un turno interrotto invece di inviarne di nuovo il prompt, o quando riprendi una [chiamata a uno strumento differita](/docs/it/hooks#defer-a-tool-call-for-later) con `-p`. Il valore predefinito è `Continue from where you left off.`. Una stringa vuota usa il valore predefinito |

380| `CLAUDE_CODE_RETRY_WATCHDOG` | Imposta a `1` per sessioni non presidiate come harness di valutazione, job CI o worker remoti. Riprova indefinitamente in caso di errori di capacità `429` e `529` invece di fallire dopo `CLAUDE_CODE_MAX_RETRIES` tentativi. Claude Code fallisce subito quando una richiesta a velocità standard riceve un `429` che segnala un limite di spesa o crediti di utilizzo esauriti, anche se proviene da un [limite di spesa del gateway](/docs/it/errors#spend-limit-reached) che si azzera secondo una pianificazione. Prima della v2.1.239, il watchdog riprovava indefinitamente anche in questi casi. Per le richieste in modalità veloce, consulta [Gestire i rate limit](/docs/it/fast-mode#handle-rate-limits). Il watchdog attende fino a 5 minuti tra un tentativo e l'altro, o fino all'azzeramento del limite quando la risposta riporta un orario di azzeramento del rate limit, così una sessione che raggiunge un limite di utilizzo attende la fine della finestra rimanente. Nella v2.1.199 o successiva aumenta inoltre a 300 il numero predefinito di nuovi tentativi per altri errori transitori, come errori del server, timeout e connessioni interrotte, pari a circa tre ore di backoff, e rimuove il limite di 15 su `CLAUDE_CODE_MAX_RETRIES` se imposti esplicitamente quella variabile. Richiede Claude Code v2.1.186 o successiva |380| `CLAUDE_CODE_RETRY_WATCHDOG` | Imposta a `1` per sessioni non presidiate come harness di valutazione, job CI o worker remoti. Riprova indefinitamente in caso di errori di capacità `429` e `529` invece di fallire dopo `CLAUDE_CODE_MAX_RETRIES` tentativi. Claude Code fallisce subito quando una richiesta a velocità standard riceve un `429` che segnala un limite di spesa o crediti di utilizzo esauriti, anche se proviene da un [limite di spesa del gateway](/docs/it/errors#spend-limit-reached) che si azzera secondo una pianificazione. Prima della v2.1.239, il watchdog riprovava indefinitamente anche in questi casi. Per le richieste in modalità veloce, consulta [Gestire i rate limit](/docs/it/fast-mode#handle-rate-limits). Il watchdog attende fino a 5 minuti tra un tentativo e l'altro, o fino all'azzeramento del limite quando la risposta riporta un orario di azzeramento del rate limit, così una sessione che raggiunge un limite di utilizzo attende la fine della finestra rimanente. Nella v2.1.199 o successiva aumenta inoltre a 300 il numero predefinito di nuovi tentativi per altri errori transitori, come errori del server, timeout e connessioni interrotte, pari a circa tre ore di backoff, e rimuove il limite di 15 su `CLAUDE_CODE_MAX_RETRIES` se imposti esplicitamente quella variabile. Richiede Claude Code v2.1.186 o successiva |

381| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | Tempo massimo in millisecondi che ogni richiesta API trascorre in attesa durante gli errori `429` e `529` quando `CLAUDE_CODE_RETRY_WATCHDOG` è impostata. Una volta trascorso quel tempo, l'errore successivo di questo tipo termina la richiesta. Indica un numero intero positivo in cifre semplici, come `1800000` per 30 minuti. Quando non è impostata, l'attesa non ha limiti. Richiede Claude Code v2.1.295 o successiva |

381| `CLAUDE_CODE_SAFE_MODE` | Imposta a `1` per avviare in modalità provvisoria: CLAUDE.md, skill, plugin, hook, server MCP, comandi e agenti personalizzati, stili di output, workflow, temi personalizzati, scorciatoie da tastiera personalizzate, comandi della riga di stato e dei suggerimenti di file, server LSP e memoria automatica non vengono caricati, per la risoluzione dei problemi di una configurazione danneggiata. La policy delle impostazioni gestite continua ad applicarsi, inclusi gli hook, la riga di stato e i comandi dei suggerimenti di file configurati tramite policy; i plugin gestiti, le skill gestite, il CLAUDE.md gestito e i server MCP configurati tramite policy invece no. Equivale a passare [`--safe-mode`](/docs/it/cli-reference#cli-flags). I processi figli avviati direttamente ereditano la variabile |382| `CLAUDE_CODE_SAFE_MODE` | Imposta a `1` per avviare in modalità provvisoria: CLAUDE.md, skill, plugin, hook, server MCP, comandi e agenti personalizzati, stili di output, workflow, temi personalizzati, scorciatoie da tastiera personalizzate, comandi della riga di stato e dei suggerimenti di file, server LSP e memoria automatica non vengono caricati, per la risoluzione dei problemi di una configurazione danneggiata. La policy delle impostazioni gestite continua ad applicarsi, inclusi gli hook, la riga di stato e i comandi dei suggerimenti di file configurati tramite policy; i plugin gestiti, le skill gestite, il CLAUDE.md gestito e i server MCP configurati tramite policy invece no. Equivale a passare [`--safe-mode`](/docs/it/cli-reference#cli-flags). I processi figli avviati direttamente ereditano la variabile |

382| `CLAUDE_CODE_SCRIPT_CAPS` | Oggetto JSON che limita quante volte script specifici possono essere invocati per sessione quando è impostata `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`. Le chiavi sono sottostringhe confrontate con il testo del comando; i valori sono limiti interi di chiamate. Ad esempio, `{"deploy.sh": 2}` consente di chiamare `deploy.sh` al massimo due volte. Il confronto si basa sulle sottostringhe, quindi trucchi di espansione della shell come `./scripts/deploy.sh $(evil)` vengono comunque conteggiati nel limite. Il fan-out a runtime tramite `xargs` o `find -exec` non viene rilevato; si tratta di un controllo di difesa in profondità |383| `CLAUDE_CODE_SCRIPT_CAPS` | Oggetto JSON che limita quante volte script specifici possono essere invocati per sessione quando è impostata `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`. Le chiavi sono sottostringhe confrontate con il testo del comando; i valori sono limiti interi di chiamate. Ad esempio, `{"deploy.sh": 2}` consente di chiamare `deploy.sh` al massimo due volte. Il confronto si basa sulle sottostringhe, quindi trucchi di espansione della shell come `./scripts/deploy.sh $(evil)` vengono comunque conteggiati nel limite. Il fan-out a runtime tramite `xargs` o `find -exec` non viene rilevato; si tratta di un controllo di difesa in profondità |

383| `CLAUDE_CODE_SCROLL_SPEED` | Imposta il moltiplicatore di scorrimento della rotella del mouse nel [rendering a schermo intero](/docs/it/fullscreen#mouse-wheel-scrolling). Accetta qualsiasi valore positivo fino a 20, inclusi valori frazionari inferiori a 1 come `0.5` per rallentare lo scorrimento accelerato di trackpad e rotella nei terminali che già amplificano gli eventi della rotella. Imposta a `3` per allinearti a `vim` se il tuo terminale invia un evento della rotella per scatto senza amplificazione. Ignorata nel terminale degli IDE JetBrains, dove Claude Code usa una propria gestione dello scorrimento |384| `CLAUDE_CODE_SCROLL_SPEED` | Imposta il moltiplicatore di scorrimento della rotella del mouse nel [rendering a schermo intero](/docs/it/fullscreen#mouse-wheel-scrolling). Accetta qualsiasi valore positivo fino a 20, inclusi valori frazionari inferiori a 1 come `0.5` per rallentare lo scorrimento accelerato di trackpad e rotella nei terminali che già amplificano gli eventi della rotella. Imposta a `3` per allinearti a `vim` se il tuo terminale invia un evento della rotella per scatto senza amplificazione. Ignorata nel terminale degli IDE JetBrains, dove Claude Code usa una propria gestione dello scorrimento |


590* Usare [lo strumento advisor](/docs/it/advisor#requirements)591* Usare [lo strumento advisor](/docs/it/advisor#requirements)

591* Leggere o rispondere ai [commenti su un artefatto](/docs/it/artifacts#collect-comments-on-an-artifact)592* Leggere o rispondere ai [commenti su un artefatto](/docs/it/artifacts#collect-comments-on-an-artifact)

592* Far leggere a Claude [l'artefatto pubblico di un'altra organizzazione](/docs/it/artifacts#read-an-artifact-shared-with-you)593* Far leggere a Claude [l'artefatto pubblico di un'altra organizzazione](/docs/it/artifacts#read-an-artifact-shared-with-you)

593* Far sondare a Claude Code i server dei connettori claude.ai per la [revisione del protocollo MCP 2026-07-28](/docs/it/mcp#mcp-client-runtimes), a meno che tu non imposti `MCP_PROTOCOL_NEGOTIATION=auto`

594* Ottenere lo [strumento PowerShell](/docs/it/tools-reference#powershell-tool) per impostazione predefinita per gli account claude.ai e Console su Windows con Git Bash installato; Claude Code instrada i comandi della shell tramite Git Bash a meno che tu non imposti `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Su Windows senza Git Bash, lo strumento resta attivo594* Ottenere lo [strumento PowerShell](/docs/it/tools-reference#powershell-tool) per impostazione predefinita per gli account claude.ai e Console su Windows con Git Bash installato; Claude Code instrada i comandi della shell tramite Git Bash a meno che tu non imposti `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Su Windows senza Git Bash, lo strumento resta attivo

595* Ottenere il [feedback redatto da Claude](/docs/it/tools-reference#sendfeedback-tool-behavior), che Claude Code attiva tramite un flag recuperato595* Ottenere il [feedback redatto da Claude](/docs/it/tools-reference#sendfeedback-tool-behavior), che Claude Code attiva tramite un flag recuperato

596* Fare in modo che Claude [tratti i contenuti incollati di grandi dimensioni come testo incollato anziché digitato](/docs/it/terminal-config#how-claude-treats-pasted-text); il contenuto dietro un segnaposto `[Pasted text #N]` raggiunge Claude senza contrassegni596* Fare in modo che Claude [tratti i contenuti incollati di grandi dimensioni come testo incollato anziché digitato](/docs/it/terminal-config#how-claude-treats-pasted-text); il contenuto dietro un segnaposto `[Pasted text #N]` raggiunge Claude senza contrassegni

errors.md +7 −5

Details

261| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Errori dei plugin](#claude-code-refuses-the-marketplace-name) |261| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Errori dei plugin](#claude-code-refuses-the-marketplace-name) |

262| `Marketplace "<name>" is already added from a different source` | [Errori dei plugin](#marketplace-is-already-added-from-a-different-source) |262| `Marketplace "<name>" is already added from a different source` | [Errori dei plugin](#marketplace-is-already-added-from-a-different-source) |

263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Errori dei plugin](#marketplace-name-is-another-spelling-of-a-reserved-name) |263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Errori dei plugin](#marketplace-name-is-another-spelling-of-a-reserved-name) |

264| `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name) |

264| `Marketplace "<name>" is added but ignored` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#marketplace-is-added-but-ignored) |265| `Marketplace "<name>" is added but ignored` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#marketplace-is-added-but-ignored) |

265| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#marketplace-is-added-but-ignored) |266| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#marketplace-is-added-but-ignored) |

266| `references ${user_config.*} in a shell-form command` | [Errori dei plugin](#plugin-command-references-user-config) |267| `references ${user_config.*} in a shell-form command` | [Errori dei plugin](#plugin-command-references-user-config) |


269| `Plugin archive integrity check failed` | [Errori dei plugin](#plugin-archive-integrity-check-failed) |270| `Plugin archive integrity check failed` | [Errori dei plugin](#plugin-archive-integrity-check-failed) |

270| `An npm plugin source must name a registry package` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#an-npm-plugin-source-must-name-a-registry-package) |271| `An npm plugin source must name a registry package` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#an-npm-plugin-source-must-name-a-registry-package) |

271| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#the-packages-it-lists-are-not-installed) |272| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#the-packages-it-lists-are-not-installed) |

273| `does not load (...), so Claude Code ignores the whole file` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#does-not-load-so-claude-code-ignores-the-whole-file) |

272| `path escapes plugin directory` | [Errori dei plugin](#path-escapes-plugin-directory) |274| `path escapes plugin directory` | [Errori dei plugin](#path-escapes-plugin-directory) |

273| `path could not be checked` | [Errori dei plugin](#path-could-not-be-checked) |275| `path could not be checked` | [Errori dei plugin](#path-could-not-be-checked) |

274| `its marketplace entry path does not stay inside the marketplace directory` | [Errori dei plugin](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |276| `its marketplace entry path does not stay inside the marketplace directory` | [Errori dei plugin](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |


279| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Errori dei plugin](#plugin-was-not-uninstalled) |281| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Errori dei plugin](#plugin-was-not-uninstalled) |

280| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Errori dei plugin](#plugin-was-not-uninstalled) |282| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Errori dei plugin](#plugin-was-not-uninstalled) |

281| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |283| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |

284| `Plugin directory does not exist: <path>` | [Risoluzione dei problemi dei plugin](/docs/it/plugins/troubleshooting#plugin-directory-does-not-exist) |

282| `Error: No such tool available: <tool name>` | [Errori degli strumenti](#no-such-tool-available) |285| `Error: No such tool available: <tool name>` | [Errori degli strumenti](#no-such-tool-available) |

283| `would be spawned with zero tools — refusing` | [Errori degli strumenti](#agent-would-be-spawned-with-zero-tools) |286| `would be spawned with zero tools — refusing` | [Errori degli strumenti](#agent-would-be-spawned-with-zero-tools) |

284| `File is covered by a Read deny rule in your permission settings` | [Errori degli strumenti](#file-is-covered-by-a-read-deny-rule) |287| `File is covered by a Read deny rule in your permission settings` | [Errori degli strumenti](#file-is-covered-by-a-read-deny-rule) |


386* Un errore del server o una risposta sovraccarica che arriva dopo che Claude ha finito di pensare ma prima di aver iniziato un testo o una chiamata a uno strumento. Claude Code ritenta un errore del server a quel punto fino a due volte. Prima della v2.1.284, Claude Code terminava il turno con l'errore a quel punto.389* Un errore del server o una risposta sovraccarica che arriva dopo che Claude ha finito di pensare ma prima di aver iniziato un testo o una chiamata a uno strumento. Claude Code ritenta un errore del server a quel punto fino a due volte. Prima della v2.1.284, Claude Code terminava il turno con l'errore a quel punto.

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

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`.391* 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`.

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

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.393* 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.394* 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.

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).395* 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).


4064 Marketplace è già aggiunto da una fonte diversa4067 Marketplace è già aggiunto da una fonte diversa

4065</h3>4068</h3>

4066 4069 

4067Hai confermato l'aggiunta di un marketplace tramite [`/plugin install <plugin> --marketplace <source>`](/docs/it/plugins/install#add-a-marketplace-and-install-in-one-command), e il catalogo che Claude Code ha recuperato da quella fonte nomina se stesso come un marketplace che hai già aggiunto da una fonte diversa. Claude Code mantiene il marketplace esistente invece di sostituirlo, e il plugin non viene installato.4070Hai indicato una nuova fonte di marketplace con [`--marketplace <source>` nel comando di installazione](/docs/it/plugins/install#add-a-marketplace-and-install-in-one-command), in una sessione o dalla tua shell. Il catalogo che Claude Code ha recuperato da quella fonte ha lo stesso nome di un marketplace che hai già aggiunto da una fonte diversa. Claude Code mantiene il marketplace esistente invece di sostituirlo, e il plugin non viene installato.

4068 4071 

4069```text theme={null}4072```text theme={null}

4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.4073Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.


4817 This session has no saved transcript4820 This session has no saved transcript

4818</h3>4821</h3>

4819 4822 

4820Ti sei collegato a una [sessione in background](/docs/it/agent-view) interrotta che è stata messa in background da un'altra conversazione con `←` o `/background` e interrotta prima che la sua prima risposta finisse. Fino a quando quella prima risposta non finisce, la conversazione vive ancora solo nella sessione da cui è stata messa in background, quindi `claude attach` rifiuta di avviare la sessione interrotta piuttosto che iniziare una conversazione vuota con lo stesso ID di sessione. Il messaggio termina con il comando `claude respawn` per questa sessione:4823Ti sei collegato a una sessione che hai [spostato in background](/docs/it/agent-view#from-inside-a-session) con `←` o `/background` e che si è interrotta prima di eseguire un proprio turno. Claude Code non ha trovato la conversazione da cui l'hai spostata, quindi la sessione non ha nulla da riprendere. Il messaggio termina con il comando `claude respawn` per questa sessione:

4821 4824 

4822```text theme={null}4825```text theme={null}

4823This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.4826This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.


4827 4830 

4828**Cosa fare:**4831**Cosa fare:**

4829 4832 

4830* La conversazione che hai messo in background è intatta: riprendila con [`claude --resume`](/docs/it/sessions) o continua a lavorarci4833* Per avviare da zero la sessione interrotta, esegui `claude respawn <id>` con l'ID dal messaggio, o premi `Enter` due volte sulla sua riga nella vista agente

4831* Per avviare comunque da zero la sessione interrotta, esegui `claude respawn <id>` con l'ID dal messaggio, o premi `Enter` due volte sulla sua riga nella vista agente

4832* Se la sessione ha finito una risposta e vedi ancora questo rifiuto su una versione precedente alla v2.1.214, una cartella illeggibile in `~/.claude/projects` potrebbe far sì che la scansione della trascrizione perda la conversazione salvata; aggiorna alla v2.1.214 o successiva, che tollera le cartelle illeggibili durante la scansione4834* Se la sessione ha finito una risposta e vedi ancora questo rifiuto su una versione precedente alla v2.1.214, una cartella illeggibile in `~/.claude/projects` potrebbe far sì che la scansione della trascrizione perda la conversazione salvata; aggiorna alla v2.1.214 o successiva, che tollera le cartelle illeggibili durante la scansione

4833 4835 

4834<h3 id="this-session-is-running-in-another-terminal">4836<h3 id="this-session-is-running-in-another-terminal">

glossary.md +1 −1

Details

511 Worktree isolation511 Worktree isolation

512</h3>512</h3>

513 513 

514Una modalità di isolamento che esegue Claude in un worktree git separato in `.claude/worktrees/`, abilitata con il flag `-w` o `isolation: worktree` nella configurazione del subagent. Le modifiche rimangono su un branch separato in una directory separata, in modo che gli agenti paralleli non sovrascrivano i file l'uno dell'altro.514Una modalità di isolamento che esegue Claude in un worktree git separato in `.claude/worktrees/`, abilitata con il flag `-w` o `isolation: worktree` nella configurazione del subagent. Le modifiche rimangono su un branch separato in una directory separata, in modo che ogni agente parallelo modifichi la propria copia dei file.

515 515 

516Scopri di più: [Run parallel sessions with git worktrees](/docs/it/worktrees)516Scopri di più: [Run parallel sessions with git worktrees](/docs/it/worktrees)

517 517 

goal.md +1 −1

Details

127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

128```128```

129 129 

130Con l'output di testo predefinito, nulla viene stampato finché l'esecuzione non termina, quindi un obiettivo che viene eseguito per molti turni può sembrare bloccato. Aggiungete `--output-format stream-json --verbose` per emettere ogni messaggio mentre il ciclo viene eseguito.130Con l'output di testo predefinito, la risposta finale di Claude viene stampata quando il ciclo termina, quindi un obiettivo che viene eseguito per molti turni può sembrare bloccato. Aggiungi `--output-format stream-json --verbose` per emettere ogni messaggio mentre il ciclo viene eseguito.

131 131 

132Interrompete il processo con Ctrl+C per fermare un obiettivo non interattivo prima che si risolva.132Interrompete il processo con Ctrl+C per fermare un obiettivo non interattivo prima che si risolva.

133 133 

headless.md +13 −11

Details

26* `--allowedTools` per [approvare automaticamente gli strumenti](#auto-approve-tools)26* `--allowedTools` per [approvare automaticamente gli strumenti](#auto-approve-tools)

27* `--output-format` per [ottenere output strutturato](#get-structured-output)27* `--output-format` per [ottenere output strutturato](#get-structured-output)

28 28 

29Questo esempio chiede a Claude una domanda sulla tua base di codice e stampa la risposta:29Questo esempio chiede a Claude una domanda sul tuo codebase e stampa la risposta:

30 30 

31```bash theme={null}31```bash theme={null}

32claude -p "What does the auth module do?"32claude -p "What does the auth module do?"

33```33```

34 34 

35Claude Code esce con codice 0 in caso di successo e con un codice diverso da zero quando l'esecuzione fallisce, quindi i tuoi script possono ramificarsi in base allo stato di uscita. Se passi un flag non valido, Claude Code segnala l'errore a stderr prima dell'inizio dell'esecuzione. Quando un errore si verifica durante l'esecuzione, come l'autenticazione mancante, Claude Code stampa l'errore come risultato su stdout.35Claude Code esce con codice 0 in caso di successo e con un codice diverso da zero quando l'esecuzione fallisce, quindi i tuoi script possono agire in modo diverso in base allo stato di uscita. Se passi un flag non valido, Claude Code segnala l'errore a stderr prima dell'inizio dell'esecuzione. Quando un errore si verifica durante l'esecuzione, come l'autenticazione mancante, Claude Code stampa l'errore come risultato su stdout.

36 36 

37<h3 id="start-faster-with-bare-mode">37<h3 id="start-faster-with-bare-mode">

38 Inizia più velocemente con la modalità bare38 Inizia più velocemente con la modalità bare

39</h3>39</h3>

40 40 

41Aggiungi `--bare` per ridurre il tempo di avvio saltando l'auto-discovery di hooks, skills, comandi personalizzati, [subagenti](/docs/it/sub-agents), plugin installati, server MCP, memoria automatica e CLAUDE.md. Senza di esso, `claude -p` carica lo stesso [contesto](/docs/it/how-claude-code-works#the-context-window) che una sessione interattiva avrebbe, incluso tutto ciò che è configurato nella directory di lavoro o in `~/.claude`.41Aggiungi `--bare` per ridurre il tempo di avvio saltando l'auto-discovery di hook, skill, comandi personalizzati, [subagent](/docs/it/sub-agents), plugin installati, server MCP, memoria automatica e CLAUDE.md. Senza di esso, `claude -p` carica lo stesso [contesto](/docs/it/how-claude-code-works#the-context-window) che una sessione interattiva avrebbe, incluso tutto ciò che è configurato nella directory di lavoro o in `~/.claude`.

42 42 

43La modalità bare è utile per CI e script dove hai bisogno dello stesso risultato su ogni macchina. Un hook nel `~/.claude` di un collega o un server MCP nel `.mcp.json` del progetto non verranno eseguiti, perché la modalità bare non li legge mai. Una directory che nomini con `--add-dir` è un'eccezione parziale: la modalità bare carica skills dalla sua cartella `.claude/skills/`, ma salta comunque le sue cartelle `.claude/commands/` e `.claude/agents/`. [Skills da directory aggiuntive](/docs/it/skills#skills-from-additional-directories) copre ciò che viene e non viene caricato.43La modalità bare è utile per CI e script dove hai bisogno dello stesso risultato su ogni macchina. Un hook nel `~/.claude` di un collega o un server MCP nel `.mcp.json` del progetto non verranno eseguiti, perché la modalità bare non li legge mai. Una directory che nomini con `--add-dir` è un'eccezione parziale: la modalità bare carica le skill dalla sua cartella `.claude/skills/`, ma salta comunque le sue cartelle `.claude/commands/` e `.claude/agents/`. [Skill da directory aggiuntive](/docs/it/skills#skills-from-additional-directories) copre ciò che viene e non viene caricato.

44 44 

45Senza `--bare`, una sessione `-p` esegue gli hook nel `.claude/settings.json` di un progetto e connette i server nel suo `.mcp.json`, anche in una cartella che non hai mai considerato attendibile. Una sessione `-p` non mostra alcuna finestra di dialogo di fiducia dell'area di lavoro e nessun prompt di approvazione per server. [Ciò che viene eseguito prima di considerare attendibile una cartella](/docs/it/permissions#what-runs-before-you-trust-a-folder) copre ogni tipo di contenuto del repository in `-p` e come mantenerlo fuori.45Senza `--bare`, una sessione `-p` esegue gli hook nel `.claude/settings.json` di un progetto e connette i server nel suo `.mcp.json`, anche in una cartella che non hai mai considerato attendibile. Una sessione `-p` non mostra alcuna finestra di dialogo di fiducia del workspace e nessuna richiesta di approvazione per server. [Ciò che viene eseguito prima di considerare attendibile una cartella](/docs/it/permissions#what-runs-before-you-trust-a-folder) copre ogni tipo di contenuto del repository in `-p` e come mantenerlo fuori.

46 46 

47Questo esempio esegue un'attività di riepilogo una tantum in modalità bare e pre-approva lo strumento Read in modo che la chiamata si completi senza un prompt di autorizzazione. Imposta `ANTHROPIC_API_KEY` prima di eseguirlo, perché la modalità bare non utilizza il tuo accesso in abbonamento:47Questo esempio esegue un'attività di riepilogo una tantum in modalità bare e pre-approva lo strumento Read in modo che la chiamata si completi senza una richiesta di permesso. Imposta `ANTHROPIC_API_KEY` prima di eseguirlo, perché la modalità bare non utilizza il tuo accesso in abbonamento:

48 48 

49```bash theme={null}49```bash theme={null}

50claude --bare -p "Summarize README.md" --allowedTools "Read"50claude --bare -p "Summarize README.md" --allowedTools "Read"


84 84 

85L'esecuzione attende il lavoro in background come comandi in background, subagent e workflow, watch di Monitor e risvegli `/loop` in sospeso:85L'esecuzione attende il lavoro in background come comandi in background, subagent e workflow, watch di Monitor e risvegli `/loop` in sospeso:

86 86 

87* **[Comandi in background](/docs/it/tools-reference#background-commands)**: per un comando avviato dalla conversazione principale, ad esempio un server di sviluppo o una build in modalità watch, l'esecuzione attende finché il comando non esce o raggiunge il suo [limite di tempo](/docs/it/tools-reference#time-limit-for-background-commands). Claude esegue quindi un ulteriore turno con l'esito, e il risultato di quel turno diventa l'ultimo dell'esecuzione, ovvero quello stampato dagli output `text` e `json`. Mentre il comando è in esecuzione, il limite di 10 minuti non termina l'attesa.87* **[Comandi in background](/docs/it/tools-reference#background-commands)**: per un comando avviato dalla conversazione principale, ad esempio un server di sviluppo o una build in modalità watch, l'esecuzione attende finché il comando non esce o raggiunge il suo [limite di tempo](/docs/it/tools-reference#time-limit-for-background-commands). Claude esegue quindi un ulteriore turno con l'esito. Mentre il comando è in esecuzione, il limite di 10 minuti non termina l'attesa.

88* **[Subagent](/docs/it/sub-agents) e workflow in background**: l'esecuzione rimane aperta fino al completamento di quel lavoro, perché il suo risultato fa parte dell'output finale.88* **[Subagent](/docs/it/sub-agents) e workflow in background**: l'esecuzione rimane aperta fino al completamento di quel lavoro, perché il suo risultato fa parte dell'output finale.

89* **Watch di [Monitor](/docs/it/tools-reference#monitor-tool)**: l'esecuzione attende finché il watch non scade o il limite di 10 minuti termina l'attesa, a seconda di quale evento si verifica prima. Mentre attende, Claude continua a rispondere a ciò che il watch segnala. Per impostazione predefinita, un watch scade cinque minuti dopo che Claude lo avvia.89* **Watch di [Monitor](/docs/it/tools-reference#monitor-tool)**: l'esecuzione attende finché il watch non scade o il limite di 10 minuti termina l'attesa, a seconda di quale evento si verifica prima. Mentre attende, Claude continua a rispondere a ciò che il watch segnala. Per impostazione predefinita, un watch scade cinque minuti dopo che Claude lo avvia.

90* **Risvegli in sospeso**: in un'esecuzione il cui prompt hai passato come testo anziché con `--input-format stream-json`, quando Claude ha pianificato un [risveglio `/loop` a ritmo autonomo](/docs/it/scheduled-tasks#let-claude-choose-the-interval), l'esecuzione attende che ogni risveglio scatti ed esegue la relativa iterazione finché il [loop non termina](/docs/it/scheduled-tasks#stop-a-loop), anche oltre il limite di 10 minuti.90* **Risvegli in sospeso**: in un'esecuzione il cui prompt hai passato come testo anziché con `--input-format stream-json`, quando Claude ha pianificato un [risveglio `/loop` a ritmo autonomo](/docs/it/scheduled-tasks#let-claude-choose-the-interval), l'esecuzione attende che ogni risveglio scatti ed esegue la relativa iterazione finché il [loop non termina](/docs/it/scheduled-tasks#stop-a-loop), anche oltre il limite di 10 minuti.

91 91 

92Se l'esecuzione raggiunge il limite di [`--max-budget-usd`](/docs/it/cli-reference#cli-flags), Claude Code interrompe il lavoro in background rimanente invece di attendere.92Se l'esecuzione raggiunge il limite di [`--max-budget-usd`](/docs/it/cli-reference#cli-flags), Claude Code interrompe il lavoro in background rimanente invece di attendere.

93 93 

94Quando il lavoro in background avvia un altro turno, l'esecuzione stampa il risultato di ogni turno con l'output `text` predefinito e il risultato dell'ultimo turno con l'output `json`. Prima della v2.1.295, l'esecuzione stampava solo il risultato dell'ultimo turno anche con l'output `text`.

95 

94<h3 id="stop-a-run-with-sigterm">96<h3 id="stop-a-run-with-sigterm">

95 Interrompi un'esecuzione con SIGTERM97 Interrompi un'esecuzione con SIGTERM

96</h3>98</h3>

97 99 

98Se interrompi un'esecuzione di `claude -p` con SIGTERM, ad esempio con `kill` o da un supervisore di processo, Claude Code esce con codice 143. Claude Code lascia il turno che era in corso non completato e non registra alcun risultato per esso. Per terminare il turno invece, invia SIGINT, o chiama `interrupt()` dell'Agent SDK, prima di interrompere il processo.100Se interrompi un'esecuzione di `claude -p` con SIGTERM, ad esempio con `kill` o da un supervisore di processo, Claude Code esce con codice 143. Claude Code lascia il turno che era in corso non completato e non registra alcun risultato per esso. Per terminare il turno invece, invia SIGINT, o chiama `interrupt()` dell'Agent SDK, prima di interrompere il processo.

99 101 

100Su SIGTERM, Claude Code termina l'albero dei processi di qualsiasi comando Bash ancora in esecuzione. Claude Code quindi esegue gli hook [`SessionEnd`](/docs/it/hooks#sessionend) ed esce. Durante l'uscita, Claude Code non avvia alcuna nuova chiamata di strumento, non invia alcuna nuova richiesta di modello e non esegue alcun hook diverso da `SessionEnd`. Se l'esecuzione era nel mezzo di un comando o in attesa di una risposta a un prompt di autorizzazione quando il segnale è arrivato, Claude Code gestisce quel passaggio come segue:102Su SIGTERM, Claude Code termina l'albero dei processi di qualsiasi comando Bash ancora in esecuzione. Claude Code quindi esegue gli hook [`SessionEnd`](/docs/it/hooks#sessionend) ed esce. Durante l'uscita, Claude Code non avvia alcuna nuova chiamata a uno strumento, non invia alcuna nuova richiesta al modello e non esegue alcun hook diverso da `SessionEnd`. Se l'esecuzione era nel mezzo di un comando o in attesa di una risposta a una richiesta di permesso quando il segnale è arrivato, Claude Code gestisce quel passaggio come segue:

101 103 

102* **Esecuzione di un comando**: Claude Code registra il comando come terminato nella sessione.104* **Esecuzione di un comando**: Claude Code registra il comando come terminato nella sessione.

103* **In attesa di una risposta a un prompt di autorizzazione**: se invii SIGTERM al processo, Claude Code lascia il prompt senza risposta. Se il tuo programma chiude la sessione tramite l'Agent SDK, l'SDK termina l'input di Claude Code prima di inviare qualsiasi segnale, e Claude Code annulla il prompt non appena l'input termina.105* **In attesa di una risposta a una richiesta di permesso**: se invii SIGTERM al processo, Claude Code lascia la richiesta senza risposta. Se il tuo programma chiude la sessione tramite l'Agent SDK, l'SDK termina l'input di Claude Code prima di inviare qualsiasi segnale, e Claude Code annulla la richiesta non appena l'input termina.

104 106 

105Quando [riprendi la sessione](#continue-conversations), Claude Code lascia il turno interrotto così com'è, e il tuo prossimo prompt guida la conversazione. Per fare in modo che Claude Code continui il turno interrotto al ripristino, imposta [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/it/env-vars).107Quando [riprendi la sessione](#continue-conversations), Claude Code lascia il turno interrotto così com'è, e il tuo prossimo prompt guida la conversazione. Per fare in modo che Claude Code continui il turno interrotto al ripristino, imposta [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/it/env-vars).

106 108 


262| `type` | `"system"` | tipo di messaggio |264| `type` | `"system"` | tipo di messaggio |

263| `subtype` | `"api_retry"` | identifica questo come un evento di nuovo tentativo |265| `subtype` | `"api_retry"` | identifica questo come un evento di nuovo tentativo |

264| `attempt` | integer | numero del tentativo corrente, a partire da 1 |266| `attempt` | integer | numero del tentativo corrente, a partire da 1 |

265| `max_retries` | integer | nuovi tentativi totali consentiti per la causa di questo errore, che possono essere meno del budget a livello di sessione |267| `max_retries` | integer | nuovi tentativi totali consentiti per la causa di questo errore |

266| `retry_delay_ms` | integer | millisecondi fino al prossimo tentativo |268| `retry_delay_ms` | integer | millisecondi fino al prossimo tentativo |

267| `error_status` | integer o null | codice di stato HTTP del tentativo non riuscito, o `null` quando il tentativo non ha ricevuto alcuna risposta HTTP dall'API |269| `error_status` | integer o null | codice di stato HTTP del tentativo non riuscito, o `null` quando il tentativo non ha ricevuto alcuna risposta HTTP dall'API |

268| `no_response` | object, opzionale | presente solo quando il tentativo non riuscito non ha ricevuto [alcuna intestazione di risposta in tempo](/docs/it/errors#no-response-from-api). `waited_ms` è quanto tempo quel tentativo ha atteso e `retry_wait_ms` è quanto tempo attenderà il nuovo tentativo. In questi eventi, `max_retries` riflette l'unico nuovo tentativo che questa causa normalmente ottiene, non il budget a livello di sessione. Richiede Claude Code v2.1.261 o successivo |270| `no_response` | object, opzionale | presente solo quando il tentativo non riuscito non ha ricevuto [alcuna intestazione di risposta in tempo](/docs/it/errors#no-response-from-api). `waited_ms` è quanto tempo quel tentativo ha atteso e `retry_wait_ms` è quanto tempo attenderà il nuovo tentativo. Richiede Claude Code v2.1.261 o successivo |

269| `error` | string | categoria di errore: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, o `unknown` |271| `error` | string | categoria di errore: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, o `unknown` |

270| `uuid` | string | identificatore evento univoco |272| `uuid` | string | identificatore evento univoco |

271| `session_id` | string | sessione a cui appartiene l'evento |273| `session_id` | string | sessione a cui appartiene l'evento |

hooks.md +124 −35

Details

476| `async` | no | Se `true`, viene eseguito in background senza bloccare. Vedi [Run hooks in the background](#run-hooks-in-the-background) |476| `async` | no | Se `true`, viene eseguito in background senza bloccare. Vedi [Run hooks in the background](#run-hooks-in-the-background) |

477| `asyncRewake` | no | Se `true`, viene eseguito in background e riattiva Claude al codice di uscita 2. Lo stderr dell'hook, o stdout se stderr è vuoto, viene mostrato a Claude come un [promemoria di sistema](/docs/it/glossary#system-reminder) in modo che possa reagire a un fallimento di background di lunga durata |477| `asyncRewake` | no | Se `true`, viene eseguito in background e riattiva Claude al codice di uscita 2. Lo stderr dell'hook, o stdout se stderr è vuoto, viene mostrato a Claude come un [promemoria di sistema](/docs/it/glossary#system-reminder) in modo che possa reagire a un fallimento di background di lunga durata |

478| `shell` | no | Shell da utilizzare per questo hook. Accetta `"bash"` o `"powershell"`. Impostazione predefinita `"bash"`, o `"powershell"` su Windows quando Git Bash non è installato. L'impostazione di `"powershell"` esegue il comando tramite PowerShell su Windows. Non richiede `CLAUDE_CODE_USE_POWERSHELL_TOOL` poiché gli hook generano PowerShell direttamente. Ignorato quando `args` è impostato |478| `shell` | no | Shell da utilizzare per questo hook. Accetta `"bash"` o `"powershell"`. Impostazione predefinita `"bash"`, o `"powershell"` su Windows quando Git Bash non è installato. L'impostazione di `"powershell"` esegue il comando tramite PowerShell su Windows. Non richiede `CLAUDE_CODE_USE_POWERSHELL_TOOL` poiché gli hook generano PowerShell direttamente. Ignorato quando `args` è impostato |

479| `onFailure` | no | Cosa succede all'azione quando l'hook fallisce: `"continue"`, il valore predefinito, o `"block"`. Vedi [Blocca l'azione quando un hook fallisce](#block-the-action-when-a-hook-fails). Richiede Claude Code v2.1.295 o successivo |

479 480 

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

481 482 


533| `url` | sì | URL a cui inviare la richiesta POST |534| `url` | sì | URL a cui inviare la richiesta POST |

534| `headers` | no | Header HTTP aggiuntivi come coppie chiave-valore. I valori supportano l'interpolazione delle variabili di ambiente utilizzando la sintassi `$VAR_NAME` o `${VAR_NAME}`. Solo le variabili elencate in `allowedEnvVars` vengono risolte |535| `headers` | no | Header HTTP aggiuntivi come coppie chiave-valore. I valori supportano l'interpolazione delle variabili di ambiente utilizzando la sintassi `$VAR_NAME` o `${VAR_NAME}`. Solo le variabili elencate in `allowedEnvVars` vengono risolte |

535| `allowedEnvVars` | no | Lista di nomi di variabili di ambiente che possono essere interpolate nei valori degli header. I riferimenti alle variabili non elencate vengono sostituiti con stringhe vuote. Obbligatorio affinché avvenga qualsiasi interpolazione di variabili di ambiente |536| `allowedEnvVars` | no | Lista di nomi di variabili di ambiente che possono essere interpolate nei valori degli header. I riferimenti alle variabili non elencate vengono sostituiti con stringhe vuote. Obbligatorio affinché avvenga qualsiasi interpolazione di variabili di ambiente |

537| `onFailure` | no | Cosa succede all'azione quando l'hook fallisce: `"continue"`, il valore predefinito, o `"block"`. Vedi [Blocca l'azione quando un hook fallisce](#block-the-action-when-a-hook-fails). Richiede Claude Code v2.1.295 o successivo |

536 538 

537Claude Code invia l'[input JSON](#hook-input-and-output) dell'hook come corpo della richiesta POST con `Content-Type: application/json`. Il corpo della risposta utilizza lo stesso [formato di output JSON](#json-output) degli hook di comando.539Claude Code invia l'[input JSON](#hook-input-and-output) dell'hook come corpo della richiesta POST con `Content-Type: application/json`. Il corpo della risposta utilizza lo stesso [formato di output JSON](#json-output) degli hook di comando.

538 540 


821 Output del codice di uscita823 Output del codice di uscita

822</h3>824</h3>

823 825 

824Il codice di uscita del comando dell'hook dice a Claude Code se l'azione deve procedere, essere bloccata o essere ignorata. Il codice di uscita non agisce da solo. Claude Code legge i [campi di output JSON](#json-output) da stdout su ogni codice di uscita, non solo 0, e per gli eventi che usano il modello di decisione standard, un oggetto analizzato che supera la convalida dello schema ha effetto insieme al codice. Il blocco di exit 2 è l'unico risultato che JSON non può sovrascrivere.826Il codice di uscita del tuo hook dice a Claude Code se continuare con l'azione che ha attivato l'hook, come una chiamata a uno strumento o un prompt. Un'esecuzione che termina ha uno di tre risultati:

825 827 

826Due tabelle raccolgono le eccezioni per evento: [Exit code 2 behavior per event](#exit-code-2-behavior-per-event) dice cosa fanno i codici di uscita per ogni evento, e [Decision control](#decision-control) dice quali campi di decisione ogni evento rispetta. I campi universali come `systemMessage` funzionano sulla maggior parte degli eventi e sono elencati nella tabella [JSON output](#json-output).828* **Successo**: il tuo hook esce con 0. Claude Code applica tutti i campi di [output JSON](#json-output) che il tuo hook ha stampato, e l'azione procede a meno che quei campi non la blocchino o la neghino.

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

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

831 

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

833 

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

835| :- | :- | :- | :- |

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

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

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

839 

840Alcuni eventi hanno regole proprie:

841 

842* **`WorktreeCreate`**: qualsiasi codice di uscita diverso da zero fa fallire la creazione del worktree, indipendentemente da ciò che dice il tuo JSON.

843* **`WorktreeRemove`**: qualsiasi codice di uscita diverso da zero fa fallire la rimozione del worktree se la directory esiste ancora dopo.

844* **`Stop`, `SubagentStop`, `TaskCompleted` e l'hook `UserPromptSubmit` di un plugin**: quando il tuo hook esce con 2 senza nulla su stdout e il suo stderr dice che manca un file, ad esempio `No such file or directory`, Claude Code tratta l'esecuzione come un errore non bloccante.

845* **`Elicitation` e `ElicitationResult`**: Claude Code applica il tuo `hookSpecificOutput` quando il tuo hook esce con 0, e lo ignora su qualsiasi altro codice di uscita.

846* **Eventi che scartano l'output dell'hook, come `StopFailure`**: Claude Code ignora il tuo JSON su qualsiasi codice di uscita, a parte i campi con effetti collaterali come `terminalSequence`, che si attivano comunque.

847 

848Per verificare cosa fa il codice di uscita 2 sul tuo evento, consulta [Exit code 2 behavior per event](#exit-code-2-behavior-per-event). Per verificare quali campi di decisione rispetta, consulta [Decision control](#decision-control).

827 849 

828<h4 id="exit-code-0">850<h4 id="exit-code-0">

829 Exit code 0851 Exit code 0


835 857 

836Se Claude Code legge il tuo stdout come [JSON output](#json-output) o come testo semplice dipende da come inizia e finisce, ignorando gli spazi bianchi circostanti:858Se Claude Code legge il tuo stdout come [JSON output](#json-output) o come testo semplice dipende da come inizia e finisce, ignorando gli spazi bianchi circostanti:

837 859 

838* **Inizia con `{` e finisce con `}`**: Claude Code lo analizza come JSON. Quando l'output è composto da due o più righe che si analizzano ciascuna come JSON da sole, e nessuna riga è un oggetto [JSON output](#json-output) che imposta un campo, Claude Code tratta l'intero output come testo semplice. Quando una di quelle righe imposta un campo, l'intero output è un errore di analisi, descritto di seguito.860* **Inizia con `{` e finisce con `}`**: Claude Code lo analizza come JSON. Quando l'output è composto da due o più righe che si analizzano ciascuna come JSON da sole, e nessuna riga è un oggetto [JSON output](#json-output) che imposta un campo, Claude Code tratta l'intero output come testo semplice. Quando una di quelle righe imposta un campo, l'intero output è un errore di analisi.

839* **Inizia con `{` ma non finisce con `}`**: Claude Code lo tratta come testo semplice.861* **Inizia con `{` ma non finisce con `}`**: Claude Code lo tratta come testo semplice.

840* **Inizia con qualsiasi altra cosa**: Claude Code lo tratta come testo semplice, anche quando è un array JSON o una stringa JSON tra virgolette.862* **Inizia con qualsiasi altra cosa**: Claude Code lo tratta come testo semplice, anche quando è un array JSON o una stringa JSON tra virgolette.

841 863 

842Per gli eventi che usano il modello di decisione standard, exit 0 con un oggetto analizzato che non supera la convalida dello schema è un errore non bloccante: l'azione procede, e la trascrizione mostra un avviso `<hook name> hook error` con il messaggio di convalida. Lo stesso accade su qualsiasi codice di uscita diverso da 2, mentre [exit 2 blocca comunque](#exit-code-2).864Quando Claude Code tenta di analizzare il tuo stdout come JSON e non ci riesce, oppure l'oggetto analizzato non supera la [convalida dello schema](#json-output), l'esecuzione è un [errore non bloccante](#exit-code-output). L'avviso `<hook name> hook error` riporta il messaggio di analisi o di convalida. Sugli eventi che aggiungono lo stdout in testo semplice come contesto, Claude Code non aggiunge lo stdout che non è riuscito ad analizzare.

843 

844Per gli eventi che usano il modello di decisione standard, quando Claude Code tenta di analizzare il tuo stdout come JSON e non ci riesce, segnala un errore non bloccante su ogni codice di uscita diverso da 2. La trascrizione mostra un avviso `<hook name> hook error` con il messaggio di analisi. Sugli eventi che aggiungono lo stdout in testo semplice come contesto, Claude Code non aggiunge il testo. Prima di v2.1.248, Claude Code trattava quello stdout come testo semplice.

845 865 

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

847 867 

848<h4 id="exit-code-2">868<h4 id="exit-code-2">

849 Exit code 2869 Exit code 2

850</h4>870</h4>

851 871 

852Exit 2 significa un errore bloccante. Sugli [eventi che possono bloccare](#exit-code-2-behavior-per-event), exit 2 blocca indipendentemente dal fatto che tu stampi JSON: nemmeno un `permissionDecision` JSON con valore `"allow"` può sovrascriverlo. Claude Code legge comunque qualsiasi [JSON output](#json-output) valido su stdout. Su `Elicitation` e `ElicitationResult`, l'`hookSpecificOutput` di un hook che esce con 2 viene ignorato.872Esci con il codice 2 per bloccare l'azione. Sugli [eventi che possono bloccare](#exit-code-2-behavior-per-event), Claude Code interrompe l'azione: un hook `PreToolUse` blocca la chiamata allo strumento, ad esempio, e un hook `UserPromptSubmit` rifiuta il prompt.

853 873 

854Il messaggio di blocco è il motivo della decisione di blocco del tuo JSON quando ne prende una, e altrimenti il tuo testo stderr. Cosa fa il blocco varia per evento: `PreToolUse` blocca la chiamata allo strumento, `UserPromptSubmit` rifiuta il prompt, e così via. [Exit code 2 behavior per event](#exit-code-2-behavior-per-event) elenca l'effetto per ogni evento, e ogni sezione dell'evento dice dove va il messaggio.874Il messaggio che accompagna il blocco è lo stderr del tuo hook. Se il tuo hook ha stampato anche JSON che prende una decisione di blocco, Claude Code usa invece il motivo di quella decisione.

855 875 

856Un hook che esce con 2 mentre stampa JSON che non supera la convalida dello schema [JSON output](#json-output) blocca comunque: Claude Code usa stderr come motivo di blocco e registra l'errore di convalida nel log di debug. Prima di v2.1.214, Claude Code trattava quella combinazione come un errore non bloccante e l'azione procedeva.876Exit 2 blocca anche quando il tuo hook stampa JSON:

877 

878* **JSON che supera la convalida dello schema**: Claude Code legge comunque i campi di [JSON output](#json-output), ma non possono sovrascrivere il blocco. Nemmeno un `permissionDecision` con valore `"allow"` lascia passare l'azione. Su `Elicitation` e `ElicitationResult`, l'`hookSpecificOutput` di un hook che esce con 2 viene ignorato.

879* **JSON che non supera la convalida dello schema**: l'hook blocca comunque. Claude Code usa il tuo stderr come motivo di blocco e registra l'errore di convalida nel log di debug.

857 880 

858Questo script blocca i comandi `rm` uscendo con 2 e lascia ogni altro comando al normale flusso dei permessi:881Questo script blocca i comandi `rm` uscendo con 2 e lascia ogni altro comando al normale flusso dei permessi:

859 882 


871exit 0 # Nessuna decisione: si applica il normale flusso dei permessi894exit 0 # Nessuna decisione: si applica il normale flusso dei permessi

872```895```

873 896 

897Con questo script registrato come hook `PreToolUse` su `Bash`, un comando che inizia con `rm` viene bloccato, e Claude riceve lo stderr dell'hook come errore dello strumento, preceduto dal nome dell'evento, dal nome dello strumento e dal comando dell'hook:

898 

899```text theme={null}

900PreToolUse:Bash hook error: [${CLAUDE_PROJECT_DIR}/.claude/hooks/no-rm.sh]: Blocked: rm commands are not allowed

901```

902 

874<h4 id="other-exit-codes">903<h4 id="other-exit-codes">

875 Altri codici di uscita904 Altri codici di uscita

876</h4>905</h4>

877 906 

878Qualsiasi altro codice di uscita non blocca da solo per la maggior parte degli eventi hook. Cosa accade dipende dal tuo stdout:907Quando il tuo hook esce con un codice diverso da 0 o 2 e stampa testo semplice o niente su stdout, l'esecuzione è un [errore non bloccante](#exit-code-output). Vedi un avviso `<hook name> hook error` nella trascrizione con `Failed with non-blocking status code:` e la prima riga dello stderr del tuo hook. Ad esempio, quando un hook `PreToolUse` su `Bash` stampa `something broke` su stderr ed esce con 1, l'avviso `PreToolUse:Bash hook error` riporta questa riga:

879 908 

880* Con un oggetto analizzato che supera la convalida dello schema, per gli eventi che usano il modello di decisione standard, Claude Code ignora il codice di uscita e solo il JSON decide il risultato:909```text theme={null}

881 * Ogni campo che l'evento supporta viene rispettato, inclusi `permissionDecision`, `additionalContext`, `updatedInput` e `systemMessage`, e l'hook non viene segnalato come errore.910Failed with non-blocking status code: something broke

882 * [Decision control](#decision-control) elenca i campi di decisione per evento; i campi universali come `systemMessage` seguono la tabella [JSON output](#json-output).911```

883* Con un oggetto analizzato che non supera la convalida dello schema, per gli eventi che usano il modello di decisione standard, è lo stesso errore non bloccante [di exit 0](#exit-code-0): l'azione procede, e l'avviso `<hook name> hook error` riporta il messaggio di convalida.

884* Con stdout che Claude Code [tenta di analizzare come JSON](#exit-code-0) senza riuscirci, Claude Code segnala lo stesso errore non bloccante di exit 0 per gli eventi che usano il modello di decisione standard. L'azione procede, e l'avviso riporta il messaggio di analisi.

885* Con stdout che Claude Code [tratta come testo semplice](#exit-code-0), o con stdout vuoto, è un errore non bloccante per la maggior parte degli eventi hook: l'azione procede, e la trascrizione mostra un avviso `<hook name> hook error` seguito dalla prima riga di stderr, con il prefisso `Failed with non-blocking status code:`. Per acquisire lo stderr completo, abilita il [debug logging](#debug-hooks).

886 912 

887Gli eventi al di fuori del modello di decisione standard mantengono le loro proprie righe nella [tabella per evento](#exit-code-2-behavior-per-event): `WorktreeCreate` fa fallire la creazione su qualsiasi uscita diversa da zero indipendentemente da ciò che dice il tuo JSON, e gli eventi che scartano completamente l'output dell'hook, come `StopFailure`, ignorano il tuo JSON su ogni codice di uscita, a parte i campi con effetti collaterali come `terminalSequence`, che si attivano comunque.913Per acquisire lo stderr completo anziché la sua prima riga, abilita il [debug logging](#debug-hooks).

888 914 

889Un hook che non riesce ad avviarsi finisce nella stessa categoria non bloccante. Quando il percorso dello script non esiste o non è eseguibile, la shell esce con un codice come 127 e vedi lo stesso avviso con il messaggio dell'interprete, ad esempio `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Per la maggior parte degli eventi hook, l'azione procede. Quando configuri un hook di policy, controlla se compare questo avviso alla sua prima esecuzione: un percorso digitato male in `settings.json` lascia il controllo silenziosamente disabilitato.915Anche un hook che non riesce ad avviarsi è un errore non bloccante. In forma shell, quando il percorso dello script non esiste o non è eseguibile, la shell esce con un codice come 127 e l'avviso riporta il messaggio dell'interprete, ad esempio `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Quando configuri un hook di policy, controlla se compare questo avviso alla sua prima esecuzione, perché un percorso digitato male in `settings.json` significa che l'hook non viene mai eseguito. Per bloccare invece l'azione, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

890 916 

891<Warning>917<Warning>

892 Per la maggior parte degli eventi hook, il codice di uscita 2 è l'unico codice di uscita che blocca solo attraverso il codice. Senza JSON valido su stdout, Claude Code tratta il codice di uscita 1 come un errore non bloccante e procede con l'azione, anche se 1 è il codice di errore Unix convenzionale. Se il tuo hook è destinato ad applicare una policy, usa `exit 2`. Gli eventi worktree sono diversi: qualsiasi codice di uscita diverso da zero da `WorktreeCreate` interrompe la creazione del worktree, e qualsiasi codice di uscita diverso da zero da `WorktreeRemove` fa fallire la rimozione del worktree se la directory esiste ancora dopo.918 Senza JSON valido su stdout, Claude Code tratta il codice di uscita 1 come un errore non bloccante, anche se 1 è il codice di errore Unix convenzionale. Se il tuo hook è destinato ad applicare una policy, usa `exit 2`.

893</Warning>919</Warning>

894 920 

895<h4 id="timeouts">921<h4 id="timeouts">


900 926 

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

902 928 

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

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

905 931 

932<h4 id="block-the-action-when-a-hook-fails">

933 Bloccare l'azione quando un hook fallisce

934</h4>

935 

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

937 

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

939 

940```json theme={null}

941{

942 "hooks": {

943 "PreToolUse": [

944 {

945 "matcher": "Bash",

946 "hooks": [

947 {

948 "type": "command",

949 "command": "node",

950 "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/check-command.js"],

951 "onFailure": "block"

952 }

953 ]

954 }

955 ]

956 }

957}

958```

959 

960Per provarlo, lascia mancante `check-command.js` e chiedi a Claude di eseguire un comando Bash come `ls`. Claude Code blocca la chiamata, e l'errore include `failed; blocking because onFailure is "block"` seguito dall'output di errore di node, qui ridotto a una riga:

961 

962```text theme={null}

963PreToolUse:Bash hook error: [node ${CLAUDE_PROJECT_DIR}/.claude/hooks/check-command.js]: failed; blocking because onFailure is "block"

964Error: Cannot find module '/path/to/project/.claude/hooks/check-command.js'

965```

966 

967Dopo un timeout, il messaggio dice `timed out` invece di `failed`. Senza `onFailure` impostato, lo stesso script mancante è un errore non bloccante e `ls` viene eseguito.

968 

969Ciascuno dei seguenti casi conta come un fallimento:

970 

971* **Impossibile avviarsi**: un command hook non riesce ad avviarsi, ad esempio perché lo script o l'eseguibile non esiste

972* **Codice di uscita diverso da 0 o 2**: conta per un command hook anche se ha stampato JSON che consente l'azione, come `permissionDecision: "allow"`. Per restituire una decisione JSON, esci con 0

973* **Errore HTTP**: la connessione di un HTTP hook fallisce, oppure lo stato della risposta non è 2xx

974* **Timeout**: l'hook raggiunge il suo [`timeout`](#common-fields)

975* **Output non valido**: l'output JSON [non può essere analizzato](#exit-code-0) o non supera la [convalida dello schema](#json-output). Per un HTTP hook, conta anche un corpo 2xx che non è né vuoto né un oggetto JSON. Lo stdout in testo semplice di un command hook non è un fallimento

976 

977Con `"block"` impostato, un fallimento fa ciò che fa il [codice di uscita 2 su quell'evento](#exit-code-2-behavior-per-event), tranne su `PermissionRequest`, dove nega la richiesta. Ad esempio, un fallimento di `PreToolUse` blocca la chiamata allo strumento e un fallimento di `UserPromptSubmit` blocca il prompt.

978 

979Il campo non ha effetto su questi hook:

980 

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

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

983 

906<h4 id="exit-code-2-behavior-per-event">984<h4 id="exit-code-2-behavior-per-event">

907 Exit code 2 behavior per event985 Exit code 2 behavior per event

908</h4>986</h4>


960* **Errore di connessione**: errore non bloccante, l'esecuzione continua1038* **Errore di connessione**: errore non bloccante, l'esecuzione continua

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

962 1040 

963A differenza dei command hook, gli HTTP hook non possono segnalare un errore bloccante solo attraverso i codici di stato. Per bloccare una chiamata a uno strumento o negare un permesso, restituisci una risposta 2xx con un corpo JSON contenente i campi di decisione appropriati.1041Gli HTTP hook non possono segnalare un errore bloccante solo attraverso il codice di stato: uno stato non-2xx o una connessione fallita è un [errore non bloccante](#exit-code-output). Per bloccare una chiamata a uno strumento o negare un permesso, restituisci una risposta 2xx con un corpo JSON contenente i campi di decisione appropriati. Per bloccare l'azione quando la richiesta fallisce o restituisce uno stato non-2xx, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

964 1042 

965<h3 id="json-output">1043<h3 id="json-output">

966 Output JSON1044 Output JSON


1237 Controllo delle decisioni di SessionStart1315 Controllo delle decisioni di SessionStart

1238</h4>1316</h4>

1239 1317 

1240Claude Code aggiunge al contesto di Claude lo stdout che [tratta come testo semplice](#exit-code-0). Oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook, puoi restituire questi campi specifici dell'evento:1318Un hook SessionStart può aggiungere contesto per Claude, fornire il primo messaggio dell'utente, impostare il titolo della sessione, monitorare file e ricaricare le skill. Restituisci il campo corrispondente a ciascuna di queste azioni, oltre ai [campi di output JSON](#json-output) disponibili per tutti gli hook:

1241 1319 

1242| Campo | Descrizione |1320| Campo | Descrizione |

1243| :- | :- |1321| :- | :- |

1244| `additionalContext` | Stringa aggiunta al contesto di Claude all'inizio della conversazione, prima del primo prompt. Consulta [Aggiungere contesto per Claude](#add-context-for-claude) per sapere come viene consegnato il testo e cosa inserirvi |1322| `additionalContext` | Stringa aggiunta al contesto di Claude all'inizio della conversazione, prima del primo prompt. Consulta [Aggiungere contesto per Claude](#add-context-for-claude) per sapere come viene consegnato il testo e cosa inserirvi |

1245| `initialUserMessage` | Stringa usata come primo messaggio utente della sessione. Si applica in [modalità non interattiva](/docs/it/headless) con il flag `-p`, dove diventa il primo turno anche se non viene fornito alcun prompt. Se viene fornito un prompt, questo segue come turno successivo. A differenza di `additionalContext`, che si collega a un turno esistente, questo crea il turno |1323| `initialUserMessage` | Stringa usata come primo messaggio dell'utente della sessione, in [modalità non interattiva](/docs/it/headless) con il flag `-p`. Diventa il primo turno anche se non passi alcun prompt. Un prompt che passi lo segue come turno successivo |

1246| `sessionTitle` | Imposta il titolo della sessione, con lo stesso effetto di `/rename`. Usalo per assegnare automaticamente un nome alle sessioni in base alla cartella di avvio, al branch git o al nome del worktree. Si applica quando `source` è `"startup"`, `"resume"` o `"fork"`; viene ignorato con `"clear"` e `"compact"` |1324| `sessionTitle` | Imposta il titolo della sessione, con lo stesso effetto di `/rename`. Si applica quando `source` è `"startup"`, `"resume"` o `"fork"` |

1247| `watchPaths` | Array di percorsi assoluti da monitorare per gli eventi [FileChanged](#filechanged) durante questa sessione |1325| `watchPaths` | Array di percorsi assoluti da monitorare per gli eventi [FileChanged](#filechanged) durante questa sessione |

1248| `reloadSkills` | Booleano. Quando è `true`, Claude Code esegue una nuova scansione delle directory delle [skill](/docs/it/skills) e dei comandi dopo il completamento degli hook SessionStart, così le skill installate dall'hook sono disponibili nella stessa sessione, a partire dal primo prompt |1326| `reloadSkills` | Booleano. Quando è `true`, Claude Code analizza di nuovo le directory delle [skill](/docs/it/skills) e dei comandi dopo il completamento degli hook SessionStart. Consulta [Ricaricare le skill installate da un hook](#reload-skills-that-a-hook-installs) |

1327 

1328Questo output aggiunge contesto e assegna un nome alla sessione:

1249 1329 

1250```json theme={null}1330```json theme={null}

1251{1331{


1257}1337}

1258```1338```

1259 1339 

1260Poiché per questo evento lo stdout semplice raggiunge già Claude, un hook che carica solo contesto può stampare direttamente su stdout senza costruire JSON. Usa la forma JSON quando devi combinare il contesto con altri campi come `sessionTitle`.1340Un hook che aggiunge solo contesto può stamparlo senza costruire JSON, perché Claude Code aggiunge lo [stdout in testo semplice](#exit-code-0) di un hook SessionStart al contesto di Claude.

1341 

1342Se l'hook SessionStart del tuo plugin fornisce `initialUserMessage` o `sessionTitle`, installa il plugin prima dell'avvio della sessione. Claude Code ignora entrambi i campi provenienti da un plugin la cui installazione termina dopo che gli hook SessionStart sono stati eseguiti.

1343 

1344<h4 id="reload-skills-that-a-hook-installs">

1345 Ricaricare le skill installate da un hook

1346</h4>

1347 

1348Per rendere disponibili nella stessa sessione le skill installate da un hook SessionStart, restituisci `reloadSkills`. Il rilevamento delle skill viene normalmente eseguito prima che gli hook SessionStart terminino, quindi senza questo campo i file che un hook scrive in `~/.claude/skills/` o `.claude/skills/` possono mancare quando viene eseguito il primo prompt.

1261 1349 

1262Usa `reloadSkills` quando un hook SessionStart installa o aggiorna skill. Il rilevamento delle skill normalmente viene eseguito prima che gli hook SessionStart terminino, quindi i file che l'hook scrive in `~/.claude/skills/` o `.claude/skills/` altrimenti apparirebbero solo nella sessione successiva. Questo esempio sincronizza un repository di skill condiviso e richiede la nuova scansione:1350Questo esempio sincronizza un repository di skill condiviso e richiede la nuova analisi:

1263 1351 

1264```bash theme={null}1352```bash theme={null}

1265#!/bin/bash1353#!/bin/bash


1270echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1358echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1271```1359```

1272 1360 

1273L'URL del repository è un segnaposto; sostituiscilo con il tuo repository di skill. Con il segnaposto, il clone fallisce e stampa un messaggio `fatal:` su stderr. Lo stderr di un hook SessionStart che esce con 0 è solo informativo, quindi la richiesta `reloadSkills` si applica comunque.1361L'URL del repository è un segnaposto. Sostituiscilo con il tuo repository di skill.

1274 1362 

1275<h4 id="persist-environment-variables">1363<h4 id="persist-environment-variables">

1276 Rendere persistenti le variabili d'ambiente1364 Rendere persistenti le variabili d'ambiente


1419 1507 

1420Gli hook `UserPromptSubmit` hanno un timeout predefinito di 30 secondi per i tipi `command`, `http` e `mcp_tool`, più breve del valore predefinito di 600 secondi per quei tipi nella maggior parte degli altri eventi. Poiché questo hook viene eseguito prima di ogni prompt e blocca l'elaborazione del modello finché non termina, un hook bloccato paralizza la sessione. Se il tuo hook ha bisogno di più tempo, imposta il campo `timeout` nella voce dell'hook.1508Gli hook `UserPromptSubmit` hanno un timeout predefinito di 30 secondi per i tipi `command`, `http` e `mcp_tool`, più breve del valore predefinito di 600 secondi per quei tipi nella maggior parte degli altri eventi. Poiché questo hook viene eseguito prima di ogni prompt e blocca l'elaborazione del modello finché non termina, un hook bloccato paralizza la sessione. Se il tuo hook ha bisogno di più tempo, imposta il campo `timeout` nella voce dell'hook.

1421 1509 

1422A parte un hook di comando che esegui con [`async: true`](#run-hooks-in-the-background), un hook di comando, HTTP o di strumento MCP su `UserPromptSubmit` che raggiunge il timeout viene annullato e il suo output, incluso qualsiasi `additionalContext`, viene scartato. Il prompt raggiunge comunque Claude senza quel contesto. La trascrizione mostra un avviso che indica l'hook, il timeout scattato e che l'output è stato scartato.1510Fatta eccezione per un hook di comando che esegui con [`async: true`](#run-hooks-in-the-background), un hook `UserPromptSubmit` di comando, HTTP o strumento MCP che raggiunge il suo timeout viene annullato e il suo output, incluso qualsiasi `additionalContext`, viene scartato. Il prompt raggiunge comunque Claude senza quel contesto. Per bloccare invece il prompt, imposta [`onFailure: "block"`](#block-the-action-when-a-hook-fails) su un hook di comando o HTTP. La trascrizione mostra un avviso che indica l'hook, il timeout scattato e il fatto che l'output è stato scartato.

1423 1511 

1424Un [hook di callback dell'Agent SDK](/docs/it/agent-sdk/hooks) su `UserPromptSubmit` che raggiunge il timeout blocca il prompt con un messaggio che indica l'hook e il timeout, perché lì un callback può fungere da controllo di policy che non deve fallire in modo permissivo. La sessione continua. Prima della v2.1.208, un timeout di callback su quell'evento terminava il turno con un errore di esecuzione.1512Un [hook di callback dell'Agent SDK](/docs/it/agent-sdk/hooks) su `UserPromptSubmit` che raggiunge il timeout blocca il prompt con un messaggio che indica l'hook e il timeout, perché lì un callback può fungere da controllo di policy che non deve fallire in modo permissivo. La sessione continua. Prima della v2.1.208, un timeout di callback su quell'evento terminava il turno con un errore di esecuzione.

1425 1513 


1860| :- | :- | :- | :- |1948| :- | :- | :- | :- |

1861| `url` | string | `"https://example.com/api"` | URL da cui recuperare il contenuto |1949| `url` | string | `"https://example.com/api"` | URL da cui recuperare il contenuto |

1862| `prompt` | string | `"Extract the API endpoints"` | Prompt da eseguire sul contenuto recuperato |1950| `prompt` | string | `"Extract the API endpoints"` | Prompt da eseguire sul contenuto recuperato |

1951| `offset` | number | `100000` | Numero facoltativo di caratteri da saltare dall'inizio della pagina. Claude lo imposta per continuare a leggere una pagina lunga. Richiede Claude Code v2.1.290 o successiva |

1863 1952 

1864<h5 id="websearch">1953<h5 id="websearch">

1865 WebSearch1954 WebSearch


2112| `message` | Solo per `"deny"`: comunica a Claude perché il permesso è stato negato |2201| `message` | Solo per `"deny"`: comunica a Claude perché il permesso è stato negato |

2113| `interrupt` | Solo per `"deny"`: se `true`, ferma Claude |2202| `interrupt` | Solo per `"deny"`: se `true`, ferma Claude |

2114 2203 

2115Un hook che esce con 2 senza un oggetto `decision` lascia invariato il flusso dei permessi, e il suo stderr viene scartato. Solo l'oggetto `decision` può concedere o negare la richiesta.2204Un hook che esce con codice 2 senza un oggetto `decision` lascia invariato il flusso dei permessi, e il suo stderr viene scartato. Per concedere o negare la richiesta, restituisci l'oggetto `decision`.

2116 2205 

2117```json theme={null}2206```json theme={null}

2118{2207{


2678 Controllo delle decisioni di TaskCreated2767 Controllo delle decisioni di TaskCreated

2679</h4>2768</h4>

2680 2769 

2681Un hook TaskCreated può bloccare la creazione in due modi. In entrambi i casi, Claude Code elimina l'attività e restituisce il tuo messaggio a Claude come errore dello strumento. Claude Code ignora `continue: false` da questo evento e Claude continua a lavorare.2770Un hook TaskCreated può bloccare la creazione con il codice di uscita 2 o con una decisione JSON. In entrambi i casi, Claude Code elimina il task e restituisce il tuo messaggio a Claude come errore dello strumento. Claude Code ignora `continue: false` da questo evento e Claude continua a lavorare.

2682 2771 

2683* **Codice di uscita 2**: Claude Code restituisce il testo di stderr come messaggio.2772* **Codice di uscita 2**: Claude Code restituisce il testo di stderr come messaggio.

2684* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code restituisce `reason` come messaggio.2773* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code restituisce `reason` come messaggio.


3561 3650 

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

3563 3652 

3564Un hook PreModelSwitch che non risponde prima del suo timeout blocca il cambio. Per [PreToolUse](#timeouts), invece, un hook di comando andato in timeout lascia proseguire la chiamata allo strumento. Il timeout predefinito per questo evento è di 30 secondi. `PreModelSwitch` esegue solo hook `command`, `http` e `mcp_tool`, quindi i valori predefiniti di `prompt` e `agent` non si applicano.3653Un hook PreModelSwitch che non risponde prima del suo timeout blocca il cambio. Per sapere cosa fa un timeout negli altri eventi, consulta [Timeout](#timeouts). Il timeout predefinito per questo evento è di 30 secondi. `PreModelSwitch` esegue solo hook `command`, `http` e `mcp_tool`, quindi i valori predefiniti di `prompt` e `agent` non si applicano.

3565 3654 

3566Un hook che esce con un codice diverso da 0 o 2 e non stampa alcuna decisione JSON non blocca: Claude Code mostra il suo stderr e applica il cambio, come descritto in [Altri codici di uscita](#other-exit-codes).3655Un hook che esce con un codice diverso da 0 o 2 e non stampa alcuna decisione JSON è un errore non bloccante, come descritto in [Altri codici di uscita](#other-exit-codes).

3567 3656 

3568<h3 id="postmodelswitch">3657<h3 id="postmodelswitch">

3569 PostModelSwitch3658 PostModelSwitch


4279Gli hook asincroni hanno vincoli aggiuntivi rispetto agli hook sincroni:4368Gli hook asincroni hanno vincoli aggiuntivi rispetto agli hook sincroni:

4280 4369 

4281* L'output del hook viene consegnato al turno di conversazione successivo. Se la sessione è inattiva, la risposta attende fino alla prossima interazione dell'utente. Eccezione: un hook `asyncRewake` che esce con il codice 2 riattiva Claude immediatamente anche quando la sessione è inattiva.4370* L'output del hook viene consegnato al turno di conversazione successivo. Se la sessione è inattiva, la risposta attende fino alla prossima interazione dell'utente. Eccezione: un hook `asyncRewake` che esce con il codice 2 riattiva Claude immediatamente anche quando la sessione è inattiva.

4282* Ogni esecuzione crea un processo in background separato. Non c'è deduplicazione tra più attivazioni dello stesso hook asincrono.4371* Ogni esecuzione crea un processo in background separato.

4283 4372 

4284<h2 id="security-considerations">4373<h2 id="security-considerations">

4285 Considerazioni sulla sicurezza4374 Considerazioni sulla sicurezza

hooks-guide.md +13 −10

Details

242 242 

243Per testare l'hook, chiedete a Claude di aggiungere una riga con stringhe tra virgolette singole a un file JavaScript, quindi aprite il file: con le impostazioni predefinite di Prettier, l'hook le riscrive in virgolette doppie.243Per testare l'hook, chiedete a Claude di aggiungere una riga con stringhe tra virgolette singole a un file JavaScript, quindi aprite il file: con le impostazioni predefinite di Prettier, l'hook le riscrive in virgolette doppie.

244 244 

245Quando l'hook ha successo, Claude Code non mostra nulla nella conversazione. Per confermare che l'hook è stato eseguito, controllate che il file modificato sia riformattato, o consultate [Tecniche di debug](#debug-techniques).245Quando l'hook ha successo, Claude Code non mostra nulla nella conversazione. Per confermare che l'hook è stato eseguito, controlla che il file modificato sia stato riformattato, oppure consulta [Verificare cosa ha fatto un hook](#check-what-a-hook-did).

246 246 

247Per riformattare un file specifico comunque cambi, incluso quando un comando `Bash` lo riscrive, utilizzate un hook [FileChanged](/docs/it/hooks#filechanged) invece.247Per riformattare un file specifico comunque cambi, incluso quando un comando `Bash` lo riscrive, utilizzate un hook [FileChanged](/docs/it/hooks#filechanged) invece.

248 248 


979}979}

980```980```

981 981 

982L'endpoint dovrebbe restituire un corpo di risposta JSON utilizzando lo stesso [formato di output](/docs/it/hooks#json-output) degli hook di comando. Per bloccare una chiamata di strumento, restituite una risposta 2xx con i campi `hookSpecificOutput` appropriati. I codici di stato HTTP da soli non possono bloccare le azioni.982Il tuo endpoint risponde con un corpo JSON nello stesso [formato di output](/docs/it/hooks#json-output) degli hook di comando, e Claude Code controlla anche lo stato della risposta:

983 

984* **Stato 2xx**: per bloccare una chiamata a uno strumento, restituisci i campi `hookSpecificOutput` appropriati nel corpo.

985* **Qualsiasi altro stato, o la richiesta non riesce**: Claude Code segnala un [errore non bloccante](/docs/it/hooks#exit-code-output) e lascia proseguire l'azione. Per fare in modo che un endpoint non riuscito blocchi l'azione, imposta [`onFailure: "block"`](/docs/it/hooks#block-the-action-when-a-hook-fails) sull'hook.

983 986 

984I valori dell'intestazione supportano l'interpolazione delle variabili di ambiente utilizzando la sintassi `$VAR_NAME` o `${VAR_NAME}`. Solo le variabili elencate nell'array `allowedEnvVars` vengono risolte; tutti gli altri riferimenti `$VAR` rimangono vuoti.987I valori dell'intestazione supportano l'interpolazione delle variabili di ambiente utilizzando la sintassi `$VAR_NAME` o `${VAR_NAME}`. Solo le variabili elencate nell'array `allowedEnvVars` vengono risolte; tutti gli altri riferimenti `$VAR` rimangono vuoti.

985 988 


1103 1106 

1104Quando il tuo hook restituisce `permissionDecision` o `additionalContext` al livello superiore invece che all'interno di `hookSpecificOutput`, il JSON viene comunque interpretato, e Claude Code ignora i campi fuori posto senza segnalare errori. Per vedere quali campi ha ignorato, avvia Claude Code con `claude --debug` e cerca `Hook JSON output had unrecognized keys` nel [log di debug](/docs/it/hooks#debug-hooks).1107Quando il tuo hook restituisce `permissionDecision` o `additionalContext` al livello superiore invece che all'interno di `hookSpecificOutput`, il JSON viene comunque interpretato, e Claude Code ignora i campi fuori posto senza segnalare errori. Per vedere quali campi ha ignorato, avvia Claude Code con `claude --debug` e cerca `Hook JSON output had unrecognized keys` nel [log di debug](/docs/it/hooks#debug-hooks).

1105 1108 

1106<h3 id="debug-techniques">1109<h3 id="check-what-a-hook-did">

1107 Tecniche di debug1110 Verificare cosa ha fatto un hook

1108</h3>1111</h3>

1109 1112 

1110Premi `Ctrl+O` per aprire la vista della trascrizione e controllare l'esito dell'esecuzione di un hook:1113Premi `Ctrl+O` per aprire la vista della trascrizione e cerca l'esito dell'hook:

1111 1114 

1112* **Esecuzione riuscita**: non vedi nulla, a meno che il JSON dell'hook non faccia emergere qualcosa, come `systemMessage` o il feedback di un hook Stop.1115* **Esecuzione riuscita**: non vedi nulla, a meno che il JSON dell'hook non faccia emergere qualcosa, come `systemMessage` o il feedback di un hook Stop.

1113 * Per confermare che un hook è stato eseguito, verificane l'effetto, ad esempio un file riformattato, oppure attiva il logging di debug come descritto di seguito e attiva nuovamente l'hook1116 * Per confermare che l'hook è stato eseguito, verificane l'effetto, ad esempio un file riformattato

1114* **Errore bloccante**: nella maggior parte degli eventi vedi il feedback dell'hook. Quando il JSON dell'hook ha preso una decisione bloccante, il feedback è il motivo di quella decisione; altrimenti è lo stderr dell'hook. In alcuni eventi, come `ConfigChange` ed `Elicitation`, un blocco non mostra alcun messaggio.1117* **Errore bloccante**: nella maggior parte degli eventi vedi il messaggio che accompagna il blocco, ad esempio `Blocked: rm commands are not allowed`. In alcuni eventi, come `ConfigChange` ed `Elicitation`, non vedi alcun messaggio. [Codice di uscita 2](/docs/it/hooks#exit-code-2) spiega da dove proviene il messaggio.

1115* **Errore non bloccante**: l'azione è proseguita e vedi un avviso `<hook name> hook error` con una breve spiegazione, come la prima riga dello stderr preceduta da `Failed with non-blocking status code:`, oppure un messaggio di convalida o di parsing JSON.1118* **Errore non bloccante**: vedi un avviso `<hook name> hook error` con una breve spiegazione, come la prima riga dello stderr dopo `Failed with non-blocking status code:`, oppure un messaggio di convalida o di parsing JSON. L'azione è proseguita.

1116 1119 

1117Quali combinazioni di codice di uscita e JSON producono ciascun esito, incluse le eccezioni per singolo evento, è definito nella sezione [Output del codice di uscita](/docs/it/hooks#exit-code-output) del riferimento.1120Per consultare l'esito per uno specifico codice di uscita e stdout, incluse le eccezioni per singolo evento, consulta [Output del codice di uscita](/docs/it/hooks#exit-code-output) nel riferimento.

1118 1121 

1119Per i dettagli completi dell'esecuzione, inclusi quali hook hanno trovato corrispondenza, i loro codici di uscita, stdout e stderr, leggi il log di debug. Avvia Claude Code con `claude --debug-file /tmp/claude.log` per scrivere in un percorso noto, quindi esegui `tail -f /tmp/claude.log` in un altro terminale. Se hai avviato senza quel flag, esegui `/debug` durante la sessione per abilitare il logging e trovare il percorso del log.1122Per i dettagli completi dell'esecuzione, inclusi i codici di uscita, lo stdout e lo stderr degli hook, leggi il log di debug. Avvia Claude Code con `claude --debug-file /tmp/claude.log` per scrivere in un percorso noto, quindi esegui `tail -f /tmp/claude.log` in un altro terminale. Se hai avviato senza quel flag, esegui `/debug` durante la sessione per abilitare il logging e trovare il percorso del log.

1120 1123 

1121<h2 id="learn-more">1124<h2 id="learn-more">

1122 Ulteriori informazioni1125 Ulteriori informazioni

Details

216| `^` | Primo carattere non vuoto |216| `^` | Primo carattere non vuoto |

217| `gg` | Inizio dell'input |217| `gg` | Inizio dell'input |

218| `G` | Inizio dell'ultima riga |218| `G` | Inizio dell'ultima riga |

219| `f{char}` | Salta alla prossima occorrenza del carattere |219| `f{char}` | Salta alla prossima occorrenza del carattere sulla riga corrente |

220| `F{char}` | Salta alla precedente occorrenza del carattere |220| `F{char}` | Salta alla precedente occorrenza del carattere sulla riga corrente |

221| `t{char}` | Salta appena prima della prossima occorrenza del carattere |221| `t{char}` | Salta appena prima della prossima occorrenza del carattere sulla riga corrente |

222| `T{char}` | Salta appena dopo la precedente occorrenza del carattere |222| `T{char}` | Salta appena dopo la precedente occorrenza del carattere sulla riga corrente |

223| `;` | Ripeti l'ultimo movimento f/F/t/T |223| `;` | Ripeti l'ultimo movimento f/F/t/T |

224| `,` | Ripeti l'ultimo movimento f/F/t/T in ordine inverso |224| `,` | Ripeti l'ultimo movimento f/F/t/T in ordine inverso |

225| `/` | Apri ricerca cronologia inversa, come `Ctrl+R`. Il prompt di ricerca vuoto mostra un suggerimento: premi `Esc` poi `i` poi `/` per aprire il menu dei comandi |225| `/` | Apri ricerca cronologia inversa, come `Ctrl+R`. Il prompt di ricerca vuoto mostra un suggerimento: premi `Esc` poi `i` poi `/` per aprire il menu dei comandi |


239| `dd` | Elimina riga |239| `dd` | Elimina riga |

240| `D` | Elimina fino alla fine della riga |240| `D` | Elimina fino alla fine della riga |

241| `dw`/`de`/`db` | Elimina parola/fino alla fine/indietro |241| `dw`/`de`/`db` | Elimina parola/fino alla fine/indietro |

242| `df{char}`/`dt{char}` | Elimina fino a e incluso, o fino a, la prossima occorrenza di un carattere |242| `df{char}`/`dt{char}` | Elimina fino a e incluso, o fino a, la prossima occorrenza di un carattere sulla riga corrente |

243| `dj`/`dk` | Elimina la riga corrente e la riga sotto o sopra |243| `dj`/`dk` | Elimina la riga corrente e la riga sotto o sopra |

244| `dgg`/`dG` | Elimina dalla riga corrente alla prima o all'ultima riga |244| `dgg`/`dG` | Elimina dalla riga corrente alla prima o all'ultima riga |

245| `d0`/`c0`/`y0` | Elimina, cambia o copia dal cursore all'inizio della riga. Richiede Claude Code v2.1.281 o successivo |245| `d0`/`c0`/`y0` | Elimina, cambia o copia dal cursore all'inizio della riga. Richiede Claude Code v2.1.281 o successivo |


852 Link di riferimento ai problemi852 Link di riferimento ai problemi

853</h2>853</h2>

854 854 

855Quando Claude menziona un problema come `owner/repo#123`, potete fare clic sul riferimento per aprirlo, purché il vostro terminale supporti i hyperlink. Se Claude Code non rileva il supporto dei hyperlink nel vostro terminale, impostate [`FORCE_HYPERLINK`](/docs/it/env-vars) su `1` per attivare i link, oppure su `0` per mantenere i riferimenti come testo semplice.855Quando Claude menziona un problema come `owner/repo#123`, puoi fare clic sul riferimento per aprirlo, purché il tuo terminale supporti gli hyperlink. Se Claude Code non rileva il supporto degli hyperlink nel tuo terminale, imposta [`FORCE_HYPERLINK`](/docs/it/env-vars) su `1` per attivare i link, oppure su `0` per mantenere i riferimenti come testo semplice.

856 856 

857Ottenete un link solo per il modulo a due parti `owner/repo#123`. Questi rimangono come testo semplice:857Ottieni un link solo per il formato a due parti `owner/repo#123`. Questi rimangono come testo semplice:

858 858 

859* Un `#123` isolato859* Un `#123` isolato

860* Un percorso GitLab annidato come `group/subgroup/project#123`860* Un percorso GitLab annidato come `group/subgroup/project#123`

861* Qualsiasi riferimento all'interno di uno span di codice o di un blocco di codice861* Qualsiasi riferimento all'interno di uno span di codice o di un blocco di codice

862* Qualsiasi riferimento in una risposta più lunga di circa 1.000 righe o 100.000 caratteri

862 863 

863Claude Code costruisce il link per l'host del repository che identifica dal vostro git remote, non per il repository che il riferimento nomina:864Claude Code crea il link per l'host del repository che identifica dal tuo git remote, non per il repository che il riferimento nomina:

864 865 

865| Host del vostro repository | Dove `owner/repo#123` si collega |866| Host del tuo repository | Dove `owner/repo#123` si collega |

866| :- | :- |867| :- | :- |

867| github.com, un host GitHub Enterprise, o qualsiasi host non elencato di seguito | `https://<host>/owner/repo/issues/123` |868| github.com, un host GitHub Enterprise, o qualsiasi host non elencato di seguito | `https://<host>/owner/repo/issues/123` |

868| gitlab.com | `https://gitlab.com/owner/repo/-/issues/123` |869| gitlab.com | `https://gitlab.com/owner/repo/-/issues/123` |

mcp.md +1 −1

Details

367 367 

368Su v2, Claude Code inoltre:368Su v2, Claude Code inoltre:

369 369 

370* Chiede ai server HTTP e stdio se supportano la revisione più recente, e la utilizza con quelli che la supportano. Nelle sessioni in cui recupera i feature flag, lo chiede anche ai server dei connettori claude.ai. Si connette a ogni altro server come fa v1.370* Chiede ai server HTTP, stdio e dei connettori claude.ai se supportano la revisione più recente, e la utilizza con quelli che la supportano. Si connette a ogni altro server come fa v1.

371* Riceve le notifiche `list_changed` dai server sulla revisione più recente tramite un [flusso che mantiene aperto](#notification-streams-on-the-v2-runtime).371* Riceve le notifiche `list_changed` dai server sulla revisione più recente tramite un [flusso che mantiene aperto](#notification-streams-on-the-v2-runtime).

372* Non registra un server [canale](#push-messages-with-channels) che si connette sulla revisione più recente, perché quella revisione non può trasportare messaggi di canale.372* Non registra un server [canale](#push-messages-with-channels) che si connette sulla revisione più recente, perché quella revisione non può trasportare messaggi di canale.

373* Fa fallire un [accesso OAuth MCP](#authenticate-with-remote-mcp-servers) la cui risposta di autorizzazione indica un emittente inatteso.373* Fa fallire un [accesso OAuth MCP](#authenticate-with-remote-mcp-servers) la cui risposta di autorizzazione indica un emittente inatteso.

Details

599 599 

600In sessioni autenticate a un [gateway di app Claude](/docs/it/claude-apps-gateway) tramite `/login`, la CLI contrassegna le esportazioni con l'identità autenticata: `user.id` è il soggetto IdP, `user.email` è l'email con cui hai effettuato l'accesso, e `user.groups` contiene l'appartenenza al gruppo IdP come stringa separata da virgole. Ogni esportazione contiene anche `identity.source: gateway-oidc`. L'identità del gateway viene applicata per ultima, quindi le chiavi `user.*` e `identity.*` impostate tramite `OTEL_RESOURCE_ATTRIBUTES` vengono ignorate sulle sessioni del gateway.600In sessioni autenticate a un [gateway di app Claude](/docs/it/claude-apps-gateway) tramite `/login`, la CLI contrassegna le esportazioni con l'identità autenticata: `user.id` è il soggetto IdP, `user.email` è l'email con cui hai effettuato l'accesso, e `user.groups` contiene l'appartenenza al gruppo IdP come stringa separata da virgole. Ogni esportazione contiene anche `identity.source: gateway-oidc`. L'identità del gateway viene applicata per ultima, quindi le chiavi `user.*` e `identity.*` impostate tramite `OTEL_RESOURCE_ATTRIBUTES` vengono ignorate sulle sessioni del gateway.

601 601 

602<Note>

603 Gli eventi che Claude Code registra prima che uno sviluppatore acceda non riportano l'identità del gateway. Quando Claude Code apre una sessione senza accesso al gateway, ad esempio dopo che [il gateway ha terminato l'accesso](/docs/it/errors#cloud-gateway-session-expired), gli eventi di avvio registrati prima dell'accesso riportano lo `user.id` anonimo e nessun `identity.source`. Tra questi ci sono [`managed_settings_resolved`](#managed-settings-resolved-event), [`plugin_loaded`](#plugin-loaded-event) e [`mcp_server_connection`](#mcp-server-connection-event).

604</Note>

605 

602Per gli attributi di identità su sessioni Claude Desktop e Cowork che si connettono tramite un gateway, vedi il [riferimento `telemetry` del gateway](/docs/it/claude-apps-gateway-config#telemetry).606Per gli attributi di identità su sessioni Claude Desktop e Cowork che si connettono tramite un gateway, vedi il [riferimento `telemetry` del gateway](/docs/it/claude-apps-gateway-config#telemetry).

603 607 

604Gli eventi includono inoltre i seguenti attributi. Questi non vengono mai allegati alle metriche perché causerebbero cardinalità illimitata:608Gli eventi includono inoltre i seguenti attributi. Questi non vengono mai allegati alle metriche perché causerebbero cardinalità illimitata:


917* `error`: Messaggio di errore921* `error`: Messaggio di errore

918* `status_code`: Codice di stato HTTP come numero. Assente per errori non HTTP come i guasti di connessione.922* `status_code`: Codice di stato HTTP come numero. Assente per errori non HTTP come i guasti di connessione.

919* `duration_ms`: Durata della richiesta in millisecondi923* `duration_ms`: Durata della richiesta in millisecondi

920* `attempt`: Numero totale di tentativi effettuati, inclusa la richiesta iniziale (`1` significa che non si sono verificati tentativi)924* `attempt`: Numero di tentativi effettuati, inclusa la richiesta iniziale. [Rilevare l'esaurimento dei nuovi tentativi](#detect-retry-exhaustion) indica quando il conteggio ricomincia

921* `request_id`: ID della richiesta API, ad esempio `"req_011..."`, descritto sotto [Attributi di correlazione degli eventi](#event-correlation-attributes).925* `request_id`: ID della richiesta API, ad esempio `"req_011..."`, descritto sotto [Attributi di correlazione degli eventi](#event-correlation-attributes).

922* `client_request_id`: UUID generato dal client inviato come intestazione della richiesta `x-client-request-id`. Disponibile anche quando un guasto come un timeout o un errore di connessione non ha mai prodotto un `request_id` del server; vedi la tabella [attributi di correlazione degli eventi](#event-correlation-attributes) per quando è presente. Richiede Claude Code v2.1.214 o successivo926* `client_request_id`: UUID generato dal client inviato come intestazione della richiesta `x-client-request-id`. Disponibile anche quando un guasto come un timeout o un errore di connessione non ha mai prodotto un `request_id` del server; vedi la tabella [attributi di correlazione degli eventi](#event-correlation-attributes) per quando è presente. Richiede Claude Code v2.1.214 o successivo

923* `speed`: `"fast"` o `"normal"`, indicando se la modalità veloce era attiva927* `speed`: `"fast"` o `"normal"`, indicando se la modalità veloce era attiva


1190 1194 

1191Registrato quando Claude Code risolve una menzione `@` in un prompt. Non ogni menzione emette un evento: i percorsi di uscita anticipata come i rifiuti di autorizzazione, i file di grandi dimensioni, gli allegati di riferimento PDF e i guasti di elenco delle directory vengono restituiti senza registrazione.1195Registrato quando Claude Code risolve una menzione `@` in un prompt. Non ogni menzione emette un evento: i percorsi di uscita anticipata come i rifiuti di autorizzazione, i file di grandi dimensioni, gli allegati di riferimento PDF e i guasti di elenco delle directory vengono restituiti senza registrazione.

1192 1196 

1197Ogni volta che Claude Code legge un prompt, registra al massimo 100 eventi con `mention_type` pari a `"agent"` e 100 con `"mcp_resource"`. Le menzioni oltre uno dei due limiti vengono comunque risolte ma non emettono alcun evento.

1198 

1193**Nome evento**: `claude_code.at_mention`1199**Nome evento**: `claude_code.at_mention`

1194 1200 

1195**Attributi**:1201**Attributi**:


1528 1534 

1529Claude Code ritenta internamente le richieste API non riuscite ed emette un singolo evento `claude_code.api_error` solo dopo che rinuncia, quindi l'evento stesso è il segnale terminale per quella richiesta. I tentativi di ripetizione intermedi non vengono registrati come eventi separati.1535Claude Code ritenta internamente le richieste API non riuscite ed emette un singolo evento `claude_code.api_error` solo dopo che rinuncia, quindi l'evento stesso è il segnale terminale per quella richiesta. I tentativi di ripetizione intermedi non vengono registrati come eventi separati.

1530 1536 

1531L'attributo `attempt` sull'evento registra il numero totale di tentativi. `CLAUDE_CODE_MAX_RETRIES` ha un valore predefinito di 10 ed è limitato a 15. A partire da v2.1.199, puoi impostare `CLAUDE_CODE_RETRY_WATCHDOG` per aumentare il valore predefinito e rimuovere il limite.1537L'attributo `attempt` sull'evento registra il numero di tentativi. `CLAUDE_CODE_MAX_RETRIES` ha un valore predefinito di 10 ed è limitato a 15. A partire da v2.1.199, puoi impostare `CLAUDE_CODE_RETRY_WATCHDOG` per aumentare il valore predefinito e rimuovere il limite.

1538 

1539Quando la richiesta esaurisce tutti i nuovi tentativi su un errore transitorio, `attempt` è al massimo uno più di quel limite effettivo: 11 per impostazione predefinita.

1532 1540 

1533Quando la richiesta esaurisce tutti i tentativi su un errore transitorio, `attempt` è uguale a uno più di quel limite effettivo: 11 per impostazione predefinita, e mai più di 16 a meno che il watchdog non sia impostato. Un valore inferiore indica un errore non ritentabile come una risposta `400`, o una causa con il suo proprio budget di tentativi più piccolo. Ad esempio, Claude Code ritenta un errore nel caricamento delle credenziali AWS o Google Cloud al massimo due volte.1541Anche un valore inferiore può indicare che i nuovi tentativi sono stati esauriti: `attempt` riparte da `1` ogni volta che Claude Code invia di nuovo la richiesta dopo un errore di streaming.

1534 1542 

1535Per distinguere una sessione che si è ripresa da una che si è bloccata, raggruppa gli eventi per `session.id` e verifica se esiste un evento `api_request` successivo dopo l'errore.1543Per distinguere una sessione che si è ripresa da una che si è bloccata, raggruppa gli eventi per `session.id` e verifica se esiste un evento `api_request` successivo dopo l'errore.

1536 1544 

Details

91| `-y, --yes` | Accetta il comando di installazione visualizzato senza il prompt `Run this command now?`. Ignorato quando il comando viene eseguito all'interno di una sessione Claude Code, ad esempio dallo strumento Bash o da un hook. Richiede Claude Code v2.1.229 o successivo |91| `-y, --yes` | Accetta il comando di installazione visualizzato senza il prompt `Run this command now?`. Ignorato quando il comando viene eseguito all'interno di una sessione Claude Code, ad esempio dallo strumento Bash o da un hook. Richiede Claude Code v2.1.229 o successivo |

92| `--accept-command <sha256>` | Accetta il comando di installazione visualizzato il cui `sha256` un'esecuzione precedente [`--json`](#plugin-json-result) ha riportato in `shownCommand`, al posto di `-y`. Non può essere combinato con `-y`. Vedi [Accetta un comando di installazione visualizzato](#accept-a-displayed-install-command). Richiede Claude Code v2.1.271 o successivo |92| `--accept-command <sha256>` | Accetta il comando di installazione visualizzato il cui `sha256` un'esecuzione precedente [`--json`](#plugin-json-result) ha riportato in `shownCommand`, al posto di `-y`. Non può essere combinato con `-y`. Vedi [Accetta un comando di installazione visualizzato](#accept-a-displayed-install-command). Richiede Claude Code v2.1.271 o successivo |

93| `--json` | Stampa il risultato come un oggetto JSON sull'ultima riga di stdout invece del messaggio leggibile, per l'uso negli script. Vedi [Formato risultato JSON](#plugin-json-result). Richiede Claude Code v2.1.268 o successivo |93| `--json` | Stampa il risultato come un oggetto JSON sull'ultima riga di stdout invece del messaggio leggibile, per l'uso negli script. Vedi [Formato risultato JSON](#plugin-json-result). Richiede Claude Code v2.1.268 o successivo |

94| `--marketplace <source>` | Installa `<plugin>`, indicato con il suo nome semplice, dal marketplace in `<source>`, aggiungendo prima il marketplace se non l'hai ancora aggiunto. Vedi [Aggiungi un marketplace e installa con un solo comando](/docs/it/plugins/install#add-a-marketplace-and-install-in-one-command). Richiede Claude Code v2.1.292 o successivo |

94 95 

95Esegui `claude plugin install --help` nella tua shell per vedere ogni opzione che la tua versione supporta.96Esegui `claude plugin install --help` nella tua shell per vedere ogni opzione che la tua versione supporta.

96 97 

Details

413 How users accept a headersHelper command413 How users accept a headersHelper command

414</h3>414</h3>

415 415 

416Un utente accetta il comando di una voce del plugin ogni volta che installa o aggiorna quel singolo plugin da solo. Lo fanno dalla vista propria del plugin in `/plugin`, o con `claude plugin install` o `claude plugin update`. Claude Code mostra il comando e l'URL dell'archive, ed esegue il comando solo dopo che l'utente accetta.416Un utente accetta il comando di una voce del plugin ogni volta che installa o aggiorna quel singolo plugin da solo. Claude Code mostra il comando e l'URL dell'archive, ed esegue il comando solo dopo che l'utente accetta.

417 

418Gli utenti possono installare o aggiornare il plugin all'interno di una sessione di Claude Code in un terminale, nella propria shell senza alcuna sessione in esecuzione, o nell'estensione VS Code:

419 

420* **Sessione nel terminale**: dalla vista propria del plugin in `/plugin`.

421* **Shell**: con `claude plugin install` o `claude plugin update`.

422* **Estensione VS Code**: dalla [finestra di dialogo **Manage plugins**](/docs/it/vs-code#manage-plugins), con la versione 2.1.290 o successiva dell'estensione.

417 423 

418In una shell non interattiva, passa [`--yes`](/docs/it/plugins/cli-reference#plugin-install) per accettare il comando. Per accettare solo il comando che un'esecuzione `--json` precedente ha visualizzato, passa [`--accept-command`](/docs/it/plugins/cli-reference#plugin-install) con lo `sha256` che l'esecuzione ha segnalato.424In una shell non interattiva, passa [`--yes`](/docs/it/plugins/cli-reference#plugin-install) per accettare il comando. Per accettare solo il comando che un'esecuzione `--json` precedente ha visualizzato, passa [`--accept-command`](/docs/it/plugins/cli-reference#plugin-install) con lo `sha256` che l'esecuzione ha segnalato.

419 425 

420Claude Code esegue solo il comando che ha mostrato, per l'URL dell'archive che ha mostrato. Se il comando della voce o l'URL dell'archive sono cambiati nel frattempo, Claude Code rifiuta l'installazione o l'aggiornamento. Un cambiamento nella stringa di query da solo non conta.426Claude Code esegue solo il comando che ha mostrato, per l'URL dell'archive che ha mostrato. Se il comando della voce o l'URL dell'archive sono cambiati nel frattempo, Claude Code rifiuta l'installazione o l'aggiornamento. Un cambiamento nella sola stringa di query non conta, tranne che nell'estensione VS Code o con `--accept-command`.

421 427 

422<h3 id="installs-and-updates-that-refuse-the-command-instead-of-asking">428<h3 id="installs-and-updates-that-refuse-the-command-instead-of-asking">

423 Installs and updates that refuse a command instead of asking429 Installs and updates that refuse a command instead of asking

Details

189 189 

190* **Scope**: ambito utente per impostazione predefinita. Passa `--scope project` o `--scope local` per cambiarlo.190* **Scope**: ambito utente per impostazione predefinita. Passa `--scope project` o `--scope local` per cambiarlo.

191* **Quando i plugin si caricano**: i plugin che installa si caricano la prossima volta che avvii Claude Code, o quando esegui `/reload-plugins` in una sessione già aperta.191* **Quando i plugin si caricano**: i plugin che installa si caricano la prossima volta che avvii Claude Code, o quando esegui `/reload-plugins` in una sessione già aperta.

192* **Il marketplace deve essere aggiunto prima**: su una macchina in cui nessuno ha ancora aperto una sessione Claude Code interattiva, il marketplace ufficiale non è registrato, quindi uno script che installa da esso esegue `claude plugin marketplace add anthropics/claude-plugins-official` prima dell'installazione.192* **Il marketplace su una nuova macchina**: su una macchina in cui nessuno ha ancora aperto una sessione Claude Code interattiva, il marketplace ufficiale non è registrato, quindi uno script che installa da esso esegue `claude plugin marketplace add anthropics/claude-plugins-official` prima dell'installazione. Vedi [Aggiungere e installare dalla tua shell](#add-and-install-from-your-shell).

193 193 

194```bash theme={null}194```bash theme={null}

195claude plugin install formatter@your-org --scope project195claude plugin install formatter@your-org --scope project


232 Aggiungi un marketplace e installa in un comando232 Aggiungi un marketplace e installa in un comando

233</h3>233</h3>

234 234 

235Per installare un plugin da un marketplace che non hai ancora aggiunto, esegui `/plugin install` in una sessione Claude Code e nomina la fonte del marketplace con `--marketplace`. Richiede Claude Code v2.1.275 o successivo.235Per installare un plugin da un marketplace che non hai ancora aggiunto, indica la fonte del marketplace con `--marketplace` nel comando di installazione, in una sessione o dalla tua shell. La fonte accetta [le stesse forme di `/plugin marketplace add`](#add-a-marketplace), come GitHub `owner/repo`, un URL git o un percorso locale. Dai il nome del plugin da solo, senza un suffisso `@marketplace`.

236 

237<h4 id="add-and-install-in-a-session">

238 Aggiungi e installa in una sessione

239</h4>

240 

241Esegui `/plugin install` in una sessione Claude Code con il plugin e la fonte. Richiede Claude Code v2.1.275 o successivo. In una sessione, la fonte non può contenere spazi.

236 242 

237```text theme={null}243```text theme={null}

238/plugin install deploy-helper --marketplace your-org/plugins244/plugin install deploy-helper --marketplace your-org/plugins

239```245```

240 246 

241La fonte accetta [le stesse forme di `/plugin marketplace add`](#add-a-marketplace), come GitHub `owner/repo`, un URL git o un percorso locale, tranne che non può contenere spazi. Dai il nome del plugin da solo, senza un suffisso `@marketplace`.

242 

243Se non hai ancora aggiunto quel marketplace, Claude Code mostra la fonte che ha risolto e ti chiede di confermare prima di aggiungerla. Una volta aggiunto il marketplace, i dettagli del plugin si aprono e scegli un [ambito di installazione](#install-a-plugin). Se la fonte corrisponde a un marketplace che hai già aggiunto, Claude Code salta la conferma e apre i dettagli del plugin in quel marketplace.247Se non hai ancora aggiunto quel marketplace, Claude Code mostra la fonte che ha risolto e ti chiede di confermare prima di aggiungerla. Una volta aggiunto il marketplace, i dettagli del plugin si aprono e scegli un [ambito di installazione](#install-a-plugin). Se la fonte corrisponde a un marketplace che hai già aggiunto, Claude Code salta la conferma e apre i dettagli del plugin in quel marketplace.

244 248 

249<h4 id="add-and-install-from-your-shell">

250 Aggiungi e installa dalla tua shell

251</h4>

252 

253Nella tua shell, senza avviare una sessione, esegui `claude plugin install` con il plugin e la fonte. Richiede Claude Code v2.1.292 o successivo.

254 

255```bash theme={null}

256claude plugin install deploy-helper --marketplace your-org/plugins

257```

258 

259Il comando della shell aggiunge il marketplace senza un passaggio di conferma. Un marketplace che hai già aggiunto da quella fonte viene riutilizzato. Uno nuovo viene aggiunto con gli stessi [controlli delle policy dell'organizzazione](/docs/it/plugins/org#restrict-what-users-can-install) di `claude plugin marketplace add` e viene dichiarato nelle tue impostazioni utente anche quando passi `--scope project`.

260 

261Se non hai ancora aggiunto quel marketplace, il comando stampa `Successfully added marketplace: <name> (declared in user settings)` e poi [installa il plugin](#install-from-your-shell).

262 

245<h3 id="add-a-private-marketplace">263<h3 id="add-a-private-marketplace">

246 Aggiungi un marketplace privato264 Aggiungi un marketplace privato

247</h3>265</h3>

Details

185| Mette `official` accanto a `claude` o `anthropic`, come `official-claude-tools` | Error |185| Mette `official` accanto a `claude` o `anthropic`, come `official-claude-tools` | Error |

186| Ha `claude`, `anthropic`, o `anthropics` come parola intera da qualche parte, come `mcp-for-claude` | Warning |186| Ha `claude`, `anthropic`, o `anthropics` come parola intera da qualche parte, come `mcp-for-claude` | Warning |

187 187 

188L'errore recita `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, e l'avviso recita `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` e `claude plugin tag` rifiutano un nome che genera l'errore. Solo questi comandi controllano il nome. Claude Code installa e carica comunque un plugin il cui nome rifiutano.188L'errore recita `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, e l'avviso recita `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` e `claude plugin tag` rifiutano un nome che genera l'errore. Claude Code installa e carica comunque un plugin il cui nome rifiutano.

189 189 

190<h3 id="displayname">190<h3 id="displayname">

191 `displayName`191 `displayName`

Details

64 64 

65| Field | Type | Description |65| Field | Type | Description |

66| :- | :- | :- |66| :- | :- | :- |

67| `name` | string | Identificatore del marketplace: lettere, cifre, `.`, `_` e `-`, che iniziano con una lettera o una cifra, e nessun `..`. `claude plugin validate` non riesce con qualsiasi altro nome, perché Claude Code non può installare plugin da un marketplace che ne usa uno. Gli utenti digitano il nome dopo `@` in un [plugin id](/docs/it/plugins/loading#find-where-a-plugin-came-from) come `my-plugin@my-marketplace` quando installano un plugin. Consulta [Reserved names](#reserved-names) |67| `name` | string | Identificatore del marketplace: lettere, cifre, `.`, `_` e `-`, che iniziano con una lettera o una cifra, e nessun `..`. `claude plugin validate` non riesce con qualsiasi altro nome, perché Claude Code [non può installare plugin da un marketplace che ne usa uno](/docs/it/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name). Gli utenti digitano il nome dopo `@` in un [plugin id](/docs/it/plugins/loading#find-where-a-plugin-came-from) come `my-plugin@my-marketplace` quando installano un plugin. Consulta [Reserved names](#reserved-names) |

68| `owner` | object | Informazioni del manutentore. `name` è obbligatorio; `email` e `url` sono facoltativi |68| `owner` | object | Informazioni del manutentore. `name` è obbligatorio; `email` e `url` sono facoltativi |

69| `plugins` | array | [Plugin entries](#plugin-entries). Ogni voce è convalidata da sola, quindi una voce non valida non fa fallire il marketplace |69| `plugins` | array | [Plugin entries](#plugin-entries). Ogni voce è convalidata da sola, quindi una voce non valida non fa fallire il marketplace |

70| `$schema` | string | URL dello schema JSON per l'autocompletamento dell'editor. Ignorato al momento del caricamento |70| `$schema` | string | URL dello schema JSON per l'autocompletamento dell'editor. Ignorato al momento del caricamento |

Details

138| `$.mcp.call` | Chiama uno strumento su un server MCP connesso, secondo le regole di permesso della sessione |138| `$.mcp.call` | Chiama uno strumento su un server MCP connesso, secondo le regole di permesso della sessione |

139| `$.model.complete` | Usa il piano o la chiave API dell'utente per le chiamate al modello |139| `$.model.complete` | Usa il piano o la chiave API dell'utente per le chiamate al modello |

140| `$.prompt.submit` | Invia un prompt e può inviarlo come se fossero parole dell'utente stesso |140| `$.prompt.submit` | Invia un prompt e può inviarlo come se fossero parole dell'utente stesso |

141| `$.session.send` | Invia un messaggio che viene letto dal Claude di un'altra sessione o di un subagent |141| `$.session.send` | Invia un messaggio che viene letto dal Claude di un'altra sessione, di un subagent o di un [compagno di team](/docs/it/agent-teams) |

142 142 

143Nella riga `hooks:`, [`tool.call`](/docs/it/plugins/mods/reference#tools) e [`prompt.submit`](/docs/it/plugins/mods/reference#prompts-and-what-claude-reads) indicano che il mod vede ogni chiamata a uno strumento e ogni prompt, e può modificarli. [`session.append`](/docs/it/plugins/mods/reference#session) indica che il mod può riscrivere ogni riga della conversazione prima che venga memorizzata. [`ui.render{component=AskUserQuestion}`](/docs/it/plugins/mods/interface#change-what-claude-code-already-draws) indica che il mod può ridisegnare la finestra di dialogo che Claude usa per porre una domanda all'utente. `tool.check` indica che il mod può approvare o negare una chiamata a uno strumento prima che compaia una richiesta di permesso. [Sapere cosa succede per impostazione predefinita](#know-what-happens-by-default) elenca quali delle tue regole e dei tuoi hook hanno la precedenza sulla sua risposta.143Nella riga `hooks:`, [`tool.call`](/docs/it/plugins/mods/reference#tools) e [`prompt.submit`](/docs/it/plugins/mods/reference#prompts-and-what-claude-reads) indicano che il mod vede ogni chiamata a uno strumento e ogni prompt, e può modificarli. [`session.append`](/docs/it/plugins/mods/reference#session) indica che il mod può riscrivere ogni riga della conversazione prima che venga memorizzata. [`ui.render{component=AskUserQuestion}`](/docs/it/plugins/mods/interface#change-what-claude-code-already-draws) indica che il mod può ridisegnare la finestra di dialogo che Claude usa per porre una domanda all'utente. `tool.check` indica che il mod può approvare o negare una chiamata a uno strumento prima che compaia una richiesta di permesso. [Sapere cosa succede per impostazione predefinita](#know-what-happens-by-default) elenca quali delle tue regole e dei tuoi hook hanno la precedenza sulla sua risposta.

144 144 

Details

79 Chiamare un modello79 Chiamare un modello

80</h2>80</h2>

81 81 

82Un mod può porre a un modello una domanda propria, al di fuori della conversazione, per un piccolo compito come classificare o riassumere un testo. `$.model.complete` invia un prompt a un modello con le credenziali della tua sessione e si risolve con la risposta. Non ha cronologia della conversazione.82Un mod può inviare richieste proprie a un modello per un piccolo compito come classificare o riassumere un testo. `$.model.complete` invia il tuo prompt da solo, mentre `$.model.fork({ prompt })` invia la conversazione corrente con il tuo prompt alla fine.

83 

84Questa tabella confronta il contenuto di ciascuna richiesta:

85 

86| Nella richiesta | `$.model.complete` | `$.model.fork` |

87| :- | :- | :- |

88| Modello | Il `model` che passi | Il modello della sessione |

89| Prompt di sistema | Un breve [blocco di attribuzione](/docs/it/llm-gateway-protocol#system-prompt-attribution-block), seguito dal tuo `system` se ne passi uno | Il prompt di sistema della sessione |

90| Messaggi | Un solo messaggio utente, il tuo `prompt` | La conversazione fino a quel momento, seguita dal tuo `prompt` come messaggio utente |

91| CLAUDE.md e altro contesto del progetto | Non incluso | Incluso, come nell'ultima richiesta della conversazione |

92| Strumenti | Nessuno | Gli strumenti di Claude, che il modello non può chiamare |

93 

94Un fork ripete l'ultima richiesta della conversazione, così la Claude API ne serve la maggior parte dalla [cache dei prompt](/docs/it/prompt-caching) finché la conversazione è ancora nella cache.

95 

96Entrambe le chiamate usano le credenziali della sessione, quindi vengono addebitate al piano, alla chiave API o al provider cloud dell'utente. [I tipi per la tua build](/docs/it/plugins/mods/create#get-the-types-for-your-build) documentano ogni metodo di `$.model`.

97 

98<h3 id="send-one-prompt">

99 Inviare un singolo prompt

100</h3>

101 

102Passa `model` e `prompt` a `$.model.complete`. `prompt` diventa il messaggio utente. Per dare istruzioni al modello, come un ruolo o un formato di output, passa anche `system`, che diventa il prompt di sistema.

83 103 

84Questo hook risponde a un comando `/triage`, [registrato come comando](#add-a-command), chiedendo a un modello piccolo di etichettare il testo digitato dopo di esso:104Questo hook risponde a un comando `/triage`, [registrato come comando](#add-a-command), chiedendo a un modello piccolo di etichettare il testo digitato dopo di esso:

85 105 


100})120})

101```121```

102 122 

103Quando esegui `/triage the export button does nothing`, il mod invia quel testo al modello e stampa la sua risposta, ad esempio `Label: bug`. La conversazione di Claude non fa parte della richiesta. Quando il modello non risponde, l'etichetta è `unknown`.123Quando esegui `/triage the export button does nothing`, il mod invia quel testo al modello e stampa la sua risposta, ad esempio `Label: bug`. Quando il modello non risponde, l'etichetta è `unknown`.

124 

125Un errore della Claude API non fa rifiutare la chiamata, quindi controlla `r.isAnswered` e leggi `r.reason` quando è `false`. La chiamata viene rifiutata per una richiesta che Claude Code non invierebbe, ad esempio un modello bloccato dalla tua organizzazione.

126 

127[I tipi per la tua build](/docs/it/plugins/mods/create#get-the-types-for-your-build) elencano le altre opzioni, come `effort`, e i [limiti](/docs/it/plugins/mods/reference#limits) indicano il valore predefinito di `maxTokens`.

128 

129<h3 id="use-prompt-caching">

130 Usare il prompt caching

131</h3>

132 

133`$.model.complete` supporta il [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) della Claude API. L'API memorizza nella cache l'inizio di una richiesta, chiamato prefisso, fino a un [punto di interruzione della cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#explicit-cache-breakpoints) che imposti tu. Quando ogni chiamata inizia con lo stesso contenuto statico lungo, come istruzioni o materiale di riferimento, imposta un punto di interruzione alla fine di quel contenuto. Le chiamate successive lo leggono quindi dalla cache invece di pagarne il prezzo pieno di input.

134 

135Per impostare un punto di interruzione, passa `prompt` come array di blocchi `{ text }` invece che come stringa e aggiungi `cache: true` all'ultimo blocco del contenuto statico. Claude Code invia quel blocco con il campo `cache_control` dell'API. `system` accetta la stessa forma ad array. Per scegliere tra i due, consulta [Scegliere tra `prompt` e `system`](#choose-between-prompt-and-system).

136 

137<Note>

138 Gli array di blocchi richiedono Claude Code v2.1.292 o successivo. Le versioni precedenti rifiutano un array in `prompt` con un errore che termina con `takes { model, prompt } (host check)` e omettono dalla richiesta un array in `system`.

139</Note>

140 

141Questa versione dell'[hook `/triage`](#send-one-prompt) invia un lungo insieme di regole di etichettatura prima del testo da etichettare, con un punto di interruzione dopo le regole. `RULES` è una tua stringa:

142 

143```javascript theme={null}

144on('command.run', { command: 'triage' }, async ($, e) => {

145 const r = await $.model.complete({

146 model: 'haiku',

147 prompt: [

148 // Identical on every call, so it forms the cached prefix

149 { text: RULES, cache: true },

150 // Changes on every call, so it goes after the breakpoint

151 { text: e.args },

152 ],

153 })

154 return { text: 'Label: ' + (r.isAnswered ? r.text.trim() : 'unknown') }

155})

156```

157 

158Il TTL e il numero di punti di interruzione hanno questi limiti:

159 

160* **TTL**: una voce della cache dura cinque minuti dopo l'ultimo utilizzo. Il TTL deriva dalle impostazioni di Claude Code dell'utente, non dalla chiamata. Per un'ora, imposta [`subagentPromptCacheTtl`](/docs/it/prompt-caching#choose-the-ttl-yourself) su `1h`.

161* **Punti di interruzione per richiesta**: l'API ne accetta [fino a quattro](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#when-to-use-multiple-breakpoints), e uno in più viene restituito come `api-error` in `r.reason`

162 

163<h4 id="choose-between-prompt-and-system">

164 Scegliere tra `prompt` e `system`

165</h4>

166 

167Metti il contenuto statico condiviso dalle tue chiamate all'inizio di `prompt`, a meno che tu non sappia che le tue richieste vanno direttamente alla Claude API:

168 

169* **Direttamente alla Claude API, con una chiave API o un abbonamento Claude**: funzionano entrambi i campi

170* **Tramite [Amazon Bedrock](/docs/it/amazon-bedrock), [Claude Platform on AWS](/docs/it/claude-platform-on-aws), [Agent Platform di Google Cloud](/docs/it/google-vertex-ai), [Microsoft Foundry](/docs/it/microsoft-foundry) o un [gateway LLM](/docs/it/llm-gateway)**: usa `prompt`. Claude Code inizia il prompt di sistema con un [blocco di attribuzione](/docs/it/llm-gateway-protocol#system-prompt-attribution-block) la cui impronta deriva dall'inizio del messaggio utente. L'endpoint `api.anthropic.com` rimuove quel blocco prima della memorizzazione nella cache. Gli altri endpoint lo ricevono come parte del prompt, quindi un punto di interruzione in `system` può non trovare corrispondenza nella cache quando `prompt` inizia in modo diverso.

171* **In un mod eseguito da altre persone**: usa `prompt`, perché non sei tu a scegliere il loro provider

172 

173`system` precede `prompt` nel prefisso, quindi un punto di interruzione in `prompt` copre anche `system`, e una chiamata con un `system` diverso non trova corrispondenza nella cache.

104 174 

105Un errore della Claude API non fa rifiutare la chiamata, quindi controlla `r.isAnswered` e leggi `r.reason` quando è `false`. La chiamata viene rifiutata per una richiesta che Claude Code non invierebbe, ad esempio un modello bloccato dalla tua organizzazione. [I tipi per la tua build](/docs/it/plugins/mods/create#get-the-types-for-your-build) elencano le altre opzioni, come `effort`, e i [limiti](/docs/it/plugins/mods/reference#limits) indicano il valore predefinito di `maxTokens`.175<h4 id="check-for-cache-hits">

176 Verificare i riscontri nella cache

177</h4>

106 178 

107`$.model.fork({ prompt })` pone invece una domanda sulla conversazione corrente, con lo stesso modello e lo stesso prompt di sistema, così la Claude API ne serve la maggior parte dalla cache dei prompt.179Il risultato di `$.model.complete` ha un oggetto `usage` con i [campi della cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#tracking-cache-performance) dell'API. `usage.cache_creation_input_tokens` conta i token che la chiamata ha scritto nella cache e `usage.cache_read_input_tokens` conta i token che ha letto dalla cache. Aspettati una scrittura alla prima chiamata e letture nelle chiamate successive entro il TTL.

108 180 

109Queste chiamate usano il piano o la chiave API dell'utente.181Se ogni chiamata scrive e nessuna legge, il prefisso differisce tra le chiamate oppure le chiamate sono più distanti del TTL. Per un prefisso che differisce, consulta [Scegliere tra `prompt` e `system`](#choose-between-prompt-and-system).

182 

183Se entrambi i campi restano a zero nelle chiamate a cui il modello ha risposto, non è stato memorizzato nulla nella cache. Verifica ciascuna di queste cause:

184 

185* **Il prefisso è troppo corto**: l'API non memorizza nella cache un prefisso inferiore alla [lunghezza minima](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#cache-limitations) del modello e non restituisce alcun errore

186* **Il prompt caching è disabilitato**: quando al modello si applica una [variabile `DISABLE_PROMPT_CACHING`](/docs/it/prompt-caching#disable-prompt-caching), Claude Code rimuove i punti di interruzione e invia il testo senza cache

187* **Il tuo gateway rimuove `cache_control`**: un gateway può [rimuovere il campo e restituire comunque un esito positivo](/docs/it/prompt-caching#where-the-cache-lives)

188* **Un altro mod riscrive l'inizio del testo**: Claude Code lo [invia quindi senza punti di interruzione](#what-a-model-complete-hook-receives)

189 

190<h3 id="what-a-model-complete-hook-receives">

191 Cosa riceve un hook `model.complete`

192</h3>

193 

194Se agganci l'evento [`model.complete`](/docs/it/plugins/mods/reference#mods-api-calls) per ispezionare o modificare le richieste di altri mod, leggi il testo da questi campi:

195 

196* **`e.prompt`**: sempre una stringa. Quando il chiamante ha passato un array, è il testo dei blocchi concatenato in ordine.

197* **`e.system`**: una stringa costruita allo stesso modo, oppure assente quando il chiamante non ha passato alcun `system`

198* **`e.promptBlocks` ed `e.systemBlocks`**: gli array del chiamante, ciascuno presente quando il chiamante ha passato un array per quel campo

199 

200Claude Code invia le stringhe che il tuo hook passa a `next` e usa gli array che passi insieme a esse per posizionare i [punti di interruzione della cache](#use-prompt-caching). Mantiene i blocchi iniziali che corrispondono ancora all'inizio della stringa, con i relativi punti di interruzione, e invia il resto della stringa senza punti di interruzione. Ad esempio, `next({ ...e, prompt: e.prompt + NOTE })` mantiene i punti di interruzione del chiamante, mentre un hook che modifica l'inizio di `prompt` li rimuove.

110 201 

111<h2 id="run-work-in-the-background">202<h2 id="run-work-in-the-background">

112 Eseguire lavoro in background203 Eseguire lavoro in background


140| Chiamata | Cosa vede l'utente |231| Chiamata | Cosa vede l'utente |

141| :- | :- |232| :- | :- |

142| `$.ui.status(text)` | Una riga sotto il prompt che rimane finché non la modifichi. Inizia con `⚠` e il nome del mod, come in `⚠ my-mod: checks: 3 passing`. |233| `$.ui.status(text)` | Una riga sotto il prompt che rimane finché non la modifichi. Inizia con `⚠` e il nome del mod, come in `⚠ my-mod: checks: 3 passing`. |

143| `$.ui.toast(text)` | Una notifica toast in alto a destra, con il nome del mod sopra il testo, che scompare dopo qualche secondo |234| `$.ui.toast(text)` | Una notifica toast con il nome del mod che scompare dopo qualche secondo. È un riquadro in alto a destra nel [rendering a schermo intero](/docs/it/fullscreen), e una riga a destra sotto il prompt nel renderer classico. |

144| `$.ui.log(text)` | Una riga attenuata nella trascrizione che Claude non legge. Inizia con `●` e il nome del mod, come in `● my-mod: build finished`. |235| `$.ui.log(text)` | Una riga attenuata nella trascrizione che Claude non legge. Inizia con `●` e il nome del mod, come in `● my-mod: build finished`. |

145 236 

146<h3 id="start-a-turn-from-a-background-job">237<h3 id="start-a-turn-from-a-background-job">


159 Inviare e ricevere messaggi tra sessioni250 Inviare e ricevere messaggi tra sessioni

160</h2>251</h2>

161 252 

162Un mod può inviare un messaggio di testo semplice a un'altra delle tue sessioni o a uno dei subagent di questa sessione, e osservare i messaggi che arrivano e partono. `$.session.send({ to, text })` ne invia uno, con la stessa consegna effettuata dallo strumento SendMessage. `to` è `{ sessionId }` per una sessione, `{ agentId }` per un subagent ottenuto da `$.agent.list()`, oppure l'indirizzo stringa da cui proviene un messaggio ricevuto. La chiamata si risolve non appena il messaggio viene messo in coda, con `{ isDelivered: true }`. Quando non è stato consegnato nulla, si risolve con `{ isDelivered: false, reason }`, e `reason` ne indica il motivo.253Un mod può inviare un messaggio di testo semplice a un'altra delle tue sessioni, a uno dei subagent di questa sessione o a un membro del suo [team di agenti](/docs/it/agent-teams). Può anche osservare i messaggi che arrivano e partono.

254 

255Per inviarne uno, chiama `$.session.send({ to, text })`, che effettua la stessa consegna dello strumento SendMessage. Imposta `to` in base a chi riceve il messaggio:

256 

257* **Un'altra delle tue sessioni**: `{ sessionId }`

258* **Un subagent o un membro del team**: `{ agentId }`, con un id ottenuto da `$.agent.list()`

259* **Il mittente di un messaggio che hai ricevuto**: l'indirizzo stringa da cui proviene quel messaggio

260 

261La chiamata si risolve non appena il messaggio viene messo in coda, con `{ isDelivered: true }`. Quando non è stato consegnato nulla, si risolve con `{ isDelivered: false, reason }`, e `reason` ne indica il motivo.

163 262 

164Questo hook risponde a un comando `/ping`, [registrato come comando](#add-a-command), chiedendo uno stato alla sessione il cui id digiti dopo di esso:263Questo hook risponde a un comando `/ping`, [registrato come comando](#add-a-command), chiedendo uno stato alla sessione il cui id digiti dopo di esso:

165 264 

Details

281 Ottieni le definizioni dei tipi per la tua versione281 Ottieni le definizioni dei tipi per la tua versione

282</h3>282</h3>

283 283 

284Ogni volta che Claude Code carica o ricarica un mod da una directory che passi a `--plugin-dir`, oppure un mod [che Claude ha scritto per te](#ask-claude-for-a-mod), scrive dei file di dichiarazione TypeScript, con estensione `.d.ts`, in `.claude-plugin/types/` all'interno della directory del mod. Questi descrivono esattamente gli eventi, i metodi dell'API dei mod e gli elementi presenti nella versione di Claude Code che stai eseguendo, così il tuo editor può completare automaticamente e verificare i tipi dei tuoi hook. Per consultare le dichiarazioni online, leggi [`mods/types/claude-code.d.ts`](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) nel repository di Claude Code, la cui prima riga indica la versione che lo ha scritto. La directory contiene questi file:284Quando Claude Code carica un mod da `--plugin-dir` in una sessione interattiva, oppure un mod [che Claude ha scritto per te](#ask-claude-for-a-mod), scrive dei file di dichiarazione TypeScript nella directory `.claude-plugin/types/` del mod. Questi descrivono esattamente gli eventi, i metodi dell'API dei mod e gli elementi presenti nella versione di Claude Code che stai eseguendo, così il tuo editor può completare automaticamente e verificare i tipi dei tuoi hook. La directory contiene questi file:

285 285 

286| Percorso | Cosa dichiara |286| Percorso | Cosa dichiara |

287| :- | :- |287| :- | :- |

Details

145 145 

146Dopo che Claude modifica o scrive un file `.mdx`, una riga attenuata nella trascrizione indica il nome del file. Non viene registrato nulla per un altro tipo di file, né per una chiamata rifiutata o non riuscita. La visione che Claude ha della chiamata non cambia, perché l'hook restituisce il risultato che ha ricevuto.146Dopo che Claude modifica o scrive un file `.mdx`, una riga attenuata nella trascrizione indica il nome del file. Non viene registrato nulla per un altro tipo di file, né per una chiamata rifiutata o non riuscita. La visione che Claude ha della chiamata non cambia, perché l'hook restituisce il risultato che ha ricevuto.

147 147 

148Per modificare una chiamata, passa argomenti modificati a `next`. Per riprovare una chiamata, chiama di nuovo `next(e)`: un hook che vede `isError` nel primo risultato può eseguire lo strumento una seconda volta e restituire quel risultato. Per rispondere tu stesso a una chiamata, restituisci un oggetto con un campo `result`, come `{ result: 'Skipped by my-mod' }`, senza chiamare `next`. In questo caso non compare alcuna richiesta di permesso e lo strumento non viene eseguito, quindi il risultato che restituisci è tutto ciò che Claude sa di quanto è accaduto.148Il tuo hook può anche modificare una chiamata, riprovarla, rispondervi tu stesso o nasconderne il risultato:

149 

150* **Modificare la chiamata**: passa argomenti modificati a `next`.

151* **Riprovare la chiamata**: chiama di nuovo `next(e)`. Un hook che vede `isError` nel primo risultato può eseguire lo strumento una seconda volta e restituire quel risultato.

152* **Rispondere tu stesso alla chiamata**: restituisci un oggetto con un campo `result`, senza chiamare `next`, e per uno strumento integrato dai a `result` la forma che ha il risultato di quello strumento nei [tipi per la tua build](/docs/it/plugins/mods/create#get-the-types-for-your-build). Non compare alcuna richiesta di permesso e lo strumento non viene eseguito, quindi il risultato che restituisci è tutto ciò che Claude sa di quanto è accaduto.

153* **Nascondere il risultato a Claude**: restituisci `{ deny: reason }` dopo `await next(e)`. Claude legge il tuo motivo al posto di ciò che `next` ha restituito. Quando lo strumento è stato eseguito, il deny impedisce a Claude di vederne il risultato e non annulla nulla di ciò che lo strumento ha fatto. Quando lo strumento è stato eseguito con successo, il motivo segue una nota come `Bash ran, and a plugin withheld its result:`.

149 154 

150Gli hook nelle [impostazioni gestite](/docs/it/server-managed-settings) della tua organizzazione vengono eseguiti prima dell'hook `tool.call` di qualsiasi mod, e un blocco da parte di uno di essi è definitivo.155Gli hook nelle [impostazioni gestite](/docs/it/server-managed-settings) della tua organizzazione vengono eseguiti prima dell'hook `tool.call` di qualsiasi mod, e un blocco da parte di uno di essi è definitivo.

151 156 


225 230 

226| Per fare questo | Restituisci questo |231| Per fare questo | Restituisci questo |

227| :- | :- |232| :- | :- |

228| Riscrivere il prompt. Il messaggio nella trascrizione mostra il nuovo testo. | `next({ ...e, text: newText })` |233| Riscrivere il prompt. La trascrizione e la tua [cronologia dei prompt](/docs/it/interactive-mode#command-history) mostrano il nuovo testo. | `next({ ...e, text: newText })` |

229| Aggiungere testo, dopo il prompt, che solo Claude legge | `next({ ...e, context: [...(e.context ?? []), extraText] })` |234| Aggiungere testo, dopo il prompt, che solo Claude legge | `next({ ...e, context: [...(e.context ?? []), extraText] })` |

230| Impedire l'invio del prompt | `{ drop: 'the reason' }` |235| Impedire l'invio del prompt | `{ drop: 'the reason' }` |

231 236 


245 250 

246Quando invii un prompt come `open a PR for this change`, il tuo messaggio appare invariato nella trascrizione, e Claude legge anche una riga come `Current branch: feature/auth` dopo di esso. Un prompt che non menziona una pull request passa invariato, e `git` non viene eseguito.251Quando invii un prompt come `open a PR for this change`, il tuo messaggio appare invariato nella trascrizione, e Claude legge anche una riga come `Current branch: feature/auth` dopo di esso. Un prompt che non menziona una pull request passa invariato, e `git` non viene eseguito.

247 252 

248Per bloccare un prompt, restituisci `{ drop: 'the reason' }` senza chiamare `next`. Se il tuo hook restituisce un `drop` dopo che la sua chiamata a `next(e)` ha lasciato passare il prompt, il turno viene comunque eseguito e l'hook [non riesce](#handle-a-hook-that-fails) con un messaggio che include `a drop after its next() was answered`.253Per bloccare un prompt, restituisci `{ drop: 'the reason' }` senza chiamare `next`. Il testo torna nel campo di input del prompt dell'utente, che vede `Prompt dropped by a hook:` seguito dal tuo motivo, quindi rivolgi il motivo all'utente. Se il tuo hook restituisce un `drop` dopo che la sua chiamata a `next(e)` ha lasciato passare il prompt, il turno viene comunque eseguito e l'hook [non riesce](#handle-a-hook-that-fails) con un messaggio che include `a drop after its next() was answered`.

249 254 

250[Altri eventi](/docs/it/plugins/mods/reference#prompts-and-what-claude-reads) coprono il resto di ciò che Claude legge: `prompt.section` per ogni sezione del prompt di sistema, `prompt.context` per il contesto inviato con il primo messaggio e `skill.prompt` per il testo di una skill. Il testo di questi hook che cambia tra una richiesta e l'altra [invalida la cache dei prompt](/docs/it/prompt-caching).255[Altri eventi](/docs/it/plugins/mods/reference#prompts-and-what-claude-reads) coprono il resto di ciò che Claude legge: `prompt.section` per ogni sezione del prompt di sistema, `prompt.context` per il contesto inviato con il primo messaggio e `skill.prompt` per il testo di una skill. Il testo di questi hook che cambia tra una richiesta e l'altra [invalida la cache dei prompt](/docs/it/prompt-caching).

251 256 


281 286 

282`result.usage` contiene i conteggi di token che la Claude API riporta per una richiesta, più il `model` che ha risposto: `input_tokens`, `output_tokens`, `cache_read_input_tokens` e `cache_creation_input_tokens`. L'hook viene eseguito anche per le richieste dei subagent, quindi controlla `e.agentId` quando vuoi solo la conversazione principale.287`result.usage` contiene i conteggi di token che la Claude API riporta per una richiesta, più il `model` che ha risposto: `input_tokens`, `output_tokens`, `cache_read_input_tokens` e `cache_creation_input_tokens`. L'hook viene eseguito anche per le richieste dei subagent, quindi controlla `e.agentId` quando vuoi solo la conversazione principale.

283 288 

289Per vedere le chiamate agli strumenti che l'API ha eseguito autonomamente durante la richiesta, come le chiamate allo [strumento advisor](/docs/it/advisor), leggi `result.serverToolUses`. Claude Code non esegue queste chiamate, quindi nessun hook `tool.call` o `tool.check` si attiva per esse. Il campo è assente quando la risposta non contiene chiamate di questo tipo e richiede Claude Code v2.1.290 o successivo.

290 

284<h3 id="hook-the-settings-hook-events">291<h3 id="hook-the-settings-hook-events">

285 Gestire gli eventi degli hook delle impostazioni292 Gestire gli eventi degli hook delle impostazioni

286</h3>293</h3>


369* **`tool.check`**: restituisci `{ decision: 'deny', reason: 'the reason' }`376* **`tool.check`**: restituisci `{ decision: 'deny', reason: 'the reason' }`

370* **`plugin.register`**: restituisci `{ refuse: 'the reason' }`, come mostrato in [Rifiutare i mod quando il tuo controllo fallisce](/docs/it/plugins/mods/admin#refuse-mods-when-your-check-fails)377* **`plugin.register`**: restituisci `{ refuse: 'the reason' }`, come mostrato in [Rifiutare i mod quando il tuo controllo fallisce](/docs/it/plugins/mods/admin#refuse-mods-when-your-check-fails)

371 378 

379Su `tool.call`, un `deny` restituito dopo che `next` è stato risolto [nasconde il risultato a Claude](#guard-or-change-a-tool-call).

380 

372<h2 id="next-steps">381<h2 id="next-steps">

373 Passaggi successivi382 Passaggi successivi

374</h2>383</h2>

Details

10 10 

11Questa mappa mostra dove un mod può disegnare in una sessione del terminale:11Questa mappa mostra dove un mod può disegnare in una sessione del terminale:

12 12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Mappa di una sessione del terminale di Claude Code. Un mod può aggiungere un riquadro come barra laterale a destra, un toast in alto a destra della trascrizione, una riga di log nella trascrizione, una fascia sopra il prompt e una riga di stato sotto il prompt. Un mod può ridisegnare i messaggi, le righe delle chiamate agli strumenti e lo spinner. Il prompt appartiene a Claude Code." width="600" height="336" data-path="images/mods-screen-map.svg" />13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Mappa di una sessione del terminale di Claude Code con il rendering a schermo intero. Un mod può aggiungere un riquadro come barra laterale a destra, un toast in alto a destra della trascrizione, una riga di log nella trascrizione, una fascia sopra il prompt e una riga di stato sotto il prompt. Un mod può ridisegnare i messaggi, le righe delle chiamate agli strumenti e lo spinner. Il prompt appartiene a Claude Code." width="600" height="336" data-path="images/mods-screen-map.svg" />

14 14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Mappa di una sessione del terminale di Claude Code. Un mod può aggiungere un riquadro come barra laterale a destra, un toast in alto a destra della trascrizione, una riga di log nella trascrizione, una fascia sopra il prompt e una riga di stato sotto il prompt. Un mod può ridisegnare i messaggi, le righe delle chiamate agli strumenti e lo spinner. Il prompt appartiene a Claude Code." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Mappa di una sessione del terminale di Claude Code con il rendering a schermo intero. Un mod può aggiungere un riquadro come barra laterale a destra, un toast in alto a destra della trascrizione, una riga di log nella trascrizione, una fascia sopra il prompt e una riga di stato sotto il prompt. Un mod può ridisegnare i messaggi, le righe delle chiamate agli strumenti e lo spinner. Il prompt appartiene a Claude Code." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 16 

17In un terminale più stretto, il riquadro si trova sopra il prompt anziché accanto alla trascrizione.17In un terminale più stretto, il riquadro si trova sopra il prompt anziché accanto alla trascrizione.

18 18 


324| `title` | L'etichetta della scheda del pannello quando è aperto più di un pannello |324| `title` | L'etichetta della scheda del pannello quando è aperto più di un pannello |

325| `focus` | Richiede il [focus della tastiera](#know-which-keys-your-mod-can-receive) |325| `focus` | Richiede il [focus della tastiera](#know-which-keys-your-mod-can-receive) |

326| `closeOnEscape` | Fa sì che Esc chiuda il pannello |326| `closeOnEscape` | Fa sì che Esc chiuda il pannello |

327| `holdToasts` | Trattiene i toast, i piccoli avvisi di [`$.ui.toast`](/docs/it/plugins/mods/api#show-something-without-starting-a-turn), finché il pannello non si chiude |327| `holdToasts` | Nel terminale, trattiene i toast finché è questo il pannello mostrato. Vedi [Trattieni i toast dietro una finestra di dialogo](#hold-toasts-behind-a-dialog). |

328| `rows` | L'altezza da richiedere quando il pannello si trova sopra il prompt. Il valore predefinito è un terzo dello spazio. |328| `rows` | L'altezza da richiedere quando il pannello si trova sopra il prompt. Il valore predefinito è un terzo dello spazio. |

329| `columns` | La larghezza da richiedere quando il pannello si trova accanto alla trascrizione |329| `columns` | La larghezza da richiedere quando il pannello si trova accanto alla trascrizione |

330 330 


337 337 

338Per consentire a un comando di aprire il pannello mentre Claude sta lavorando, aggiungi `immediate: true` quando [registri il comando](/docs/it/plugins/mods/api#add-a-command). Senza di esso, un comando digitato durante un turno attende la fine del turno.338Per consentire a un comando di aprire il pannello mentre Claude sta lavorando, aggiungi `immediate: true` quando [registri il comando](/docs/it/plugins/mods/api#add-a-command). Senza di esso, un comando digitato durante un turno attende la fine del turno.

339 339 

340<h4 id="hold-toasts-behind-a-dialog">

341 Trattieni i toast dietro una finestra di dialogo

342</h4>

343 

344Passa `holdToasts: true` a `$.ui.open` quando il pannello è una finestra di dialogo a cui l'utente risponde e che poi lascia, così i toast non compaiono mentre decide. Nel terminale, la trattenuta dura finché è quel pannello a essere mostrato, e un toast generato in quel lasso di tempo attende la fine della trattenuta.

345 

346Claude Code trattiene i toast degli altri mod e le proprie notifiche di breve durata, oltre a quelli che il tuo mod genera con [`$.ui.toast`](/docs/it/plugins/mods/api#show-something-without-starting-a-turn). Ometti il campo in un pannello che resta aperto, così l'utente continua a vederli.

347 

340<h4 id="when-a-pane-waits-for-a-wider-terminal">348<h4 id="when-a-pane-waits-for-a-wider-terminal">

341 Quando un pannello attende un terminale più ampio349 Quando un pannello attende un terminale più ampio

342</h4>350</h4>

Details

64| :- | :- | :- |64| :- | :- | :- |

65| [`tool.call`](/docs/it/plugins/mods/events#guard-or-change-a-tool-call) | Uno strumento sta per essere eseguito | `next(e)`, `{ deny: reason }` oppure `{ result }` |65| [`tool.call`](/docs/it/plugins/mods/events#guard-or-change-a-tool-call) | Uno strumento sta per essere eseguito | `next(e)`, `{ deny: reason }` oppure `{ result }` |

66| [`tool.check`](/docs/it/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code decide se una chiamata a uno strumento può essere eseguita, dopo gli hook `tool.call` e `PreToolUse`. `next(e)` si risolve nella decisione raggiunta dalle regole, dalla modalità di permesso e da quegli hook. | `{ decision }`, che è `allow`, `ask` o `deny` |66| [`tool.check`](/docs/it/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code decide se una chiamata a uno strumento può essere eseguita, dopo gli hook `tool.call` e `PreToolUse`. `next(e)` si risolve nella decisione raggiunta dalle regole, dalla modalità di permesso e da quegli hook. | `{ decision }`, che è `allow`, `ask` o `deny` |

67| `tool.describe` | Una volta per ogni strumento, quando la sua descrizione viene inviata per la prima volta a Claude | `{ description }`, facoltativamente con `isDeferred` impostato su `true` per mettere lo strumento dietro la [ricerca degli strumenti](/docs/it/mcp#scale-with-mcp-tool-search) o su `false` per caricarlo subito |67| `tool.describe` | Una volta per ogni strumento, quando la sua descrizione viene inviata per la prima volta a Claude. Una seconda volta per uno strumento MCP quando Claude lo carica tramite la [ricerca degli strumenti](/docs/it/mcp#scale-with-mcp-tool-search), con `e.description` impostato sul testo che Claude legge per lo strumento caricato. | `{ description }`, facoltativamente con `isDeferred` impostato su `true` per mettere lo strumento dietro la ricerca degli strumenti o su `false` per caricarlo subito |

68 68 

69<h4 id="agent-and-organization-fields-on-tool-check">69<h4 id="agent-and-organization-fields-on-tool-check">

70 Campi dell'agente e dell'organizzazione su `tool.check`70 Campi dell'agente e dell'organizzazione su `tool.check`


133| `session.end` | La sessione termina, oppure viene eseguito `/clear`, `/resume` o `/branch`. `e.reason` è `clear`, `resume`, `logout`, `prompt_input_exit` o `other`. `/branch` riporta `resume`. | `next(e)` |133| `session.end` | La sessione termina, oppure viene eseguito `/clear`, `/resume` o `/branch`. `e.reason` è `clear`, `resume`, `logout`, `prompt_input_exit` o `other`. `/branch` riporta `resume`. | `next(e)` |

134| `session.compact` | La conversazione sta per essere compattata | `{ skip: reason }` |134| `session.compact` | La conversazione sta per essere compattata | `{ skip: reason }` |

135| [`session.receive`](/docs/it/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/it/plugins/mods/api#send-and-receive-messages-between-sessions) | Un messaggio arriva da un altro agente o da un'altra sessione, o sta per esservi inviato. Consulta [Inviare e ricevere messaggi tra sessioni](/docs/it/plugins/mods/api#send-and-receive-messages-between-sessions). | `{ consumed: reason }` per `receive`, `{ isDelivered: false, reason }` per `send` |135| [`session.receive`](/docs/it/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/it/plugins/mods/api#send-and-receive-messages-between-sessions) | Un messaggio arriva da un altro agente o da un'altra sessione, o sta per esservi inviato. Consulta [Inviare e ricevere messaggi tra sessioni](/docs/it/plugins/mods/api#send-and-receive-messages-between-sessions). | `{ consumed: reason }` per `receive`, `{ isDelivered: false, reason }` per `send` |

136| `session.append` | Una volta per ogni riga che la conversazione conserva, come un prompt, un blocco di risposta, il risultato di uno strumento o un avviso, prima che venga memorizzata | `next({ ...e, message })` per riscrivere il `content` della riga |136| `session.append` | Una volta per ogni riga che la conversazione conserva, come un prompt, un blocco di risposta, il risultato di uno strumento o un avviso, prima che venga memorizzata | `next({ ...e, message })` con un `message.content` modificato, per riscrivere i blocchi di testo della riga o il `content` di un blocco `tool_result` al suo interno |

137| `session.attach`, `session.detach` | Un'altra app si connette alla sessione o si disconnette da essa | `next(e)` |137| `session.attach`, `session.detach` | Un'altra app si connette alla sessione o si disconnette da essa | `next(e)` |

138| `session.measure` | Dopo ogni turno e quando cambia la percentuale utilizzata di un limite del piano | `next(e)` |138| `session.measure` | Dopo ogni turno e quando cambia la percentuale utilizzata di un limite del piano | `next(e)` |

139 139 


209| [`$.ui`](/docs/it/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |209| [`$.ui`](/docs/it/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |

210| [`$.command`](/docs/it/plugins/mods/api#add-a-command) | `register`, `run`, `list` |210| [`$.command`](/docs/it/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

211| [`$.tool`](/docs/it/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |211| [`$.tool`](/docs/it/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |

212| `$.agent` | `register`, `spawn`, `list` |212| `$.agent` | `register`, `spawn`, `list`. `list()` restituisce i subagent e i compagni di squadra di questa sessione, ciascuno con uno `status` tra `pending`, `running`, `waiting`, `idle`, `completed`, `failed` o `killed`, dove `idle` e `waiting` richiedono Claude Code v2.1.289 o versioni successive. |

213| [`$.model`](/docs/it/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |213| [`$.model`](/docs/it/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

214| [`$.prompt`](/docs/it/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude legge il testo di `submit({ text })` dopo una frase che indica il tuo mod come mittente. `submit({ text, asUser: true })` invia il testo come parole dell'utente stesso, senza quella frase. |214| [`$.prompt`](/docs/it/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude legge il testo di `submit({ text })` dopo una frase che indica il tuo mod come mittente. `submit({ text, asUser: true })` invia il testo come parole dell'utente stesso, senza quella frase. |

215| `$.turn` | `abort` |215| `$.turn` | `abort` |


317| Timeout di `$.process.run` | 30 secondi per impostazione predefinita, 10 minuti al massimo |317| Timeout di `$.process.run` | 30 secondi per impostazione predefinita, 10 minuti al massimo |

318| `maxTokens` di `$.model.complete` | 1024 per impostazione predefinita, fino a 64.000 o al limite di output del modello |318| `maxTokens` di `$.model.complete` | 1024 per impostazione predefinita, fino a 64.000 o al limite di output del modello |

319| `$.fs.read` e `$.fs.write` | 4 MiB per un singolo file |319| `$.fs.read` e `$.fs.write` | 4 MiB per un singolo file |

320| Il motivo `drop` di un hook o il motivo `deny` di `config.set` | 4.096 caratteri. La parte finale di un motivo più lungo viene troncata, e il drop o il deny si applica comunque. Il troncamento richiede Claude Code v2.1.292 o versioni successive; nelle versioni precedenti l'hook invece [non riesce](/docs/it/plugins/mods/events#handle-a-hook-that-fails). |

320| Testo in un singolo albero | Vengono disegnati i primi 100.000 caratteri |321| Testo in un singolo albero | Vengono disegnati i primi 100.000 caratteri |

321| Il `language` o il `path` di un `Code`, il `value` di un'opzione `Select` o il `module` di un `Client` | 10.000 caratteri. Se uno è più lungo, Claude Code [disegna la propria versione del sito](/docs/it/plugins/mods/interface#build-a-tree-from-elements). |322| Il `language` o il `path` di un `Code`, il `value` di un'opzione `Select` o il `module` di un `Client` | 10.000 caratteri. Se uno è più lungo, Claude Code [disegna la propria versione del sito](/docs/it/plugins/mods/interface#build-a-tree-from-elements). |

322| L'`href` di un `Link` | 2.048 caratteri. Un `href` più lungo impedisce il disegno dell'intero albero. |323| L'`href` di un `Link` | 2.048 caratteri. Un `href` più lungo impedisce il disegno dell'intero albero. |


325| Ridisegni di `$.ui.invalidate('ui.render')` | Limitati a 10 al secondo, o 30 nel terminale per il riquadro visibile, la fascia espansa e la riga di suggerimento sotto il prompt. Le chiamate che arrivano prima vengono accorpate. |326| Ridisegni di `$.ui.invalidate('ui.render')` | Limitati a 10 al secondo, o 30 nel terminale per il riquadro visibile, la fascia espansa e la riga di suggerimento sotto il prompt. Le chiamate che arrivano prima vengono accorpate. |

326| `$.ui.toast` | Mostrato per 4 secondi, a meno che tu non passi `{ timeoutMs }` |327| `$.ui.toast` | Mostrato per 4 secondi, a meno che tu non passi `{ timeoutMs }` |

327| Un riquadro aperto senza che l'utente lo abbia richiesto | Posizionato a partire da 144 colonne del terminale, 110 dopo che l'utente lo ha aperto una volta |328| Un riquadro aperto senza che l'utente lo abbia richiesto | Posizionato a partire da 144 colonne del terminale, 110 dopo che l'utente lo ha aperto una volta |

329| Scope, come funzioni, blocchi e cicli, annidati l'uno dentro l'altro in un singolo file di un modulo degli hook | 2.000 |

328| Nomi di comandi, strumenti, tipi di subagent e riquadri | Lettere, cifre, `_` e `-`, fino a 64 caratteri |330| Nomi di comandi, strumenti, tipi di subagent e riquadri | Lettere, cifre, `_` e `-`, fino a 64 caratteri |

329| Un singolo test di `claude plugin test` | 5 secondi, a meno che il test non imposti `timeoutMs` |331| Un singolo test di `claude plugin test` | 5 secondi, a meno che il test non imposti `timeoutMs` |

330 332 

Details

110* `returned neither { value } nor { deny }`: uno stub per una chiamata della mods API ha restituito un valore semplice, il che fa fallire il test110* `returned neither { value } nor { deny }`: uno stub per una chiamata della mods API ha restituito un valore semplice, il che fa fallire il test

111* `no implementation for` seguito da un nome: il tuo mod ha effettuato quella chiamata e nessuno stub risponde111* `no implementation for` seguito da un nome: il tuo mod ha effettuato quella chiamata e nessuno stub risponde

112 112 

113Il kit esporta anche mock in memoria che rispondono per te a un intero namespace. `mock.clock(on)` risponde a [`$.clock`](/docs/it/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` risponde a `$.store` da uno store che inizia con quelle voci, e `mock.env(on, { CI: 'true' })` risponde a `$.env.get` da quelle variabili. `mock.clock` restituisce un orologio mock che il tuo test fa avanzare, così un test di un timer non deve attendere. `mock.store` non restituisce nulla, quindi per verificare cosa ha salvato il tuo mod, scrivi tu stesso i due stub `store` come fa il [test di disegno](#test-a-drawing).113Il kit esporta anche mock pronti all'uso per l'orologio, lo store, le variabili d'ambiente e le righe aggiunte alla conversazione:

114 

115* **`mock.clock(on)`**: risponde a [`$.clock`](/docs/it/plugins/mods/api#run-work-in-the-background) e restituisce un orologio mock che il tuo test fa avanzare, così un test di un timer non deve attendere.

116* **`mock.store(on, { count: 7 })`**: risponde a `$.store` da uno store che inizia con quelle voci. Non restituisce nulla, quindi per verificare cosa ha salvato il tuo mod, scrivi tu stesso i due stub `store` come fa il [test di disegno](#test-a-drawing).

117* **`mock.env(on, { CI: 'true' })`**: risponde a `$.env.get` da quelle variabili.

118* **`mock.session(on)`**: restituisce una sessione mock il cui metodo `appended()` elenca le righe che il tuo mod ha aggiunto con [`$.session.append`](/docs/it/plugins/mods/reference#session), a partire dalla più vecchia; richiede Claude Code v2.1.293 o successiva.

114 119 

115<h3 id="follow-the-test-kit’s-rules">120<h3 id="follow-the-test-kit’s-rules">

116 Seguire le regole del test kit121 Seguire le regole del test kit


168 Consultare cosa restituisce uno stub173 Consultare cosa restituisce uno stub

169</h3>174</h3>

170 175 

171Ogni chiamata della mods API che il tuo mod effettua in un test ha bisogno di uno stub che risponda al posto di Claude Code, tranne le poche a cui risponde il kit stesso: le chiamate [`$.ui.invalidate`](/docs/it/plugins/mods/interface#redraw-when-something-changes) e [`$.state`](/docs/it/plugins/mods/interface#keep-state). Per le chiamate `$.clock`, usa `mock.clock(on)`, altrimenti il `$.clock.now()` del tuo mod fallisce con `no implementation for clock.now`.176Ogni chiamata della mods API che il tuo mod effettua in un test ha bisogno di uno stub che risponda al posto di Claude Code, tranne le poche a cui risponde il kit stesso: le chiamate [`$.ui.invalidate`](/docs/it/plugins/mods/interface#redraw-when-something-changes), [`$.state`](/docs/it/plugins/mods/interface#keep-state) e `$.session.append`. Per le chiamate `$.clock`, usa `mock.clock(on)`, altrimenti il `$.clock.now()` del tuo mod fallisce con `no implementation for clock.now`.

172 177 

173Questa tabella elenca quelle che i mod usano più spesso. La prima colonna è la chiamata che il tuo mod effettua o l'evento che passa con `next(e)`. La seconda è la funzione da passare a `on` con quel nome, così la riga `$.store.get` diventa `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Un `'...'` in uno stub indica un testo da compilare:178Questa tabella elenca quelle che i mod usano più spesso. La prima colonna è la chiamata che il tuo mod effettua o l'evento che passa con `next(e)`. La seconda è la funzione da passare a `on` con quel nome, così la riga `$.store.get` diventa `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Un `'...'` in uno stub indica un testo da compilare:

174 179 

Details

116 116 

117Imposta o modifica il valore. La fine della riga indica la relativa voce `pluginConfigs` in `settings.json`.117Imposta o modifica il valore. La fine della riga indica la relativa voce `pluginConfigs` in `settings.json`.

118 118 

119<h3 id="code-nested-too-deep-to-scan-more-than-2000-scopes">

120 `code nested too deep to scan: more than 2000 scopes`

121</h3>

122 

123La riga inizia con il nome del mod, seguito da `hooks module did not load:`, dal file e da `code nested too deep to scan: more than 2000 scopes`. Un file in un modulo degli hook non può annidare scope, come funzioni, blocchi e cicli, oltre [2.000 livelli di profondità](/docs/it/plugins/mods/reference#limits). [`claude plugin validate`](/docs/it/plugins/mods/create#check-what-claude-code-reads-from-your-mod) segnala lo stesso motivo.

124 

125Riscrivi il codice in modo che i suoi scope siano annidati meno in profondità.

126 

119<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">127<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">

120 Nessun mod si carica in una directory aperta per la prima volta128 Nessun mod si carica in una directory aperta per la prima volta

121</h3>129</h3>


132 140 

133Avvialo senza il flag.141Avvialo senza il flag.

134 142 

143<h3 id="claude-code-stops-asking-to-enable-hot-reloading">

144 Claude Code non chiede più di attivare il ricaricamento a caldo

145</h3>

146 

147Claude scrive un mod in una sessione interattiva, non viene caricato nulla e Claude Code non chiede più [se attivare il ricaricamento a caldo](/docs/it/plugins/mods/create#ask-claude-for-a-mod). Se la domanda si chiude tre volte senza che sia stata scelta una risposta, il ricaricamento a caldo resta disattivato. Ad esempio, la domanda si chiude in questo modo quando imposti [`askUserQuestionTimeout`](/docs/it/settings-reference#askuserquestiontimeout) e il tempo scade prima che tu risponda. Questa impostazione si applica qui perché Claude Code pone la domanda nella stessa [finestra di dialogo delle domande usata da `AskUserQuestion`](/docs/it/tools-reference#question-auto-continue-timeout). Una domanda che chiudi tu stesso non conta ai fini delle tre.

148 

149Per eseguire il mod, [copia la sua directory fuori dalla cartella dei mod](/docs/it/plugins/mods/create#use-the-mod-in-other-sessions), poi nella tua shell avvia una nuova sessione con `--plugin-dir`, come in `claude --plugin-dir ~/mods/git-branch`.

150 

135<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">151<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">

136 Un hook viene saltato o un mod viene scaricato152 Un hook viene saltato o un mod viene scaricato

137</h2>153</h2>


209 Un disegno non appare o non risponde225 Un disegno non appare o non risponde

210</h2>226</h2>

211 227 

212Il mod è stato caricato, ma il suo riquadro, la sua banda o i suoi controlli non si comportano come ti aspetti.228Il mod è stato caricato, ma il suo riquadro, la sua banda, il suo toast o i suoi controlli non si comportano come ti aspetti.

213 229 

214<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">230<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

215 Un riquadro o una banda è vuota o mostra il contenuto abituale di Claude Code231 Un riquadro o una banda è vuota o mostra il contenuto abituale di Claude Code


247 263 

248Apri il riquadro da un comando o da un pulsante, oppure controlla il risultato `isPlaced` della chiamata. Consulta [Aprire un riquadro al momento giusto](/docs/it/plugins/mods/interface#open-a-pane-at-the-right-time).264Apri il riquadro da un comando o da un pulsante, oppure controlla il risultato `isPlaced` della chiamata. Consulta [Aprire un riquadro al momento giusto](/docs/it/plugins/mods/interface#open-a-pane-at-the-right-time).

249 265 

266<h3 id="a-toast-doesn’t-appear">

267 Un toast non appare

268</h3>

269 

270Il tuo mod chiama [`$.ui.toast`](/docs/it/plugins/mods/api#show-something-without-starting-a-turn) in una sessione interattiva del terminale e non vedi il toast. Per confermare che la chiamata sia stata eseguita, cerca nel [log di debug](#read-the-debug-log) una riga con il nome del tuo mod e il testo del toast, come in `$.ui.toast (first-mod): build finished`. Poi verifica cause come queste:

271 

272* **La riga relativa alla chiamata manca**: cerca una riga che spieghi perché Claude Code ha rifiutato la chiamata, come in `first-mod: $.ui.toast dropped: timeoutMs is a whole number of ms, 1 to 60000`.

273* **Un riquadro sta trattenendo i toast**: il tuo mod o un altro ha passato [`holdToasts`](/docs/it/plugins/mods/interface#hold-toasts-behind-a-dialog) quando ha aperto il riquadro visualizzato. Chiudi il riquadro per terminare la trattenuta. Se il riquadro è tuo ed è pensato per restare aperto, rimuovi `holdToasts` dalla sua chiamata `$.ui.open` e apri di nuovo il riquadro.

274* **Il toast è sotto il prompt**: nel [renderer classico](/docs/it/fullscreen#enable-fullscreen-rendering), guarda a destra sotto il prompt. Lì un toast è una singola riga che inizia con il nome del mod, anziché una casella in alto a destra.

275* **Il tuo mod ha generato un toast più recente**: nel renderer classico, un toast più recente del tuo mod può prendere il posto di uno visualizzato o in attesa di essere visualizzato. Il log di debug contiene un'altra riga per il toast più vecchio, che termina con `gave way, cut short` se era visualizzato, oppure con `gave way, unseen` se non è mai apparso. Per mostrare entrambi i messaggi, inseriscili in un unico toast.

276* **Il tempo del toast è scaduto prima che venisse disegnato**: nel rendering a schermo intero, Claude Code disegna al massimo tre toast alla volta, quindi il tempo di un toast può scadere prima che venga disegnato. Il log di debug contiene un'altra riga per quel toast, che termina con `left the stack, never drawn`. Quando il tuo mod ne genera diversi contemporaneamente, inserisci i messaggi in un unico toast.

277 

278Prima della v2.1.290, Claude Code scartava un toast generato entro due secondi dall'ultimo mostrato per il tuo mod, e la riga del log di debug relativa al toast scartato riportava `within 2000ms of the last; dropped`.

279 

250<h3 id="hotkeys-do-nothing">280<h3 id="hotkeys-do-nothing">

251 I tasti di scelta rapida non fanno nulla281 I tasti di scelta rapida non fanno nulla

252</h3>282</h3>

Details

110}110}

111```111```

112 112 

113Nel tuo shell, esegui `claude plugin validate .` nel repository per controllare il file prima di eseguire il push.113Nella tua shell, esegui `claude plugin validate .` nel repository prima di eseguire il push. Per sapere cosa controlla l'esecuzione, vedi [Convalida una directory](/docs/it/plugins/cli-reference#validate-a-directory).

114 114 

115[Crea un marketplace](/docs/it/plugins/create-marketplace) copre il layout con diversi plugin in un repository.115[Crea un marketplace](/docs/it/plugins/create-marketplace) copre il layout con diversi plugin in un repository.

116 116 


129* Aggiungi il marketplace una volta: `claude plugin marketplace add your-org/your-marketplace`, dove l'argomento è una scorciatoia GitHub `owner/repo`, un URL o un percorso129* Aggiungi il marketplace una volta: `claude plugin marketplace add your-org/your-marketplace`, dove l'argomento è una scorciatoia GitHub `owner/repo`, un URL o un percorso

130* Installa il plugin: `claude plugin install deploy-helper@your-marketplace`130* Installa il plugin: `claude plugin install deploy-helper@your-marketplace`

131* Oppure fai entrambi da dentro una sessione: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Richiede Claude Code v2.1.275 o successivo. Vedi [Aggiungi un marketplace e installa in un comando](/docs/it/plugins/install#add-a-marketplace-and-install-in-one-command)131* Oppure fai entrambi da dentro una sessione: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Richiede Claude Code v2.1.275 o successivo. Vedi [Aggiungi un marketplace e installa in un comando](/docs/it/plugins/install#add-a-marketplace-and-install-in-one-command)

132* Oppure fai entrambi dalla shell in un solo comando: `claude plugin install deploy-helper --marketplace your-org/your-marketplace`. Richiede Claude Code v2.1.292 o successivo

132 133 

133<h3 id="ship-updates-to-users">134<h3 id="ship-updates-to-users">

134 Spedisci aggiornamenti agli utenti135 Spedisci aggiornamenti agli utenti

Details

163 `Invalid marketplace source format`163 `Invalid marketplace source format`

164</h3>164</h3>

165 165 

166È stato eseguito `/plugin marketplace add <source>` o `claude plugin marketplace add <source>` e Claude Code ha risposto `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.166Hai eseguito `/plugin marketplace add <source>`, `claude plugin marketplace add <source>` o `claude plugin install <plugin> --marketplace <source>` e Claude Code ha risposto `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.

167 167 

168Claude Code accetta una fonte in una di queste forme:168Claude Code accetta una fonte in una di queste forme:

169 169 


237* **Si possiede il marketplace**: mettere il file in quella posizione e re-aggiungere il marketplace237* **Si possiede il marketplace**: mettere il file in quella posizione e re-aggiungere il marketplace

238* **Qualcun altro lo ospita**: chiedere al proprietario la fonte esatta che pubblica238* **Qualcun altro lo ospita**: chiedere al proprietario la fonte esatta che pubblica

239 239 

240<h3 id="cannot-install-plugins-from-a-marketplace-with-this-name">

241 `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name`

242</h3>

243 

244Hai aggiunto un marketplace e il [`name`](/docs/it/plugins/marketplace-reference#top-level-fields) nel suo `marketplace.json` non è valido come parte dopo `@` in un [id di plugin](/docs/it/plugins/loading#find-where-a-plugin-came-from) come `my-plugin@my-marketplace`. Claude Code rifiuta l'aggiunta e non registra nulla.

245 

246Il resto del messaggio indica la regola per il nome. In questo esempio, `_internal` viola la regola perché inizia con `_`:

247 

248```text theme={null}

249Cannot add marketplace "_internal": Claude Code cannot install plugins from a marketplace with this name. Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. The name is set by "name" in the marketplace's marketplace.json; ask its maintainer to change it.

250```

251 

252Dai al marketplace un nome che rispetti quella regola, quindi aggiungilo di nuovo:

253 

254* **Il marketplace è tuo**: modifica `name` in `marketplace.json`, ad esempio in `internal-tools`

255* **Lo ospita qualcun altro**: chiedi al proprietario di cambiare il nome

256 

257Prima della v2.1.295, Claude Code segnalava come riuscita l'aggiunta di questo esempio.

258 

240<h3 id="ssh-authentication-failed-or-https-authentication-failed">259<h3 id="ssh-authentication-failed-or-https-authentication-failed">

241 `SSH authentication failed` or `HTTPS authentication failed`260 `SSH authentication failed` or `HTTPS authentication failed`

242</h3>261</h3>


568 `Marketplace "<name>" is already added from a different source`587 `Marketplace "<name>" is already added from a different source`

569</h3>588</h3>

570 589 

571Hai confermato l'aggiunta di un marketplace tramite [`/plugin install <plugin> --marketplace <source>`](/docs/it/plugins/install#add-a-marketplace-and-install-in-one-command), e il catalogo che Claude Code ha recuperato da quella sorgente ha lo stesso nome di un marketplace che hai già aggiunto da una sorgente diversa. Claude Code mantiene il marketplace esistente invece di sostituirlo, e il plugin non viene installato.590Hai indicato una nuova sorgente di marketplace con [`--marketplace <source>` nel comando di installazione](/docs/it/plugins/install#add-a-marketplace-and-install-in-one-command), in una sessione o dalla shell. Il catalogo che Claude Code ha recuperato da quella sorgente ha lo stesso nome di un marketplace che hai già aggiunto da una sorgente diversa. Claude Code mantiene il marketplace esistente invece di sostituirlo, e il plugin non viene installato.

572 591 

573Il messaggio completo è simile a questo:592Il messaggio completo è simile a questo:

574 593 


786 805 

787Claude Code copia i record inutilizzabili nel file `.set-aside` e li elimina dall'elenco. Claude Code non legge mai le copie di nuovo e le copie invecchiano secondo la pianificazione [`cleanupPeriodDays`](/docs/it/settings-reference#cleanupperioddays).806Claude Code copia i record inutilizzabili nel file `.set-aside` e li elimina dall'elenco. Claude Code non legge mai le copie di nuovo e le copie invecchiano secondo la pianificazione [`cleanupPeriodDays`](/docs/it/settings-reference#cleanupperioddays).

788 807 

808<h3 id="does-not-load-so-claude-code-ignores-the-whole-file">

809 `does not load (...), so Claude Code ignores the whole file`

810</h3>

811 

812Il comando ha funzionato. Il file di impostazioni indicato dall'avviso contiene un errore, quindi Claude Code ignora l'intero file, compreso tutto ciò che il comando vi ha scritto, finché non lo correggi.

813 

814Correggi l'errore indicato dall'avviso. Per un valore che Claude Code non accetta, [Fix a broken settings file](/docs/it/settings#fix-a-broken-settings-file) spiega come fare. Quindi esegui di nuovo il comando se la sua modifica non è più presente nel file.

815 

816L'avviso segue la riga di esito positivo di `claude plugin install`, `enable`, `disable` o `claude plugin marketplace add` nella tua shell:

817 

818```text theme={null}

819⚠ /home/user/.claude/settings.json does not load (its "permissions" is not valid), so Claude Code ignores the whole file, including anything this command wrote there. Fix the file, then run this command again if its change is missing. If a newer Claude Code wrote the file, update Claude Code instead.

820```

821 

822Il testo tra parentesi indica l'errore:

823 

824* **`its "<key>" is not valid`**: l'impostazione tra virgolette contiene un valore che Claude Code non accetta. Cerca l'impostazione nel [riferimento delle impostazioni](/docs/it/settings-reference) per conoscere i valori ammessi. Quando più di un valore non è valido, il testo indica la prima impostazione e conta le altre, come in `its "permissions" and 1 other value are not valid`.

825* **`it is not a JSON object`**: il livello superiore del file non è un oggetto JSON, ad esempio un file il cui livello superiore è un array.

826 

789<h3 id="a-plugin-you-disabled-still-loads">827<h3 id="a-plugin-you-disabled-still-loads">

790 `Disabled in ~/.claude/settings.json but still loads`828 `Disabled in ~/.claude/settings.json but still loads`

791</h3>829</h3>


812 850 

813Se l'organizzazione pre-installa i plugin, lo fa attraverso le impostazioni gestite al suo posto. Vedere [Pre-install and require plugins](/docs/it/plugins/org#pre-install-and-require-plugins).851Se l'organizzazione pre-installa i plugin, lo fa attraverso le impostazioni gestite al suo posto. Vedere [Pre-install and require plugins](/docs/it/plugins/org#pre-install-and-require-plugins).

814 852 

853<h3 id="a-plugin-stays-installed-after-plugin-uninstall-on-windows">

854 Un plugin resta installato dopo `plugin uninstall` su Windows

855</h3>

856 

857Su Windows, esegui `claude plugin uninstall` con ambito di progetto o locale e il comando segnala l'esito positivo, ma `claude plugin list` o `/plugin` elencano ancora il plugin.

858 

859`installed_plugins.json` conteneva due record di installazione del plugin per la cartella del progetto, ciascuno con una grafia diversa del percorso della cartella, e una disinstallazione ne rimuove uno solo. Per verificarlo, esegui `claude plugin list --json` nella tua shell. La riga rimanente del plugin ha un `projectPath` che scrive la cartella in modo diverso da quella in cui hai eseguito la disinstallazione, ad esempio `c:\work\app` per `C:\work\app`.

860 

861Esegui di nuovo lo stesso comando di disinstallazione, con lo stesso `--scope`, dalla stessa cartella. La seconda esecuzione non trova alcun record con la propria grafia del percorso, quindi rimuove quello con l'altra grafia. Per un'installazione con ambito di progetto:

862 

863```shell theme={null}

864claude plugin uninstall <name>@<marketplace> --scope project

865```

866 

867Quindi esegui di nuovo `claude plugin list --json` per verificare che la riga sia scomparsa.

868 

869Prima della v2.1.295, la seconda esecuzione non riesce con `Plugin "<name>" is not installed in project scope`. Esegui `claude update`, quindi esegui di nuovo la disinstallazione.

870 

815<h3 id="failed-to-load-hooks-from-and-hooks-that-dont-fire">871<h3 id="failed-to-load-hooks-from-and-hooks-that-dont-fire">

816 `Failed to load hooks from <path>` and hooks that don't fire872 `Failed to load hooks from <path>` and hooks that don't fire

817</h3>873</h3>


835 891 

836Se lo stderr mostra il percorso del plugin tagliato a uno spazio, il comando in forma shell dell'hook utilizza `${CLAUDE_PLUGIN_ROOT}` al di fuori delle virgolette e il percorso di installazione contiene uno spazio. Avvolgere la variabile tra virgolette doppie o utilizzare [exec form](/docs/it/hooks#exec-form-and-shell-form). Per trovare la variabile non quotata, eseguire `claude plugin validate` sulla directory del plugin e cercare il suo [avviso di quotazione](/docs/it/plugins/manifest-reference#quoting-and-path-separators).892Se lo stderr mostra il percorso del plugin tagliato a uno spazio, il comando in forma shell dell'hook utilizza `${CLAUDE_PLUGIN_ROOT}` al di fuori delle virgolette e il percorso di installazione contiene uno spazio. Avvolgere la variabile tra virgolette doppie o utilizzare [exec form](/docs/it/hooks#exec-form-and-shell-form). Per trovare la variabile non quotata, eseguire `claude plugin validate` sulla directory del plugin e cercare il suo [avviso di quotazione](/docs/it/plugins/manifest-reference#quoting-and-path-separators).

837 893 

894Se l'avviso riporta `Failed to run: Plugin directory does not exist: <path>`, consulta [`Plugin directory does not exist`](#plugin-directory-does-not-exist).

895 

838Per qualsiasi altro errore, eseguire il comando dell'hook da soli dalla directory del plugin per vedere l'output completo o catturare lo stderr completo con [debug logging](/docs/it/hooks#debug-hooks).896Per qualsiasi altro errore, eseguire il comando dell'hook da soli dalla directory del plugin per vedere l'output completo o catturare lo stderr completo con [debug logging](/docs/it/hooks#debug-hooks).

839 897 

840<h4 id="a-plugin-hook-blocks-a-tool-call-or-prompt">898<h4 id="a-plugin-hook-blocks-a-tool-call-or-prompt">


869 </Step>927 </Step>

870</Steps>928</Steps>

871 929 

930<h3 id="plugin-directory-does-not-exist">

931 `Plugin directory does not exist: <path>`

932</h3>

933 

934Esegui prima `/reload-plugins` nel prompt di Claude Code, anche se il messaggio dice di reinstallare. L'hook di un plugin non riesce con `Failed to run: Plugin directory does not exist: <path> (<plugin> — run /plugin to reinstall)`, e l'hook non viene eseguito, quando la directory da cui la tua sessione ha caricato gli hook del plugin non esiste più sul disco. [`Plugin directory not found at path: <path>`](#plugin-directory-not-found-at-path) è un messaggio diverso, relativo a una voce del marketplace.

935 

936Il ricaricamento carica gli hook del plugin dalla sua directory attuale. L'errore viene mostrato una sola volta per sessione per ogni evento e comando dell'hook, quindi il fatto che l'hook non segnali più nulla non conferma la correzione. Leggi invece l'output del ricaricamento:

937 

938* **`Reloaded:` senza riga di errori**: gli hook del plugin non puntano più alla directory mancante

939* **`N errors during load. Run /plugin for details.`**: apri la scheda **Errors** in `/plugin` e segui la voce di questa pagina relativa al messaggio mostrato

940* **Una riga che termina con `Run /reload-plugins --force to apply.`**: non è stato ricaricato nulla e gli hook continuano a non riuscire. Esegui `/reload-plugins --force` nel prompt di Claude Code

941 

872<h3 id="invalid-mcp-server-config-for-and-mcp-servers-that-dont-start">942<h3 id="invalid-mcp-server-config-for-and-mcp-servers-that-dont-start">

873 `Invalid MCP server config for "<server>"` and MCP servers that don't start943 `Invalid MCP server config for "<server>"` and MCP servers that don't start

874</h3>944</h3>


1063 1133 

1064Hai eseguito `claude plugin validate <path>`, o `/plugin validate <path>` in una sessione, e ha stampato `Found N errors` e `Validation failed`, quindi è uscito con codice 1.1134Hai eseguito `claude plugin validate <path>`, o `/plugin validate <path>` in una sessione, e ha stampato `Found N errors` e `Validation failed`, quindi è uscito con codice 1.

1065 1135 

1066Il validatore legge il manifest nel percorso che fornisci: `.claude-plugin/plugin.json` per una directory di plugin, o `.claude-plugin/marketplace.json` per una directory di marketplace. Per un marketplace, antepone i problemi nel manifest proprio di una voce con l'indice della voce, come `plugins[1] plugin.json → json: ...`.1136Il validatore legge il manifest nel percorso che fornisci: `.claude-plugin/plugin.json` per una directory di plugin, `.claude-plugin/marketplace.json` per una directory di marketplace, o entrambi per una directory che li contiene entrambi. Per un marketplace, antepone i problemi nel manifest proprio di una voce con l'indice della voce, come `plugins[1] plugin.json → json: ...`. Prima della v2.1.289, Claude Code convalidava una directory che li contiene entrambi solo come marketplace.

1067 1137 

1068La tabella copre i messaggi che fermano la convalida e due avvisi, `No frontmatter block found` e `Unknown field '<key>'`, che la fermano solo quando passi `--strict`. Altri avvisi, come una descrizione mancante, non sono elencati.1138La tabella copre i messaggi che fermano la convalida e due avvisi, `No frontmatter block found` e `Unknown field '<key>'`, che la fermano solo quando passi `--strict`. Altri avvisi, come una descrizione mancante, non sono elencati.

1069 1139 

Details

191 Jitter191 Jitter

192</h3>192</h3>

193 193 

194Per evitare che ogni sessione colpisca l'API nello stesso momento, lo scheduler aggiunge un offset deterministico ai tempi di attivazione:194Un'attività pianificata può essere eseguita in un orario diverso da quello indicato dalla sua pianificazione. Se le attività di ogni sessione venissero eseguite esattamente come pianificato, molte di esse chiamerebbero l'API nello stesso momento, quindi Claude Code sposta l'orario di esecuzione di ogni attività. Le attività ricorrenti vengono eseguite in ritardo, mentre le attività una tantum pianificate allo scoccare dell'ora o della mezz'ora vengono eseguite un po' in anticipo.

195 195 

196* Le attività ricorrenti si attivano fino a 30 minuti dopo l'ora pianificata (o fino a metà dell'intervallo, per le attività che vengono eseguite più frequentemente di ogni ora). Un processo orario pianificato per `:00` potrebbe attivarsi in qualsiasi momento fino a `:30`.196<h4 id="how-late-a-recurring-task-runs">

197* Le attività una tantum pianificate per l'inizio o la fine dell'ora si attivano fino a 90 secondi prima.197 Quanto in ritardo viene eseguita un'attività ricorrente

198</h4>

198 199 

199L'offset è derivato dall'ID dell'attività, quindi la stessa attività ottiene sempre lo stesso offset. Se il timing esatto è importante, scegliete un minuto che non sia `:00` o `:30`, ad esempio `3 9 * * *` invece di `0 9 * * *`, e il jitter una tantum non si applicherà.200Quando crei un'attività ricorrente, Claude Code le assegna un ritardo fisso e lo aggiunge a ogni esecuzione. Il ritardo viene calcolato a partire dall'ID dell'attività, quindi la stessa attività viene eseguita ogni volta con lo stesso numero di minuti di ritardo, anche quando la sessione è inattiva e non c'è nient'altro in esecuzione.

201 

202Le attività eseguite più spesso ottengono ritardi più brevi, e 30 minuti è il ritardo massimo che un'attività può ottenere. Questi sono gli intervalli di ritardo per alcune pianificazioni comuni:

203 

204| L'attività viene eseguita | Il ritardo è compreso tra |

205| :- | :- |

206| Ogni 10 minuti | 0 e 5 minuti |

207| Ogni 30 minuti | 0 e 15 minuti |

208| Ogni ora, o meno spesso, ad esempio ogni giorno | 0 e 30 minuti |

209 

210Ad esempio, `7,37 * * * *` pianifica un'attività per `:07` e `:37`, che distano 30 minuti, quindi il suo ritardo è compreso tra 0 e 15 minuti. Se il ritardo di questa attività è di 14 minuti, viene eseguita a `:21` e `:51` ogni ora. Cambiare la pianificazione a un minuto diverso sposta l'orario di esecuzione, e il ritardo viene comunque aggiunto.

211 

212<h4 id="when-a-one-shot-task-runs-early">

213 Quando un'attività una tantum viene eseguita in anticipo

214</h4>

215 

216Un'attività una tantum pianificata per `:00` o `:30` viene eseguita fino a 90 secondi prima. Claude Code non sposta un'attività una tantum pianificata per qualsiasi altro minuto, quindi quando il timing è importante, pianificala lontano dall'ora e dalla mezz'ora esatte: `3 9 * * *` invece di `0 9 * * *`.

200 217 

201<h3 id="seven-day-expiry">218<h3 id="seven-day-expiry">

202 Scadenza di sette giorni219 Scadenza di sette giorni

Details

403 403 

404* Il [file MCP gestito](/docs/it/managed-mcp) con ambito enterprise nel suo percorso di sistema standard: `/etc/claude-code/managed-mcp.json` sugli host runner Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` sugli host macOS. Usalo per flotte bloccate in cui possono essere caricati solo i server elencati dall'amministratore. Consulta [controllo esclusivo con managed-mcp.json](/docs/it/managed-mcp#exclusive-control-with-managed-mcp-json) per le regole di precedenza. Quando questo file si trova sull'host del runner, Claude Code ignora i server MCP che il control plane di Anthropic fornisce a una sessione, inclusi i connettori di claude.ai, e li nomina in un avviso sullo stderr del processo figlio della sessione, che il runner registra al livello di log `debug`. Prima della v2.1.229, quelle sessioni terminavano all'avvio con `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.404* Il [file MCP gestito](/docs/it/managed-mcp) con ambito enterprise nel suo percorso di sistema standard: `/etc/claude-code/managed-mcp.json` sugli host runner Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` sugli host macOS. Usalo per flotte bloccate in cui possono essere caricati solo i server elencati dall'amministratore. Consulta [controllo esclusivo con managed-mcp.json](/docs/it/managed-mcp#exclusive-control-with-managed-mcp-json) per le regole di precedenza. Quando questo file si trova sull'host del runner, Claude Code ignora i server MCP che il control plane di Anthropic fornisce a una sessione, inclusi i connettori di claude.ai, e li nomina in un avviso sullo stderr del processo figlio della sessione, che il runner registra al livello di log `debug`. Prima della v2.1.229, quelle sessioni terminavano all'avvio con `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.

405* La chiave [`managedMcpServers`](/docs/it/settings-reference#managedmcpservers) nelle [impostazioni gestite](/docs/it/managed-settings) sull'host del runner: fornisce server HTTP e SSE senza assumere il controllo esclusivo, quindi i server delle altre fonti vengono comunque caricati. Richiede Claude Code v2.1.259 o successiva.405* La chiave [`managedMcpServers`](/docs/it/settings-reference#managedmcpservers) nelle [impostazioni gestite](/docs/it/managed-settings) sull'host del runner: fornisce server HTTP e SSE senza assumere il controllo esclusivo, quindi i server delle altre fonti vengono comunque caricati. Richiede Claude Code v2.1.259 o successiva.

406* `<repo>/.mcp.json`: ambito di progetto. Esegui il commit del file nel repository; i suoi server vengono approvati automaticamente nelle sessioni cloud.406* `<repo>/.mcp.json`: ambito di progetto. Esegui il commit del file nel repository; i suoi server vengono approvati automaticamente nelle sessioni cloud. In una sessione con più repository, [viene caricato al massimo il file di un solo repository](#repository-settings-in-sessions-with-several-repositories).

407 407 

408Quando la distribuzione dei connettori è abilitata per la tua organizzazione, il control plane di Anthropic fornisce i connettori che hai configurato su claude.ai alle sessioni create in modo interattivo tramite una configurazione MCP fornita dal server, instradata attraverso `api.anthropic.com`. Le sessioni create in modo programmatico, come i [dispatch da CLI](/docs/it/self-hosted-environments-testing#run-the-test-loop), non ricevono i connettori; fornisci loro i server MCP tramite una qualsiasi delle altre fonti elencate in questa sezione. Il token OAuth del processo figlio non include uno scope per recuperare direttamente i connettori, quindi il processo figlio non tenta autonomamente quel recupero; la distribuzione è gestita dal server.408Quando la distribuzione dei connettori è abilitata per la tua organizzazione, il control plane di Anthropic fornisce i connettori che hai configurato su claude.ai alle sessioni create in modo interattivo tramite una configurazione MCP fornita dal server, instradata attraverso `api.anthropic.com`. Le sessioni create in modo programmatico, come i [dispatch da CLI](/docs/it/self-hosted-environments-testing#run-the-test-loop), non ricevono i connettori; fornisci loro i server MCP tramite una qualsiasi delle altre fonti elencate in questa sezione. Il token OAuth del processo figlio non include uno scope per recuperare direttamente i connettori, quindi il processo figlio non tenta autonomamente quel recupero; la distribuzione è gestita dal server.

409 409 


543exit 0543exit 0

544```544```

545 545 

546L'hook spinge Claude a committare e spingere prima della fine della sessione, e rimane silenzioso quando la directory non è un repository git o non ha un remoto.546L'hook chiede a Claude di fare il commit e il push prima che la sessione termini, e rimane silenzioso quando la directory non è un repository git o non ha un remoto. Per una sessione con più repository, consulta [cosa indica `$CLAUDE_PROJECT_DIR`](#repository-settings-in-sessions-with-several-repositories).

547 547 

548<h2 id="permissions-and-tool-approval">548<h2 id="permissions-and-tool-approval">

549 Autorizzazioni e approvazione degli strumenti549 Autorizzazioni e approvazione degli strumenti


572 572 

573Impostare `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` per seminare da un percorso diverso, o puntarlo a una directory vuota per disabilitare la semina.573Impostare `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` per seminare da un percorso diverso, o puntarlo a una directory vuota per disabilitare la semina.

574 574 

575Il `.claude/settings.json` committato nel repository si sovrappone come impostazioni del progetto. Le sessioni leggono anche [`managed-settings.json`](/docs/it/settings#where-settings-live) dal percorso di sistema standard nell'immagine del runner. Se le sue chiavi si applicano insieme alle [impostazioni gestite dal server](/docs/it/server-managed-settings) segue [come Claude Code combina le fonti gestite](/docs/it/managed-settings#how-claude-code-combines-managed-sources): per impostazione predefinita, quando l'organizzazione fornisce qualsiasi chiave gestita dal server, le sessioni ignorano il file dell'immagine del runner a parte le [chiavi che Claude Code legge da ogni fonte di amministrazione](/docs/it/managed-settings#keys-read-from-every-admin-source), come il blocco `env`, i blocchi sandbox, i percorsi binari sandbox e `forceRemoteSettingsRefresh`. Consultare [settings precedence](/docs/it/settings#settings-precedence).575Il `.claude/settings.json` committato nel repository si sovrappone come impostazioni di progetto. In una sessione con più repository, [ha effetto al massimo il file di un solo repository](#repository-settings-in-sessions-with-several-repositories). Le sessioni leggono anche [`managed-settings.json`](/docs/it/settings#where-settings-live) dal percorso di sistema standard nell'immagine del runner. Se le sue chiavi si applicano insieme alle [impostazioni gestite dal server](/docs/it/server-managed-settings) dipende da [come Claude Code combina le fonti gestite](/docs/it/managed-settings#how-claude-code-combines-managed-sources): per impostazione predefinita, quando la tua organizzazione fornisce chiavi gestite dal server, le sessioni ignorano il file dell'immagine del runner, ad eccezione delle [chiavi che Claude Code legge da ogni fonte di amministrazione](/docs/it/managed-settings#keys-read-from-every-admin-source), come il blocco `env`, i blocchi della sandbox, i percorsi dei binari della sandbox e `forceRemoteSettingsRefresh`. Consulta [precedenza delle impostazioni](/docs/it/settings#settings-precedence).

576 576 

577Quando il piano di controllo di Anthropic fornisce una sessione con [hook Claude Code](/docs/it/hooks), il runner li installa insieme, non sopra, la propria configurazione. Richiede Claude Code v2.1.229 o successivo.577Quando il piano di controllo di Anthropic fornisce una sessione con [hook Claude Code](/docs/it/hooks), il runner li installa insieme, non sopra, la propria configurazione. Richiede Claude Code v2.1.229 o successivo.

578 578 


584 584 

585Lo snapshot di `~/.claude/` dell'host acquisito dal runner esclude la directory `projects/`. La posizione di archiviazione predefinita della memoria automatica si trova in quella directory. Se vi inserisci file di memoria, il runner non li copia nelle sessioni e questi non attivano la memoria automatica.585Lo snapshot di `~/.claude/` dell'host acquisito dal runner esclude la directory `projects/`. La posizione di archiviazione predefinita della memoria automatica si trova in quella directory. Se vi inserisci file di memoria, il runner non li copia nelle sessioni e questi non attivano la memoria automatica.

586 586 

587<h3 id="repository-settings-in-sessions-with-several-repositories">

588 Impostazioni dei repository nelle sessioni con più repository

589</h3>

590 

591In una sessione con più repository, Claude Code legge le impostazioni di progetto dalla directory in cui si avvia la sessione, quindi al massimo il `.claude/settings.json` di un solo repository ha effetto come impostazioni di progetto. Un hook definito nel file di un altro repository non viene eseguito, una regola deny al suo interno non si applica e il relativo `env` non viene impostato.

592 

593* **`--capacity 1`, il valore predefinito, con il checkout integrato**: la sessione si avvia nel primo repository del suo elenco di repository. Il `.claude/settings.json` di quel repository ha effetto come impostazioni di progetto e il suo `.mcp.json` viene caricato, mentre quelli degli altri repository no.

594* **Un `--capacity` superiore a uno, oppure un [hook `checkout`](#checkout)**: la sessione si avvia in una directory per sessione che contiene i checkout. Il `.claude/settings.json` di nessun repository ha effetto come impostazioni di progetto, il `.mcp.json` di nessun repository viene caricato e [`$CLAUDE_PROJECT_DIR`](/docs/it/hooks#reference-scripts-by-path) in un comando di hook corrisponde a quella directory, non a un checkout.

595 

596Il `CLAUDE.md` e le skill di ciascun repository vengono caricati ovunque si avvii la sessione. Il runner passa ogni repository a Claude Code come [directory aggiuntiva](/docs/it/permissions#additional-directories-grant-file-access-not-configuration), quindi Claude Code legge anche le chiavi `enabledPlugins` ed `extraKnownMarketplaces` dal `.claude/settings.json` di ciascun repository.

597 

598Per eseguire un hook o applicare una regola di permesso in ogni sessione, inseriscili in `~/.claude/settings.json` sull'host del runner. Il runner [copia il file dell'host in ogni sessione](#how-each-session’s-config-is-assembled), ovunque si avvii la sessione. Scrivi un percorso in una regola `Read` o `Edit` come [pattern](/docs/it/permissions#read-and-edit) assoluto con `//` o relativo alla home con `~/`, perché gli altri pattern sono ancorati alla fonte delle impostazioni o alla directory corrente.

599 

587<h3 id="repository-committed-permission-rules">600<h3 id="repository-committed-permission-rules">

588 Regole di autorizzazione committate nel repository601 Regole di autorizzazione committate nel repository

589</h3>602</h3>

Details

87 87 

88 Poiché gli hook eseguono comandi shell, gli utenti in sessioni interattive vedono una [finestra di dialogo di approvazione della sicurezza](#security-approval-dialogs) prima che Claude Code li applichi.88 Poiché gli hook eseguono comandi shell, gli utenti in sessioni interattive vedono una [finestra di dialogo di approvazione della sicurezza](#security-approval-dialogs) prima che Claude Code li applichi.

89 89 

90 Per configurare il classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) in modo che conosca quali repository, bucket e domini la vostra organizzazione ritiene affidabili, fornire un blocco `autoMode` nello stesso modo; vedere [Configurare la modalità auto](/docs/it/auto-mode-config) per come le voci `autoMode` influenzano ciò che il classificatore blocca e avvertimenti importanti sui campi `environment`, `allow`, `soft_deny` e `hard_deny`.90 Per configurare il classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) in modo che conosca quali repository, bucket e domini la tua organizzazione ritiene affidabili, fornisci un blocco `autoMode` nello stesso modo; consulta [Configurare la modalità auto](/docs/it/auto-mode-config) per come le voci `autoMode` influenzano ciò che il classificatore blocca e avvertimenti importanti sui campi `environment`, `allow`, `soft_deny` e `hard_deny`.

91 </Step>91 </Step>

92 92 

93 <Step title="Salvare e distribuire">93 <Step title="Salvare e distribuire">

94 Salvare le modifiche. I client di Claude Code ricevono le impostazioni aggiornate al prossimo avvio o ciclo di polling orario.94 Salva le modifiche. I client di Claude Code ricevono le impostazioni aggiornate al prossimo avvio o ciclo di polling orario.

95 

96 L'editor confronta il tuo JSON con lo schema JSON pubblicato per le impostazioni di Claude Code. Se trova un problema in un JSON che viene analizzato correttamente, mostra un avviso e cambia l'etichetta del pulsante di salvataggio. L'etichetta è **Update with errors** quando le impostazioni sono già salvate e **Add with errors** quando non è ancora stata salvata alcuna impostazione. Quel pulsante salva comunque, perché un avviso dello schema non blocca il salvataggio.

97 

98 Lo schema [può essere in ritardo rispetto alle versioni più recenti](/docs/it/settings#edit-a-settings-file), quindi l'editor può segnalare una chiave o un valore documentato nel [riferimento delle impostazioni](/docs/it/settings-reference#all-settings). Claude Code riceve le chiavi e i valori che hai salvato ed esegue [la propria convalida](#invalid-entries-in-delivered-settings) quando li carica.

95 </Step>99 </Step>

96</Steps>100</Steps>

97 101 

settings.md +41 −41

Details

402 402 

403Claude Code legge le impostazioni da quattro file, e un'organizzazione può anche fornire impostazioni gestite dalla console claude.ai. Ogni fonte ha un ambito: l'insieme di persone e progetti a cui si applica un'impostazione salvata in essa, che sia solo tu, tutti in un progetto o tutti nella tua organizzazione.403Claude Code legge le impostazioni da quattro file, e un'organizzazione può anche fornire impostazioni gestite dalla console claude.ai. Ogni fonte ha un ambito: l'insieme di persone e progetti a cui si applica un'impostazione salvata in essa, che sia solo tu, tutti in un progetto o tutti nella tua organizzazione.

404 404 

405| Ambito | File | Chi interessa | Usarlo per |405| Ambito | File | Chi interessa | Usalo per |

406| :- | :- | :- | :- |406| :- | :- | :- | :- |

407| Utente | `~/.claude/settings.json` | Voi, in ogni progetto su questa macchina | Preferenze personali: tema, modalità editor, modello predefinito, vostre regole di autorizzazione personali |407| Utente | `~/.claude/settings.json` | Te, in ogni progetto su questa macchina | Preferenze personali: tema, modalità editor, modello predefinito, le tue regole di permesso personali |

408| Progetto condiviso | `.claude/settings.json` | Tutti coloro che lavorano nella cartella che lo contiene. In un repository git, eseguite il commit in modo che i vostri colleghi lo ottengano | Autorizzazioni del team, hooks, plugins, e le variabili di ambiente di cui il progetto ha bisogno |408| Progetto condiviso | `.claude/settings.json` | Tutti coloro che lavorano nella cartella che lo contiene. In un repository git, esegui il commit in modo che i tuoi colleghi lo ricevano | Permessi del team, hook, plugin e le variabili d'ambiente di cui il progetto ha bisogno |

409| Progetto locale | `.claude/settings.local.json` | Voi, in questo solo progetto. Claude Code lo mantiene fuori da git quando crea il file; se lo create manualmente, aggiungetelo a `.gitignore` voi stessi | Override personali per un progetto, e test prima di condividere |409| Progetto locale | `.claude/settings.local.json` | Te, solo in questo progetto. Claude Code lo tiene fuori da git quando crea il file; se lo crei manualmente, aggiungilo tu stesso a `.gitignore` | Override personali per un progetto e test prima di condividere |

410| Gestito | `managed-settings.json` e altre [fonti gestite](/docs/it/managed-settings#delivery-mechanisms) | Tutti coloro a cui la tua organizzazione lo distribuisce; [Precedenza delle impostazioni](#settings-precedence) indica cosa può sovrascriverlo | Politiche di sicurezza e requisiti di conformità |410| Gestito | `managed-settings.json` e altre [fonti gestite](/docs/it/managed-settings#delivery-mechanisms) | Tutti coloro a cui la tua organizzazione lo distribuisce; [Precedenza delle impostazioni](#settings-precedence) indica cosa può sovrascriverlo | Politiche di sicurezza e requisiti di conformità |

411 411 

412Nella colonna File, `~/.claude` è la cartella `.claude` nella vostra home directory, e un `.claude` semplice è la cartella `.claude` all'interno del vostro progetto.412Nella colonna File, `~/.claude` è la cartella `.claude` nella tua directory home, e un `.claude` semplice è la cartella `.claude` all'interno del tuo progetto.

413 413 

414<span id="where-each-file-applies" />414<span id="where-each-file-applies" />

415 415 


419 Confrontare l'ambito di ogni file di impostazioni419 Confrontare l'ambito di ogni file di impostazioni

420</h3>420</h3>

421 421 

422Supponiamo che abbiate tre progetti sulla vostra macchina, `website/`, `api/`, e `acme-app/`, un vostro collega ha il suo clone di `acme-app/`, e avviate una [sessione cloud](#settings-in-cloud-sessions) su `acme-app/`.422Supponi di avere tre progetti sulla tua macchina, `website/`, `api/` e `acme-app/`, che un tuo collega abbia il proprio clone di `acme-app/` e che tu avvii una [sessione cloud](#settings-in-cloud-sessions) su `acme-app/`.

423 423 

424Il grafico sottostante mostra in quali di quelle cartelle si applica un'impostazione quando avviate Claude Code da esse. Fate clic su un file di impostazioni per vedere le cartelle che raggiunge.424Il grafico sottostante mostra in quali di quelle cartelle si applica un'impostazione quando avvii Claude Code da esse. Fai clic su un file di impostazioni per vedere le cartelle che raggiunge.

425 425 

426<SettingsScope />426<SettingsScope />

427 427 

428* **`~/.claude/settings.json`**: ogni progetto sulla vostra macchina, e nulla su quella del vostro collega o nella sessione cloud428* **`~/.claude/settings.json`**: ogni progetto sulla tua macchina, e nulla su quella del tuo collega o nella sessione cloud

429* **`acme-app/.claude/settings.json`**: il vostro `acme-app/`. Raggiunge il clone del vostro collega e la sessione cloud solo se eseguite il commit del file nel controllo di versione; fino a quando non lo fate, è un file sul vostro disco come qualsiasi altro e nessun altro lo ha429* **`acme-app/.claude/settings.json`**: il tuo `acme-app/`. Raggiunge il clone del tuo collega e la sessione cloud solo se esegui il commit del file nel controllo di versione; finché non lo fai, è un file sul tuo disco come qualsiasi altro e nessun altro lo ha

430* **`acme-app/.claude/settings.local.json`**: il vostro `acme-app/` solo. Claude Code lo aggiunge alle vostre esclusioni git globali la prima volta che scrive il file, quindi rimane fuori dai vostri commit; se create il file manualmente, [aggiungetelo a `.gitignore` voi stessi](#keep-personal-settings-out-of-a-repository)430* **`acme-app/.claude/settings.local.json`**: solo il tuo `acme-app/`. Claude Code lo aggiunge alle tue esclusioni git globali la prima volta che scrive il file, quindi rimane fuori dai tuoi commit; se crei il file manualmente, [aggiungilo tu stesso a `.gitignore`](#keep-personal-settings-out-of-a-repository)

431* **Impostazioni gestite**, che sia un file `managed-settings.json`, una politica MDM, o [impostazioni gestite dal server](/docs/it/server-managed-settings) dalla console claude.ai: ogni progetto su ogni macchina a cui la vostra organizzazione lo distribuisce, o a cui accedete con il vostro account organizzativo. Solo le impostazioni gestite dal server raggiungono la sessione cloud431* **Impostazioni gestite**, che si tratti di un file `managed-settings.json`, di una politica MDM o di [impostazioni gestite dal server](/docs/it/server-managed-settings) dalla console claude.ai: ogni progetto su ogni macchina a cui la tua organizzazione le distribuisce, o a cui accedi con l'account della tua organizzazione. Solo le impostazioni gestite dal server raggiungono la sessione cloud

432 432 

433<span id="which-files-you-have" />433<span id="which-files-you-have" />

434 434 

435<h3 id="find-or-create-your-settings-files">435<h3 id="find-or-create-your-settings-files">

436 Trovare o creare i vostri file di impostazioni436 Trovare o creare i tuoi file di impostazioni

437</h3>437</h3>

438 438 

439L'installazione di Claude Code non crea alcun file di impostazioni. Se la vostra macchina o il vostro progetto ne ha già uno, è venuto da una di queste fonti:439L'installazione di Claude Code non crea alcun file di impostazioni. Se la tua macchina o il tuo progetto ne ha già uno, proviene da una di queste fonti:

440 440 

441* **Gestito**: la vostra organizzazione lo distribuisce. Non lo create o modificate.441* **Gestito**: lo distribuisce la tua organizzazione. Non lo crei né lo modifichi tu.

442* **Progetto condiviso**: un progetto che già utilizza Claude Code potrebbe averne uno sottoposto a commit. Se no, createlo in `.claude/settings.json` nella cartella del progetto.442* **Progetto condiviso**: un progetto che utilizza già Claude Code potrebbe averne uno sottoposto a commit. In caso contrario, crealo in `.claude/settings.json` nella cartella del progetto.

443* **Utente** e **Progetto locale**: createli voi stessi, o lasciate che Claude Code li crei. Scrive `~/.claude/settings.json` la prima volta che cambiate un'opzione nel menu `/config` che memorizza nelle impostazioni utente, come il tema, e `.claude/settings.local.json` la prima volta che date un'approvazione permanente su un prompt di autorizzazione, come "Sì, e non chiedere di nuovo" per un comando Bash. Poche opzioni `/config`, incluso **Show tips**, vengono salvate in `.claude/settings.local.json` invece che nel file utente.443* **Utente** e **Progetto locale**: creali tu stesso, oppure lascia che sia Claude Code a crearli. Scrive `~/.claude/settings.json` la prima volta che modifichi un'opzione nel menu `/config` che memorizza nelle impostazioni utente, come il tema, e `.claude/settings.local.json` la prima volta che dai un'approvazione permanente a una richiesta di permesso, come "Sì, e non chiedere di nuovo" per un comando Bash. Alcune opzioni di `/config`, tra cui **Show tips**, vengono invece salvate in `.claude/settings.local.json` anziché nel file utente.

444 444 

445<Info>445<Info>

446 Su Windows, `~/.claude` significa `%USERPROFILE%\.claude`. Per mantenere i file della home directory altrove, impostate [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars); Claude Code memorizza quindi le vostre impostazioni, la cronologia delle sessioni, e i plugins lì invece.446 Su Windows, `~/.claude` significa `%USERPROFILE%\.claude`. Per tenere i file della directory home altrove, imposta [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars); Claude Code memorizzerà quindi lì le tue impostazioni, la cronologia delle sessioni e i plugin.

447</Info>447</Info>

448 448 

449Claude Code mantiene anche un quinto file, [`~/.claude.json`](/docs/it/claude-directory#ce-claude-json), che scrive per se stesso; non dovete modificarlo. Contiene la vostra sessione di accesso, configurazioni [MCP server](/docs/it/mcp), stato per progetto come decisioni di fiducia, e le [chiavi di configurazione globale](/docs/it/settings-reference#global-config-settings) che `/config` scrive per voi.449Claude Code mantiene anche un quinto file, [`~/.claude.json`](/docs/it/claude-directory#ce-claude-json), che scrive per sé; non hai bisogno di modificarlo. Contiene la tua sessione di accesso, le configurazioni dei [server MCP](/docs/it/mcp), lo stato per progetto come le decisioni di fiducia e le [chiavi di configurazione globale](/docs/it/settings-reference#global-config-settings) che `/config` scrive per te.

450 450 

451<h3 id="share-settings-with-your-team">451<h3 id="share-settings-with-your-team">

452 Condividere le impostazioni con il vostro team452 Condividere le impostazioni con il tuo team

453</h3>453</h3>

454 454 

455Eseguite il commit di `.claude/settings.json` in modo che tutti coloro che clonano il repository ottengano le stesse autorizzazioni, hooks, e plugins. Ogni collega può comunque sostituirlo per se stesso nel proprio `.claude/settings.local.json`, quindi le eccezioni personali non hanno bisogno di un commit. Per un file team completo, vedete [le impostazioni condivise di un team](/docs/it/settings-example#a-teams-shared-settings).455Esegui il commit di `.claude/settings.json` in modo che tutti coloro che clonano il repository ricevano gli stessi permessi, hook e plugin. Ogni collega può comunque sovrascriverlo per sé nel proprio `.claude/settings.local.json`, quindi le eccezioni personali non richiedono un commit. Per un file di team completo, consulta [le impostazioni condivise di un team](/docs/it/settings-example#a-teams-shared-settings).

456 456 

457Parte di quello che eseguite il commit attende fino a quando ogni collega [non si fida della cartella](/docs/it/permissions#project-allow-rules-and-workspace-trust), e poche chiavi non hanno mai effetto da un file di repository; [Troubleshoot a setting that doesn't apply](#common-cases) copre entrambi.457Parte di ciò di cui esegui il commit resta in attesa finché ogni collega non [considera attendibile la cartella](/docs/it/permissions#project-allow-rules-and-workspace-trust), e alcune chiavi non hanno mai effetto da un file del repository; [Risolvere i problemi di un'impostazione che non si applica](#common-cases) tratta entrambi i casi.

458 458 

459<span id="local-settings-file" />459<span id="local-settings-file" />

460 460 


465<span id="keep-personal-settings-out-of-the-repository" />465<span id="keep-personal-settings-out-of-the-repository" />

466 466 

467<h3 id="keep-personal-settings-out-of-a-repository">467<h3 id="keep-personal-settings-out-of-a-repository">

468 Mantenere le impostazioni personali fuori da un repository468 Tenere le impostazioni personali fuori da un repository

469</h3>469</h3>

470 470 

471Per cambiare un'impostazione per voi stessi in un progetto senza cambiarla per i vostri colleghi, salvatela in `.claude/settings.local.json` all'interno del progetto. Claude Code applica quel file sopra il `.claude/settings.json` sottoposto a commit, quindi se il file del vostro team imposta `"model": "claude-sonnet-5"` e volete Opus, mettete `"model": "claude-opus-5-5"` nel vostro file locale e solo le vostre sessioni cambiano.471Per modificare un'impostazione solo per te in un progetto senza cambiarla per i tuoi colleghi, salvala in `.claude/settings.local.json` all'interno del progetto. Claude Code applica quel file sopra il `.claude/settings.json` sottoposto a commit, quindi se il file del tuo team imposta `"model": "claude-sonnet-5"` e tu vuoi Opus, inserisci `"model": "claude-opus-5-5"` nel tuo file locale e cambiano solo le tue sessioni.

472 472 

473Claude Code scrive anche in questo file, lo mantiene fuori dai vostri commit, e applica le sue regole di autorizzazione senza il passaggio di fiducia:473Claude Code scrive anche in questo file, lo tiene fuori dai tuoi commit e applica le sue regole allow senza il passaggio di attendibilità:

474 474 

475* **Claude Code lo scrive anche.** Quando Claude chiede il permesso di eseguire un comando Bash e scegliete "Sì, e non chiedere di nuovo", Claude Code salva quella [approvazione di autorizzazione](/docs/it/permissions#permission-system) qui come una regola `allow`.475* **Anche Claude Code lo scrive.** Quando Claude chiede il permesso di eseguire un comando Bash e scegli "Sì, e non chiedere di nuovo", Claude Code salva qui quell'[approvazione del permesso](/docs/it/permissions#permission-system) come regola `allow`.

476* **Non dovete gitignore voi stessi, a meno che non l'abbiate creato manualmente.** La prima volta che Claude Code scrive il file in un repository git che non lo ignora già, aggiunge `**/.claude/settings.local.json` al vostro file di esclusioni git globale, quindi il file rimane fuori dai vostri commit in ogni repository. Quel file è `core.excludesFile` quando la vostra configurazione git globale lo imposta su un percorso assoluto o con prefisso `~`; altrimenti è `$XDG_CONFIG_HOME/git/ignore`, o `~/.config/git/ignore` quando `XDG_CONFIG_HOME` non è impostato. Se avete creato il file manualmente e Claude Code non ha ancora scritto in esso, aggiungetelo a `.gitignore` voi stessi.476* **Non devi aggiungerlo tu a gitignore, a meno che tu non l'abbia creato manualmente.** La prima volta che Claude Code scrive il file in un repository git che non lo ignora già, aggiunge `**/.claude/settings.local.json` al tuo file di esclusioni git globale, così il file rimane fuori dai tuoi commit in ogni repository. Quel file è `core.excludesFile` quando la tua configurazione git globale lo imposta su un percorso assoluto o con prefisso `~`; altrimenti è `$XDG_CONFIG_HOME/git/ignore`, oppure `~/.config/git/ignore` quando `XDG_CONFIG_HOME` non è impostato. Se hai creato il file manualmente e Claude Code non vi ha ancora scritto, aggiungilo tu stesso a `.gitignore`.

477* **Le sue regole di autorizzazione non attendono la fiducia mentre il file rimane non tracciato.** Poiché il file è vostro e non del repository, Claude Code applica le sue regole `allow` senza il passaggio [workspace trust](/docs/it/permissions#project-allow-rules-and-workspace-trust) che richiede per il file sottoposto a commit. Se il file è tracciato da git, il passaggio di fiducia si applica anche ad esso; vedete [When your local settings file needs trust](/docs/it/permissions#when-your-local-settings-file-needs-trust).477* **Le sue regole allow non attendono l'attendibilità finché il file resta non tracciato.** Poiché il file è tuo e non del repository, Claude Code applica le sue regole `allow` senza il passaggio di [attendibilità del workspace](/docs/it/permissions#project-allow-rules-and-workspace-trust) che richiede per il file sottoposto a commit. Se il file è tracciato da git, il passaggio di attendibilità si applica anche a esso; consulta [Quando il tuo file di impostazioni locali richiede l'attendibilità](/docs/it/permissions#when-your-local-settings-file-needs-trust).

478 478 

479<span id="where-claude-code-looks-for-each-file" />479<span id="where-claude-code-looks-for-each-file" />

480 480 


486 Dove Claude Code mantiene il file locale in un repository git486 Dove Claude Code mantiene il file locale in un repository git

487</h4>487</h4>

488 488 

489Quando Claude chiede il permesso di eseguire un comando Bash e scegliete "Sì, e non chiedere di nuovo", Claude Code salva quella approvazione come una regola `allow` in `.claude/settings.local.json`. Se avviate Claude Code in una sottodirectory di un repository git, legge e scrive quel file alla radice del repository e applica l'approvazione in tutto il repository. In un [worktree](/docs/it/worktrees), utilizza il file alla radice del checkout principale.489Quando Claude chiede il permesso di eseguire un comando Bash e scegli "Sì, e non chiedere di nuovo", Claude Code salva quell'approvazione come regola `allow` in `.claude/settings.local.json`. Se avvii Claude Code in una sottodirectory di un repository git, legge e scrive quel file nella radice del repository e applica l'approvazione all'intero repository. In un [worktree](/docs/it/worktrees), utilizza il file nella radice del checkout principale.

490 490 

491Due regole qualificano la posizione della radice:491Due regole precisano la posizione nella radice:

492 492 

493* **Quando il file rimane con `.claude/settings.json` invece**: fuori da un repository git, quando la radice del repository è la vostra home directory, su Windows, o quando la radice del repository o la sua voce `.git` o `.claude` non è di proprietà del vostro utente.493* **Quando il file resta invece accanto a `.claude/settings.json`**: fuori da un repository git, quando la radice del repository è la tua directory home, su Windows, oppure quando la radice del repository o la sua voce `.git` o `.claude` non è di proprietà del tuo utente.

494* **I percorsi nel file non si ancorano alla radice del repository**: una regola di autorizzazione che inizia con `/` o un percorso sandbox relativo [si ancora alla directory di lavoro primaria della sessione](/docs/it/permissions#read-and-edit) invece.494* **I percorsi nel file non si ancorano alla radice del repository**: una regola di permesso che inizia con `/` o un percorso sandbox relativo [si ancora invece alla directory di lavoro primaria della sessione](/docs/it/permissions#read-and-edit).

495 495 

496Prima della v2.1.211, Claude Code manteneva il file nella directory di avvio. Legge ancora un file che una versione precedente ha lasciato lì accanto al file radice; dove entrambi impostano la stessa chiave, il valore della radice si applica, e le regole di autorizzazione da entrambi i file si applicano. L'helper [`resolveSettings()`](/docs/it/agent-sdk/typescript#resolvesettings) dell'Agent SDK legge sempre il file dalla directory di avvio.496Prima della v2.1.211, Claude Code manteneva il file nella directory di avvio. Legge ancora un file lasciato lì da una versione precedente insieme al file nella radice; dove entrambi impostano la stessa chiave, si applica il valore della radice, e si applicano le regole di permesso di entrambi i file. L'helper [`resolveSettings()`](/docs/it/agent-sdk/typescript#resolvesettings) dell'Agent SDK legge sempre il file dalla directory di avvio.

497 497 

498Claude Code legge il `.claude/settings.json` condiviso dalla [directory di lavoro primaria](/docs/it/permissions#working-directories) della sessione, quindi per utilizzare un file sottoposto a commit alla radice del repository, avviate Claude Code lì. Dopo aver [spostato la sessione con `/cd`](/docs/it/permissions#move-the-session-to-another-directory), Claude Code legge entrambi i file del progetto dalla nuova directory invece, posizionando il file locale secondo le stesse regole. Leggerli dalla directory in cui vi siete spostati richiede Claude Code v2.1.246 o successivo.498Claude Code legge il `.claude/settings.json` condiviso dalla [directory di lavoro primaria](/docs/it/permissions#working-directories) della sessione, quindi per utilizzare un file sottoposto a commit nella radice del repository, avvia Claude Code lì. Dopo aver [spostato la sessione con `/cd`](/docs/it/permissions#move-the-session-to-another-directory), Claude Code legge invece entrambi i file di progetto dalla nuova directory, posizionando il file locale secondo le stesse regole. Leggerli dalla directory in cui ti sei spostato richiede Claude Code v2.1.246 o successivo.

499 499 

500<span id="managed-settings-delivery" />500<span id="managed-settings-delivery" />

501 501 


508<span id="settings-your-organization-manages" />508<span id="settings-your-organization-manages" />

509 509 

510<h3 id="check-what-your-organization-enforces">510<h3 id="check-what-your-organization-enforces">

511 Verificare cosa la vostra organizzazione applica511 Verificare cosa impone la tua organizzazione

512</h3>512</h3>

513 513 

514Se la vostra organizzazione gestisce Claude Code, alcune impostazioni sono decise per voi e nulla di quello che mettete nei vostri file cambia loro. Per vedere quali, eseguite `/status`: la riga `Setting sources` nomina la fonte gestita che si applica a voi. Le impostazioni gestite si applicano ovunque Claude Code funzioni su questa macchina; [What a developer can change](/docs/it/managed-settings#what-a-developer-can-change) copre i diritti di amministratore locale e gli strumenti diversi da Claude Code.514Se la tua organizzazione gestisce Claude Code, alcune impostazioni sono decise per te e nulla di ciò che inserisci nei tuoi file le modifica. Per vedere quali, esegui `/status`: la riga `Setting sources` indica la fonte gestita che si applica a te. Le impostazioni gestite si applicano ovunque Claude Code venga eseguito su questa macchina; [Cosa può modificare uno sviluppatore](/docs/it/managed-settings#what-a-developer-can-change) tratta i diritti di amministratore locale e gli strumenti diversi da Claude Code.

515 515 

516Le impostazioni gestite vi raggiungono attraverso i [delivery mechanisms](/docs/it/managed-settings#delivery-mechanisms) sulla pagina delle impostazioni gestite, più comunemente:516Le impostazioni gestite ti raggiungono attraverso i [meccanismi di distribuzione](/docs/it/managed-settings#delivery-mechanisms) descritti nella pagina delle impostazioni gestite, più comunemente:

517 517 

518* [Server-managed settings](/docs/it/server-managed-settings), che Claude Code recupera dalla console di amministrazione claude.ai o da un [Claude apps gateway](/docs/it/claude-apps-gateway) auto-ospitato518* [Impostazioni gestite dal server](/docs/it/server-managed-settings), che Claude Code recupera dalla console di amministrazione claude.ai o da un [gateway Claude apps](/docs/it/claude-apps-gateway) self-hosted

519* Politiche MDM o a livello di sistema operativo, e file `managed-settings.json` in una directory di sistema519* Politiche MDM o a livello di sistema operativo, e file `managed-settings.json` in una directory di sistema

520* Un host di incorporamento come Claude Desktop, attraverso l'opzione SDK `managedSettings`; vedete [Control policy from an embedding host](/docs/it/managed-settings#parent-settings-from-embedding-hosts)520* Un host di incorporamento come Claude Desktop, tramite l'opzione `managedSettings` dell'SDK; consulta [Controllare le politiche da un host di incorporamento](/docs/it/managed-settings#parent-settings-from-embedding-hosts)

521 521 

522In una sessione [Cowork](https://claude.com/docs/cowork/overview) che funziona sulla vostra macchina nell'app Claude Desktop, Claude Code non recupera le impostazioni gestite dal server dalla console di amministrazione claude.ai, e legge la politica distribuita al vostro dispositivo a meno che la configurazione Claude Desktop della vostra organizzazione non imposti `requireCoworkFullVmSandbox`. [Where and when a policy applies](/docs/it/managed-settings#where-and-when-a-policy-applies) copre Cowork e le sessioni cloud.522In una sessione [Cowork](https://claude.com/docs/cowork/overview) eseguita sulla tua macchina nell'app Claude Desktop, Claude Code non recupera le impostazioni gestite dal server dalla console di amministrazione claude.ai, e legge le politiche distribuite al tuo dispositivo a meno che la configurazione di Claude Desktop della tua organizzazione non imposti `requireCoworkFullVmSandbox`. [Dove e quando si applica una politica](/docs/it/managed-settings#where-and-when-a-policy-applies) tratta Cowork e le sessioni cloud.

523 523 

524Se siete l'amministratore, [Set up Claude Code for your organization](/docs/it/admin-setup) vi guida attraverso la scelta di cosa applicare, e [Deploy managed settings](/docs/it/managed-settings) copre la distribuzione e come confermare che una politica è in vigore.524Se sei l'amministratore, [Configurare Claude Code per la tua organizzazione](/docs/it/admin-setup) ti guida nella scelta di cosa imporre, e [Distribuire le impostazioni gestite](/docs/it/managed-settings) tratta la distribuzione e come confermare che una politica è in vigore. Per l'avviso che l'editor delle impostazioni gestite nella console di amministrazione claude.ai può mostrare, consulta [Configurare le impostazioni gestite dal server](/docs/it/server-managed-settings#configure-server-managed-settings).

525 525 

526<h2 id="change-a-setting">526<h2 id="change-a-setting">

527 Modificate un'impostazione527 Modificate un'impostazione


809 809 

810Una [sessione cloud](/docs/it/claude-code-on-the-web) viene eseguita in un [ambiente cloud](/docs/it/cloud-environments) su un clone fresco del vostro repository, non sulla vostra macchina. Questo cambia quali impostazioni la raggiungono:810Una [sessione cloud](/docs/it/claude-code-on-the-web) viene eseguita in un [ambiente cloud](/docs/it/cloud-environments) su un clone fresco del vostro repository, non sulla vostra macchina. Questo cambia quali impostazioni la raggiungono:

811 811 

812* **Impostazioni di progetto condivise** (`.claude/settings.json`): lette in una sessione con un repository, perché il file fa parte del clone e la sessione inizia al suo interno. Committate un'impostazione lì per applicarla in quelle sessioni. Una sessione con più repository inizia sopra i clone e legge solo i tasti `enabledPlugins` e `extraKnownMarketplaces` da ogni `.claude/settings.json` del repository, non le regole di permesso, gli hook, `env` o altre chiavi. I marketplace e i plugin che questi due tasti dichiarano ancora [non si caricano in una sessione cloud](/docs/it/cloud-environments#what-carries-over-from-your-setup).812* **Impostazioni di progetto condivise** (`.claude/settings.json`): lette in una sessione con un repository, perché il file fa parte del clone e la sessione inizia al suo interno. Esegui il commit di un'impostazione lì per applicarla in quelle sessioni. In un ambiente ospitato da Anthropic, una sessione con più repository inizia sopra i clone e legge solo le chiavi `enabledPlugins` e `extraKnownMarketplaces` dal `.claude/settings.json` di ogni repository, non le regole di permesso, gli hook, `env` o altre chiavi. I marketplace e i plugin che queste due chiavi dichiarano comunque [non si caricano in una sessione cloud](/docs/it/cloud-environments#what-carries-over-from-your-setup). Per un ambiente auto-ospitato, consulta [quali impostazioni del repository si applicano](/docs/it/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

813* **Impostazioni utente e di progetto locale** (`~/.claude/settings.json` e `.claude/settings.local.json`): non lette. Entrambe rimangono sulla vostra macchina, e il file locale non è nel clone.813* **Impostazioni utente e di progetto locale** (`~/.claude/settings.json` e `.claude/settings.local.json`): non lette. Entrambe rimangono sulla vostra macchina, e il file locale non è nel clone.

814* **Impostazioni gestite**: un file `managed-settings.json` o un profilo MDM sul vostro dispositivo non raggiunge una sessione cloud. Le [impostazioni gestite dal server](/docs/it/server-managed-settings) della vostra organizzazione lo fanno; la [copertura della superficie](/docs/it/model-config#surface-coverage) elenca quali sessioni cloud le ricevono. Un [ambiente auto-ospitato](/docs/it/self-hosted-environments) legge anche il file di impostazioni gestite nella sua immagine di runner. [Come Claude Code combina le fonti gestite](/docs/it/managed-settings#how-claude-code-combines-managed-sources) dice quando quel file si applica.814* **Impostazioni gestite**: un file `managed-settings.json` o un profilo MDM sul vostro dispositivo non raggiunge una sessione cloud. Le [impostazioni gestite dal server](/docs/it/server-managed-settings) della vostra organizzazione lo fanno; la [copertura della superficie](/docs/it/model-config#surface-coverage) elenca quali sessioni cloud le ricevono. Un [ambiente auto-ospitato](/docs/it/self-hosted-environments) legge anche il file di impostazioni gestite nella sua immagine di runner. [Come Claude Code combina le fonti gestite](/docs/it/managed-settings#how-claude-code-combines-managed-sources) dice quando quel file si applica.

815* **`/config`**: nel vostro browser su claude.ai/code, apre la sezione Claude Code delle vostre impostazioni claude.ai invece di modificare un valore. Per modificare un'impostazione per una sessione cloud, impostate una [variabile di ambiente](/docs/it/cloud-environments#set-environment-variables) sull'ambiente, o in una sessione con un repository, committate la chiave al `.claude/settings.json` di quel repository.815* **`/config`**: nel vostro browser su claude.ai/code, apre la sezione Claude Code delle vostre impostazioni claude.ai invece di modificare un valore. Per modificare un'impostazione per una sessione cloud, impostate una [variabile di ambiente](/docs/it/cloud-environments#set-environment-variables) sull'ambiente, o in una sessione con un repository, committate la chiave al `.claude/settings.json` di quel repository.

skills.md +2 −0

Details

94| `migrate` | Aggiornare il vostro codice Claude API esistente a un modello più recente | Precedente a v2.1.221 |94| `migrate` | Aggiornare il vostro codice Claude API esistente a un modello più recente | Precedente a v2.1.221 |

95| `upgrade` | Spostare la dipendenza SDK Anthropic del vostro progetto attraverso una versione principale, attualmente il pacchetto Python `anthropic` da 0.x a 1.x | v2.1.236 o successivo |95| `upgrade` | Spostare la dipendenza SDK Anthropic del vostro progetto attraverso una versione principale, attualmente il pacchetto Python `anthropic` da 0.x a 1.x | v2.1.236 o successivo |

96| `managed-agents-onboard` | Guidarvi attraverso la creazione di un nuovo Managed Agent | Precedente a v2.1.221 |96| `managed-agents-onboard` | Guidarvi attraverso la creazione di un nuovo Managed Agent | Precedente a v2.1.221 |

97| `managed-agents-onboard <url>` | Crea il Managed Agent descritto dalla pagina all'URL, ad esempio una pagina della [documentazione di Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) | v2.1.290 o successivo |

98| `managed-agents-onboard <quickstart-name>` | Crea uno dei template di guida rapida della Console, come `deep-researcher`. Se indichi una sola parola che non è il nome di un template, Claude elenca i nomi validi | v2.1.290 o successivo |

97| `prompt-audit` | Contrassegnare le istruzioni scritte per modelli più vecchi nei vostri prompt, skill e descrizioni di strumenti e proporre correzioni come diff | v2.1.221 o successivo |99| `prompt-audit` | Contrassegnare le istruzioni scritte per modelli più vecchi nei vostri prompt, skill e descrizioni di strumenti e proporre correzioni come diff | v2.1.221 o successivo |

98| `cost-optimize` | Profilare dove va la spesa Claude API del vostro progetto e proporre risparmi da opzioni come prompt caching, riduzione di token di input e output non necessari, batch processing, effort, e scelta del modello, una modifica alla volta | v2.1.247 o successivo |100| `cost-optimize` | Profilare dove va la spesa Claude API del vostro progetto e proporre risparmi da opzioni come prompt caching, riduzione di token di input e output non necessari, batch processing, effort, e scelta del modello, una modifica alla volta | v2.1.247 o successivo |

99| `build-eval` | Costruire un set di eval per la vostra app basata su Claude | v2.1.259 o successivo |101| `build-eval` | Costruire un set di eval per la vostra app basata su Claude | v2.1.259 o successivo |

sub-agents.md +4 −2

Details

609La modalità di autorizzazione della conversazione principale decide se Claude Code utilizza il valore che imposta:609La modalità di autorizzazione della conversazione principale decide se Claude Code utilizza il valore che imposta:

610 610 

611* Quando la conversazione principale è in `bypassPermissions`, `acceptEdits`, o [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode), il subagent viene eseguito in quella stessa modalità e Claude Code ignora il `permissionMode` che imposta. Sotto auto mode, il classificatore valuta le chiamate di strumenti del subagent con le regole di blocco e consentimento della conversazione principale. Quando il subagent finisce, il classificatore esamina anche il suo lavoro e il suo rapporto finale prima che il rapporto venga consegnato, come [Come auto mode gestisce i subagent](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) descrive.611* Quando la conversazione principale è in `bypassPermissions`, `acceptEdits`, o [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode), il subagent viene eseguito in quella stessa modalità e Claude Code ignora il `permissionMode` che imposta. Sotto auto mode, il classificatore valuta le chiamate di strumenti del subagent con le regole di blocco e consentimento della conversazione principale. Quando il subagent finisce, il classificatore esamina anche il suo lavoro e il suo rapporto finale prima che il rapporto venga consegnato, come [Come auto mode gestisce i subagent](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) descrive.

612* Quando la conversazione principale è in modalità `default`, `dontAsk`, o `plan`, il subagent viene eseguito nella modalità di autorizzazione che imposta, tranne `bypassPermissions`. Un subagent che dichiara `bypassPermissions` mantiene la modalità della conversazione principale. L'eccezione `bypassPermissions` richiede Claude Code v2.1.267 o successivo.612* Quando la conversazione principale è in modalità `default`, `dontAsk` o `plan`, il subagent viene eseguito nella modalità di permesso che imposti. Mantiene invece la modalità di permesso della conversazione principale in questi casi:

613 * Imposti `bypassPermissions`. L'eccezione per `bypassPermissions` richiede Claude Code v2.1.267 o successivo.

614 * Imposti `auto` e la [modalità auto non è disponibile](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) per il subagent, ad esempio quando un file di impostazioni imposta [`disableAutoMode`](/docs/it/settings-reference#disableautomode) o il modello del subagent non supporta la modalità auto.

613 615 

614`permissionMode` accetta questi valori, e `manual` come alias per `default`:616`permissionMode` accetta questi valori, e `manual` come alias per `default`:

615 617 


640Implement API endpoints. Follow the conventions and patterns from the preloaded skills.642Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

641```643```

642 644 

643Il contenuto completo di ogni skill elencata viene iniettato nel contesto del subagent all'avvio. Questo campo controlla quali skills vengono precaricate, non quali skills il subagent può accedere: senza di esso, il subagent può comunque scoprire e invocare skills di progetto, utente e plugin tramite lo strumento Skill durante l'esecuzione. Per impedire a un subagent di invocare skills interamente, ometta `Skill` dall'elenco [`tools`](#available-tools) o aggiunga a `disallowedTools`.645Il contenuto completo di ogni skill elencata viene iniettato nel contesto del subagent all'avvio, fino ai primi 32 nomi distinti dell'elenco. Questo campo controlla quali skill vengono precaricate, non a quali skill il subagent può accedere: senza di esso, il subagent può comunque individuare e invocare skill di progetto, utente e plugin tramite lo strumento Skill durante l'esecuzione. Per impedire del tutto a un subagent di invocare skill, ometti `Skill` dall'elenco [`tools`](#available-tools) o aggiungilo a `disallowedTools`.

644 646 

645Non puoi precaricare skill che impostano [`disable-model-invocation: true`](/docs/it/skills#control-who-invokes-a-skill), poiché il precaricamento attinge dallo stesso insieme di skill che Claude può invocare. Questo include la skill inclusa `/verify`, che Claude non può eseguire di propria iniziativa.647Non puoi precaricare skill che impostano [`disable-model-invocation: true`](/docs/it/skills#control-who-invokes-a-skill), poiché il precaricamento attinge dallo stesso insieme di skill che Claude può invocare. Questo include la skill inclusa `/verify`, che Claude non può eseguire di propria iniziativa.

646 648 

Details

666 666 

667* WebFetch rifiuta `localhost` e qualsiasi altro nome host senza un punto, come un nome intranet nudo, prima di effettuare una richiesta. L'[errore che restituisce](/docs/it/errors#webfetch-cannot-fetch-localhost) dice a Claude di raggiungere i server locali con `curl` tramite Bash invece.667* WebFetch rifiuta `localhost` e qualsiasi altro nome host senza un punto, come un nome intranet nudo, prima di effettuare una richiesta. L'[errore che restituisce](/docs/it/errors#webfetch-cannot-fetch-localhost) dice a Claude di raggiungere i server locali con `curl` tramite Bash invece.

668* Gli URL HTTP vengono automaticamente aggiornati a HTTPS.668* Gli URL HTTP vengono automaticamente aggiornati a HTTPS.

669* Le pagine grandi vengono troncate a un limite di caratteri fisso prima dell'elaborazione.669* WebFetch legge fino a 100.000 caratteri del contenuto di una pagina per chiamata. Su Claude Code v2.1.290 o versioni successive, il risultato per una pagina più lunga indica a Claude quanta parte non è stata letta, così Claude può recuperare la parte successiva.

670* WebFetch memorizza nella cache ogni risposta per 15 minuti per impostazione predefinita, quindi i recuperi ripetuti dello stesso URL vengono restituiti rapidamente. Su Claude Code v2.1.233 o versioni successive, impostare [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/it/env-vars#variables) per modificare il tempo in cui WebFetch mantiene ogni risposta.670* WebFetch memorizza nella cache ogni risposta per 15 minuti per impostazione predefinita, quindi i recuperi ripetuti dello stesso URL vengono restituiti rapidamente. Su Claude Code v2.1.233 o versioni successive, impostare [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/it/env-vars#variables) per modificare il tempo in cui WebFetch mantiene ogni risposta.

671* Una pagina che non ha terminato il download entro cinque minuti, inclusi tutti i reindirizzamenti che WebFetch segue, fallisce con un errore di deadline. Su Claude Code v2.1.268 o versioni successive, impostare [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/it/env-vars#variables) per modificare il limite, o a `0` per rimuoverlo.671* Una pagina che non ha terminato il download entro cinque minuti, inclusi tutti i reindirizzamenti che WebFetch segue, fallisce con un errore di deadline. Su Claude Code v2.1.268 o versioni successive, impostare [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/it/env-vars#variables) per modificare il limite, o a `0` per rimuoverlo.

672* Quando un URL reindirizza a un host diverso, WebFetch restituisce un risultato di testo che nomina l'URL originale e la destinazione del reindirizzamento invece di seguirlo. Claude quindi recupera il nuovo URL con una seconda chiamata WebFetch.672* Quando un URL reindirizza a un host diverso, WebFetch restituisce un risultato di testo che nomina l'URL originale e la destinazione del reindirizzamento invece di seguirlo. Claude quindi recupera il nuovo URL con una seconda chiamata WebFetch.

ultrareview.md +6 −6

Details

56 Esamina una pull request56 Esamina una pull request

57</h3>57</h3>

58 58 

59Per esaminare una pull request di GitHub invece di un branch locale, passa il numero della PR:59Per esaminare una pull request su `github.com` invece di un branch locale, passa il numero della PR:

60 60 

61```text theme={null}61```text theme={null}

62/code-review ultra 123462/code-review ultra 1234


64 64 

65Il comando accetta anche `#1234`, `PR 1234` e URL di PR incollati; un URL incollato deve puntare al repository nella tua directory attuale.65Il comando accetta anche `#1234`, `PR 1234` e URL di PR incollati; un URL incollato deve puntare al repository nella tua directory attuale.

66 66 

67In modalità PR, la sandbox cloud clona la pull request direttamente dall'host invece di raggruppare il tuo albero di lavoro locale. La modalità PR funziona con i repository su `github.com` e sulle istanze di [GitHub Enterprise Server](/docs/it/github-enterprise-server) che un Owner ha collegato a Claude Code.67La modalità PR richiede un repository su `github.com`. Per un repository su un'istanza di [GitHub Enterprise Server](/docs/it/github-enterprise-server), esegui invece `/code-review ultra` senza un numero di PR per esaminare il tuo branch locale.

68 68 

69Per i repository su `github.com`, la sandbox clona con l'account GitHub collegato al tuo account Claude, quindi l'account deve poter leggere il repository della PR.69In modalità PR, la sandbox cloud clona la pull request da `github.com` invece di caricare il tuo albero di lavoro. Usa l'account GitHub collegato al tuo account Claude, quindi quell'account deve avere accesso in lettura al repository.

70 70 

71Esegui [`/web-setup`](/docs/it/web-quickstart#connect-from-your-terminal) per collegare il tuo login della GitHub CLI al tuo account Claude.71Esegui [`/web-setup`](/docs/it/web-quickstart#connect-from-your-terminal) per collegare il tuo login della GitHub CLI al tuo account Claude.

72 72 


74 Pubblica i risultati sulla pull request74 Pubblica i risultati sulla pull request

75</h3>75</h3>

76 76 

77Su Claude Code v2.1.227 o successivo, quando esamini una pull request su `github.com`, puoi fare in modo che Claude pubblichi i risultati finali sulla PR come un singolo commento semplice dal tuo account GitHub. Il commento non è una review né un'approvazione, e termina con una nota "Generated by Claude Code". Quando esamini un branch o una pull request di GitHub Enterprise Server, Claude Code mostra i risultati solo nella tua sessione.77Su Claude Code v2.1.227 o successivo, quando esamini una pull request su `github.com`, puoi fare in modo che Claude pubblichi i risultati finali sulla PR come un singolo commento semplice dal tuo account GitHub. Il commento non è una review né un'approvazione, e termina con una nota "Generated by Claude Code". Quando esamini un branch, Claude Code mostra i risultati solo nella tua sessione.

78 78 

79Claude Code non pubblica mai a meno che tu non lo scelga per quell'esecuzione, e `--no-post` è l'impostazione predefinita. La pubblicazione è una scelta che fai per ogni esecuzione:79Claude Code non pubblica mai a meno che tu non lo scelga per quell'esecuzione, e `--no-post` è l'impostazione predefinita. La pubblicazione è una scelta che fai per ogni esecuzione:

80 80 


106Claude Code tratta il tuo testo come nota solo quando contiene più di una parola e non è un nome di branch o un riferimento a una PR. Interpreta una singola parola come nome di branch o riferimento a una PR, quindi un nome di branch digitato male produce l'errore del branch più simile descritto in [Revisione rispetto a una base diversa](#review-against-a-different-base) invece di avviare la revisione con una nota. Se il tuo testo combina un riferimento a una PR con altre parole, come `check PR 123 again`, Claude Code non avvia nemmeno la revisione; ti chiede di rieseguire il comando con il solo numero della PR per esaminare quella PR, oppure senza il riferimento per esaminare il tuo branch attuale.106Claude Code tratta il tuo testo come nota solo quando contiene più di una parola e non è un nome di branch o un riferimento a una PR. Interpreta una singola parola come nome di branch o riferimento a una PR, quindi un nome di branch digitato male produce l'errore del branch più simile descritto in [Revisione rispetto a una base diversa](#review-against-a-different-base) invece di avviare la revisione con una nota. Se il tuo testo combina un riferimento a una PR con altre parole, come `check PR 123 again`, Claude Code non avvia nemmeno la revisione; ti chiede di rieseguire il comando con il solo numero della PR per esaminare quella PR, oppure senza il riferimento per esaminare il tuo branch attuale.

107 107 

108<Tip>108<Tip>

109 Se il tuo repository è troppo grande per essere raggruppato, Claude Code ti chiede di usare invece la modalità PR. Esegui il push del tuo branch e apri una PR in bozza, quindi esegui `/code-review ultra <PR-number>`.109 Se il tuo repository è troppo grande per essere raggruppato, Claude Code ti chiede di usare invece la modalità PR. Per un repository su `github.com`, esegui il push del tuo branch e apri una PR in bozza, quindi esegui `/code-review ultra <PR-number>`.

110</Tip>110</Tip>

111 111 

112<h3 id="diff-limits-and-fallbacks">112<h3 id="diff-limits-and-fallbacks">


173claude ultrareview origin/main173claude ultrareview origin/main

174```174```

175 175 

176Senza argomenti, il sottocomando esamina il diff tra il tuo branch corrente e il branch predefinito, con lo stesso [fallback sull'intero repository](#diff-limits-and-fallbacks) di `/code-review ultra` quando non esiste una base di merge. Passa un numero di PR per esaminare una pull request, oppure un branch di base per eseguire la revisione rispetto a quello; la [gestione del branch di base](#review-against-a-different-base) corrisponde a quella del comando interattivo.176Senza argomenti, il sottocomando esamina il diff tra il tuo branch corrente e il branch predefinito, con lo stesso [fallback sull'intero repository](#diff-limits-and-fallbacks) di `/code-review ultra` quando non esiste una base di merge. Passa un numero di PR per [esaminare una pull request su `github.com`](#review-a-pull-request), oppure un branch di base per eseguire la revisione rispetto a quello; la [gestione del branch di base](#review-against-a-different-base) corrisponde a quella del comando interattivo.

177 177 

178Quando esegui il sottocomando, acconsenti al fallback sull'intero repository e al prompt relativo a fatturazione e termini, quindi l'esecuzione parte senza attendere input. È il fatto di eseguirlo tu stesso a valere come consenso. Quando invece è Claude a eseguire il sottocomando per te, ad esempio tramite lo strumento Bash, Claude Code rifiuta la revisione dell'intero repository.178Quando esegui il sottocomando, acconsenti al fallback sull'intero repository e al prompt relativo a fatturazione e termini, quindi l'esecuzione parte senza attendere input. È il fatto di eseguirlo tu stesso a valere come consenso. Quando invece è Claude a eseguire il sottocomando per te, ad esempio tramite lo strumento Bash, Claude Code rifiuta la revisione dell'intero repository.

179 179 

vs-code.md +1 −0

Details

166* **Bookmarks**: passa il mouse su una risposta e fai clic su **Bookmark response** per salvarla, oppure fai clic su **Remove bookmark** su una risposta salvata per rimuoverla.166* **Bookmarks**: passa il mouse su una risposta e fai clic su **Bookmark response** per salvarla, oppure fai clic su **Remove bookmark** su una risposta salvata per rimuoverla.

167 167 

168 Per rivedere le risposte salvate, apri il pannello Bookmarks: fai clic sull'icona del segnalibro nella parte superiore del pannello Claude Code, seleziona **Bookmarks** nella sezione Context del menu dei comandi, o digita `/bookmarks`. Richiede Claude Code v2.1.286 o successivo.168 Per rivedere le risposte salvate, apri il pannello Bookmarks: fai clic sull'icona del segnalibro nella parte superiore del pannello Claude Code, seleziona **Bookmarks** nella sezione Context del menu dei comandi, o digita `/bookmarks`. Richiede Claude Code v2.1.286 o successivo.

169* **Files Claude sends you**: quando la sessione è connessa a [Remote Control](/docs/it/remote-control#start-a-remote-control-session) e Claude ti invia file con lo [strumento `SendUserFile`](/docs/it/tools-reference), la conversazione mostra una riga come **Sent report.md, chart.png**. Fai clic sul nome di un file per aprirlo nell'editor.

169* **Context indicator**: la casella di prompt mostra quanto della finestra di contesto di Claude stai utilizzando. Claude compatta automaticamente quando necessario, oppure puoi eseguire `/compact` manualmente.170* **Context indicator**: la casella di prompt mostra quanto della finestra di contesto di Claude stai utilizzando. Claude compatta automaticamente quando necessario, oppure puoi eseguire `/compact` manualmente.

170* **Prompt cache clock**: un'icona di orologio accanto all'indicatore di contesto stima quanto tempo rimane alla [prompt cache](/docs/it/prompt-caching) della conversazione prima che scada. Fa il conto alla rovescia dalla [durata](/docs/it/prompt-caching#cache-lifetime) della cache di cinque minuti o un'ora, e ogni risposta che utilizza la cache riavvia il conto alla rovescia. A parte la compattazione, le [azioni che invalidano la cache](/docs/it/prompt-caching#actions-that-invalidate-the-cache) non ripristinano l'orologio, quindi può ancora mostrare minuti rimasti dopo che cambi modelli.171* **Prompt cache clock**: un'icona di orologio accanto all'indicatore di contesto stima quanto tempo rimane alla [prompt cache](/docs/it/prompt-caching) della conversazione prima che scada. Fa il conto alla rovescia dalla [durata](/docs/it/prompt-caching#cache-lifetime) della cache di cinque minuti o un'ora, e ogni risposta che utilizza la cache riavvia il conto alla rovescia. A parte la compattazione, le [azioni che invalidano la cache](/docs/it/prompt-caching#actions-that-invalidate-the-cache) non ripristinano l'orologio, quindi può ancora mostrare minuti rimasti dopo che cambi modelli.

171 * Fino a quando il conto alla rovescia non termina, l'icona mostra i minuti rimasti, come **12m**.172 * Fino a quando il conto alla rovescia non termina, l'icona mostra i minuti rimasti, come **12m**.

workflows.md +27 −1

Details

354 354 

355Il corpo è JavaScript semplice con `await` di livello superiore. `agent()` genera un subagente, `pipeline()` ne esegue uno per elemento in un elenco, e `parallel()` esegue un insieme di attività di agente contemporaneamente e attende che tutte si completino.355Il corpo è JavaScript semplice con `await` di livello superiore. `agent()` genera un subagente, `pipeline()` ne esegue uno per elemento in un elenco, e `parallel()` esegue un insieme di attività di agente contemporaneamente e attende che tutte si completino.

356 356 

357Una chiamata `agent()` si risolve in `null` se la interrompi a metà esecuzione o se raggiunge un errore API irrecuperabile. `pipeline()` mantiene ogni `null` nell'array dei risultati, motivo per cui l'esempio termina con `.filter(Boolean)` per eliminare quelle voci.357Una chiamata `agent()` si risolve in `null` se la interrompi a metà esecuzione o se raggiunge un errore API irrecuperabile. `pipeline()` mantiene ogni `null` nell'array dei risultati, motivo per cui l'esempio termina con `.filter(Boolean)` per eliminare quelle voci, incluso lo slot di [un agente che si è bloccato a ogni tentativo](#when-an-agent-stalls-and-restarts).

358 358 

359In [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode), il prompt che il tuo script passa a `agent()` non conta come una richiesta da te quando il classificatore esamina le azioni di quel subagente, perché Claude Code lo contrassegna come testo che lo script ha calcolato.359In [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode), il prompt che il tuo script passa a `agent()` non conta come una richiesta da te quando il classificatore esamina le azioni di quel subagente, perché Claude Code lo contrassegna come testo che lo script ha calcolato.

360 360 


463* Il limite si ripristina entro 24 ore. Un limite settimanale può ripristinarsi più avanti.463* Il limite si ripristina entro 24 ore. Un limite settimanale può ripristinarsi più avanti.

464* L'esecuzione non ha già aspettato due volte. Quando raggiunge il limite una terza volta, l'agente fallisce.464* L'esecuzione non ha già aspettato due volte. Quando raggiunge il limite una terza volta, l'agente fallisce.

465 465 

466<h3 id="when-an-agent-stalls-and-restarts">

467 Quando un agente si blocca e si riavvia

468</h3>

469 

470Un agente il cui output smette di arrivare per un tempo sufficientemente lungo ricomincia dallo stesso prompt. In [`/workflows`](#watch-the-run), al suo nome viene aggiunto il suffisso `(retry 1)` e il suo dettaglio mostra `attempt 2 (stalled)`. Il riavvio è automatico, quindi non devi fare nulla.

471 

472Il nuovo tentativo parte senza la trascrizione del tentativo bloccato. I file che il tentativo bloccato ha già modificato restano modificati, e i token che ha speso restano nel totale dell'esecuzione. La finestra di stallo è il tempo per cui Claude Code attende output da un agente prima di terminare il tentativo. Il tempo che l'agente trascorre in attesa delle proprie chiamate agli strumenti o del [ripristino di un limite di utilizzo](#when-a-run-hits-your-usage-limit) non conta ai fini della finestra di stallo.

473 

474Un agente si riavvia al massimo cinque volte, contando qualsiasi riavvio che richiedi con `r`. Se anche il sesto tentativo si blocca, la chiamata `agent()` fallisce, e l'inizio dell'errore ne indica il motivo:

475 

476* `agent stalled on all 6 attempts`: ogni tentativo ha trascorso l'intera finestra senza output. Se il lavoro dell'agente lo mantiene silenzioso così a lungo, allunga la finestra

477* `agent lost its reply on all 6 attempts`: lo stream della risposta di ogni tentativo è diventato silenzioso e Claude Code ha smesso di attenderlo. Allungare la finestra di stallo non aiuta, poiché un [watchdog di inattività dello streaming](/docs/it/network-config#streaming-idle-watchdogs) ha terminato prima la risposta e `CLAUDE_STREAM_IDLE_TIMEOUT_MS` imposta il timeout di quel watchdog

478* `agent abandoned after 6 attempts`: i tentativi sono terminati in modi diversi, che l'errore elenca in ordine

479 

480Per dare a un agente più tempo per produrre output prima che la finestra termini:

481 

482* **Un agente**: passa `stallMs` in millisecondi nella sua chiamata `agent()`, ad esempio `agent(prompt, { stallMs: 1800000 })` per 30 minuti

483* **Ogni agente**: imposta [`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`](/docs/it/env-vars#variables), che si applica anche ai subagent al di fuori dei workflow

484 

485Se l'esecuzione continua dopo l'errore dipende da come il tuo script ha chiamato l'agente:

486 

487* **All'interno di [`parallel()` o `pipeline()`](#what-the-saved-script-looks-like)**: l'esecuzione prosegue con `null` al posto del risultato dell'agente

488* **Atteso direttamente**: l'esecuzione termina con l'errore

489 

490Per riprovare, chiedi a Claude di riavviare il workflow. [Riprendere dopo una pausa](#resume-after-a-pause) spiega cosa viene eseguito di nuovo.

491 

466<h3 id="cost">492<h3 id="cost">

467 Costo493 Costo

468</h3>494</h3>

worktrees.md +1 −1

Details

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.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, in base alle tue impostazioni di [permessi](/docs/it/permissions) e [sandboxing](/docs/it/sandboxing).

108 108 

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.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.

110 110