SpyBara
Go Premium

Documentation 2026-10-23 22:59 UTC to 2026-10-24 22:59 UTC

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

artifacts.md +1 −3

Details

340 340 

341Claude Docs raggiunge Claude Code come un [connettore](https://code.claude.com/docs/it/mcp.md#use-mcp-servers-from-claude-ai) di claude.ai piuttosto che come un comando. Quando è connesso, `/mcp` lo elenca come `claude.ai Claude Docs`. Una richiesta per un documento destinato ad altre persone va quindi a Claude Docs invece di una pagina di artefatto: una specifica, una proposta, o una descrizione del piano che hai elaborato nella sessione. Claude ti dà il link del documento quando è stato bozzato.341Claude Docs raggiunge Claude Code come un [connettore](https://code.claude.com/docs/it/mcp.md#use-mcp-servers-from-claude-ai) di claude.ai piuttosto che come un comando. Quando è connesso, `/mcp` lo elenca come `claude.ai Claude Docs`. Una richiesta per un documento destinato ad altre persone va quindi a Claude Docs invece di una pagina di artefatto: una specifica, una proposta, o una descrizione del piano che hai elaborato nella sessione. Claude ti dà il link del documento quando è stato bozzato.

342 342 

343Un documento che appartiene al codebase, come un README, rimane un file. Per ottenere un file per qualcosa che Claude altrimenti metterebbe in Claude Docs, specifica il formato, come `.docx` o un file Markdown nel repository.343Un documento che appartiene al codebase, come un README, rimane un file. Per ottenere un file per qualcosa che Claude altrimenti metterebbe in Claude Docs, specifica il formato, come `.docx` o un file Markdown nel repository. Per disattivare solo il connettore `claude.ai Claude Docs`, consulta [Disabilita i connettori claude.ai](https://code.claude.com/docs/it/mcp.md#disable-claude-ai-connectors).

344 

345Per disattivare il connettore, aggiungi `claude.ai Claude Docs` a `deniedMcpServers` o usa l'interruttore `/mcp`, entrambi descritti in [Disabilita i connettori claude.ai](https://code.claude.com/docs/it/mcp.md#disable-claude-ai-connectors).

346 344 

347## Vincoli della pagina345## Vincoli della pagina

348 346 

Details

458 458 

459#### Come hanno effetto le chiavi di hook e skill nelle impostazioni parent459#### Come hanno effetto le chiavi di hook e skill nelle impostazioni parent

460 460 

461Se passi `disableAllHooks: true` come impostazione parent tramite l'opzione `managedSettings` dell'Agent SDK, non tutti gli hook si fermano. Le tue [callback degli hook dell'SDK](https://code.claude.com/docs/it/agent-sdk/hooks.md) continuano a essere eseguite, così come gli hook dell'amministratore, che la tua applicazione non può disattivare.461Le chiavi che la tua applicazione passa nell'opzione [`managedSettings`](https://code.claude.com/docs/it/agent-sdk/typescript#options) dell'Agent SDK sono impostazioni parent. Su una macchina in cui un amministratore distribuisce impostazioni gestite, Claude Code ignora le impostazioni parent a meno che l'amministratore non [consenta a un host di incorporamento di aggiungere policy](https://code.claude.com/docs/it/managed-settings.md#let-an-embedding-host-add-policy).

462 462 

463Su una macchina in cui un amministratore distribuisce impostazioni gestite, Claude Code ignora le impostazioni parent a meno che l'amministratore non [consenta a un host di incorporamento di aggiungere policy](https://code.claude.com/docs/it/managed-settings.md#let-an-embedding-host-add-policy).463Se passi [`disableAllHooks: true`](https://code.claude.com/docs/it/settings-reference#disableallhooks) in `managedSettings`:

464 

465* **Si fermano**: gli hook utente, di progetto e locali, più gli hook dichiarati nel frontmatter degli agenti o nell'[opzione `settings`](https://code.claude.com/docs/it/agent-sdk/typescript#options) dell'SDK.

466* **Continuano a essere eseguiti**: le [callback degli hook dell'SDK](https://code.claude.com/docs/it/agent-sdk/hooks.md) della tua applicazione e gli hook di un amministratore provenienti dalle impostazioni gestite. La tua applicazione non può disattivare gli hook dell'amministratore.

464 467 

465| Cosa passi | Cosa succede |468| Cosa passi | Cosa succede |

466| :- | :- |469| :- | :- |

467| `disableAllHooks: true` | Trattato come `allowManagedHooksOnly: true`, quindi gli hook elencati come [bloccati con `allowManagedHooksOnly`](https://code.claude.com/docs/it/settings-reference#what-runs-under-allowmanagedhooksonly) si fermano, così come gli hook nell'[opzione `settings`](https://code.claude.com/docs/it/agent-sdk/typescript#options) dell'SDK. |470| `hooks`, oppure `allowedHttpHookUrls` o `httpHookAllowedEnvVars` con voci | Claude Code ignora la chiave. Usa invece l'opzione `settings` dell'SDK. |

468| [`disableSkillShellExecution: true`](https://code.claude.com/docs/it/settings-reference#disableskillshellexecution) | Ha effetto. |

469| `allowedHttpHookUrls: []` | Ha effetto a meno che l'amministratore non definisca `hooks` o abiliti un plugin. Nessun hook HTTP viene eseguito, tranne che per gli URL elencati da un'altra sorgente di impostazioni. |471| `allowedHttpHookUrls: []` | Ha effetto a meno che l'amministratore non definisca `hooks` o abiliti un plugin. Nessun hook HTTP viene eseguito, tranne che per gli URL elencati da un'altra sorgente di impostazioni. |

470| `httpHookAllowedEnvVars: []` | Ha effetto a meno che l'amministratore non definisca `hooks` o abiliti un plugin. Le intestazioni degli hook HTTP possono includere solo variabili d'ambiente elencate da un'altra sorgente di impostazioni. |472| `httpHookAllowedEnvVars: []` | Ha effetto a meno che l'amministratore non definisca `hooks` o abiliti un plugin. Le intestazioni degli hook HTTP possono includere solo variabili d'ambiente elencate da un'altra sorgente di impostazioni. |

471| `allowedHttpHookUrls` o `httpHookAllowedEnvVars` con voci | Claude Code lo ignora, poiché il merge amplierebbe l'elenco di un amministratore. Usa invece l'opzione `settings` dell'SDK. |473| [`disableSkillShellExecution: true`](https://code.claude.com/docs/it/settings-reference#disableskillshellexecution) | Ha effetto. |

472 474 

473Passare queste chiavi in `managedSettings` richiede Claude Code v2.1.309 o successivo, oppure TypeScript Agent SDK v0.3.309 o successivo.475Passare queste chiavi in `managedSettings` richiede Claude Code v2.1.309 o successivo, oppure TypeScript Agent SDK v0.3.309 o successivo.

474 476 

Details

8 8 

9> [!NOTE]9> [!NOTE]

10>10>

11> Le sessioni cloud sono disponibili sui piani Pro, Max e Team, e per gli utenti Enterprise con posti premium o posti Chat + Claude Code. Se la tua organizzazione Enterprise gestisce il tuo accesso con [ruoli personalizzati](https://support.claude.com/en/articles/13930452), hai bisogno anche di un ruolo che includa il permesso per le sessioni cloud. Chiedi a un Owner di controllare i tuoi ruoli e di aggiungerlo in [**Organization settings > Roles**](https://claude.ai/admin-settings/roles) se manca.11> Le sessioni cloud sono disponibili sui piani Pro, Max e Team, e per gli utenti Enterprise con posti premium o posti Chat + Claude Code. Se il tuo accesso è regolato da [ruoli personalizzati](https://support.claude.com/en/articles/13930452), hai bisogno anche di un ruolo con il permesso per le sessioni cloud per avviare sessioni sull'infrastruttura di Anthropic dal browser, dalle app o dal terminale. Chiedi a un Owner di aggiungerlo a uno dei tuoi ruoli in [**Organization settings > Roles**](https://claude.ai/admin-settings/roles).

12 12 

13Una sessione cloud è una sessione Claude Code che viene eseguita su infrastruttura cloud invece che sulla tua macchina. Per impostazione predefinita viene eseguita su infrastruttura gestita da Anthropic, oppure sull'[ambiente self-hosted](https://code.claude.com/docs/it/self-hosted-environments) della tua organizzazione quando instradato lì. La sessione continua a essere eseguita dopo che chiudi il tuo laptop, e puoi controllarla o dirigerla da qualsiasi dispositivo. Viene conteggiata nei limiti di utilizzo del tuo piano insieme al resto del tuo utilizzo di Claude e Claude Code, e non c'è alcun addebito separato per la VM cloud.13Una sessione cloud è una sessione Claude Code che viene eseguita su infrastruttura cloud invece che sulla tua macchina. Per impostazione predefinita viene eseguita su infrastruttura gestita da Anthropic, oppure sull'[ambiente self-hosted](https://code.claude.com/docs/it/self-hosted-environments) della tua organizzazione quando instradato lì. La sessione continua a essere eseguita dopo che chiudi il tuo laptop, e puoi controllarla o dirigerla da qualsiasi dispositivo. Viene conteggiata nei limiti di utilizzo del tuo piano insieme al resto del tuo utilizzo di Claude e Claude Code, e non c'è alcun addebito separato per la VM cloud.

14 14 

Details

109 109 

110#### Aggiungere un segreto110#### Aggiungere un segreto

111 111 

112Aggiungi i segreti uno alla volta, e non puoi modificare un segreto dopo averlo aggiunto. Per cambiare gli host o il valore di un segreto, eliminalo e aggiungilo di nuovo.112Aggiungi i segreti uno alla volta. Per cambiare gli host o il valore di un segreto, eliminalo e aggiungilo di nuovo.

113 113 

114Per aggiungere un segreto a un [ambiente condiviso](#organization-shared-environments), aprilo per la modifica dalla pagina **Cloud environments** nelle [impostazioni di amministrazione](https://claude.ai/admin-settings), quindi prosegui dal passaggio 2 nella sua sezione **Network secrets**. Se sei su un piano Team e non detieni un [ruolo di amministratore dell'organizzazione](#requirements), segui il passaggio 1 sul tuo ambiente, quindi [compila il modulo più breve](#add-a-secret-without-the-role).114Per aggiungere un segreto a un [ambiente condiviso](#organization-shared-environments), aprilo per la modifica dalla pagina **Cloud environments** nelle [impostazioni di amministrazione](https://claude.ai/admin-settings), quindi prosegui dal passaggio 2 nella sua sezione **Network secrets**. Se sei su un piano Team e non detieni un [ruolo di amministratore dell'organizzazione](#requirements), segui il passaggio 1 sul tuo ambiente, quindi [compila il modulo più breve](#add-a-secret-without-the-role).

115 115 


119 119 

120**2. Aggiungere il segreto**120**2. Aggiungere il segreto**

121 121 

122Seleziona **Add secret** e compila il modulo. Mantieni il **Secret type** predefinito, **Bearer**, per una chiave API che viaggia in un'intestazione della richiesta, e compila questi campi:122Seleziona **Add secret**, chiamato **Add** nelle impostazioni di amministrazione, e compila il modulo. Mantieni il **Secret type** predefinito, **Bearer**, per una chiave API che viaggia in un'intestazione della richiesta, e compila questi campi:

123 123 

124* **Name**: un'etichetta per il segreto, come `Internal billing API`124* **Name**: un'etichetta per il segreto, come `Internal billing API`

125* **Allowed websites**: gli host dell'API, come `api.example.com`. Un `*.` iniziale corrisponde a ogni sottodominio125* **Allowed websites**: gli host dell'API, come `api.example.com`. Un `*.` iniziale corrisponde a ogni sottodominio


443 443 

444### Requisiti dello script444### Requisiti dello script

445 445 

446Uno script di configurazione ha tre vincoli da considerare:446Uno script di configurazione ha quattro vincoli da considerare:

447 447 

448* **Exit zero**: se lo script esce con un codice diverso da zero, la sessione non si avvia. Aggiungere `|| true` ai comandi non critici in modo che un errore di installazione intermittente non blocchi la sessione.448* **Exit zero**: se lo script esce con un codice diverso da zero, la sessione non si avvia. Aggiungere `|| true` ai comandi non critici in modo che un errore di installazione intermittente non blocchi la sessione.

449* **Completamento entro cinque minuti**: mantenere il tempo di esecuzione totale dello script sotto circa cinque minuti in modo che la [cache dell'ambiente](#environment-caching) possa essere costruita. Quando la configurazione richiede più tempo di quello, l'ambiente non viene memorizzato nella cache. Eseguire le installazioni indipendenti in parallelo con `&` e `wait`, e spostare qualsiasi singolo download che non rientra in un [hook SessionStart](#setup-scripts-vs-sessionstart-hooks) che lo avvia in background. Se le nuove sessioni si bloccano o si interrompono durante la configurazione, vedere [Le nuove sessioni si bloccano o scadono durante la configurazione](https://code.claude.com/docs/it/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).449* **Completamento entro cinque minuti**: mantenere il tempo di esecuzione totale dello script sotto circa cinque minuti in modo che la [cache dell'ambiente](#environment-caching) possa essere costruita. Quando la configurazione richiede più tempo di quello, l'ambiente non viene memorizzato nella cache. Eseguire le installazioni indipendenti in parallelo con `&` e `wait`, e spostare qualsiasi singolo download che non rientra in un [hook SessionStart](#setup-scripts-vs-sessionstart-hooks) che lo avvia in background. Se le nuove sessioni si bloccano o si interrompono durante la configurazione, vedere [Le nuove sessioni si bloccano o scadono durante la configurazione](https://code.claude.com/docs/it/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).

450* **Accesso di rete per le installazioni**: le installazioni di pacchetti devono raggiungere i registri. Il livello **Trusted** predefinito copre i [domini consentiti comuni](#default-allowed-domains) inclusi npm, PyPI, RubyGems e crates.io; con accesso di rete **None**, le installazioni non riescono.450* **Accesso di rete per le installazioni**: le installazioni di pacchetti devono raggiungere i registri. Il livello **Trusted** predefinito copre i [domini consentiti comuni](#default-allowed-domains) inclusi npm, PyPI, RubyGems e crates.io; con accesso di rete **None**, le installazioni non riescono.

451* **Le variabili dell'ambiente non sono ancora impostate**: lo script viene eseguito prima che la sessione imposti le [variabili d'ambiente](#set-environment-variables) dell'ambiente. Imposta nello script stesso qualsiasi valore di cui lo script ha bisogno.

451 452 

452### Cache dell'ambiente453### Cache dell'ambiente

453 454 

Details

123 123 

124Quando una revisione non applica un file incluso, verifica ciascuno di questi punti:124Quando una revisione non applica un file incluso, verifica ciascuno di questi punti:

125 125 

126* **Posizione**: sposta il file nella root del repository. Un percorso verso una sottodirectory come `@docs/review-rules.md` non viene incluso.126* **Posizione**: sposta il file nella root del repository. Fatta eccezione per un [file di skill](#include-a-skill-file), un percorso verso una sottodirectory come `@docs/review-rules.md` non viene incluso.

127* **Nome**: fai corrispondere esattamente il nome del file, maiuscole e minuscole comprese, e usa un nome senza spazi. Una riga il cui nome non corrisponde a nessun file accanto a `REVIEW.md` rimane in `REVIEW.md` come testo semplice, e il check run non la segnala come inclusione saltata.127* **Nome**: fai corrispondere esattamente il nome del file, maiuscole e minuscole comprese, e usa un nome senza spazi. Una riga il cui nome non corrisponde a nessun file accanto a `REVIEW.md` rimane in `REVIEW.md` come testo semplice, e il check run non la segnala come inclusione saltata.

128* **Un solo livello**: elenca ogni file nel `REVIEW.md` root. Una riga `@` in un file incluso o in un `REVIEW.md` di una sottodirectory rimane come testo semplice, e un link Markdown a un altro file non è un'inclusione.128* **Un solo livello**: elenca ogni file nel `REVIEW.md` root. Una riga `@` in un file incluso o in un `REVIEW.md` di una sottodirectory rimane come testo semplice ([i file di skill sono diversi](#include-a-skill-file)), e un link Markdown a un altro file non è un'inclusione.

129* **Limiti**: includi al massimo otto file diversi e mantieni `REVIEW.md` e i file che include sotto i 150.000 byte complessivi. Un file che raggiungerebbe il limite di byte viene saltato per intero, non troncato. Il check run riporta quante righe di inclusione ha saltato per ciascuno dei due limiti.129* **Limiti**: includi al massimo otto file diversi e mantieni `REVIEW.md` e i file che include sotto i 150.000 byte complessivi. Un file che raggiungerebbe il limite di byte viene saltato per intero, non troncato. Il check run riporta quante righe di inclusione ha saltato per ciascuno dei due limiti.

130* **Link**: mantieni i link Markdown a un massimo di 64 tra `REVIEW.md` e i file che include. I link a indirizzi `http`, `https` o `mailto` e ad ancore `#` non contano. Oltre quel limite, la revisione salta l'intero `REVIEW.md` root, non solo i file inclusi. Il check run allora [indica che le istruzioni non sono state applicate](https://code.claude.com/docs/it/code-review-troubleshooting.md#the-check-run-mentions-review-md).130* **Link**: mantieni i link Markdown a un massimo di 64 tra `REVIEW.md` e i file che include. I link a indirizzi `http`, `https` o `mailto` e ad ancore `#` non contano, e nemmeno i link in un [file di skill](#include-a-skill-file). Oltre quel limite, la revisione salta l'intero `REVIEW.md` root, non solo i file inclusi. Il check run allora [indica che le istruzioni non sono state applicate](https://code.claude.com/docs/it/code-review-troubleshooting.md#the-check-run-mentions-review-md).

131* **Copia unita**: esegui il merge del file incluso nel [branch da cui viene letto `REVIEW.md`](#which-branch-review-md-is-read-from). La revisione legge entrambi dallo stesso commit, mai dalle modifiche della pull request stessa.131* **Copia unita**: esegui il merge del file incluso nel [branch da cui viene letto `REVIEW.md`](#which-branch-review-md-is-read-from). La revisione legge entrambi dallo stesso commit, mai dalle modifiche della pull request stessa.

132 132 

133### Includere un file di skill

134 

135Per fare in modo che le revisioni seguano le indicazioni che conservi in una [skill](https://code.claude.com/docs/it/skills.md), includi il `SKILL.md` della skill nel tuo `REVIEW.md` root. Code Review non esegue le skill.

136 

137Aggiungi `@` e il percorso di `SKILL.md`, nella forma `.claude/skills/<folder>/SKILL.md`, su una riga a sé:

138 

139```markdown theme={null}

140# Review instructions

141 

142Report at most five Nits per review.

143 

144@.claude/skills/api-review/SKILL.md

145 

146Treat any change under `migrations/` as Important.

147```

148 

149Proteggi il [branch da cui viene letto `REVIEW.md`](#which-branch-review-md-is-read-from), perché Code Review include un file di skill solo quando legge `REVIEW.md` da un branch protetto. Il file di skill conta ai fini dei limiti di otto file e 150.000 byte, e ha un proprio limite di 30.000 byte.

150 

151#### Scrivere una riga di skill che Code Review include

152 

153Usa un nome di cartella senza spazi. Una riga con uno spazio nel percorso rimane in `REVIEW.md` come testo semplice, e il check run non la segnala come inclusione saltata.

154 

155Se la riga `@` per una skill viola una delle regole seguenti, Code Review non include la skill da quella riga:

156 

157* **Percorso**: scrivi il percorso come `.claude/skills/<folder>/SKILL.md` a partire dalla root del repository, con la cartella della skill direttamente sotto `skills/`. A differenza di un nome di file nella root, un percorso in questa forma che non corrisponde a nessun file viene saltato e conteggiato.

158* **Origine**: copia le indicazioni da qualsiasi altro file sotto `.claude/`, o da una [skill integrata, personale o di un plugin](https://code.claude.com/docs/it/skills.md#where-skills-live), in un file accanto a `REVIEW.md`. Non puoi includerli direttamente.

159* **File**: esegui il commit di `SKILL.md` come normale file di testo. Code Review non segue un collegamento simbolico, che il collegamento sia il file stesso o una cartella nel suo percorso.

160* **Dimensione**: mantieni `SKILL.md` entro 30.000 byte, frontmatter incluso

161* **Numero**: scrivi al massimo otto righe di skill. Una riga ripetuta conta di nuovo ai fini delle otto.

162* **Blocchi in `REVIEW.md`**: tieni la riga `@` fuori dai code fence. Chiudi ogni commento HTML e ogni blocco `<pre>`, `<script>`, `<style>` o `<textarea>` sopra di essa.

163 

164Quando Code Review salta una riga di skill per aver violato la regola File, Dimensione, Numero o Blocchi, il [messaggio sulle righe di inclusione saltate](https://code.claude.com/docs/it/code-review-troubleshooting.md#the-check-run-mentions-review-md) del check run la conteggia. Il messaggio compare solo quando la revisione applica `REVIEW.md` da un branch protetto.

165 

166#### Verificare cosa riceve una revisione da una skill

167 

168Quando la skill è inclusa, una revisione riceve il corpo di `SKILL.md` e nient'altro dalla skill, quindi verifica la skill rispetto all'elenco seguente.

169 

170* **Frontmatter**: ripeti nel corpo tutto ciò che serve a una revisione dal [frontmatter](https://code.claude.com/docs/it/skills.md#frontmatter-reference), ad esempio le condizioni che `description` indica per l'uso della skill

171* **Comandi iniettati**: scrivi esplicitamente ciò che un [comando `!`](https://code.claude.com/docs/it/skills#inject-dynamic-context) fornirebbe. Code Review non esegue il comando e sostituisce con un segnaposto l'intera riga o l'intero blocco che lo contiene.

172* **Sostituzioni**: sostituisci `$ARGUMENTS` e le altre [sostituzioni](https://code.claude.com/docs/it/skills.md#available-string-substitutions) con testo fisso, perché una revisione non passa argomenti e le lascia come sono scritte

173* **File di supporto**: copia in `SKILL.md` ciò che serve a una revisione, perché Code Review non carica script, file collegati o riferimenti `@file`

174* **Esclusioni e limiti sui Nit**: scrivi le istruzioni che escludono rilevamenti o limitano i Nit in `REVIEW.md` o in un file accanto a esso, non nella skill. Code Review non accetta il testo di una skill come motivo per nessuna delle due cose.

175* **Link a file del repository**: indica a parole a cosa punta un link o un riferimento `@file`. La revisione vede il percorso come testo semplice o come segnaposto.

176 

177Se modifichi i comandi `!`, `$ARGUMENTS` o i link della skill, cambi anche il suo funzionamento in Claude Code. Se il tuo team fa affidamento su questi elementi, copia le indicazioni in un file accanto a `REVIEW.md` e includi quel file al posto della skill.

178 

179#### Caratteri che Code Review modifica nel testo delle skill

180 

181Code Review modifica alcuni caratteri nel testo della skill, quindi i tuoi esempi di codice arrivano a una revisione nella forma seguente.

182 

183```text theme={null}

184In SKILL.md: Use `items[0]`, never `List<String>`.

185The review reads: Use ˋitems(0)ˋ, never ˋList< String>ˋ.

186 

187In SKILL.md: Run `ps | grep api` and ask @alice.

188The review reads: Run ˋps ¦ grep apiˋ and ask @ alice.

189```

190 

191Quando una regola dipende da uno di questi caratteri, indicala anche a parole.

192 

133### Da quale branch viene letto REVIEW\.md193### Da quale branch viene letto REVIEW\.md

134 194 

135Code Review legge `REVIEW.md` dal branch di base della pull request o dal branch predefinito, mai dalle modifiche della pull request stessa. Per cambiare il comportamento della revisione, esegui prima il merge della modifica a `REVIEW.md`.195Code Review legge `REVIEW.md` dal branch di base della pull request o dal branch predefinito, mai dalle modifiche della pull request stessa. Per cambiare il comportamento della revisione, esegui prima il merge della modifica a `REVIEW.md`.


140* Escludere percorsi, file o classi di problemi200* Escludere percorsi, file o classi di problemi

141* Limitare i commenti nit201* Limitare i commenti nit

142 202 

203Scrivi le esclusioni e i limiti sui Nit in `REVIEW.md` o in un file accanto a esso, non in una [skill inclusa](#include-a-skill-file).

204 

143#### Cosa conta come protezione del branch205#### Cosa conta come protezione del branch

144 206 

145Code Review considera come protezione queste impostazioni:207Code Review considera come protezione queste impostazioni:

Details

67 67 

68## Il check run menziona REVIEW\.md68## Il check run menziona REVIEW\.md

69 69 

70Questi sono tre dei messaggi che un check run può riportare su `REVIEW.md`:70Questi sono quattro dei messaggi che un check run può riportare su `REVIEW.md`:

71 71 

72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: la revisione ha letto solo il file nella radice. Consulta [Da quale branch viene letto REVIEW.md](https://code.claude.com/docs/it/code-review-customize.md#which-branch-review-md-is-read-from) per sapere cosa cambia proteggendo il branch.72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: la revisione ha letto solo il file nella radice. Consulta [Da quale branch viene letto REVIEW.md](https://code.claude.com/docs/it/code-review-customize.md#which-branch-review-md-is-read-from) per sapere cosa cambia proteggendo il branch.

73* **"were not applied to this review: branch protection could not be confirmed"**: la revisione non ha letto alcun `REVIEW.md`.73* **"were not applied to this review: branch protection could not be confirmed"**: la revisione non ha letto alcun `REVIEW.md`.


75 * **Troppi link**: contiene più di 64 link Markdown. Riduci i link a [64 o meno](https://code.claude.com/docs/it/code-review-customize.md#include-other-files-in-review-md).75 * **Troppi link**: contiene più di 64 link Markdown. Riduci i link a [64 o meno](https://code.claude.com/docs/it/code-review-customize.md#include-other-files-in-review-md).

76 * **Un link che la revisione non riesce ad analizzare**: contiene un link Markdown malformato. Correggi o rimuovi il link.76 * **Un link che la revisione non riesce ad analizzare**: contiene un link Markdown malformato. Correggi o rimuovi il link.

77 * **Un link a un file modificato**: contiene un link a un file o a una cartella che questa pull request modifica, e la revisione non è riuscita a escludere solo le righe con quel link. Scrivi la regola direttamente in `REVIEW.md`.77 * **Un link a un file modificato**: contiene un link a un file o a una cartella che questa pull request modifica, e la revisione non è riuscita a escludere solo le righe con quel link. Scrivi la regola direttamente in `REVIEW.md`.

78* **"include line(s) in the root REVIEW\.md were skipped on this review"**: il tuo `REVIEW.md` nella radice è stato applicato, ma i file indicati da quelle righe no. Controlla gli elenchi in [Includere altri file in REVIEW.md](https://code.claude.com/docs/it/code-review-customize.md#include-other-files-in-review-md) e, per una skill, in [Includere un file di skill](https://code.claude.com/docs/it/code-review-customize.md#include-a-skill-file).

78 79 

79## Problemi di configurazione80## Problemi di configurazione

80 81 

desktop.md +3 −3

Details

844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/it/env-vars#variables) o [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/it/env-vars#variables) | Impostala in [uno dei punti in cui imposteresti una variabile per i dev server](#set-environment-variables-for-dev-servers), poi chiudi e riapri Desktop |844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/it/env-vars#variables) o [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/it/env-vars#variables) | Impostala in [uno dei punti in cui imposteresti una variabile per i dev server](#set-environment-variables-for-dev-servers), poi chiudi e riapri Desktop |

845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` o un'altra variabile che Desktop imposta da sé | Consulta [Variabili d'ambiente che Desktop imposta da sé](#environment-variables-desktop-sets-itself) |845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` o un'altra variabile che Desktop imposta da sé | Consulta [Variabili d'ambiente che Desktop imposta da sé](#environment-variables-desktop-sets-itself) |

846 846 

847Su macOS o Linux, se hai già impostato la variabile con `export` in `~/.zshrc` o `~/.bashrc`, consulta [Variabile esportata mancante o errata nei comandi eseguiti da Claude](#exported-variable-missing-or-wrong-in-commands-claude-runs).847Su macOS o Linux, se una variabile che hai impostato con `export` manca o ha un valore errato in un comando eseguito da Claude, consulta [Variabile esportata mancante o errata nei comandi eseguiti da Claude](#exported-variable-missing-or-wrong-in-commands-claude-runs).

848 848 

849#### Impostare le variabili d'ambiente per le sessioni locali849#### Impostare le variabili d'ambiente per le sessioni locali

850 850 


904 904 

905**3. Controlla le variabili salvate**905**3. Controlla le variabili salvate**

906 906 

907Se un comando riceve il valore sbagliato, controlla se hai impostato la variabile anche in un [ambiente salvato](#use-edit-or-remove-a-saved-environment) o nell'[editor dell'ambiente locale](#use-the-local-environment-editor). In tal caso, modifica lì il valore e avvia una nuova sessione.907Se un comando riceve il valore errato, controlla se hai impostato la variabile anche in un [ambiente salvato](#use-edit-or-remove-a-saved-environment) o nell'[editor dell'ambiente locale](#use-the-local-environment-editor). In tal caso, modifica lì il valore e avvia una nuova sessione.

908 908 

909**4. Usa un ambiente salvato**909**4. Usa un ambiente salvato**

910 910 

911Aggiungi la variabile a un [ambiente locale salvato](#set-environment-variables-for-local-sessions), poi avvia una nuova sessione da quell'ambiente. Per una variabile come `PATH` o `CLAUDE_CONFIG_DIR`, segui invece [le sue istruzioni specifiche](#environment-variables-in-local-sessions).911Aggiungi la variabile a un [ambiente locale salvato](#set-environment-variables-for-local-sessions), poi avvia una nuova sessione da quell'ambiente. Per una variabile come `PATH`, `CLAUDE_CONFIG_DIR` o `API_TIMEOUT_MS`, segui invece [le sue istruzioni specifiche](#environment-variables-in-local-sessions).

912 912 

913Prima della v2.1.304, Claude Code non passa le variabili esportate ai comandi, quindi [verifica quale versione esegue la sessione](#claude-code-version-in-the-code-tab).913Prima della v2.1.304, Claude Code non passa le variabili esportate ai comandi, quindi [verifica quale versione esegue la sessione](#claude-code-version-in-the-code-tab).

914 914 

Details

15 15 

16Questa pagina copre le attività pianificate locali; per le attività pianificate cloud e le loro opzioni di attivazione, consulta [Automatizzare il lavoro con le attività pianificate](https://code.claude.com/docs/it/routines.md).16Questa pagina copre le attività pianificate locali; per le attività pianificate cloud e le loro opzioni di attivazione, consulta [Automatizzare il lavoro con le attività pianificate](https://code.claude.com/docs/it/routines.md).

17 17 

18> [!NOTE]

19>

20> Se la tua app mostra la funzionalità con il suo [nome precedente](https://code.claude.com/docs/it/routines.md#where-the-name-routines-still-appears), fai clic su **Routines** ovunque questa pagina indichi **Scheduled** e su **New routine** dove indica **New task**.

21 

18## Confronta le opzioni di pianificazione22## Confronta le opzioni di pianificazione

19 23 

20Claude Code offre tre modi per pianificare lavori ricorrenti o una tantum:24Claude Code offre tre modi per pianificare lavori ricorrenti o una tantum:


45 49 

46**1. Apri la pagina Scheduled tasks**50**1. Apri la pagina Scheduled tasks**

47 51 

48Nella [**scheda Code**](https://code.claude.com/docs/it/desktop.md), fai clic su **Scheduled** nella barra laterale o nel menu **More** della barra laterale.52Nella [**scheda Code**](https://code.claude.com/docs/it/desktop.md), fai clic su **Scheduled** nella barra laterale o nel menu **More** della barra laterale. Se la barra laterale mostra **Routines** invece di **Scheduled**, fai clic su **Routines**, poi su **New routine**, e prosegui con [Modulo a pagina intera](#full-page-form).

49 53 

50**2. Avvia una nuova attività**54**2. Avvia una nuova attività**

51 55 

52Fai clic su **New task**. Se si apre un menu con **Create with Claude** e **Set up manually**, seleziona **Set up manually**. Si apre la finestra di dialogo **New scheduled task**. Se **Only on this computer** si trova in cima alla finestra di dialogo, vai a [Finestra di dialogo con Only on this computer in cima](#dialog-with-only-on-this-computer-at-the-top) prima di inserire qualsiasi cosa.56Fai clic su **New task** per aprire la finestra di dialogo **New scheduled task**. Prima di continuare, verifica la presenza di queste schermate:

57 

58* Se si apre un menu con **Create with Claude** e **Set up manually**, seleziona **Set up manually** per aprire la finestra di dialogo.

59* Se **Only on this computer** si trova in cima alla finestra di dialogo, vai a [Finestra di dialogo con Only on this computer in cima](#dialog-with-only-on-this-computer-at-the-top) prima di inserire qualsiasi cosa.

60* Se si apre un menu con **Local** e **Cloud**, oppure si apre una pagina intera al posto della finestra di dialogo, vai a [Modulo a pagina intera](#full-page-form).

53 61 

54**3. Dai un nome all'attività**62**3. Dai un nome all'attività**

55 63 


99 107 

100Fai clic su **Create**. Si apre la pagina dei dettagli dell'attività.108Fai clic su **Create**. Si apre la pagina dei dettagli dell'attività.

101 109 

110### Modulo a pagina intera

111 

112Se si apre un menu con **Local** e **Cloud**, seleziona **Local**. Si apre una pagina intitolata **New local routine** o **New local scheduled task**. Compila i suoi campi:

113 

114* **Name**: inserisci un nome univoco tra le tue attività.

115* **Description**: inseriscine una.

116* **Instructions**: inserisci cosa Claude dovrebbe fare quando l'attività viene eseguita. Nella stessa casella, seleziona la modalità di permesso, il modello e la cartella in cui viene eseguita l'attività.

117* **Schedule**: seleziona una delle [opzioni di pianificazione](#schedule-options).

118 

119Se **Create** non è disponibile, passaci sopra con il puntatore per vedere cosa manca ancora nel modulo. Fai clic su **Create** e si apre la pagina dei dettagli dell'attività.

120 

102## Opzioni di pianificazione121## Opzioni di pianificazione

103 122 

104Quando attivi **Only on this computer** in **Advanced settings**, la scheda **Trigger** offre Hourly, Daily, Weekdays e Weekly. Per ottenere **Manual** o **Custom** per un'attività di questo tipo, apri il suo [modulo **Edit**](#manage-scheduled-tasks) dopo averla creata. Quel modulo e la [finestra di dialogo con **Only on this computer** in alto](#dialog-with-only-on-this-computer-at-the-top) offrono queste sei opzioni:123Quando attivi **Only on this computer** in **Advanced settings**, la scheda **Trigger** offre Hourly, Daily, Weekdays e Weekly. Per ottenere **Manual** o **Custom** per un'attività di questo tipo, apri il suo [modulo **Edit**](#manage-scheduled-tasks) dopo averla creata. Quel modulo, la [finestra di dialogo con **Only on this computer** in alto](#dialog-with-only-on-this-computer-at-the-top) e il [modulo a pagina intera](#full-page-form) offrono queste sei opzioni:

105 124 

106* **Hourly**: viene eseguita ogni ora125* **Hourly**: viene eseguita ogni ora

107* **Daily**: viene eseguita ogni giorno all'ora locale che scegli126* **Daily**: viene eseguita ogni giorno all'ora locale che scegli

env-vars.md +1 −1

Details

298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Imposta su `1` per forzare la persistenza delle trascrizioni, la cronologia dei prompt e la registrazione in `claude agents` anche quando questo `claude` è stato avviato dall'interno di un'altra sessione di Claude Code. Usala quando un valore ereditato di `CLAUDE_CODE_CHILD_SESSION`, ad esempio da una sessione `screen` o da un launcher in background avviato per la prima volta dallo strumento Bash di Claude Code, fa sì che una vera sessione di primo livello venga erroneamente classificata come annidata. A partire dalla v2.1.178, Claude Code rileva automaticamente il caso di tmux e ignora il marcatore ereditato, quindi tmux non ha più bisogno di questa variabile. Rispettata anche nella v2.1.169 e precedenti; non ha effetto nella v2.1.170 e nella v2.1.171, in cui il rilevamento delle sessioni annidate che sovrascrive era stato rimosso |298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Imposta su `1` per forzare la persistenza delle trascrizioni, la cronologia dei prompt e la registrazione in `claude agents` anche quando questo `claude` è stato avviato dall'interno di un'altra sessione di Claude Code. Usala quando un valore ereditato di `CLAUDE_CODE_CHILD_SESSION`, ad esempio da una sessione `screen` o da un launcher in background avviato per la prima volta dallo strumento Bash di Claude Code, fa sì che una vera sessione di primo livello venga erroneamente classificata come annidata. A partire dalla v2.1.178, Claude Code rileva automaticamente il caso di tmux e ignora il marcatore ereditato, quindi tmux non ha più bisogno di questa variabile. Rispettata anche nella v2.1.169 e precedenti; non ha effetto nella v2.1.170 e nella v2.1.171, in cui il rilevamento delle sessioni annidate che sovrascrive era stato rimosso |

299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Imposta su `1` per forzare il rendering barrato di `~~text~~` nelle risposte di Claude quando il tuo terminale lo supporta ma non viene rilevato automaticamente, ad esempio tramite SSH senza inoltrare `TERM_PROGRAM`. Senza questa variabile, i terminali non rilevati mostrano i marcatori `~~` letterali invece di visualizzare il testo barrato. Richiede Claude Code v2.1.186 o successiva |299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Imposta su `1` per forzare il rendering barrato di `~~text~~` nelle risposte di Claude quando il tuo terminale lo supporta ma non viene rilevato automaticamente, ad esempio tramite SSH senza inoltrare `TERM_PROGRAM`. Senza questa variabile, i terminali non rilevati mostrano i marcatori `~~` letterali invece di visualizzare il testo barrato. Richiede Claude Code v2.1.186 o successiva |

300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Imposta su `1` per forzare l'abilitazione dell'[output sincronizzato](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) in modalità privata DEC 2026 quando il tuo terminale lo supporta ma non viene rilevato automaticamente. Utile per emulatori come `eat` di Emacs che implementano BSU/ESU ma non rispondono alla verifica delle capacità. Non ha effetto in tmux. A differenza di `CLAUDE_CODE_NO_FLICKER`, che passa al [rendering a schermo intero](https://code.claude.com/docs/it/fullscreen.md), questa variabile non cambia il renderer |300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Imposta su `1` per forzare l'abilitazione dell'[output sincronizzato](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) in modalità privata DEC 2026 quando il tuo terminale lo supporta ma non viene rilevato automaticamente. Utile per emulatori come `eat` di Emacs che implementano BSU/ESU ma non rispondono alla verifica delle capacità. Non ha effetto in tmux. A differenza di `CLAUDE_CODE_NO_FLICKER`, che passa al [rendering a schermo intero](https://code.claude.com/docs/it/fullscreen.md), questa variabile non cambia il renderer |

301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Imposta su `1` per disegnare gli [elementi `Image` dei mod](https://code.claude.com/docs/it/plugins/mods/reference#elements) come immagini quando il tuo terminale disegna immagini del protocollo grafico kitty con segnaposto Unicode e vedi comunque il testo `alt` attenuato di un `Image`. Consulta [quali terminali disegnano un `Image`](https://code.claude.com/docs/it/plugins/mods/gallery#image-and-client) e perché questa variabile non aiuta all'interno di tmux o screen |301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Imposta su `1` per disegnare gli [elementi `Image` dei mod](https://code.claude.com/docs/it/plugins/mods/reference#elements) come immagini quando il tuo terminale disegna le immagini del protocollo grafico kitty con segnaposto Unicode e vedi comunque il testo `alt` attenuato di un `Image`. Consulta [quali terminali disegnano un `Image` e dove non impostare questa variabile](https://code.claude.com/docs/it/plugins/mods/gallery#image-and-client) |

302| `CLAUDE_CODE_FORK_SUBAGENT` | Controlla la modalità fork, attiva per impostazione predefinita, che consente a Claude di avviare autonomamente dei [fork](https://code.claude.com/docs/it/sub-agents.md#fork-the-current-conversation). Mentre la modalità fork è attiva, Claude inoltre non può [attendere un subagent](https://code.claude.com/docs/it/sub-agents.md#run-subagents-in-foreground-or-background) nelle sessioni interattive del terminale, di VS Code o dell'app desktop sulla tua macchina. Imposta su `0` per disattivare la modalità fork. Per le versioni, consulta [Disattivare la modalità fork](https://code.claude.com/docs/it/sub-agents.md#turn-fork-mode-on-or-off) |302| `CLAUDE_CODE_FORK_SUBAGENT` | Controlla la modalità fork, attiva per impostazione predefinita, che consente a Claude di avviare autonomamente dei [fork](https://code.claude.com/docs/it/sub-agents.md#fork-the-current-conversation). Mentre la modalità fork è attiva, Claude inoltre non può [attendere un subagent](https://code.claude.com/docs/it/sub-agents.md#run-subagents-in-foreground-or-background) nelle sessioni interattive del terminale, di VS Code o dell'app desktop sulla tua macchina. Imposta su `0` per disattivare la modalità fork. Per le versioni, consulta [Disattivare la modalità fork](https://code.claude.com/docs/it/sub-agents.md#turn-fork-mode-on-or-off) |

303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Imposta su `1` per emettere i blocchi di testo e di ragionamento dei [subagent](https://code.claude.com/docs/it/sub-agents.md) nell'output di `claude -p --output-format stream-json`, con lo stesso comportamento del flag [`--forward-subagent-text`](https://code.claude.com/docs/it/cli-reference#cli-flags). Usa la variabile quando un harness invoca `claude` e non può passare direttamente il flag. A differenza del flag, che termina con un errore al di fuori della modalità non interattiva con output stream-json, in quel caso la variabile viene ignorata, così che le invocazioni annidate continuino a funzionare quando è impostata a livello di processo. Richiede Claude Code v2.1.211 o successiva |303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Imposta su `1` per emettere i blocchi di testo e di ragionamento dei [subagent](https://code.claude.com/docs/it/sub-agents.md) nell'output di `claude -p --output-format stream-json`, con lo stesso comportamento del flag [`--forward-subagent-text`](https://code.claude.com/docs/it/cli-reference#cli-flags). Usa la variabile quando un harness invoca `claude` e non può passare direttamente il flag. A differenza del flag, che termina con un errore al di fuori della modalità non interattiva con output stream-json, in quel caso la variabile viene ignorata, così che le invocazioni annidate continuino a funzionare quando è impostata a livello di processo. Richiede Claude Code v2.1.211 o successiva |

304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Imposta su `1` per inviare gli [header di suggerimento per il gateway](https://code.claude.com/docs/it/llm-gateway-protocol.md#gateway-hint-headers), come `x-claude-code-request-class` e `x-claude-code-compaction`, su un proxy personalizzato o su un provider di terze parti come Amazon Bedrock o Claude Platform on AWS. Imposta su `0` per smettere di inviarli su ogni connessione, inclusa una connessione diretta all'API Anthropic, dove Claude Code li invia per impostazione predefinita. Richiede Claude Code v2.1.273 o successiva |304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Imposta su `1` per inviare gli [header di suggerimento per il gateway](https://code.claude.com/docs/it/llm-gateway-protocol.md#gateway-hint-headers), come `x-claude-code-request-class` e `x-claude-code-compaction`, su un proxy personalizzato o su un provider di terze parti come Amazon Bedrock o Claude Platform on AWS. Imposta su `0` per smettere di inviarli su ogni connessione, inclusa una connessione diretta all'API Anthropic, dove Claude Code li invia per impostazione predefinita. Richiede Claude Code v2.1.273 o successiva |

errors.md +64 −7

Details

317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Errori dei plugin](#skipping-connection-recent-failure-cached) |317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Errori dei plugin](#skipping-connection-recent-failure-cached) |

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

319| `MCP server "<name>" connection closed before the tool call was answered` | [Errori degli strumenti](#connection-closed-before-the-tool-call-was-answered) |319| `MCP server "<name>" connection closed before the tool call was answered` | [Errori degli strumenti](#connection-closed-before-the-tool-call-was-answered) |

320| `MCP server "<name>" is disabled — re-enable it via /mcp to use its tools` | [Errori degli strumenti](#mcp-server-is-disabled) |

321| `MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit.` | [Errori degli strumenti](#mcp-tool-call-timed-out-with-the-servers-question-unanswered) |

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

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

322| `cannot contain null bytes (\0)` | [Errori degli strumenti](#path-cannot-contain-null-bytes) |324| `cannot contain null bytes (\0)` | [Errori degli strumenti](#path-cannot-contain-null-bytes) |


348| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Errori degli strumenti](#disk-quota-or-temp-filesystem-is-full) |350| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Errori degli strumenti](#disk-quota-or-temp-filesystem-is-full) |

349| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Errori degli strumenti](#disk-quota-or-temp-filesystem-is-full) |351| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Errori degli strumenti](#disk-quota-or-temp-filesystem-is-full) |

350| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Errori degli strumenti](#file-is-not-valid-utf-8) |352| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Errori degli strumenti](#file-is-not-valid-utf-8) |

353| `git is not installed on this Mac. To install it, run xcode-select --install, then try again.` | [Errori degli strumenti](#git-is-not-installed-on-this-mac) |

351| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Errori degli strumenti](#the-source-file-is-not-valid-utf-8-text) |354| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Errori degli strumenti](#the-source-file-is-not-valid-utf-8-text) |

352| `the source file has the replacement character U+FFFD` | [Errori degli strumenti](#the-source-file-is-not-valid-utf-8-text) |355| `the source file has the replacement character U+FFFD` | [Errori degli strumenti](#the-source-file-is-not-valid-utf-8-text) |

353| `Not published: that file is on a network share` | [Errori degli strumenti](#not-published-that-file-is-on-a-network-share) |356| `Not published: that file is on a network share` | [Errori degli strumenti](#not-published-that-file-is-on-a-network-share) |


487 490 

488Mentre Claude sta consultando l'[advisor](https://code.claude.com/docs/it/advisor.md), il banner appare dopo 90 secondi senza dati invece di 20, perché una lunga revisione dell'advisor può non inviare nulla per ben oltre 20 secondi. Prima della v2.1.214, la soglia di 20 secondi si applicava anche durante le chiamate dell'advisor, quindi il banner appariva durante le revisioni dell'advisor anche quando non c'era nulla di sbagliato.491Mentre Claude sta consultando l'[advisor](https://code.claude.com/docs/it/advisor.md), il banner appare dopo 90 secondi senza dati invece di 20, perché una lunga revisione dell'advisor può non inviare nulla per ben oltre 20 secondi. Prima della v2.1.214, la soglia di 20 secondi si applicava anche durante le chiamate dell'advisor, quindi il banner appariva durante le revisioni dell'advisor anche quando non c'era nulla di sbagliato.

489 492 

493#### Il banner di attesa compare e scompare dietro un gateway

494 

495Se il banner `Waiting for API response` compare e scompare mentre Claude ragiona e ti connetti tramite un gateway, [aggiorna Claude Code](https://code.claude.com/docs/it/setup.md#update-claude-code) alla v2.1.309 o successiva. Il banner appare dopo 45 secondi senza dati su queste connessioni:

496 

497* [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/it/env-vars) impostato su un host diverso dall'API Anthropic, come un [LLM gateway](https://code.claude.com/docs/it/llm-gateway)

498* Una sessione [Claude apps gateway](https://code.claude.com/docs/it/claude-apps-gateway)

499* [Claude Platform on AWS](https://code.claude.com/docs/it/claude-platform-on-aws.md) con `ANTHROPIC_AWS_BASE_URL` impostato

500 

501Prima della v2.1.309, il banner appariva dopo 20 secondi su queste connessioni.

502 

490### Sintonizza il comportamento dei tentativi503### Sintonizza il comportamento dei tentativi

491 504 

492Puoi sintonizzare il comportamento dei tentativi con queste variabili d'ambiente:505Puoi sintonizzare il comportamento dei tentativi con queste variabili d'ambiente:


3256 3269 

3257**Cosa fare:**3270**Cosa fare:**

3258 3271 

3259* In uno script o in un job CI, aggiungi `--trust-workspace` per considerare attendibile il checkout solo per quell'esecuzione: `claude ultrareview --trust-workspace`. Aggiungilo solo per codice di cui ti fidi, perché la configurazione git del checkout e le impostazioni di progetto di Claude Code possono a quel punto eseguire programmi. Per revisionare una pull request il cui codice non ritieni affidabile, consulta [come revisionarla da un checkout di cui ti fidi](https://code.claude.com/docs/it/ultrareview.md#trust-the-folder-before-the-review-runs).3272* In uno script o in un job di CI, aggiungi `--trust-workspace` per considerare attendibile la cartella per quell'esecuzione: `claude ultrareview --trust-workspace`. Aggiungilo solo per codice di cui ti fidi, perché git e Claude Code possono quindi eseguire programmi indicati nella configurazione git e nelle impostazioni di progetto della cartella. Per una pull request il cui codice non è attendibile, [esegui la revisione da un branch attendibile](https://code.claude.com/docs/it/ultrareview.md#trust-the-folder-before-the-review-runs).

3260* Sulla tua macchina, esegui `claude` in quella cartella e accetta la [finestra di dialogo di fiducia del workspace](https://code.claude.com/docs/it/permissions.md#project-allow-rules-and-workspace-trust), quindi esegui di nuovo il comando originale3273* Sulla tua macchina, esegui `claude` in quella cartella e accetta la [finestra di dialogo di fiducia del workspace](https://code.claude.com/docs/it/permissions.md#project-allow-rules-and-workspace-trust), quindi esegui di nuovo il comando originale

3261 3274 

3262Ciascuno di questi messaggi di `claude ultrareview` indica che non è stata avviata alcuna revisione e che il codice di uscita è 1:3275Ciascuno di questi messaggi di `claude ultrareview` indica che non è stata avviata alcuna revisione e che il codice di uscita è 1:


3265* **`Error: Workspace not trusted. <folder> is your home directory`**: poiché la fiducia per la tua directory home non viene mai salvata, eseguire prima `claude` lì non può aiutare. Esegui invece `claude ultrareview` da una directory di progetto, dopo aver eseguito lì `claude` una volta per accettare la finestra di dialogo di fiducia, oppure aggiungi `--trust-workspace`.3278* **`Error: Workspace not trusted. <folder> is your home directory`**: poiché la fiducia per la tua directory home non viene mai salvata, eseguire prima `claude` lì non può aiutare. Esegui invece `claude ultrareview` da una directory di progetto, dopo aver eseguito lì `claude` una volta per accettare la finestra di dialogo di fiducia, oppure aggiungi `--trust-workspace`.

3266* **`No answer in time.` seguito da `Error: Workspace not trusted`**: la domanda `Trust <folder>? [y/N]` è rimasta senza risposta per 5 minuti. Esegui di nuovo `claude ultrareview` e rispondi.3279* **`No answer in time.` seguito da `Error: Workspace not trusted`**: la domanda `Trust <folder>? [y/N]` è rimasta senza risposta per 5 minuti. Esegui di nuovo `claude ultrareview` e rispondi.

3267* **`Ultrareview did not start: <folder> is not trusted`**: hai rifiutato alla domanda `Trust <folder>? [y/N]`, ad esempio rispondendo `n` o premendo Invio. Per avviare la revisione, esegui di nuovo `claude ultrareview` e rispondi `y`.3280* **`Ultrareview did not start: <folder> is not trusted`**: hai rifiutato alla domanda `Trust <folder>? [y/N]`, ad esempio rispondendo `n` o premendo Invio. Per avviare la revisione, esegui di nuovo `claude ultrareview` e rispondi `y`.

3268* **``Ultrareview did not start: `--trust-workspace` takes no value``**: dopo `--trust-workspace` segue qualcosa che non è un flag, come un numero di PR o `false`. Se non ti fidi della cartella, ometti il flag. Per considerarla attendibile per questa esecuzione, metti il numero di PR o il branch di base prima del flag: `claude ultrareview 1234 --trust-workspace`.3281* **``Ultrareview did not start: `--trust-workspace` takes no value``**: qualcosa di diverso da un flag segue `--trust-workspace`, ad esempio il numero di una PR o `false`. Se non consideri attendibile la cartella, ometti il flag. Per considerarla attendibile per questa esecuzione, metti il numero della PR o il branch di base prima del flag: `claude ultrareview 1234 --trust-workspace`.

3269 3282 

3270Prima della v2.1.309, `claude ultrareview` non accettava `--trust-workspace`.3283Prima della v2.1.309, `claude ultrareview` non accettava `--trust-workspace`.

3271 3284 


3526 3539 

3527Stringhe simili vengono generate prima ancora che il comando venga eseguito:3540Stringhe simili vengono generate prima ancora che il comando venga eseguito:

3528 3541 

3529* `Shell command permission check failed for pattern "..."`: il controllo dei permessi del comando non lo ha consentito. [Controlli dei permessi sui comandi iniettati](https://code.claude.com/docs/it/skills.md#permission-checks-on-injected-commands) spiega quali risultati causano l'interruzione in ogni modalità di permesso e come preapprovare un comando con `allowed-tools`3542* `Shell command permission check failed for pattern "..."`: il controllo dei permessi del comando non lo ha consentito. [Controlli dei permessi sui comandi inseriti](https://code.claude.com/docs/it/skills.md#permission-checks-on-injected-commands) spiega quali risultati causano l'interruzione in ciascuna modalità di permesso e come pre-approvare un comando con `allowed-tools`

3530* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: il frontmatter della skill richiede bash su una macchina che ne è priva. Installa Git for Windows o modifica il frontmatter in `shell: powershell`. Consulta [Come vengono eseguiti i comandi iniettati](https://code.claude.com/docs/it/skills.md#how-injected-commands-run)3543* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: il frontmatter della skill richiede bash su una macchina che ne è priva. Installa Git for Windows o modifica il frontmatter in `shell: powershell`. Consulta [Come vengono eseguiti i comandi iniettati](https://code.claude.com/docs/it/skills.md#how-injected-commands-run)

3531* `No shell command in <name> was run`: uno dei comandi `!` del file contiene un carattere di controllo grezzo diverso da tabulazione o a capo, quindi nessuno di essi viene eseguito. Consulta [come trovare e rimuovere il carattere](#no-shell-command-was-run)3544* `No shell command in <name> was run`: uno dei comandi `!` del file contiene un carattere di controllo grezzo diverso da tabulazione o a capo, quindi nessuno di essi viene eseguito. Consulta [come trovare e rimuovere il carattere](#no-shell-command-was-run)

3532 3545 


3678 3691 

3679* **Non hai passato un branch di base**: Claude Code ha effettuato il confronto con il branch predefinito del repository e suggerisce di passare esplicitamente il tuo branch di base, come nell'esempio sopra3692* **Non hai passato un branch di base**: Claude Code ha effettuato il confronto con il branch predefinito del repository e suggerisce di passare esplicitamente il tuo branch di base, come nell'esempio sopra

3680* **Hai passato un branch di base che era già nel tuo clone**: il suggerimento riporta ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3693* **Hai passato un branch di base che era già nel tuo clone**: il suggerimento riporta ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3681* **Hai passato un branch di base che non era nel tuo clone**: Claude Code lo ha recuperato da origin prima del confronto. Il suggerimento è ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; quando Claude Code non riesce a capire se il tuo clone è shallow, suggerisce invece `git fetch --unshallow origin`. Prima della v2.1.221, il suggerimento proponeva `git fetch --unshallow origin` per ogni branch di base recuperato, e su un clone completo quel comando fallisce con `fatal: --unshallow on a complete repository does not make sense`.3694* **Hai passato un branch di base che non era presente nel tuo clone**: Claude Code lo ha recuperato da origin prima del confronto. Il suggerimento è ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; quando Claude Code non riesce a stabilire se il tuo clone è shallow, suggerisce invece `git fetch --unshallow origin`. Prima della v2.1.221, il suggerimento proponeva `git fetch --unshallow origin` per ogni branch di base recuperato, e su un clone completo quel comando fallisce con `fatal: --unshallow on a complete repository does not make sense`.

3682 3695 

3683**Cosa fare:**3696**Cosa fare:**

3684 3697 


4419* Se l'azione non è avvenuta, chiedi a Claude di eseguire di nuovo lo strumento. Non devi prima riconnettere il server, perché Claude Code si riconnette al server alla successiva chiamata a uno dei suoi strumenti. Se anche quella connessione fallisce, consulta [Interruzioni di un server remoto durante la sessione](https://code.claude.com/docs/it/mcp.md#mid-session-drops-of-a-remote-server).4432* Se l'azione non è avvenuta, chiedi a Claude di eseguire di nuovo lo strumento. Non devi prima riconnettere il server, perché Claude Code si riconnette al server alla successiva chiamata a uno dei suoi strumenti. Se anche quella connessione fallisce, consulta [Interruzioni di un server remoto durante la sessione](https://code.claude.com/docs/it/mcp.md#mid-session-drops-of-a-remote-server).

4420* Se sei tu a sviluppare il server e lo strumento è sicuro da chiamare due volte, [contrassegnalo come sicuro da ripetere](https://code.claude.com/docs/it/mcp.md#tool-calls-pending-when-a-connection-closes) in modo che Claude Code possa ripetere una chiamata persa4433* Se sei tu a sviluppare il server e lo strumento è sicuro da chiamare due volte, [contrassegnalo come sicuro da ripetere](https://code.claude.com/docs/it/mcp.md#tool-calls-pending-when-a-connection-closes) in modo che Claude Code possa ripetere una chiamata persa

4421 4434 

4435### MCP server is disabled

4436 

4437Questo messaggio nel risultato di uno strumento indica che Claude ha chiamato uno strumento di un [server MCP](https://code.claude.com/docs/it/mcp.md) che è [disattivato](https://code.claude.com/docs/it/mcp.md#disable-a-server-without-removing-it). Claude Code non si è connesso al server, quindi lo strumento non è stato eseguito, e Claude ha ricevuto questo testo al posto di un risultato:

4438 

4439```text wrap theme={null}

4440MCP server "<name>" is disabled — re-enable it via /mcp to use its tools

4441```

4442 

4443**Cosa fare:**

4444 

4445* Se intendevi disattivare il server, non devi fare nulla

4446* Se Claude ha bisogno degli strumenti del server, riattivalo da `/mcp` nel prompt di Claude Code

4447* In un'applicazione [Agent SDK](https://code.claude.com/docs/it/agent-sdk/overview.md), riattiva il server chiamando [`toggleMcpServer()`](https://code.claude.com/docs/it/agent-sdk/typescript#togglemcpserver) in TypeScript con `enabled` impostato su `true`, oppure [`toggle_mcp_server()`](https://code.claude.com/docs/it/agent-sdk/python#claudesdkclient) in Python con `enabled` impostato su `True`

4448 

4449### MCP tool call timed out with the server's question unanswered

4450 

4451In [modalità non interattiva](https://code.claude.com/docs/it/headless.md), un [server MCP](https://code.claude.com/docs/it/mcp.md) ha richiesto un input tramite [elicitation](https://code.claude.com/docs/it/mcp.md#respond-to-mcp-elicitation-requests) durante una chiamata a uno strumento, e il limite di tempo della chiamata è scaduto prima che arrivasse una risposta:

4452 

4453```text theme={null}

4454MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit. Do not call this tool again in this turn. Tell the user that the server's question got no answer, and wait for their reply.

4455```

4456 

4457Prima della v2.1.310, il risultato terminava con `timed out after <N>s` e non diceva nulla sulla domanda.

4458 

4459**Cosa fare:**

4460 

4461* Configura un [hook `Elicitation`](https://code.claude.com/docs/it/hooks#elicitation) che risponda alle richieste del server

4462* In un'applicazione Agent SDK TypeScript, fai in modo che la tua callback [`onElicitation`](https://code.claude.com/docs/it/agent-sdk/typescript#options) restituisca la risposta prima che il limite scada

4463* Per concedere più tempo a una risposta, imposta un [`timeout`](https://code.claude.com/docs/it/mcp#time-limits-on-mcp-tool-calls) più lungo in millisecondi nella voce di configurazione del server, come `"timeout": 600000` per 10 minuti

4464* Esegui invece l'attività in una sessione interattiva e rispondi tu stesso alla [finestra di dialogo](https://code.claude.com/docs/it/mcp.md#respond-to-mcp-elicitation-requests) del server

4465 

4422### Agent would be spawned with zero tools4466### Agent would be spawned with zero tools

4423 4467 

4424Nessuna voce nell'[elenco `tools`](https://code.claude.com/docs/it/sub-agents#supported-frontmatter-fields) del subagent corrispondeva a uno strumento utilizzabile, quindi Claude Code si è rifiutato di avviare il subagent: senza strumenti, non avrebbe potuto agire. Il messaggio raggruppa le tue voci in base a cosa è andato storto:4468Nessuna voce nell'[elenco `tools`](https://code.claude.com/docs/it/sub-agents#supported-frontmatter-fields) del subagent corrispondeva a uno strumento utilizzabile, quindi Claude Code si è rifiutato di avviare il subagent: senza strumenti, non avrebbe potuto agire. Il messaggio raggruppa le tue voci in base a cosa è andato storto:


4741The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4785The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.

4742```4786```

4743 4787 

4744Gli altri tre messaggi seguono un comando che è stato eseguito ed è terminato con un codice diverso da zero. Questo esempio è la forma `Disk full:`:4788I messaggi `Disk full:`, `Disk quota used up:` e `Nearly out of inodes:` seguono un comando che è stato eseguito ed è terminato con un codice diverso da zero. Ad esempio:

4745 4789 

4746```text wrap theme={null}4790```text wrap theme={null}

4747Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4791Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.


4751 4795 

4752* Su macOS e Linux, esegui `df -h <dir>` nella tua shell per vedere quale volume contiene la directory e quanto è pieno. `df -i <dir>` mostra quanti inode sono liberi. `<dir>` è la directory indicata dal tuo messaggio, come in `df -i /tmp/claude-501`4796* Su macOS e Linux, esegui `df -h <dir>` nella tua shell per vedere quale volume contiene la directory e quanto è pieno. `df -i <dir>` mostra quanti inode sono liberi. `<dir>` è la directory indicata dal tuo messaggio, come in `df -i /tmp/claude-501`

4753* **`Disk full: this computer's volume` o `disk is full (ENOSPC)`**: elimina i file che non ti servono in qualsiasi punto di quel volume4797* **`Disk full: this computer's volume` o `disk is full (ENOSPC)`**: elimina i file che non ti servono in qualsiasi punto di quel volume

4754* **`Disk quota used up:` o `Disk full: a test write`**: elimina i tuoi file su quel volume, anche se mostra ancora spazio libero4798* **`Disk quota used up:`, `disk quota is used up (EDQUOT)` o `Disk full: a test write`**: elimina i tuoi file su quel volume, anche se mostra ancora spazio libero

4755* **`disk quota is used up (EDQUOT)`**: elimina i tuoi file su quel volume

4756* **`Nearly out of inodes:`**: elimina molti file su quel volume. Ognuno occupa un inode indipendentemente dalla sua dimensione, quindi conta il loro numero, non la loro dimensione4799* **`Nearly out of inodes:`**: elimina molti file su quel volume. Ognuno occupa un inode indipendentemente dalla sua dimensione, quindi conta il loro numero, non la loro dimensione

4757* Oppure riavvia Claude Code con [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/it/env-vars) impostata su una directory in un volume con spazio disponibile4800* Oppure riavvia Claude Code con [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/it/env-vars) impostata su una directory in un volume con spazio disponibile

4758* Poi chiedi a Claude di eseguire di nuovo il comando4801* Poi chiedi a Claude di eseguire di nuovo il comando


4766 4809 

4767Prima della v2.1.305, un comando che Claude Code non riusciva ad avviare perché il disco era pieno restituiva solo il testo di errore del sistema operativo. Quel testo riportava, ad esempio, `ENOSPC: no space left on device, open <path>.output`.4810Prima della v2.1.305, un comando che Claude Code non riusciva ad avviare perché il disco era pieno restituiva solo il testo di errore del sistema operativo. Quel testo riportava, ad esempio, `ENOSPC: no space left on device, open <path>.output`.

4768 4811 

4812### git is not installed on this Mac

4813 

4814Questo messaggio indica che un passaggio in Claude Code aveva bisogno di git, e il git trovato è il sostituto fornito da Apple in `/usr/bin/git`. Gli strumenti per sviluppatori che forniscono git non sono installati.

4815 

4816Claude Code non avvia il sostituto e mostra invece questo testo, ad esempio all'interno di un messaggio più lungo:

4817 

4818```text wrap theme={null}

4819git is not installed on this Mac. To install it, run xcode-select --install, then try again.

4820```

4821 

4822**Cosa fare:**

4823 

4824* Nel Terminale, esegui `xcode-select --install`, completa l'installazione che avvia, poi riprova ciò che stavi facendo in Claude Code

4825 

4769### File is not valid UTF-84826### File is not valid UTF-8

4770 4827 

4771Claude ha usato lo strumento Edit o NotebookEdit su un file i cui byte non si decodificano come UTF-8, e Claude Code ha rifiutato la modifica. Non è stato scritto nulla, quindi il file è rimasto com'era. Questi strumenti salvano l'intero file come UTF-8, il che avrebbe trasformato ogni byte che non riuscivano a decodificare nel carattere di sostituzione `U+FFFD`. Il messaggio compare nel risultato dello strumento:4828Claude ha usato lo strumento Edit o NotebookEdit su un file i cui byte non si decodificano come UTF-8, e Claude Code ha rifiutato la modifica. Non è stato scritto nulla, quindi il file è rimasto com'era. Questi strumenti salvano l'intero file come UTF-8, il che avrebbe trasformato ogni byte che non riuscivano a decodificare nel carattere di sostituzione `U+FFFD`. Il messaggio compare nel risultato dello strumento:

fast-mode.md +21 −11

Details

155 155 

156Prima di offrire la modalità veloce, Claude Code verifica la disponibilità della modalità veloce della tua organizzazione con una richiesta diretta a `api.anthropic.com`. Il controllo non segue [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential), quindi su una rete che instrada il traffico Claude attraverso un [gateway LLM](https://code.claude.com/docs/it/llm-gateway) e blocca l'uscita diretta a `api.anthropic.com`, il controllo fallisce anche se le richieste di inferenza funzionano. Il controllo utilizza un [proxy HTTP](https://code.claude.com/docs/it/network-config.md#proxy-configuration) configurato, quindi un blocco di rete fallisce il controllo solo dove `api.anthropic.com` è irraggiungibile anche attraverso il proxy.156Prima di offrire la modalità veloce, Claude Code verifica la disponibilità della modalità veloce della tua organizzazione con una richiesta diretta a `api.anthropic.com`. Il controllo non segue [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential), quindi su una rete che instrada il traffico Claude attraverso un [gateway LLM](https://code.claude.com/docs/it/llm-gateway) e blocca l'uscita diretta a `api.anthropic.com`, il controllo fallisce anche se le richieste di inferenza funzionano. Il controllo utilizza un [proxy HTTP](https://code.claude.com/docs/it/network-config.md#proxy-configuration) configurato, quindi un blocco di rete fallisce il controllo solo dove `api.anthropic.com` è irraggiungibile anche attraverso il proxy.

157 157 

158Quando il controllo fallisce, `/fast` segnala "Fast mode unavailable due to network connectivity issues", e le richieste vengono eseguite a velocità standard, anche quando la tua organizzazione ha la modalità veloce abilitata. Un controllo che ha avuto successo in passato continua a funzionare dal suo risultato memorizzato nella cache, quindi un controllo bloccato influisce principalmente sulle nuove installazioni.158Se la tua organizzazione ha la modalità veloce abilitata e `/fast` indica il contrario, trova il messaggio che mostra tra questi casi.

159 159 

160Lo stesso messaggio di connettività appare su una rete aperta quando il controllo raggiunge `api.anthropic.com` ma presenta una credenziale che Anthropic rifiuta. Una sessione la cui chiave risolta è una credenziale emessa dal gateway, contenuta in [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential) o prodotta da un [`apiKeyHelper`](https://code.claude.com/docs/it/settings-reference#apikeyhelper), invia il controllo con quella chiave, e la richiesta rifiutata viene segnalata come un errore di connettività.160#### Fast mode unavailable due to network connectivity issues

161 161 

162Per ripristinare la modalità veloce, consenti l'uscita diretta a `api.anthropic.com` dove un blocco di rete è la causa, o imposta qualsiasi variabile che corrisponda a come il controllo fallisce:162Il controllo di disponibilità è fallito, ad esempio perché la tua rete blocca `api.anthropic.com`, e le richieste vengono eseguite a velocità standard. Un controllo che ha avuto successo in passato continua a funzionare dal suo risultato memorizzato nella cache, quindi un controllo bloccato influisce principalmente sulle nuove installazioni.

163 163 

164* `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` tratta un controllo fallito come disponibile e onora comunque una risposta "disabilitato dalla tua organizzazione". Usalo quando la tua rete rifiuta la connessione, o quando Anthropic rifiuta una credenziale del gateway; l'allowlisting non aiuta il caso della credenziale, poiché nulla è bloccato.164Per ripristinare la modalità veloce, aggiungi all'allowlist l'uscita diretta a `api.anthropic.com`, oppure imposta `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`, che tratta un controllo fallito come disponibile e rispetta comunque una risposta "disabled by your organization".

165* `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` salta completamente il controllo. Usalo quando la tua rete intercetta la richiesta piuttosto che rifiutarla.

166 165 

167Due configurazioni di gateway segnalano "Fast mode has been disabled by your organization" piuttosto che il messaggio di connettività, anche quando la tua organizzazione ha la modalità veloce abilitata:166#### Fast mode is currently unavailable

168 167 

169* Una sessione che si autentica con [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential) da sola salta il controllo: senza un accesso a claude.ai o una chiave API Anthropic, e senza un controllo precedentemente memorizzato nella cache, Claude Code tratta la modalità veloce come disabilitata dalla tua organizzazione senza inviare la richiesta.168Dietro un gateway, verifica la presenza di queste configurazioni, in cui Claude Code non invia il controllo di disponibilità e non ha in cache alcun controllo precedente riuscito:

170* Un proxy che intercetta il controllo e risponde con la sua stessa pagina, ad esempio un proxy che ispeziona TLS restituendo una pagina di blocco HTTP 200, viene letto come una risposta che dice che la tua organizzazione ha la modalità veloce disabilitata.

171 169 

172In entrambi i casi, imposta `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` per ripristinare la modalità veloce. `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS` non si applica a nessuno di questi casi, poiché bypassa solo i controlli falliti e entrambi questi producono una risposta disabilitata. L'allowlisting dell'uscita diretta non aiuta il caso del token bearer, che non invia mai la richiesta.170* Punti `ANTHROPIC_BASE_URL` al tuo gateway e imposti [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential) su una chiave emessa dal gateway che non è nel formato di una chiave API Anthropic. Claude Code non invia una chiave di questo tipo a `api.anthropic.com`.

171* Imposti [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/it/env-vars), quindi Claude Code salta il controllo.

173 172 

174Le variabili influiscono solo sul controllo lato client. Quando la tua organizzazione ha la modalità veloce disabilitata, l'API rifiuta le richieste di modalità veloce indipendentemente dal fatto che siano impostate o meno. Un rifiuto dall'API rimane anche con una variabile skip impostata. Claude Code ritenta la richiesta rifiutata a velocità standard, disattiva la modalità veloce, e `/fast` segnala che la tua organizzazione ha disabilitato la modalità veloce.173Per ripristinare la modalità veloce in entrambe le configurazioni, imposta `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`.

175 174 

176L'impostazione di `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` sopprime anche il controllo di disponibilità. Senza un controllo precedentemente memorizzato nella cache, `/fast` segnala "Fast mode is currently unavailable"; entrambe le variabili skip ripristinano la modalità veloce in quella configurazione anche.175#### Fast mode has been disabled by your organization

176 

177Dietro un gateway, puoi vedere questo messaggio anche quando la tua organizzazione ha la modalità veloce abilitata, in una di queste configurazioni:

178 

179* Ti autentichi solo con [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential), senza accesso a claude.ai, senza chiave API e senza un controllo riuscito in cache. Claude Code tratta quindi la modalità veloce come disabilitata dalla tua organizzazione senza inviare la richiesta.

180* Un proxy intercetta il controllo e risponde con la sua stessa pagina, ad esempio un proxy che ispeziona TLS restituendo una pagina di blocco HTTP 200. Claude Code legge quella pagina come una risposta che indica che la tua organizzazione ha la modalità veloce disabilitata.

181 

182In entrambi i casi, imposta `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`, che salta completamente il controllo, anziché `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS`, che non si applica a nessuno dei due.

183 

184> [!NOTE]

185>

186> Le variabili di salto modificano solo il controllo lato client. Quando la tua organizzazione ha la modalità veloce disabilitata, l'API rifiuta le richieste di modalità veloce indipendentemente dal fatto che siano impostate o meno. Claude Code quindi riprova la richiesta a velocità standard, disattiva la modalità veloce, e `/fast` segnala che la tua organizzazione ha disabilitato la modalità veloce.

177 187 

178### Richiedi opt-in per sessione188### Richiedi opt-in per sessione

179 189 

hooks.md +17 −6

Details

961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.

962```962```

963 963 

964Per scoprire perché l'hook è fallito, controlla il [log di debug](#debug-hooks). Scegli la correzione adatta al tuo hook:964Se l'errore dice anche `PowerShell started no program`, inizia dalle [correzioni per un `command` composto solo da stringhe tra virgolette](#powershell-started-no-program), che PowerShell stampa invece di eseguire.

965 965 

966* **L'azione deve procedere quando l'hook fallisce**: aggiungi [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) all'hook966Senza Git Bash, qualsiasi codice di uscita diverso da 0 o 2 di quell'hook conta come un [fallimento](#block-the-action-when-a-hook-fails), anche quando stampa JSON che non nega la chiamata. Per scoprire perché l'hook è fallito, controlla il [log di debug](#debug-hooks). Poi scegli la correzione adatta al tuo hook:

967* **L'hook è scritto per Bash**: un hook in [forma shell](#exec-form-and-shell-form) senza `shell` impostato viene eseguito in PowerShell quando Git Bash non è installato, e lì uno script scritto per Bash potrebbe non funzionare così com'è. Installa [Git for Windows](https://git-scm.com/downloads/win), oppure imposta [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/it/env-vars) se Git Bash è installato in una posizione in cui Claude Code non lo trova, poi avvia una nuova sessione967 

968* **La chiamata deve procedere quando l'hook fallisce**: aggiungi [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) all'hook

969* **L'hook esce con 1 per avvisare ma deve bloccare quando si arresta in modo anomalo**: con `"onFailure": "continue"`, la chiamata procede con il codice di uscita 1, che si tratti di un avviso o di un arresto anomalo. Aggiungi invece `"onFailure": "block"`, e termina lo script con il codice di uscita 0 nei punti in cui avvisa, così quelle chiamate procedono. Per mostrare comunque l'avviso su `PreToolUse`, stampalo su stdout nel campo [`systemMessage`](#json-output) di un unico oggetto JSON.

970* **L'hook è scritto per Bash**: senza Git Bash, un hook in [forma shell](#exec-form-and-shell-form) senza `shell` impostato viene eseguito in PowerShell, dove può fallire. Installa [Git for Windows](https://git-scm.com/downloads/win), oppure imposta [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/it/env-vars) se Git Bash è installato in una posizione in cui Claude Code non lo trova. Poi avvia una nuova sessione.

968* **L'hook esegue un solo `.exe`, non un file `.cmd` o `.bat`**: metti il programma in `command` e i suoi argomenti in `args` per usare la forma exec, e aggiungi `"onFailure": "block"`. Claude Code avvia quindi il programma senza shell. Senza `"onFailure": "block"`, la chiamata può procedere quando il programma fallisce, manca o va in timeout971* **L'hook esegue un solo `.exe`, non un file `.cmd` o `.bat`**: metti il programma in `command` e i suoi argomenti in `args` per usare la forma exec, e aggiungi `"onFailure": "block"`. Claude Code avvia quindi il programma senza shell. Senza `"onFailure": "block"`, la chiamata può procedere quando il programma fallisce, manca o va in timeout

969* **L'hook esce con 1 per avvisare ma deve bloccare quando si arresta in modo anomalo**: con `"onFailure": "continue"`, la chiamata procede con il codice di uscita 1, che si tratti di un avviso o di un arresto anomalo. Aggiungi invece `"onFailure": "block"`, e termina lo script con il codice di uscita 0 nei punti in cui avvisa, così quelle chiamate procedono. Per mostrare l'avviso su `PreToolUse` dopo il codice di uscita 0, stampalo su stdout nel campo [`systemMessage`](#json-output) di un unico oggetto JSON

970* **Un hook di controllo PowerShell che deve bloccare in caso di fallimento**: senza `onFailure` impostato, smette di farlo una volta che Git for Windows è installato e Claude Code trova Git Bash. Aggiungi `"onFailure": "block"` in modo che un fallimento o un timeout blocchi la chiamata con o senza Git Bash. Imposta anche `"shell": "powershell"` in modo che da quel momento l'hook continui a essere eseguito in PowerShell invece che in Git Bash972* **Un hook di controllo PowerShell che deve bloccare in caso di fallimento**: senza `onFailure` impostato, smette di farlo una volta che Git for Windows è installato e Claude Code trova Git Bash. Aggiungi `"onFailure": "block"` in modo che un fallimento o un timeout blocchi la chiamata con o senza Git Bash. Imposta anche `"shell": "powershell"` in modo che da quel momento l'hook continui a essere eseguito in PowerShell invece che in Git Bash

971 973 

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

973 

974Prima della v2.1.309, il messaggio era `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`974Prima della v2.1.309, il messaggio era `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`

975 975 

976#### PowerShell started no program

977 

978Un hook con questo errore è stato eseguito in PowerShell, che stampa un `command` composto solo da stringhe tra virgolette, come `"command": "\"C:\\Tools\\guard.exe\""`, invece di eseguirlo.

979 

980* **Per stampare testo, come JSON**: imposta `"shell": "powershell"`, e l'hook esce con 0

981* **Per eseguire un file `.ps1`, `.cmd` o `.bat`, oppure un `.exe` il cui percorso contiene una variabile**: imposta `"shell": "powershell"` e metti `&` prima del percorso tra virgolette. Lascia `$HOME` così com'è scritto, e scrivi le variabili d'ambiente come l'[esempio `check.ps1`](#reference-scripts-by-path-in-powershell-hooks) scrive `$env:CLAUDE_PROJECT_DIR`

982* **Per eseguire un solo `.exe` in un percorso senza `$`**: rimuovi le virgolette interne da `command`, poi applica la [correzione per un hook che esegue un solo `.exe`](#failed-hooks-on-windows-without-git-bash), scrivendo `"args": []` se il programma non accetta argomenti

983* **Per eseguire uno script scritto per Bash**: applica la [correzione per un hook scritto per Bash](#failed-hooks-on-windows-without-git-bash)

984 

976#### Exit code 2 behavior per event985#### Exit code 2 behavior per event

977 986 

978Il codice di uscita 2 è il modo in cui un hook segnala "fermati, non farlo". L'effetto dipende dall'evento, perché alcuni eventi rappresentano azioni che possono essere bloccate (come una chiamata a uno strumento che non è ancora avvenuta) e altri rappresentano cose che sono già accadute o non possono essere impedite.987Il codice di uscita 2 è il modo in cui un hook segnala "fermati, non farlo". L'effetto dipende dall'evento, perché alcuni eventi rappresentano azioni che possono essere bloccate (come una chiamata a uno strumento che non è ancora avvenuta) e altri rappresentano cose che sono già accadute o non possono essere impedite.


4187}4196}

4188```4197```

4189 4198 

4199### Fare riferimento agli script tramite percorso negli hook PowerShell

4200 

4190Per fare riferimento alla directory radice del progetto da un comando in forma shell di PowerShell, scrivi `${CLAUDE_PROJECT_DIR}` o `$env:CLAUDE_PROJECT_DIR`. Claude Code riscrive i segnaposti `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` e `${CLAUDE_PLUGIN_DATA}` in un comando in forma shell di PowerShell nella forma `${env:NAME}` di PowerShell, indipendentemente dal fatto che l'hook sia definito in `settings.json`, un plugin o una skill. PowerShell quindi risolve il valore dall'ambiente esportato dopo l'analisi, quindi il segnaposto funziona all'interno di stringhe tra virgolette doppie ma non all'interno di stringhe tra virgolette singole, dove PowerShell non espande mai le variabili.4201Per fare riferimento alla directory radice del progetto da un comando in forma shell di PowerShell, scrivi `${CLAUDE_PROJECT_DIR}` o `$env:CLAUDE_PROJECT_DIR`. Claude Code riscrive i segnaposti `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` e `${CLAUDE_PLUGIN_DATA}` in un comando in forma shell di PowerShell nella forma `${env:NAME}` di PowerShell, indipendentemente dal fatto che l'hook sia definito in `settings.json`, un plugin o una skill. PowerShell quindi risolve il valore dall'ambiente esportato dopo l'analisi, quindi il segnaposto funziona all'interno di stringhe tra virgolette doppie ma non all'interno di stringhe tra virgolette singole, dove PowerShell non espande mai le variabili.

4191 4202 

4192Non scrivere la forma nuda `$CLAUDE_PROJECT_DIR` in un hook di PowerShell. PowerShell la analizza come una variabile locale non definita e la risolve in `$null`, il che lascia il percorso dello script senza il prefisso della directory radice del progetto. Claude Code non riscrive quella forma; invece registra un avviso nel [log di debug](#debug-hooks).4203Non scrivere la forma nuda `$CLAUDE_PROJECT_DIR` in un hook di PowerShell. PowerShell la analizza come una variabile locale non definita e la risolve in `$null`, il che lascia il percorso dello script senza il prefisso della directory radice del progetto. Claude Code non riscrive quella forma; invece registra un avviso nel [log di debug](#debug-hooks).

jetbrains.md +1 −1

Details

61/ide61/ide

62```62```

63 63 

64Quando la connessione ha successo, Claude Code conferma con un messaggio come `Connected to IntelliJ IDEA.` Se Claude Code rileva un IDE in esecuzione che non dispone del plugin, `/ide` installa il plugin per te e ti chiede di riavviare l'IDE.64Quando la connessione ha successo, Claude Code conferma con un messaggio come `Connected to IntelliJ IDEA.`

65 65 

66Se desideri che Claude abbia accesso agli stessi file del tuo IDE, avvia Claude Code dalla stessa directory della radice del progetto del tuo IDE.66Se desideri che Claude abbia accesso agli stessi file del tuo IDE, avvia Claude Code dalla stessa directory della radice del progetto del tuo IDE.

67 67 

Details

519| Errori `400` su ogni richiesta, nelle parole proprie del gateway che rifiutano lo schema di input di uno strumento o il suo `pattern`, su Claude Code v2.1.265 attraverso v2.1.267 | In un rollout graduale su quelle versioni, lo schema dello [strumento Artifact](https://code.claude.com/docs/it/artifacts.md#availability) porta un'espressione regolare con classi di caratteri Unicode `\p{...}`. L'API Anthropic l'accetta, ma un gateway o upstream che controlla il `pattern` dello schema di ogni strumento con il suo motore regex rifiuta l'intera richiesta | Aggiorna a v2.1.268 o successivo, che non invia l'espressione regolare. Su una versione interessata, [disattiva gli artifact](https://code.claude.com/docs/it/artifacts.md#disable-artifacts), che rimuove lo strumento e il suo schema dalle richieste |519| Errori `400` su ogni richiesta, nelle parole proprie del gateway che rifiutano lo schema di input di uno strumento o il suo `pattern`, su Claude Code v2.1.265 attraverso v2.1.267 | In un rollout graduale su quelle versioni, lo schema dello [strumento Artifact](https://code.claude.com/docs/it/artifacts.md#availability) porta un'espressione regolare con classi di caratteri Unicode `\p{...}`. L'API Anthropic l'accetta, ma un gateway o upstream che controlla il `pattern` dello schema di ogni strumento con il suo motore regex rifiuta l'intera richiesta | Aggiorna a v2.1.268 o successivo, che non invia l'espressione regolare. Su una versione interessata, [disattiva gli artifact](https://code.claude.com/docs/it/artifacts.md#disable-artifacts), che rimuove lo strumento e il suo schema dalle richieste |

520| Errori `400` su ogni richiesta, nelle parole proprie del gateway che rifiutano un tipo di strumento non riconosciuto, come `Input tag 'advisor_20260301'`, su Claude Code v2.1.275 | In un rollout graduale su quella versione, le richieste portano una voce dello [strumento advisor](https://code.claude.com/docs/it/advisor.md) anche con l'advisor disattivato. L'API Anthropic l'accetta, ma un gateway o upstream che convalida i tipi di strumento rifiuta l'intera richiesta; uno che [inoltra i campi del corpo della richiesta invariati](https://code.claude.com/docs/it/llm-gateway-protocol.md#forward-as-open-lists) lo passa attraverso senza essere interessato. La voce è una dichiarazione che non porta contenuto di conversazione | Aggiorna a v2.1.276 o successivo, che non invia la voce dietro un gateway `ANTHROPIC_BASE_URL` a meno che tu non attivi l'advisor. Su v2.1.275, imposta [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/it/env-vars), che rimuove la voce dalle richieste |520| Errori `400` su ogni richiesta, nelle parole proprie del gateway che rifiutano un tipo di strumento non riconosciuto, come `Input tag 'advisor_20260301'`, su Claude Code v2.1.275 | In un rollout graduale su quella versione, le richieste portano una voce dello [strumento advisor](https://code.claude.com/docs/it/advisor.md) anche con l'advisor disattivato. L'API Anthropic l'accetta, ma un gateway o upstream che convalida i tipi di strumento rifiuta l'intera richiesta; uno che [inoltra i campi del corpo della richiesta invariati](https://code.claude.com/docs/it/llm-gateway-protocol.md#forward-as-open-lists) lo passa attraverso senza essere interessato. La voce è una dichiarazione che non porta contenuto di conversazione | Aggiorna a v2.1.276 o successivo, che non invia la voce dietro un gateway `ANTHROPIC_BASE_URL` a meno che tu non attivi l'advisor. Su v2.1.275, imposta [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/it/env-vars), che rimuove la voce dalle richieste |

521| Modelli mancanti dal selettore `/model` | I nomi dei modelli del gateway non sono nell'elenco integrato di Claude Code, oppure Claude Code sta mostrando un [`modelPicker`](https://code.claude.com/docs/it/settings-reference#modelpicker) che sostituisce le opzioni integrate | Abilita la [scoperta dei modelli del gateway](#add-gateway-models-to-the-model-picker) o aggiungi nomi con le variabili di [configurazione del modello](https://code.claude.com/docs/it/model-config.md). Se Claude Code mostra un `modelPicker` che sostituisce, aggiungi i modelli del gateway ad esso, oppure chiedi al tuo amministratore di aggiungerli quando le impostazioni gestite lo forniscono |521| Modelli mancanti dal selettore `/model` | I nomi dei modelli del gateway non sono nell'elenco integrato di Claude Code, oppure Claude Code sta mostrando un [`modelPicker`](https://code.claude.com/docs/it/settings-reference#modelpicker) che sostituisce le opzioni integrate | Abilita la [scoperta dei modelli del gateway](#add-gateway-models-to-the-model-picker) o aggiungi nomi con le variabili di [configurazione del modello](https://code.claude.com/docs/it/model-config.md). Se Claude Code mostra un `modelPicker` che sostituisce, aggiungi i modelli del gateway ad esso, oppure chiedi al tuo amministratore di aggiungerli quando le impostazioni gestite lo forniscono |

522| `/fast` segnala `Fast mode unavailable due to network connectivity issues` mentre le richieste di inferenza funzionano | Il controllo della disponibilità della [modalità veloce](https://code.claude.com/docs/it/fast-mode.md) va direttamente a `api.anthropic.com` e non segue `ANTHROPIC_BASE_URL`, quindi l'uscita diretta bloccata non riesce il controllo. Lo stesso messaggio appare su una rete aperta quando il controllo presenta una chiave emessa dal gateway da `ANTHROPIC_API_KEY` o da un `apiKeyHelper` e Anthropic la rifiuta | Consenti `api.anthropic.com` se l'uscita è bloccata, oppure imposta una variabile di skip; per una chiave del gateway rifiutata solo le variabili di skip aiutano. Vedi [usa la modalità veloce dietro proxy e gateway LLM](https://code.claude.com/docs/it/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` segnala `Fast mode unavailable due to network connectivity issues` mentre le richieste di inferenza funzionano | Il controllo della disponibilità della [modalità veloce](https://code.claude.com/docs/it/fast-mode.md) va direttamente a `api.anthropic.com` e non segue `ANTHROPIC_BASE_URL`, quindi l'uscita diretta bloccata fa fallire il controllo | Aggiungi `api.anthropic.com` all'allowlist se l'uscita è bloccata, oppure imposta una variabile di skip. Vedi [usa la modalità veloce dietro proxy e gateway LLM](https://code.claude.com/docs/it/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/fast` segnala `Fast mode has been disabled by your organization` in una sessione autenticata con `ANTHROPIC_AUTH_TOKEN`, anche se l'organizzazione ha la modalità veloce abilitata | Il controllo della disponibilità richiede un accesso a claude.ai o una chiave API Anthropic; con solo un token bearer, Claude Code tratta la modalità veloce come disabilitata senza inviare il controllo | Imposta `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; vedi [usa la modalità veloce dietro proxy e gateway LLM](https://code.claude.com/docs/it/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |523| `/fast` segnala `Fast mode is currently unavailable` in una sessione che si autentica con una chiave emessa dal gateway in `ANTHROPIC_API_KEY` | Mentre `ANTHROPIC_BASE_URL` punta al tuo gateway, Claude Code non invia a `api.anthropic.com` una chiave che non è nel formato di una chiave API Anthropic. Il controllo della disponibilità della [modalità veloce](https://code.claude.com/docs/it/fast-mode.md) quindi non viene inviato e, senza un precedente controllo riuscito memorizzato nella cache, Claude Code tratta la modalità veloce come non disponibile | Imposta `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`; vedi [usa la modalità veloce dietro proxy e gateway LLM](https://code.claude.com/docs/it/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| `/fast` segnala `Fast mode has been disabled by your organization` in una sessione autenticata con `ANTHROPIC_AUTH_TOKEN`, anche se l'organizzazione ha la modalità veloce abilitata | Il controllo della disponibilità richiede un accesso a claude.ai o una chiave API; con solo un token bearer, Claude Code tratta la modalità veloce come disabilitata senza inviare il controllo | Imposta `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; vedi [usa la modalità veloce dietro proxy e gateway LLM](https://code.claude.com/docs/it/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| Claude Code ti chiede di accedere anche se il [test curl](#verify-the-connection) ha successo | La CLI non ha una credenziale propria: un URL di base raggiungibile non è uno, e in una sessione interattiva un blocco `env` nel `.claude/settings.json` o `.claude/settings.local.json` di un progetto si applica solo dopo la procedura guidata di primo avvio e il [prompt di fiducia](https://code.claude.com/docs/it/permissions.md#what-runs-before-you-trust-a-folder) | Imposta `ANTHROPIC_AUTH_TOKEN` da qualche parte che Claude Code legge prima della configurazione di primo avvio: un'esportazione shell, il blocco `env` in `~/.claude/settings.json`, o impostazioni gestite |525| Claude Code ti chiede di accedere anche se il [test curl](#verify-the-connection) ha successo | La CLI non ha una credenziale propria: un URL di base raggiungibile non è uno, e in una sessione interattiva un blocco `env` nel `.claude/settings.json` o `.claude/settings.local.json` di un progetto si applica solo dopo la procedura guidata di primo avvio e il [prompt di fiducia](https://code.claude.com/docs/it/permissions.md#what-runs-before-you-trust-a-folder) | Imposta `ANTHROPIC_AUTH_TOKEN` da qualche parte che Claude Code legge prima della configurazione di primo avvio: un'esportazione shell, il blocco `env` in `~/.claude/settings.json`, o impostazioni gestite |

525| `ANTHROPIC_API_KEY` è impostato ma ignorato, senza prompt | La chiave ha bisogno di un'approvazione una tantum nelle sessioni interattive, e una chiave precedentemente rifiutata viene ignorata senza chiedere di nuovo | Abilitala sotto `/config` con l'opzione `Use custom API key` |526| `ANTHROPIC_API_KEY` è impostato ma ignorato, senza prompt | La chiave ha bisogno di un'approvazione una tantum nelle sessioni interattive, e una chiave precedentemente rifiutata viene ignorata senza chiedere di nuovo | Abilitala sotto `/config` con l'opzione `Use custom API key` |

526| `This machine's managed settings require a first-party login`, oppure [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) quando le impostazioni gestite impostano `forceLoginMethod` a `"gateway"` o impostano anche `forceLoginGatewayUrl` | Le impostazioni gestite includono `forceLoginMethod` o `forceLoginOrgUUID`, che non possono coesistere con `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, o `apiKeyHelper` | Il tuo amministratore deve rimuovere `forceLoginMethod`, `forceLoginOrgUUID`, e `forceLoginGatewayUrl` dalle impostazioni gestite per utilizzare le credenziali del gateway, oppure rimuovere la credenziale del gateway e utilizzare l'accesso che le impostazioni gestite richiedono. I due non possono essere combinati |527| `This machine's managed settings require a first-party login`, oppure [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) quando le impostazioni gestite impostano `forceLoginMethod` a `"gateway"` o impostano anche `forceLoginGatewayUrl` | Le impostazioni gestite includono `forceLoginMethod` o `forceLoginOrgUUID`, che non possono coesistere con `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, o `apiKeyHelper` | Il tuo amministratore deve rimuovere `forceLoginMethod`, `forceLoginOrgUUID`, e `forceLoginGatewayUrl` dalle impostazioni gestite per utilizzare le credenziali del gateway, oppure rimuovere la credenziale del gateway e utilizzare l'accesso che le impostazioni gestite richiedono. I due non possono essere combinati |

mcp.md +3 −3

Details

384Questi nuovi tentativi non si applicano nei seguenti casi:384Questi nuovi tentativi non si applicano nei seguenti casi:

385 385 

386* La prima connessione di un server stdio. Per riprovarla, consulta [Server stdio che terminano o non si avviano](#stdio-servers-that-exit-or-fail-to-start)386* La prima connessione di un server stdio. Per riprovarla, consulta [Server stdio che terminano o non si avviano](#stdio-servers-that-exit-or-fail-to-start)

387* La prima connessione di un server WebSocket387* La prima connessione di un server WebSocket. Per riprovarla in una sessione interattiva del terminale, seleziona **Reconnect** dal menu del server in `/mcp`

388* Un errore di autenticazione o di risorsa non trovata, perché per risolverlo è necessaria una modifica alla configurazione. Quando un [`headersHelper`](#use-dynamic-headers-for-custom-authentication) è l'unica fonte dell'header `Authorization` del server, Claude Code riprova comunque un errore di autenticazione, perché riesegue l'helper a ogni tentativo e può ottenere una credenziale nuova388* Un errore di autenticazione o di risorsa non trovata, perché per risolverlo è necessaria una modifica alla configurazione. Quando un [`headersHelper`](#use-dynamic-headers-for-custom-authentication) è l'unica fonte dell'header `Authorization` del server, Claude Code riprova comunque un errore di autenticazione, perché riesegue l'helper a ogni tentativo e può ottenere una credenziale nuova

389 389 

390#### Server stdio che terminano o non si avviano390#### Server stdio che terminano o non si avviano


403 403 

404#### Riprovare tu stesso i server in errore404#### Riprovare tu stesso i server in errore

405 405 

406Per riprovare tutti i server in errore o che necessitano di autenticazione, esegui `/mcp reconnect all`. Nel terminale interattivo questo richiede Claude Code v2.1.284 o successiva, e le versioni precedenti stampano lì `MCP server "all" not found`.406Per riprovare ogni server in errore o che richiede autenticazione, esegui `/mcp reconnect all` al prompt di Claude Code in una sessione interattiva del terminale. Questo richiede Claude Code v2.1.284 o successivo. Le versioni precedenti stampano `MCP server "all" not found`.

407 407 

408#### Come Claude viene a sapere che un server è in errore408#### Come Claude viene a sapere che un server è in errore

409 409 


1332 1332 

1333I server da claude.ai vengono visualizzati nell'elenco con indicatori che mostrano che provengono da claude.ai.1333I server da claude.ai vengono visualizzati nell'elenco con indicatori che mostrano che provengono da claude.ai.

1334 1334 

1335Anthropic fornisce anche alcuni connettori da sola, senza che tu o un amministratore li aggiunga. Negli account in cui [Claude Docs](https://code.claude.com/docs/it/artifacts.md#write-a-document-with-claude-docs) è disponibile, `/mcp` elenca `claude.ai Claude Docs` senza configurazione, e Claude lo utilizza quando chiedi un documento destinato ad altre persone. Per disattivarlo, aggiungi una voce `serverName` di `"claude.ai Claude Docs"` a `deniedMcpServers` o utilizza l'interruttore `/mcp`, entrambi descritti in [Disabilitare i connettori claude.ai](#disable-claude-ai-connectors).1335Anthropic fornisce anche alcuni connettori da sola, senza che tu o un amministratore li aggiunga. Negli account in cui [Claude Docs](https://code.claude.com/docs/it/artifacts.md#write-a-document-with-claude-docs) è disponibile, `/mcp` elenca `claude.ai Claude Docs` senza configurazione, e Claude lo utilizza quando chiedi un documento destinato ad altre persone. Per disattivare solo questo connettore, consulta [Disabilitare i connettori claude.ai](#disable-claude-ai-connectors).

1336 1336 

1337Claude Code contrassegna un connettore come `managed` in `/mcp` e nel gestore [`/plugin`](https://code.claude.com/docs/it/plugins/install) quando la tua organizzazione gestisce la sua autenticazione in claude.ai. Lo stato managed non cambia il modo in cui Claude Code si connette al connettore o applica i [controlli degli strumenti](#organization-controls-on-connector-tools) della tua organizzazione.1337Claude Code contrassegna un connettore come `managed` in `/mcp` e nel gestore [`/plugin`](https://code.claude.com/docs/it/plugins/install) quando la tua organizzazione gestisce la sua autenticazione in claude.ai. Lo stato managed non cambia il modo in cui Claude Code si connette al connettore o applica i [controlli degli strumenti](#organization-controls-on-connector-tools) della tua organizzazione.

1338 1338 

model-config.md +7 −2

Details

349 349 

350Quando le impostazioni gestite che Claude Code applica definiscono `availableModels`, solo quell'elenco si applica, a parte una [piattaforma host che fornisce il proprio](https://code.claude.com/docs/it/settings.md#exceptions-to-managed-settings-precedence): le voci nelle impostazioni utente, progetto o locale non possono estenderlo, e Claude Code non unisce mai `availableModels` tra fonti gestite nemmeno; [come Claude Code combina le fonti gestite](https://code.claude.com/docs/it/managed-settings.md#how-claude-code-combines-managed-sources) indica quale elenco della fonte si applica. Altrimenti, gli elenchi dalle impostazioni utente, progetto e locale vengono [concatenati e deduplicati](https://code.claude.com/docs/it/settings.md#settings-precedence) come altre impostazioni di array. Prima di Claude Code v2.1.175, le voci da ambiti di precedenza inferiore si univano nell'elenco gestito invece di essere sostituite da esso.350Quando le impostazioni gestite che Claude Code applica definiscono `availableModels`, solo quell'elenco si applica, a parte una [piattaforma host che fornisce il proprio](https://code.claude.com/docs/it/settings.md#exceptions-to-managed-settings-precedence): le voci nelle impostazioni utente, progetto o locale non possono estenderlo, e Claude Code non unisce mai `availableModels` tra fonti gestite nemmeno; [come Claude Code combina le fonti gestite](https://code.claude.com/docs/it/managed-settings.md#how-claude-code-combines-managed-sources) indica quale elenco della fonte si applica. Altrimenti, gli elenchi dalle impostazioni utente, progetto e locale vengono [concatenati e deduplicati](https://code.claude.com/docs/it/settings.md#settings-precedence) come altre impostazioni di array. Prima di Claude Code v2.1.175, le voci da ambiti di precedenza inferiore si univano nell'elenco gestito invece di essere sostituite da esso.

351 351 

352All'interno dell'elenco effettivo, una voce che nomina un modello specifico in una famiglia, sia un prefisso di versione che un ID modello completo, disabilita la voce wildcard della famiglia: `["sonnet", "claude-sonnet-4-5"]` consente solo le versioni di Sonnet 4.5, non ogni modello Sonnet.352All'interno dell'elenco effettivo, una voce che nomina un modello specifico in una famiglia, sia un prefisso di versione che un ID modello completo, disabilita la voce wildcard della famiglia. Ad esempio, con `["sonnet", "claude-sonnet-4-5"]`, gli utenti possono scegliere solo gli ID modello a cui `claude-sonnet-4-5` [corrisponde](#restrict-model-selection), non ogni modello Sonnet.

353 353 

354### ID modello Mantle354### ID modello Mantle

355 355 


947>947>

948> Un'allowlist `availableModels` fornita tramite [MDM o un file di impostazioni gestite](https://code.claude.com/docs/it/managed-settings.md#delivery-mechanisms) si applica comunque quando usi provider di terze parti; [le impostazioni gestite dal server non vengono fornite lì](https://code.claude.com/docs/it/server-managed-settings.md#platform-availability).948> Un'allowlist `availableModels` fornita tramite [MDM o un file di impostazioni gestite](https://code.claude.com/docs/it/managed-settings.md#delivery-mechanisms) si applica comunque quando usi provider di terze parti; [le impostazioni gestite dal server non vengono fornite lì](https://code.claude.com/docs/it/server-managed-settings.md#platform-availability).

949>949>

950> Il filtraggio corrisponde a un alias di modello come `opus`, a un prefisso di versione come `claude-opus-4-8` o all'ID di modello completo nella forma del provider. I prefissi specifici del provider come `us.anthropic.` non vengono rimossi, quindi per consentire un modello specifico, elenca il suo ID completo nella forma del provider, oppure mappalo tramite [`modelOverrides`](#override-model-ids-per-version). Per un modello fissato, quell'ID è il valore che imposti nella sua variabile `ANTHROPIC_DEFAULT_*_MODEL`. Qualsiasi suffisso `[1m]` viene rimosso sia dalla voce dell'allowlist sia dal modello richiesto prima della corrispondenza.950> Il filtraggio corrisponde a un alias di modello come `opus`, a un prefisso di versione come `claude-opus-4-8` o all'ID di modello completo nella forma del provider. I prefissi specifici del provider come `us.anthropic.` non vengono rimossi, quindi per consentire un modello specifico, mappalo tramite [`modelOverrides`](#override-model-ids-per-version) oppure elenca il suo ID completo nella forma del provider:

951>

952> * **Google Cloud's Agent Platform**: quando l'ID richiesto da Claude Code contiene una data con `@`, come `claude-sonnet-4-5@20250929`, includi la data nella voce dell'allowlist. Da solo, `claude-sonnet-4-5` non corrisponde a quell'ID con nessuna delle due impostazioni di [`availableModelsMatch`](https://code.claude.com/docs/it/settings-reference#availablemodelsmatch).

953> * **Modelli fissati**: elenca il valore che imposti nella variabile `ANTHROPIC_DEFAULT_*_MODEL` del modello

954>

955> Qualsiasi suffisso `[1m]` viene rimosso sia dalla voce dell'allowlist sia dal modello richiesto prima della corrispondenza.

951 956 

952### Personalizzare la visualizzazione e le capacità del modello fissato957### Personalizzare la visualizzazione e le capacità del modello fissato

953 958 

Details

605 605 

606* `prompt.id`: UUID che correla un prompt dell'utente con tutti gli eventi successivi fino al prompt seguente. Consulta [Attributi di correlazione degli eventi](#event-correlation-attributes).606* `prompt.id`: UUID che correla un prompt dell'utente con tutti gli eventi successivi fino al prompt seguente. Consulta [Attributi di correlazione degli eventi](#event-correlation-attributes).

607* `workspace.host_paths`: directory del workspace host selezionate nell'app desktop, come array di stringhe607* `workspace.host_paths`: directory del workspace host selezionate nell'app desktop, come array di stringhe

608* `workflow.run_id`: identificatore dell'esecuzione, con prefisso `wf_`, negli eventi API e degli strumenti emessi dagli agenti che appartengono a un'esecuzione dello strumento [Workflow](https://code.claude.com/docs/it/workflows.md). Filtrando gli eventi per un singolo `workflow.run_id` si ricostruiscono le richieste API e i risultati degli strumenti di quell'esecuzione. L'identificatore copre gli agenti generati dallo script del workflow e tutti gli agenti che questi generano a loro volta, come le invocazioni di skill. Corrisponde all'identificatore dell'esecuzione riportato nel risultato dello strumento Workflow. Assente in tutti gli altri eventi.608* `workflow.run_id`: identificatore dell'esecuzione, con prefisso `wf_`, negli eventi API e degli strumenti emessi dagli agenti che appartengono a un'esecuzione dello strumento [Workflow](https://code.claude.com/docs/it/workflows.md). Filtrando gli eventi per un singolo `workflow.run_id` si ricostruiscono le richieste API e i risultati degli strumenti di quell'esecuzione. L'identificatore copre gli agenti generati dallo script del workflow e tutti gli agenti che questi generano a loro volta, come le invocazioni di skill. Corrisponde all'identificatore dell'esecuzione riportato nel risultato dello strumento Workflow.

609* `workflow.name`: nome del workflow, il `meta.name` del suo script, emesso insieme a `workflow.run_id`. I nomi dei workflow integrati compaiono testualmente quando l'esecuzione usa lo script integrato non modificato. I nomi creati dagli utenti, incluse le copie modificate degli script integrati, vengono sostituiti con `custom` a meno che non sia impostato `OTEL_LOG_TOOL_DETAILS=1`.609* `workflow.name`: nome del workflow, il `meta.name` del suo script, emesso insieme a `workflow.run_id`. I nomi dei workflow integrati compaiono testualmente quando l'esecuzione usa lo script integrato non modificato. I nomi creati dagli utenti, incluse le copie modificate degli script integrati, vengono sostituiti con `custom` a meno che non sia impostato `OTEL_LOG_TOOL_DETAILS=1`.

610* `agent_id`: identificatore del [subagent](https://code.claude.com/docs/it/sub-agents.md) che ha generato l'evento, come `a3f2c1b4d5e6f7a80`. Gli eventi che lo contengono includono gli eventi API e degli strumenti di un subagent, i suoi eventi [`assistant_response`](#assistant-response-event) e [`subagent_completed`](#subagent-completed-event) per il subagent terminato. Assente negli eventi della sessione principale e dei [compagni di team in-process](https://code.claude.com/docs/it/agent-teams.md#choose-a-display-mode). L'[`agent_id` dello span](#span-attributes) del subagent è lo stesso valore, oppure aggiunge un'etichetta dopo la `a` iniziale come in `acompact-3f2c1b4d5e6f7a80`. Richiede Claude Code v2.1.310 o successivo

611* `parent_agent_id`: l'`agent_id` dell'agente che ha generato o ripreso per ultimo il subagent che ha generato l'evento. Assente quando quell'agente è la sessione principale. Richiede Claude Code v2.1.310 o successivo

610 612 

611#### Attributi del repository613#### Attributi del repository

612 614 


755| `prompt.id` | Identificatore UUID v4 che collega tutti gli eventi prodotti durante l'elaborazione di un singolo prompt dell'utente |757| `prompt.id` | Identificatore UUID v4 che collega tutti gli eventi prodotti durante l'elaborazione di un singolo prompt dell'utente |

756| `event.sequence` | Contatore a base 0 per ordinare gli eventi, conteggiato per processo di Claude Code anziché per sessione |758| `event.sequence` | Contatore a base 0 per ordinare gli eventi, conteggiato per processo di Claude Code anziché per sessione |

757| `message.uuid` | UUID del messaggio così come salvato nella trascrizione della sessione, i file `~/.claude/projects/*/*.jsonl`. Presente in `assistant_response`, in `api_response_body` e in `user_prompt` tranne che per l'invio di comandi, che può produrre zero o più messaggi. In `assistant_response` e `api_response_body`, è la voce finale della trascrizione della risposta, da cui si concatena il `parentUuid` del turno successivo. Richiede Claude Code v2.1.274 o successiva in `api_response_body` |759| `message.uuid` | UUID del messaggio così come salvato nella trascrizione della sessione, i file `~/.claude/projects/*/*.jsonl`. Presente in `assistant_response`, in `api_response_body` e in `user_prompt` tranne che per l'invio di comandi, che può produrre zero o più messaggi. In `assistant_response` e `api_response_body`, è la voce finale della trascrizione della risposta, da cui si concatena il `parentUuid` del turno successivo. Richiede Claude Code v2.1.274 o successiva in `api_response_body` |

758| `request_id` | ID della richiesta API assegnato dal server, letto dall'header di risposta `request-id`, ad esempio `req_011...`. In una risposta senza header `request-id`, come su [Amazon Bedrock](https://code.claude.com/docs/it/amazon-bedrock.md), il valore proviene invece dall'header `x-amzn-requestid`. Presente in `api_request`, `api_error`, `api_refusal`, `assistant_response` e `api_response_body` quando la risposta contiene uno dei due header. Corrisponde allo stesso attributo dello span di trace `llm_request`. La fonte `x-amzn-requestid` richiede Claude Code v2.1.282 o successiva |760| `request_id` | ID della richiesta API assegnato dal server, letto dall'header di risposta `request-id`, come `req_011...`. In una risposta senza header `request-id`, come su [Amazon Bedrock](https://code.claude.com/docs/it/amazon-bedrock.md), il valore proviene invece dall'header `x-amzn-requestid`. Presente in `api_request`, `api_error`, `api_refusal`, `assistant_response`, `api_response_body`, [`tool_result`](#tool-result-event) e [`tool_decision`](#tool-decision-event) quando la risposta contiene uno dei due header. Corrisponde allo stesso attributo nello span di traccia `llm_request`. L'origine `x-amzn-requestid` richiede Claude Code v2.1.282 o successivo |

759| `client_request_id` | UUID generato dal client e inviato come header di richiesta `x-client-request-id`. Presente in `api_request` e `api_error` nelle connessioni API first-party; assente nei backend di provider di terze parti e quando la richiesta è stata riprovata tramite il fallback non in streaming. Associa una richiesta alla sua risposta e resta disponibile per errori come i timeout che non hanno mai prodotto un `request_id` del server. Corrisponde allo stesso attributo dello span di trace `llm_request` |761| `client_request_id` | UUID generato dal client e inviato come header di richiesta `x-client-request-id`. Presente in `api_request` e `api_error` nelle connessioni API first-party; assente nei backend di provider di terze parti e quando la richiesta è stata riprovata tramite il fallback non in streaming. Associa una richiesta alla sua risposta e resta disponibile per errori come i timeout che non hanno mai prodotto un `request_id` del server. Corrisponde allo stesso attributo dello span di trace `llm_request` |

760 762 

761Per tracciare tutta l'attività generata da un singolo prompt, filtra i tuoi eventi per uno specifico valore di `prompt.id`. In questo modo ottieni l'evento user\_prompt, tutti gli eventi api\_request e tutti gli eventi tool\_result verificatisi durante l'elaborazione di quel prompt.763Per tracciare tutta l'attività generata da un singolo prompt, filtra i tuoi eventi per uno specifico valore di `prompt.id`. In questo modo ottieni l'evento user\_prompt, tutti gli eventi api\_request e tutti gli eventi tool\_result verificatisi durante l'elaborazione di quel prompt.


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

821* `tool_name`: Nome dello strumento823* `tool_name`: Nome dello strumento

822* `tool_use_id`: Identificatore univoco di questa invocazione dello strumento. Corrisponde al `tool_use_id` passato agli hook, consentendo la correlazione tra gli eventi OTel e i dati acquisiti dagli hook.824* `tool_use_id`: Identificatore univoco di questa invocazione dello strumento. Corrisponde al `tool_use_id` passato agli hook, consentendo la correlazione tra gli eventi OTel e i dati acquisiti dagli hook.

825* `request_id`: il [`request_id`](#event-correlation-attributes) della risposta API che conteneva questa chiamata allo strumento, così puoi collegare la chiamata agli eventi API di quella risposta. Assente quando quella risposta non aveva un ID di richiesta o quando nessuna risposta API conteneva la chiamata. Richiede Claude Code v2.1.310 o successivo

823* `success`: `"true"` o `"false"`826* `success`: `"true"` o `"false"`

824* `duration_ms`: Tempo di esecuzione in millisecondi827* `duration_ms`: Tempo di esecuzione in millisecondi

825* `error_type`: Stringa della categoria di errore quando lo strumento non è riuscito, ad esempio `"Error:ENOENT"` o `"ShellError"`828* `error_type`: Stringa della categoria di errore quando lo strumento non è riuscito, ad esempio `"Error:ENOENT"` o `"ShellError"`


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

973* `tool_name`: Nome dello strumento (ad esempio, "Read", "Edit", "Write", "NotebookEdit")976* `tool_name`: Nome dello strumento (ad esempio, "Read", "Edit", "Write", "NotebookEdit")

974* `tool_use_id`: Identificatore univoco di questa invocazione dello strumento. Corrisponde al `tool_use_id` passato agli hook, consentendo la correlazione tra gli eventi OTel e i dati acquisiti dagli hook.977* `tool_use_id`: Identificatore univoco di questa invocazione dello strumento. Corrisponde al `tool_use_id` passato agli hook, consentendo la correlazione tra gli eventi OTel e i dati acquisiti dagli hook.

978* `request_id`: il [`request_id`](#event-correlation-attributes) della risposta API che conteneva questa chiamata allo strumento, così puoi collegare la chiamata agli eventi API di quella risposta. Assente quando quella risposta non aveva un ID di richiesta o quando nessuna risposta API conteneva la chiamata. Richiede Claude Code v2.1.310 o successivo

975* `decision`: `"accept"` oppure `"reject"`979* `decision`: `"accept"` oppure `"reject"`

976* `tool_source`: Sempre presente. La provenienza dello strumento, come insieme chiuso di valori definiti dalla CLI:980* `tool_source`: Sempre presente. La provenienza dello strumento, come insieme chiuso di valori definiti dalla CLI:

977 * `"builtin"`: gli strumenti propri della CLI981 * `"builtin"`: gli strumenti propri della CLI


1024 * Per lo strumento Skill: include `skill_name`1028 * Per lo strumento Skill: include `skill_name`

1025 * Per lo strumento Agent o il precedente strumento Task: include `subagent_type`1029 * Per lo strumento Agent o il precedente strumento Task: include `subagent_type`

1026 1030 

1027Se abbassi `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` dell'SDK OpenTelemetry al di sotto del numero di attributi di un evento `tool_decision`, l'SDK scarta gli attributi che Claude Code ha impostato per ultimi. L'SDK scarta per primo `permission_mode`, per secondo `classifier_category` e per terzo `classifier_verdict`, e scarta gli altri attributi dell'evento solo dopo questi tre. Questo ordinamento richiede Claude Code v2.1.302 o successiva.1031Se abbassi `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` dell'SDK OpenTelemetry al di sotto del numero di attributi di un evento `tool_decision`, l'SDK scarta gli attributi che Claude Code ha impostato per ultimi. L'SDK li scarta prima di qualsiasi altro attributo, in questo ordine, saltando quelli che l'evento non contiene:

1032 

10331. `parent_agent_id`

10342. `agent_id`

10353. `request_id`

10364. `permission_mode`

10375. `classifier_category`

10386. `classifier_verdict`

1039 

1040`permission_mode`, `classifier_category` e `classifier_verdict` vengono scartati in questo ordine su Claude Code v2.1.302 o successivo. `parent_agent_id`, `agent_id` e `request_id` richiedono la v2.1.310 o successiva.

1028 1041 

1029#### Evento di sicurezza1042#### Evento di sicurezza

1030 1043 

Details

240 240 

241I due host di intake Datadog trasportano solo telemetria operazionale facoltativa, e l'impostazione [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/it/env-vars) disabilita entrambi. Le sessioni su provider di terze parti non inviano mai a questi host, anche quando una piattaforma imposta [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/it/env-vars) e le metriche di telemetria sono abilitate per impostazione predefinita. Consultate [Servizi di telemetria](https://code.claude.com/docs/it/data-usage.md#telemetry-services) per tutto ciò che Claude Code invia e come disabilitarlo prima di finalizzare la vostra lista di autorizzazione.241I due host di intake Datadog trasportano solo telemetria operazionale facoltativa, e l'impostazione [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/it/env-vars) disabilita entrambi. Le sessioni su provider di terze parti non inviano mai a questi host, anche quando una piattaforma imposta [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/it/env-vars) e le metriche di telemetria sono abilitate per impostazione predefinita. Consultate [Servizi di telemetria](https://code.claude.com/docs/it/data-usage.md#telemetry-services) per tutto ciò che Claude Code invia e come disabilitarlo prima di finalizzare la vostra lista di autorizzazione.

242 242 

243### Instradamento tramite provider cloud e gateway LLM

244 

243Quando si utilizza [Amazon Bedrock](https://code.claude.com/docs/it/amazon-bedrock.md), [Google Cloud's Agent Platform](https://code.claude.com/docs/it/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/it/microsoft-foundry.md) o una sessione [gateway di app Claude](https://code.claude.com/docs/it/claude-apps-gateway) con accesso effettuato, il traffico del modello e l'autenticazione vanno al vostro provider o gateway invece di `api.anthropic.com`, `claude.ai` o `platform.claude.com`. Lo strumento WebFetch chiama ancora `api.anthropic.com` per il suo [controllo di sicurezza del dominio](https://code.claude.com/docs/it/data-usage.md#webfetch-domain-safety-check) a meno che non impostiate `skipWebFetchPreflight: true` nelle [impostazioni](https://code.claude.com/docs/it/settings.md).245Quando si utilizza [Amazon Bedrock](https://code.claude.com/docs/it/amazon-bedrock.md), [Google Cloud's Agent Platform](https://code.claude.com/docs/it/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/it/microsoft-foundry.md) o una sessione [gateway di app Claude](https://code.claude.com/docs/it/claude-apps-gateway) con accesso effettuato, il traffico del modello e l'autenticazione vanno al vostro provider o gateway invece di `api.anthropic.com`, `claude.ai` o `platform.claude.com`. Lo strumento WebFetch chiama ancora `api.anthropic.com` per il suo [controllo di sicurezza del dominio](https://code.claude.com/docs/it/data-usage.md#webfetch-domain-safety-check) a meno che non impostiate `skipWebFetchPreflight: true` nelle [impostazioni](https://code.claude.com/docs/it/settings.md).

244 246 

245Quando si instrada attraverso un [gateway LLM](https://code.claude.com/docs/it/llm-gateway) con [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential), il controllo di disponibilità della [modalità veloce](https://code.claude.com/docs/it/fast-mode.md) chiama ancora `api.anthropic.com` piuttosto che l'URL di base del gateway. Il controllo rispetta un proxy HTTP configurato, quindi dove un blocco di rete è la causa, una voce di lista di autorizzazione per `api.anthropic.com` nel proxy è la soluzione. Un blocco di rete non riesce il controllo solo dove l'host non è raggiungibile nemmeno attraverso il proxy, e la modalità veloce segnala quindi un errore di connettività. Lo stesso errore di connettività appare quando il controllo presenta una credenziale emessa dal gateway che Anthropic rifiuta; l'inserimento nella lista di autorizzazione non aiuta lì, poiché nulla è bloccato. Consultate [usare la modalità veloce dietro proxy e gateway LLM](https://code.claude.com/docs/it/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) per le variabili che la ripristinano.247Se i tuoi sviluppatori usano la [modalità veloce](https://code.claude.com/docs/it/fast-mode.md) dietro un [gateway LLM](https://code.claude.com/docs/it/llm-gateway) impostato con [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/it/llm-gateway-connect#set-the-base-url-and-credential), mantieni `api.anthropic.com` raggiungibile attraverso il tuo proxy. Quando Claude Code invia il controllo di disponibilità della modalità veloce, questo va a quell'host attraverso qualsiasi proxy HTTP configurato, mai al gateway. Per sapere quando il controllo non viene inviato e quale variabile ripristina la modalità veloce in ciascun caso, consulta [Usare la modalità veloce dietro proxy e gateway LLM](https://code.claude.com/docs/it/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways).

246 248 

247### Liste di autorizzazione IP dell'organizzazione e uscita proxy249### Liste di autorizzazione IP dell'organizzazione e uscita proxy

248 250 

Details

106 106 

107Il codice nel modulo degli hook è annidato troppo in profondità, oppure la sua catena di import è troppo lunga, perché Claude Code possa caricarlo. La riga inizia con il nome del mod e `hooks module did not load:`, poi indica il nome di un file e questo motivo.107Il codice nel modulo degli hook è annidato troppo in profondità, oppure la sua catena di import è troppo lunga, perché Claude Code possa caricarlo. La riga inizia con il nome del mod e `hooks module did not load:`, poi indica il nome di un file e questo motivo.

108 108 

109Esamina quel file e i file raggiunti tramite i suoi import alla ricerca della parte annidata più in profondità e riscrivila in modo che sia annidata meno, oppure accorcia la catena di import. Se hai installato il mod e non l'hai scritto tu, chiedi al suo autore di farlo.109Esamina quel file e i file raggiunti tramite i suoi import alla ricerca della parte annidata più in profondità e riscrivila in modo che sia annidata meno, oppure accorcia la catena di import. Se non hai scritto tu il mod, chiedi al suo autore di correggerlo.

110 110 

111### `the parser stopped` o `the engine ran out of stack loading the file`111### `the parser stopped` o `the engine ran out of stack loading the file`

112 112 

routines.md +20 −2

Details

25* Un'attività con solo un trigger API viene eseguita quando chiami il suo endpoint.25* Un'attività con solo un trigger API viene eseguita quando chiami il suo endpoint.

26* Un'attività con solo un trigger GitHub viene eseguita quando si verifica un evento del repository corrispondente.26* Un'attività con solo un trigger GitHub viene eseguita quando si verifica un evento del repository corrispondente.

27 27 

28Le attività pianificate sono disponibili sui piani Pro, Max, Team ed Enterprise. Creale e gestiscile su [claude.ai/code/routines](https://claude.ai/code/routines), oppure dalla CLI con `/schedule`. Il nome precedente, routine, [compare ancora](#where-the-name-routines-still-appears) nell'indirizzo web, nella CLI e nell'API.28Le attività pianificate sono disponibili sui piani Pro, Max, Team ed Enterprise. Creale e gestiscile su [claude.ai/code/routines](https://claude.ai/code/routines), oppure dalla CLI con `/schedule`. Il nome precedente, routine, [compare ancora](#where-the-name-routines-still-appears).

29 29 

30> [!NOTE]30> [!NOTE]

31>31>


66 66 

67**1. Apri la finestra di dialogo di creazione**67**1. Apri la finestra di dialogo di creazione**

68 68 

69Vai su [claude.ai/code/routines](https://claude.ai/code/routines) e fai clic su **New task**. Se si apre prima un menu, seleziona **Set up manually**. Si apre la finestra di dialogo **New scheduled task**. L'altra opzione del menu, **Create with Claude**, ti permette invece di descrivere l'attività in una chat e lasciare che sia Claude a crearla.69Vai su [claude.ai/code/routines](https://claude.ai/code/routines) e fai clic su **New task** per aprire la finestra di dialogo **New scheduled task**. Prima di continuare, verifica se compare una di queste schermate:

70 

71* Se il pulsante riporta **New routine** anziché **New task**, fai clic su **New routine** e prosegui con [Modulo a pagina intera](#full-page-form).

72* Nell'app Desktop, se si apre un menu con **Local** e **Cloud**, vai a [Modulo a pagina intera](#full-page-form).

73* Se si apre un menu con **Create with Claude** e **Set up manually**, seleziona **Set up manually** per aprire la finestra di dialogo. **Create with Claude** ti permette invece di descrivere l'attività in una chat e lasciare che sia Claude a crearla.

74* Se al posto della finestra di dialogo si apre una pagina intera, vai a [Modulo a pagina intera](#full-page-form).

70 75 

71Se **Repositories** ed **Environment** sono già visibili all'apertura della finestra di dialogo, consulta [in cosa differisce quella finestra di dialogo](#dialog-with-repositories-and-environment-in-the-main-view). Altrimenti, questa finestra di dialogo crea anche attività pianificate per la chat di claude.ai. Per fare in modo che la tua sia quella che la finestra di dialogo chiama un'attività Claude Code, seleziona un repository oppure aggiungi un trigger di evento GitHub o API nei passaggi successivi. Questo tipo di attività esegue Claude Code in una sessione cloud.76Se **Repositories** ed **Environment** sono già visibili all'apertura della finestra di dialogo, consulta [in cosa differisce quella finestra di dialogo](#dialog-with-repositories-and-environment-in-the-main-view). Altrimenti, questa finestra di dialogo crea anche attività pianificate per la chat di claude.ai. Per fare in modo che la tua sia quella che la finestra di dialogo chiama un'attività Claude Code, seleziona un repository oppure aggiungi un trigger di evento GitHub o API nei passaggi successivi. Questo tipo di attività esegue Claude Code in una sessione cloud.

72 77 


126 131 

127Seleziona il repository prima di aggiungere un trigger di evento GitHub, perché quel trigger non è disponibile finché non viene selezionato un repository.132Seleziona il repository prima di aggiungere un trigger di evento GitHub, perché quel trigger non è disponibile finché non viene selezionato un repository.

128 133 

134#### Modulo a pagina intera

135 

136Nell'app Desktop, se si apre un menu con **Local** e **Cloud**, seleziona **Cloud**. Si apre una pagina intitolata **New routine** o **New scheduled task**. Compila i suoi campi:

137 

138* **Name**: inseriscine uno.

139* **Instructions**: inserisci il prompt. Nella stessa casella, seleziona il modello, i repository e l'ambiente. Per sapere cosa controlla ciascuno di essi, consulta i passaggi in [Creare dal web](#create-from-the-web).

140* **Select a trigger**: seleziona **Schedule**, **GitHub event** o **API**. Per una pianificazione, consulta [Aggiungere un trigger di pianificazione](#add-a-schedule-trigger). Per un [evento GitHub](#add-a-github-trigger), seleziona un repository. Per un [trigger API](#add-an-api-trigger), copia il token dalla finestra di dialogo **API token** che si apre dopo aver fatto clic su **Create**, perché viene mostrato una sola volta. Per combinare più trigger, fai clic su **Add another trigger**.

141* **Connectors**: tutti i tuoi connettori connessi sono inclusi per impostazione predefinita, quindi rimuovi quelli di cui l'attività non ha bisogno.

142 

143Se **Create** non è disponibile, passaci sopra con il puntatore per vedere cosa manca ancora nel modulo. Fai clic su **Create** e si apre la pagina di dettaglio dell'attività.

144 

129### Creare dalla CLI145### Creare dalla CLI

130 146 

131Esegui `/schedule` in qualsiasi sessione per creare un'attività pianificata in modo conversazionale. Puoi anche passare direttamente una descrizione, per un'attività ricorrente come `/schedule daily PR review at 9am` o una tantum come `/schedule clean up feature flag in one week`. Claude ripercorre le stesse informazioni che raccoglie la finestra di dialogo web, quindi salva l'attività nel tuo account. Il comando è disponibile anche con l'alias `/routines`.147Esegui `/schedule` in qualsiasi sessione per creare un'attività pianificata in modo conversazionale. Puoi anche passare direttamente una descrizione, per un'attività ricorrente come `/schedule daily PR review at 9am` o una tantum come `/schedule clean up feature flag in one week`. Claude ripercorre le stesse informazioni che raccoglie la finestra di dialogo web, quindi salva l'attività nel tuo account. Il comando è disponibile anche con l'alias `/routines`.


152* **Esecuzioni allo scoccare dell'ora**: se pianifichi un'esecuzione esattamente allo scoccare dell'ora, ad esempio alle 9:00, potrebbe iniziare con alcuni minuti di ritardo. Per iniziare vicino all'ora pianificata, scegli alcuni minuti dopo l'ora, ad esempio le 9:07.168* **Esecuzioni allo scoccare dell'ora**: se pianifichi un'esecuzione esattamente allo scoccare dell'ora, ad esempio alle 9:00, potrebbe iniziare con alcuni minuti di ritardo. Per iniziare vicino all'ora pianificata, scegli alcuni minuti dopo l'ora, ad esempio le 9:07.

153* **Intervalli personalizzati**: per una cadenza non disponibile tra i preset, crea l'attività e seleziona **Custom** nella sua [finestra di dialogo di modifica](#edit-and-control-scheduled-tasks). Quindi inserisci un'espressione cron, ad esempio `0 */2 * * *` per ogni due ore. Per impostarne una dalla CLI, esegui [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Le espressioni che vengono eseguite più di una volta all'ora vengono rifiutate.169* **Intervalli personalizzati**: per una cadenza non disponibile tra i preset, crea l'attività e seleziona **Custom** nella sua [finestra di dialogo di modifica](#edit-and-control-scheduled-tasks). Quindi inserisci un'espressione cron, ad esempio `0 */2 * * *` per ogni due ore. Per impostarne una dalla CLI, esegui [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Le espressioni che vengono eseguite più di una volta all'ora vengono rifiutate.

154* **Fuso orario**: quando scegli una frequenza preimpostata, inserisci l'orario nel tuo fuso orario locale.170* **Fuso orario**: quando scegli una frequenza preimpostata, inserisci l'orario nel tuo fuso orario locale.

171* **Fuso orario dell'espressione cron**: quando l'espressione è composta solo da cinque campi, scrivi le ore in UTC, quindi `0 9 * * 1-5` viene eseguita alle 9:00 UTC nei giorni feriali. Se il campo inizia con un prefisso `CRON_TZ=`, mantienilo e scrivi le ore nel suo fuso orario, oppure eliminalo e scrivile in UTC.

155 172 

156#### Pianificare un'esecuzione una tantum173#### Pianificare un'esecuzione una tantum

157 174 


455 472 

456In precedenza le attività pianificate si chiamavano routine, e i seguenti punti mantengono il nome precedente. Ognuno si riferisce alla stessa funzionalità:473In precedenza le attività pianificate si chiamavano routine, e i seguenti punti mantengono il nome precedente. Ognuno si riferisce alla stessa funzionalità:

457 474 

475* **App**: in alcuni account la voce della barra laterale e il titolo della pagina riportano **Routines**, il pulsante riporta **New routine** e altre etichette dicono routine. Per creare un'attività da lì, consulta [Modulo a pagina intera](#full-page-form).

458* **Indirizzo web**: `claude.ai/code/routines`476* **Indirizzo web**: `claude.ai/code/routines`

459* **CLI**: l'alias `/routines` per `/schedule`, la descrizione del comando e le risposte di Claude mentre configura un'attività477* **CLI**: l'alias `/routines` per `/schedule`, la descrizione del comando e le risposte di Claude mentre configura un'attività

460* **API**: il percorso dell'endpoint `/fire`, la sua intestazione beta, il `type` della risposta, il tag `<routine-fire-payload>` e la pagina di riferimento [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)478* **API**: il percorso dell'endpoint `/fire`, la sua intestazione beta, il `type` della risposta, il tag `<routine-fire-payload>` e la pagina di riferimento [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)

sandboxing.md +13 −1

Details

537 537 

538* **Nella tua directory di lavoro e nelle directory superiori**: i file di impostazioni `.claude`, le directory `.claude/skills`, `.claude/agents`, `.claude/commands` e `.claude/hooks`, `.mcp.json` e i file che Claude Code esegue autonomamente, come `.claude/workflows` e `.claude/scheduled_tasks.json`538* **Nella tua directory di lavoro e nelle directory superiori**: i file di impostazioni `.claude`, le directory `.claude/skills`, `.claude/agents`, `.claude/commands` e `.claude/hooks`, `.mcp.json` e i file che Claude Code esegue autonomamente, come `.claude/workflows` e `.claude/scheduled_tasks.json`

539* **Solo nella tua directory di lavoro**: i file di avvio della shell come `.bashrc` e `.zshrc`, `.gitconfig`, le directory `.vscode` e `.idea`, e `hooks` e `config` all'interno di `.git`539* **Solo nella tua directory di lavoro**: i file di avvio della shell come `.bashrc` e `.zshrc`, `.gitconfig`, le directory `.vscode` e `.idea`, e `hooks` e `config` all'interno di `.git`

540* **File che trasformerebbero la tua directory di lavoro in un repository git bare**: `HEAD`, `objects` e `refs` al livello superiore, più le voci `config` e `hooks` esistenti in quel punto quando accanto a esse si trova un `HEAD`. Un file chiamato `config` viene negato anche in assenza di `HEAD`. Su Linux e WSL2, la sandbox elimina un file `HEAD` o una directory `objects` o `refs` di livello superiore che compare mentre un comando in sandbox è in esecuzione540* **File che trasformerebbero la tua directory di lavoro in un repository git bare**: `HEAD`, `objects` e `refs` al livello superiore, più le voci `config` e `hooks` esistenti in quel punto quando accanto a esse si trova un file o un collegamento simbolico `HEAD`. Un file chiamato `config` viene negato anche in assenza di `HEAD`. [Un `HEAD`, `objects` o `refs` che compare in seguito può essere eliminato](#when-the-sandbox-deletes-head-objects-or-refs). Su Linux e WSL2, un comando in sandbox può crearne uno dove non ne esiste nessuno.

541* **In `~/.claude`, o nella directory a cui punta `CLAUDE_CONFIG_DIR`**: la maggior parte del suo contenuto, più `~/.claude.json` e l'archivio delle credenziali `.credentials.json`541* **In `~/.claude`, o nella directory a cui punta `CLAUDE_CONFIG_DIR`**: la maggior parte del suo contenuto, più `~/.claude.json` e l'archivio delle credenziali `.credentials.json`

542 542 

543Se durante la sessione compare un collegamento simbolico nel percorso di un file di impostazioni protetto, la sandbox nega anche le scritture nel file a cui punta, a partire dal comando successivo.543Se durante la sessione compare un collegamento simbolico nel percorso di un file di impostazioni protetto, la sandbox nega anche le scritture nel file a cui punta, a partire dal comando successivo.


552 552 

553Se `git merge` o `git checkout` non riesce con `unable to unlink old` su uno di questi percorsi, consulta [Un comando git non riesce con `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).553Se `git merge` o `git checkout` non riesce con `unable to unlink old` su uno di questi percorsi, consulta [Un comando git non riesce con `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).

554 554 

555#### Quando la sandbox elimina `HEAD`, `objects` o `refs`

556 

557Al termine di un comando in sandbox, una voce `HEAD`, `objects` o `refs` di livello superiore più recente nella tua directory di lavoro viene eliminata, a meno che non sia una cartella con contenuto. Più recente significa che la voce non era presente l'ultima volta che la sandbox ha costruito la sua configurazione: all'avvio della sessione, o dopo una modifica come [`/cd`](https://code.claude.com/docs/it/commands).

558 

559Anche una cartella `objects` o `refs` più recente con contenuto viene eliminata, insieme al suo contenuto, quando l'ultima volta che la sandbox ha costruito la sua configurazione era presente un file o un collegamento simbolico `HEAD`. Per mantenere una cartella, consulta [Una cartella chiamata `objects` o `refs` scompare dopo un comando](#a-folder-named-objects-or-refs-disappears-after-a-command).

560 

555#### Percorsi negati che passano attraverso un collegamento simbolico561#### Percorsi negati che passano attraverso un collegamento simbolico

556 562 

557Su macOS, quando un percorso negato passa attraverso un collegamento simbolico, come una `~/.claude` che è un collegamento a un repository di dotfile, la sandbox nega anche la posizione reale del percorso. Questo vale sia per i dinieghi propri della sandbox sia per le tue voci letterali `denyWrite` e `denyRead`.563Su macOS, quando un percorso negato passa attraverso un collegamento simbolico, come una `~/.claude` che è un collegamento a un repository di dotfile, la sandbox nega anche la posizione reale del percorso. Questo vale sia per i dinieghi propri della sandbox sia per le tue voci letterali `denyWrite` e `denyRead`.


881 887 

882Dopo il fallimento, Claude potrebbe [offrirsi di rieseguire il comando al di fuori della sandbox](#the-unsandboxed-retry-escape-hatch). Approva quel nuovo tentativo, oppure esegui tu stesso il comando git in un altro terminale. Se hai impostato `allowUnsandboxedCommands` su `false`, Claude non può offrire il nuovo tentativo, quindi esegui tu stesso il comando.888Dopo il fallimento, Claude potrebbe [offrirsi di rieseguire il comando al di fuori della sandbox](#the-unsandboxed-retry-escape-hatch). Approva quel nuovo tentativo, oppure esegui tu stesso il comando git in un altro terminale. Se hai impostato `allowUnsandboxedCommands` su `false`, Claude non può offrire il nuovo tentativo, quindi esegui tu stesso il comando.

883 889 

890### Una cartella denominata `objects` o `refs` scompare dopo un comando

891 

892Una cartella `objects` o `refs` di primo livello comparsa durante la sessione può essere [eliminata al termine di un comando sandboxato](#when-the-sandbox-deletes-head-objects-or-refs). Non importa se l'abbia creata un comando, Claude o tu. Per mantenere una cartella, lasciaci dentro qualcosa. Se un file o un collegamento simbolico `HEAD` si è trovato al primo livello durante la sessione, spostalo altrove, quindi riavvia ogni sessione di Claude Code aperta lì.

893 

894Prima della v2.1.307, la cartella veniva eliminata anche se conteneva qualcosa e non c'era alcun `HEAD`. Se usi una versione precedente, [aggiorna Claude Code](https://code.claude.com/docs/it/setup.md#update-claude-code).

895 

884### Bubblewrap non riesce ad avviarsi all'interno di un container896### Bubblewrap non riesce ad avviarsi all'interno di un container

885 897 

886In un container senza privilegi, [bubblewrap](#os-level-enforcement) non può montare un nuovo filesystem `/proc`, quindi i comandi sandboxati falliscono con un errore `bwrap` come `Can't mount proc on /newroot/proc: Operation not permitted`. Imposta [`enableWeakerNestedSandbox`](https://code.claude.com/docs/it/settings-reference#sandbox-enableweakernestedsandbox) su `true` in modo che la sandbox esegua invece il bind-mount del `/proc` esistente del container. Utilizza questa impostazione solo quando il container esterno fornisce già il confine di isolamento di cui hai bisogno, poiché l'impostazione espone ai comandi sandboxati informazioni sui processi che un nuovo mount di `/proc` nasconderebbe.898In un container senza privilegi, [bubblewrap](#os-level-enforcement) non può montare un nuovo filesystem `/proc`, quindi i comandi sandboxati falliscono con un errore `bwrap` come `Can't mount proc on /newroot/proc: Operation not permitted`. Imposta [`enableWeakerNestedSandbox`](https://code.claude.com/docs/it/settings-reference#sandbox-enableweakernestedsandbox) su `true` in modo che la sandbox esegua invece il bind-mount del `/proc` esistente del container. Utilizza questa impostazione solo quando il container esterno fornisce già il confine di isolamento di cui hai bisogno, poiché l'impostazione espone ai comandi sandboxati informazioni sui processi che un nuovo mount di `/proc` nasconderebbe.

Details

30 30 

31I due riquadri Claude Code nel diagramma sono processi di sessione: un runner che esegue due sessioni contemporaneamente, fino alla sua capacità configurata. Un runner serve un [proprietario](#key-concepts) alla volta e si blocca a quel proprietario quando rivendica la sua prima sessione, quindi il codice estratto non si mescola mai tra proprietari; [Ciclo di vita del runner](#runner-lifecycle) copre la regola.31I due riquadri Claude Code nel diagramma sono processi di sessione: un runner che esegue due sessioni contemporaneamente, fino alla sua capacità configurata. Un runner serve un [proprietario](#key-concepts) alla volta e si blocca a quel proprietario quando rivendica la sua prima sessione, quindi il codice estratto non si mescola mai tra proprietari; [Ciclo di vita del runner](#runner-lifecycle) copre la regola.

32 32 

33Puoi avviare i runner tu stesso e mantenerli in esecuzione, oppure eseguire l'[orchestrator di autoscaling](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners), un secondo processo che ospiti, che avvia i runner mentre le sessioni si accodano; ogni runner esce da solo quando il suo lavoro finisce. In entrambi i casi, configuri l'ambiente una volta, e appare nel selettore su ogni superficie supportata.33Puoi avviare i runner tu stesso e mantenerli in esecuzione, oppure eseguire l'[orchestrator di autoscaling](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners), un secondo processo che ospiti, che avvia i runner mentre le sessioni si accodano. In entrambi i casi, configuri l'ambiente una volta, e appare nel selettore su ogni superficie supportata.

34 34 

35## Disponibilità e limitazioni35## Disponibilità e limitazioni

36 36 


122 122 

123I proxy di uscita aziendali sono supportati. Il runner e l'[orchestrator di autoscaling](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners) facoltativo rispettano il proxy e le variabili di ambiente mTLS descritte in [Configurazione di rete](https://code.claude.com/docs/it/network-config.md), come `HTTPS_PROXY` e `NO_PROXY`; impostale nell'ambiente di ogni processo. Le variabili coprono le chiamate del piano di controllo, il WebSocket [SCM connector](https://code.claude.com/docs/it/self-hosted-environments-reference.md#scm-connector-flags) dell'orchestrator, e il clone integrato per i remote HTTPS, e le sessioni le ereditano dal runner. Lo streaming della sessione utilizza server-sent events su HTTPS, quindi un proxy nel percorso non deve memorizzare le risposte nel buffer.123I proxy di uscita aziendali sono supportati. Il runner e l'[orchestrator di autoscaling](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners) facoltativo rispettano il proxy e le variabili di ambiente mTLS descritte in [Configurazione di rete](https://code.claude.com/docs/it/network-config.md), come `HTTPS_PROXY` e `NO_PROXY`; impostale nell'ambiente di ogni processo. Le variabili coprono le chiamate del piano di controllo, il WebSocket [SCM connector](https://code.claude.com/docs/it/self-hosted-environments-reference.md#scm-connector-flags) dell'orchestrator, e il clone integrato per i remote HTTPS, e le sessioni le ereditano dal runner. Lo streaming della sessione utilizza server-sent events su HTTPS, quindi un proxy nel percorso non deve memorizzare le risposte nel buffer.

124 124 

125Se il tuo proxy richiede anche un'intestazione `Proxy-Authorization`, il runner può aggiungerla a ogni connessione che apre al proxy; vedi [Autentica a un proxy di uscita](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).125* **Autenticazione al proxy**: se il tuo proxy richiede anche un'intestazione `Proxy-Authorization`, il runner può aggiungerla a ogni connessione che apre al proxy; vedi [Autentica a un proxy di uscita](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).

126* **Risposte di lunga durata**: se un runner raccoglie una sessione ma Claude non risponde mai al suo primo messaggio, la causa potrebbe essere il tuo proxy. Vedi [Una sessione viene raccolta, ma Claude non risponde mai al suo primo messaggio](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#when-a-sessions-first-message-is-never-answered).

126 127 

127## Cosa rimane sulla tua infrastruttura128## Cosa rimane sulla tua infrastruttura

128 129 

Details

36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | Lo stesso ID sessione nel formato UUID canonico, per i sistemi che si basano su UUID. |36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | Lo stesso ID sessione nel formato UUID canonico, per i sistemi che si basano su UUID. |

37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Per una sessione [Claude Tag](https://claude.com/docs/claude-tag/overview) che appartiene a un thread Slack, il link a quel thread. Non impostata per le altre sessioni, e può non essere impostata anche per una sessione di thread. |37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Per una sessione [Claude Tag](https://claude.com/docs/claude-tag/overview) che appartiene a un thread Slack, il link a quel thread. Non impostata per le altre sessioni, e può non essere impostata anche per una sessione di thread. |

38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Per una sessione Claude Tag che appartiene a un thread Slack, il timestamp Slack di quel thread, come `1700000000.000100`. Può non essere impostata, e può essere impostata quando `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` non lo è, quindi controlla ciascuna variabile separatamente. |38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Per una sessione Claude Tag che appartiene a un thread Slack, il timestamp Slack di quel thread, come `1700000000.000100`. Può non essere impostata, e può essere impostata quando `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` non lo è, quindi controlla ciascuna variabile separatamente. |

39| `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` | Per una sessione Claude Tag, l'ID del canale Slack o del messaggio diretto che la sessione serve o in cui si trova il suo thread, come `C0123ABCDE`. Un timestamp Slack identifica un messaggio all'interno di un solo canale, quindi registra questo ID insieme a `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`. Non impostata per le altre sessioni, e può non essere impostata anche per una sessione Claude Tag. |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Percorso assoluto a un file per sessione che contiene il JWT della sessione corrente, mantenuto aggiornato negli aggiornamenti dei token. I sottoprocessi della shell lo leggono per il loro header `Authorization` quando scaricano gli allegati che l'utente ha aggiunto alla sessione. `exec` preserva la variabile automaticamente; un wrapper che ricostruisce l'ambiente del figlio deve riportare la variabile, altrimenti i download degli allegati smettono di funzionare silenziosamente. |40| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Percorso assoluto a un file per sessione che contiene il JWT della sessione corrente, mantenuto aggiornato negli aggiornamenti dei token. I sottoprocessi della shell lo leggono per il loro header `Authorization` quando scaricano gli allegati che l'utente ha aggiunto alla sessione. `exec` preserva la variabile automaticamente; un wrapper che ricostruisce l'ambiente del figlio deve riportare la variabile, altrimenti i download degli allegati smettono di funzionare silenziosamente. |

40| `CLAUDE_CONFIG_DIR` | Directory di configurazione Claude per sessione, scritta all'inizio della sessione dallo snapshot della configurazione dell'host del runner che il runner acquisisce all'avvio; consulta [Permissions and tool approval](#permissions-and-tool-approval). Le scritture qui sono isolate a questa sessione. La directory rimane sotto `<base-dir>/_sessions/` dopo la fine della sessione a meno che tu non avvii il runner con [`--remove-session-state`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags); consulta [Reuse a pre-warmed checkout](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |41| `CLAUDE_CONFIG_DIR` | Directory di configurazione Claude per sessione, scritta all'inizio della sessione dallo snapshot della configurazione dell'host del runner che il runner acquisisce all'avvio; consulta [Permissions and tool approval](#permissions-and-tool-approval). Le scritture qui sono isolate a questa sessione. La directory rimane sotto `<base-dir>/_sessions/` dopo la fine della sessione a meno che tu non avvii il runner con [`--remove-session-state`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags); consulta [Reuse a pre-warmed checkout](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

41| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Percorso a un file in `CLAUDE_CONFIG_DIR` che contiene le definizioni dei server MCP che il piano di controllo di Anthropic ha fornito per questa sessione. Se il tuo wrapper ricostruisce l'ambiente del figlio, riporta questa variabile. Senza di essa, quando il piano di controllo aggiorna i server forniti, il figlio arresta qualsiasi server stdio, HTTP o SSE che il tuo wrapper aggiunge con [`--mcp-config`](https://code.claude.com/docs/it/cli-reference#cli-flags) e che non è presente nell'aggiornamento. Richiede Claude Code v2.1.299 o successivo. |42| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Percorso a un file in `CLAUDE_CONFIG_DIR` che contiene le definizioni dei server MCP che il piano di controllo di Anthropic ha fornito per questa sessione. Se il tuo wrapper ricostruisce l'ambiente del figlio, riporta questa variabile. Senza di essa, quando il piano di controllo aggiorna i server forniti, il figlio arresta qualsiasi server stdio, HTTP o SSE che il tuo wrapper aggiunge con [`--mcp-config`](https://code.claude.com/docs/it/cli-reference#cli-flags) e che non è presente nell'aggiornamento. Richiede Claude Code v2.1.299 o successivo. |


44 45 

45Il wrapper eredita anche il resto dell'ambiente gestito del figlio, incluse tutte le variabili d'ambiente fornite dal server. `exec` le propaga tutte automaticamente; se il tuo wrapper avvia il figlio in un altro modo, inoltra l'ambiente completo.46Il wrapper eredita anche il resto dell'ambiente gestito del figlio, incluse tutte le variabili d'ambiente fornite dal server. `exec` le propaga tutte automaticamente; se il tuo wrapper avvia il figlio in un altro modo, inoltra l'ambiente completo.

46 47 

47`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` e `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` raggiungono il tuo wrapper o l'[hook `command`](#command). Raggiungono anche ciò che la sessione esegue, come i comandi della shell, gli hook di git e gli hook di Claude Code. Gli hook `checkout`, `post-session` e `spawn-runner` non le ricevono.48Puoi leggere le variabili `CLAUDE_CODE_REMOTE_SLACK_*` nel tuo wrapper o nell'[hook `command`](#command), e in ciò che la sessione esegue, come i comandi della shell, gli hook di git e gli hook di Claude Code. Gli hook `checkout`, `post-session` e `spawn-runner` non le ricevono.

48 49 

49### Assegnare un valore predefinito alle variabili che possono non essere impostate50### Assegnare un valore predefinito alle variabili che possono non essere impostate

50 51 

51`CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` e `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` possono ciascuna non essere impostate. Se il tuo script usa `set -u`, Bash si arresta con `unbound variable` quando espande una di esse non impostata, quindi espandile con un valore predefinito, come `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`.52Se il tuo script usa `set -u`, espandi `CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` e `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` con un valore predefinito, come `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`. Ciascuna può non essere impostata, e con `set -u` Bash si arresta con `unbound variable` quando ne espande una non impostata.

52 53 

53### Mettere tra virgolette gli argomenti e le variabili che il tuo script espande54### Mettere tra virgolette gli argomenti e le variabili che il tuo script espande

54 55 


89* **Passali così come sono**: termina il wrapper con `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, che inoltra i flag dei file insieme a ogni altro argomento. Non eliminarli né riscriverli. Se una sessione perde un flag del file di prompt, viene eseguita senza le istruzioni che il piano di controllo ha inviato per essa.90* **Passali così come sono**: termina il wrapper con `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, che inoltra i flag dei file insieme a ogni altro argomento. Non eliminarli né riscriverli. Se una sessione perde un flag del file di prompt, viene eseguita senza le istruzioni che il piano di controllo ha inviato per essa.

90* **Su un runner alla v2.1.281 o successiva, un flag di file che aggiungi sostituisce quello del server, non vi si aggiunge mai**: ogni flag del file di prompt accetta un solo valore e Claude Code mantiene l'ultima occorrenza, quindi se aggiungi `--append-system-prompt-file <path>` dopo `"$@"`, il contenuto del tuo file sostituisce le istruzioni aggiuntive del server. Per aggiungere istruzioni oltre a quelle del server, inseriscile nel `CLAUDE.md` dell'immagine del runner, che il runner [inserisce nella configurazione a livello utente di ogni sessione](#how-each-session’s-config-is-assembled).91* **Su un runner alla v2.1.281 o successiva, un flag di file che aggiungi sostituisce quello del server, non vi si aggiunge mai**: ogni flag del file di prompt accetta un solo valore e Claude Code mantiene l'ultima occorrenza, quindi se aggiungi `--append-system-prompt-file <path>` dopo `"$@"`, il contenuto del tuo file sostituisce le istruzioni aggiuntive del server. Per aggiungere istruzioni oltre a quelle del server, inseriscile nel `CLAUDE.md` dell'immagine del runner, che il runner [inserisce nella configurazione a livello utente di ogni sessione](#how-each-session’s-config-is-assembled).

91 92 

93#### Correggere `Argument list too long` all'avvio della sessione

94 

95Su Linux, se unisci il prompt del piano di controllo e il tuo testo in un unico argomento `--append-system-prompt`, il runner registra una riga come questa quando l'argomento raggiunge 128 KB:

96 

97```text theme={null}

98Session <id> finished: failed — reason: child exited 126: /opt/wrapper.sh: line 9: /usr/local/bin/claude: Argument list too long

99```

100 

101Linux limita ogni singolo argomento a 32 pagine di memoria, ovvero 128 KB con le consuete pagine da 4 KB. Il valore restituito da `getconf ARG_MAX`, spesso 2 MB, è un limite separato su tutti gli argomenti e l'ambiente insieme.

102 

103Su Claude Code v2.1.283 o successivo, lascia i flag dei file in `"$@"` e passa solo il tuo testo come `--append-system-prompt`. Claude Code [li usa entrambi](https://code.claude.com/docs/it/cli-reference.md#system-prompt-flags), prima il prompt del piano di controllo e poi il tuo testo:

104 

105```bash theme={null}

106exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --append-system-prompt "$(cat /opt/team-instructions.md)"

107```

108 

109Su Linux, se il tuo testo raggiunge 128 KB, spostalo nel `CLAUDE.md` dell'immagine del runner, perché è comunque un unico argomento.

110 

111Sulla v2.1.281 o v2.1.282, quel comando esce con `Cannot use both --append-system-prompt and --append-system-prompt-file`. Sulle versioni precedenti, il tuo testo sostituisce il prompt del piano di controllo senza alcun errore. Su ognuna di esse, aggiorna prima, oppure sposta il tuo testo in `CLAUDE.md`.

112 

92### Provisioning di credenziali limitate al creatore della sessione113### Provisioning di credenziali limitate al creatore della sessione

93 114 

94Usa il sottocomando `decode-token` per leggere i claim dal JWT della sessione. Legge il token da un argomento, da `CLAUDE_CODE_SESSION_ACCESS_TOKEN` o da stdin, in quest'ordine; consulta [Verify the token inside the session](https://code.claude.com/docs/it/self-hosted-environments-identity.md#verify-the-token-inside-the-session) per sapere cosa controlla. L'esempio seguente decodifica l'identità del creatore, la scambia con credenziali AWS di breve durata ed esegue `exec` in Claude Code:115Usa il sottocomando `decode-token` per leggere i claim dal JWT della sessione. Legge il token da un argomento, da `CLAUDE_CODE_SESSION_ACCESS_TOKEN` o da stdin, in quest'ordine; consulta [Verify the token inside the session](https://code.claude.com/docs/it/self-hosted-environments-identity.md#verify-the-token-inside-the-session) per sapere cosa controlla. L'esempio seguente decodifica l'identità del creatore, la scambia con credenziali AWS di breve durata ed esegue `exec` in Claude Code:


122| Variabile | Descrizione |143| Variabile | Descrizione |

123| :- | :- |144| :- | :- |

124| `CLAUDE_RUNNER_REPO_URL` | URL del repository da clonare, dopo che `--git-host-rewrite` e `--git-ssh-rewrite` sono stati applicati |145| `CLAUDE_RUNNER_REPO_URL` | URL del repository da clonare, dopo che `--git-host-rewrite` e `--git-ssh-rewrite` sono stati applicati |

125| `CLAUDE_RUNNER_REPO_REF` | Revisione di cui eseguire il checkout, come richiesta dalla sessione: un branch, un tag, un commit SHA o un nome di riferimento completo come `refs/pull/<number>/head`. Vuoto indica il branch predefinito del repository. |146| `CLAUDE_RUNNER_REPO_REF` | Revisione di cui eseguire il checkout, come richiesta dalla sessione: un branch, un tag, un commit SHA o un nome di riferimento completo come `refs/heads/<branch>` o `refs/pull/<number>/head`. Vuoto indica il branch predefinito del repository. |

126| `CLAUDE_RUNNER_CHECKOUT_PATH` | Percorso assoluto dove l'albero di lavoro deve essere lasciato |147| `CLAUDE_RUNNER_CHECKOUT_PATH` | Percorso assoluto dove l'albero di lavoro deve essere lasciato |

127| `CLAUDE_RUNNER_SESSION_ID` | ID sessione nel modulo taggato `session_...`, per la registrazione e la correlazione |148| `CLAUDE_RUNNER_SESSION_ID` | ID sessione nel modulo taggato `session_...`, per la registrazione e la correlazione |

128| `CLAUDE_RUNNER_SESSION_UUID` | Lo stesso ID sessione nel modulo UUID canonico |149| `CLAUDE_RUNNER_SESSION_UUID` | Lo stesso ID sessione nel modulo UUID canonico |


303 324 

304Il contratto prevede quattro regole, qualunque sia la piattaforma su cui il tuo hook esegue il provisioning:325Il contratto prevede quattro regole, qualunque sia la piattaforma su cui il tuo hook esegue il provisioning:

305 326 

3061. **Sii idempotente su `CLAUDE_RUNNER_ORDER_ID`.** La riconsegna della stessa richiesta deve avviare al massimo un runner. Ricava un nome di risorsa deterministico dall'ID dell'ordine e lascia che la tua piattaforma rifiuti il duplicato. Non usare invece `CLAUDE_RUNNER_SESSION_ID` come chiave. Ogni nuova richiesta per una sessione riporta lo stesso ID di sessione con un nuovo ID dell'ordine, quindi un carico di lavoro denominato o deduplicato in base all'ID di sessione viene creato una sola volta e mai più per quella sessione.3271. **Sii idempotente su `CLAUDE_RUNNER_ORDER_ID`.** La riconsegna della stessa richiesta deve avviare al massimo un runner. Ricava un nome di risorsa deterministico dall'ID dell'ordine e lascia che la tua piattaforma rifiuti il duplicato. Non usare invece `CLAUDE_RUNNER_SESSION_ID` come chiave. Ogni nuova richiesta per una sessione riporta lo stesso ID di sessione con un nuovo ID dell'ordine. Un carico di lavoro denominato o deduplicato in base all'ID di sessione non viene creato di nuovo finché esiste il primo.

3072. **Non riprovare il carico di lavoro.** Un ID dell'ordine significa al massimo un carico di lavoro creato. Se il runner non si registra mai, Anthropic invia una nuova richiesta con un nuovo ID dell'ordine dopo `--expected-spawn-seconds`.3282. **Non riprovare il carico di lavoro.** Un ID dell'ordine significa al massimo un carico di lavoro creato. Se il runner non si registra mai, Anthropic invia una nuova richiesta con un nuovo ID dell'ordine dopo `--expected-spawn-seconds`.

3083. **Usa il contratto dei codici di uscita.** Esci con lo stato corrispondente all'esito:3293. **Usa il contratto dei codici di uscita.** Esci con lo stato corrispondente all'esito:

309 330 

310 * **Uscita 0**: inviato.331 * **Uscita 0**: inviato.

311 * **Uscita 1, oppure ancora in esecuzione allo scadere di `--hook-timeout`**: errore per cui è possibile riprovare. La sessione attende con backoff e viene riproposta.332 * **Uscita 1, oppure ancora in esecuzione allo scadere di `--hook-timeout`**: errore per cui è possibile riprovare. La sessione attende con backoff e viene riproposta. Dopo 10 richieste non riuscite consecutive, viene bloccata come avviene dopo un'uscita 2 o superiore.

312 * **Uscita 2 o superiore**: errore per cui non è possibile riprovare. Alla sessione viene impedito un nuovo spawn finché un utente non le invia un nuovo messaggio o un [Owner](https://code.claude.com/docs/it/cloud-environments.md#organization-shared-environments) non seleziona **Retry** su di essa nella scheda **Activity** dell'ambiente.333 * **Uscita 2 o superiore**: errore per cui non è possibile riprovare. Alla sessione viene impedito un nuovo spawn finché un utente non le invia un nuovo messaggio o un [Owner](https://code.claude.com/docs/it/cloud-environments.md#organization-shared-environments) non seleziona **Retry** su di essa nella scheda **Activity** dell'ambiente.

313 334 

314 Mentre una sessione è in backoff, nella scheda **Activity** appare come **Queued** senza errori di spawn, quindi leggi l'output dell'hook nel log dell'orchestratore. Una volta bloccata, la sessione appare come **Failed**. Espandila per leggere l'errore di spawn, ricavato dagli ultimi 512 caratteri dello stderr dell'hook. Scrivi su stderr un errore utile per intervenire, e nessun segreto. In un hook shell, [mantieni ripetibili gli errori transitori](#keep-transient-failures-retryable-in-a-shell-hook).335 Mentre una sessione è in backoff, nella scheda **Activity** appare come **Queued** senza errori di spawn, quindi leggi l'output dell'hook nel log dell'orchestratore. Una volta bloccata, la sessione appare come **Failed**. Espandila per leggere l'errore di spawn, ricavato dagli ultimi 512 caratteri dello stderr dell'hook. Scrivi su stderr un errore utile per intervenire, e nessun segreto. In un hook shell, [mantieni ripetibili gli errori transitori](#keep-transient-failures-retryable-in-a-shell-hook).


318 339 

319Tutto ciò che l'hook scrive su stdout o stderr compare nel log dell'orchestratore con le credenziali oscurate automaticamente. Se le sessioni restano in coda, controlla il corpo di `/healthz` dell'orchestratore per i conteggi della coda, quindi apri la scheda **Activity** del tuo ambiente nella [pagina di amministrazione **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): lì espandi una sessione non riuscita per vederne l'errore di spawn e seleziona **Retry** per richiederla di nuovo.340Tutto ciò che l'hook scrive su stdout o stderr compare nel log dell'orchestratore con le credenziali oscurate automaticamente. Se le sessioni restano in coda, controlla il corpo di `/healthz` dell'orchestratore per i conteggi della coda, quindi apri la scheda **Activity** del tuo ambiente nella [pagina di amministrazione **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): lì espandi una sessione non riuscita per vederne l'errore di spawn e seleziona **Retry** per richiederla di nuovo.

320 341 

321Una sessione che resta in coda senza errori di spawn nella scheda **Activity** può indicare che l'hook usa l'ID di sessione come chiave. Per verificarlo, controlla se la tua piattaforma ha un carico di lavoro per la prima richiesta di spawn di quella sessione e nessuno per le richieste successive. In tal caso, usa invece `CLAUDE_RUNNER_ORDER_ID` come chiave del carico di lavoro.342#### Correggi le sessioni riaperte che restano Queued o appaiono come Failed

343 

344Se le sessioni riaperte restano **Queued** o appaiono come **Failed**, oppure il tuo hook va in timeout su di esse, una delle possibili cause è un hook che denomina o deduplica i carichi di lavoro in base all'ID di sessione. Una sessione viene riaperta quando il suo utente le invia un messaggio dopo che il suo runner è terminato. Ad esempio, considera un hook che costruisce il nome di ogni carico di lavoro in questo modo:

345 

346```bash theme={null}

347name="runner-${CLAUDE_RUNNER_SESSION_ID}"

348```

349 

3501. Alla prima richiesta di spawn della sessione, l'hook crea un carico di lavoro con quel nome e un runner si avvia

3512. Il runner termina, ad esempio dopo [`--release-idle-session-min`](#make-on-demand-runners-exit-when-idle), e in seguito l'utente riapre la sessione

3523. La successiva richiesta di spawn della sessione riporta lo stesso ID di sessione e un nuovo ID dell'ordine, quindi l'hook costruisce lo stesso nome

3534. Se la tua piattaforma ha ancora il carico di lavoro della prima richiesta, perché nulla lo ha [rimosso](#make-on-demand-runners-exit-when-idle) quando il suo runner è terminato, l'hook non crea alcun nuovo carico di lavoro e nessun runner si avvia

3545. Ogni successiva richiesta di spawn per la sessione termina allo stesso modo

355 

356Apri il tuo hook e leggi cosa fa quando il carico di lavoro esiste già, ad esempio quando la tua piattaforma rifiuta il nome duplicato. Individua quel comportamento nella prima colonna per vedere cosa mostra la sessione riaperta nella scheda **Activity**:

357 

358| Quando il carico di lavoro esiste, il tuo hook | **Queued** diventa **Failed** | Errore di spawn |

359| :- | :- | :- |

360| Esce con 0 senza creare nulla | Dopo 10 richieste di questo tipo consecutive | `runner did not register within ETA after max attempts` |

361| Esce con 1 | Dopo 10 richieste di questo tipo consecutive | La parte finale dello stderr del tuo hook, oppure `exit 1` se non ha scritto nulla su stderr |

362| Esce con 2 o superiore | Immediatamente | La parte finale dello stderr del tuo hook, oppure `exit` seguito dal codice, ad esempio `exit 2`, se non ha scritto nulla su stderr |

363| Attende fino allo scadere di `--hook-timeout` | Dopo 10 richieste di questo tipo consecutive | La parte finale dello stderr del tuo hook, oppure `spawn-runner hook timed out after 60000ms` se non ha scritto nulla su stderr |

364 

365Nell'errore di spawn dell'ultima riga, `60000` è il tuo `--hook-timeout` in millisecondi. Quando un hook attende fino allo scadere di `--hook-timeout`, il log dell'orchestratore riceve anche una riga `timed out after`.

366 

367Per correggere l'hook, costruisci ogni nome o chiave a partire da `CLAUDE_RUNNER_ORDER_ID`, come richiede la [regola 1 del contratto dell'hook](#the-spawn-runner-hook). Nell'esempio, il nome diventa:

368 

369```bash theme={null}

370name="runner-${CLAUDE_RUNNER_ORDER_ID}"

371```

372 

373Se il tuo hook attende, fai anche in modo che esca una volta inviato il carico di lavoro, perché un hook in attesa [ritarda gli hook successivi del suo orchestratore](https://code.claude.com/docs/it/self-hosted-environments-reference.md#orchestrator-cli-flags). Dopo aver modificato l'hook, controlla lo stato di ogni sessione bloccata nella scheda **Activity**:

374 

375* **Queued**: la sessione riceve autonomamente la sua prossima richiesta di spawn

376* **Failed**: seleziona **Retry** su di essa come Owner, oppure chiedi al suo utente di inviarle un nuovo messaggio

322 377 

323#### Fai terminare i runner on demand quando sono inattivi378#### Fai terminare i runner on demand quando sono inattivi

324 379 


741 796 

742Lo snapshot della `~/.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.797Lo snapshot della `~/.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.

743 798 

799### Bloccare le sessioni che non riescono a recuperare le impostazioni gestite dal server

800 

801Per impedire l'avvio di una sessione che recupera le [impostazioni gestite dal server](https://code.claude.com/docs/it/server-managed-settings.md) quando tale recupero non riesce, imposta [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/it/settings-reference#forceremotesettingsrefresh) su `true` nel file [`managed-settings.json`](https://code.claude.com/docs/it/settings#where-settings-live) della tua immagine del runner. Una risposta dell'API di Anthropic secondo cui la tua organizzazione non ha impostazioni gestite dal server conta come recupero riuscito.

802 

803Prima di aggiungere la chiave, verifica se l'ambiente esegue sessioni di canali Claude Tag o invia richieste al modello a Bedrock o Agent Platform:

804 

805* **Sessioni di canali Claude Tag**: ometti la chiave sui runner di un ambiente verso cui un Owner [instrada i canali Claude Tag](https://code.claude.com/docs/it/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses). L'API di Anthropic rifiuta la richiesta di impostazioni gestite dal server di queste sessioni, quindi con la chiave impostata non riescono ad avviarsi. Inserisci le loro regole nel `managed-settings.json` dell'immagine del runner, che [continuano a leggere](https://code.claude.com/docs/it/managed-settings.md#where-and-when-a-policy-applies). Per usare la chiave per le altre sessioni, eseguile in un ambiente separato.

806* **Bedrock o Agent Platform**: le sessioni su questi provider [non recuperano le impostazioni gestite dal server](#what-differs-from-sessions-on-the-anthropic-api), quindi si avviano indipendentemente dal fatto che tu imposti o meno la chiave. Applica invece le tue regole dallo stesso `managed-settings.json`.

807 

808Questo `managed-settings.json` imposta la chiave:

809 

810```json managed-settings.json theme={null}

811{

812 "forceRemoteSettingsRefresh": true

813}

814```

815 

816Imposta la chiave in quel file anche se la imposti pure nella console di amministrazione di claude.ai. Una nuova sessione non ha una [copia nella cache](https://code.claude.com/docs/it/server-managed-settings.md#fetch-and-caching-behavior) delle tue impostazioni gestite dal server, quindi se imposti la chiave solo nella console, la sessione non la possiede ancora. Se poi il suo recupero non riesce, la sessione viene eseguita senza quelle impostazioni finché un recupero successivo non riesce.

817 

818Per confermare che un recupero delle impostazioni non riuscito sia il motivo per cui una sessione non si è avviata, controlla l'[ultimo output di Claude Code](#keep-stdin-and-file-descriptor-3-attached) nella sessione o il log del runner. Include `Your organization requires remote managed settings to load, but they could not be loaded.`

819 

744### Impostazioni del repository nelle sessioni con più repository820### Impostazioni del repository nelle sessioni con più repository

745 821 

746In un thread di un [progetto](https://code.claude.com/docs/it/claude-projects.md#what-threads-pick-up-from-your-repositories), nessun `.claude/settings.json` di alcun repository ha effetto come impostazioni di progetto e non vengono caricati né il `.mcp.json` né le skill di alcun repository, ovunque il thread si avvii. Per fornire una skill a questi thread, aggiungila alla tua immagine del runner.822In un thread di un [progetto](https://code.claude.com/docs/it/claude-projects.md#what-threads-pick-up-from-your-repositories), nessun `.claude/settings.json` di alcun repository ha effetto come impostazioni di progetto e non vengono caricati né il `.mcp.json` né le skill di alcun repository, ovunque il thread si avvii. Per fornire una skill a questi thread, aggiungila alla tua immagine del runner.

Details

313 313 

314Per ogni sessione che usa git gestito da Anthropic, il runner registra anche una riga `[runner:warn]` che inizia con `governed git: GIT_SSL_CAINFO is set` o `governed git: GIT_SSL_NO_VERIFY is set`. La riga dice quello che il runner ha fatto con quella variabile per il suo git, per git dentro la sessione, e per i tuoi lifecycle hook. Termina con se hai bisogno di cambiare qualcosa.314Per ogni sessione che usa git gestito da Anthropic, il runner registra anche una riga `[runner:warn]` che inizia con `governed git: GIT_SSL_CAINFO is set` o `governed git: GIT_SSL_NO_VERIFY is set`. La riga dice quello che il runner ha fatto con quella variabile per il suo git, per git dentro la sessione, e per i tuoi lifecycle hook. Termina con se hai bisogno di cambiare qualcosa.

315 315 

316### Aggiungi repository github.com alle sessioni dei canali Claude Tag

317 

318Se Claude non riesce ad aggiungere un repository github.com a una sessione di un canale Claude Tag, assicurati che il canale vi abbia accesso, anche quando il tuo runner riesce a clonarlo. Quell'accesso deriva dalle impostazioni su GitHub e nella tua organizzazione Claude, non dalle credenziali git del tuo runner.

319 

320**1. Installa la Claude GitHub App**

321 

322Installa la [Claude GitHub App](https://github.com/apps/claude) sull'organizzazione o sull'account GitHub proprietario del repository e includi quel repository nell'installazione.

323 

324**2. Collega l'organizzazione o l'account GitHub**

325 

326In [**Organization settings > Git providers**](https://claude.ai/admin-settings/source-control), collega quell'organizzazione o quell'account alla tua organizzazione Claude. Può collegarla un Owner della tua organizzazione Claude che sia anche proprietario dell'organizzazione GitHub. Vedi [Collegare la tua organizzazione GitHub](https://claude.com/docs/claude-tag/admins/configure-github#link-your-github-organization).

327 

328**3. Concedi il repository**

329 

330Nelle [impostazioni di amministrazione di Claude Tag](https://claude.ai/admin-settings/claude-tag), concedi il repository al canale o a un ambito più ampio che includa il canale: il suo workspace Slack o tutto Slack. Può concederlo chi ha il ruolo Owner o il permesso Claude Tag Admin. Anche un gestore del canale può aggiungerlo al proprio canale se il suo account GitHub è amministratore del repository. Vedi [Concedere l'accesso ai repository](https://claude.com/docs/claude-tag/admins/configure-github#grant-repository-access).

331 

332Quindi avvia un nuovo thread nel canale e [nomina il repository](https://claude.com/docs/claude-tag/admins/configure-github#how-granted-repositories-reach-a-session) nel tuo primo messaggio.

333 

334Se Claude non riesce ancora ad aggiungere il repository, vedi [Se Claude non riesce a raggiungere un repository](https://claude.com/docs/claude-tag/admins/configure-github#if-claude-can%E2%80%99t-reach-a-repository) per sapere dove controllare il collegamento GitHub e la concessione del repository.

335 

316### Riscrivi gli URL git per le reti private336### Riscrivi gli URL git per le reti private

317 337 

318Gli URL dei repository arrivano dal piano di controllo come HTTPS, con il nome host del tuo host git; per GitHub Enterprise, questo è il nome host che hai configurato per l'[integrazione GitHub Enterprise](https://code.claude.com/docs/it/github-enterprise-server.md) su claude.ai. Due flag ripetibili riscrivono quegli URL prima del clone:338Gli URL dei repository arrivano dal piano di controllo come HTTPS, con il nome host del tuo host git; per GitHub Enterprise, questo è il nome host che hai configurato per l'[integrazione GitHub Enterprise](https://code.claude.com/docs/it/github-enterprise-server.md) su claude.ai. Due flag ripetibili riscrivono quegli URL prima del clone:


376 396 

377Le build e i test sono solitamente la parte più grande e più variabile del carico di una sessione, quindi esegui una build rappresentativa del tuo repository, misura il suo picco di CPU e memoria, e aumenta qualsiasi valore iniziale che non lascia spazio per il processo Claude Code in cima a quel picco.397Le build e i test sono solitamente la parte più grande e più variabile del carico di una sessione, quindi esegui una build rappresentativa del tuo repository, misura il suo picco di CPU e memoria, e aumenta qualsiasi valore iniziale che non lascia spazio per il processo Claude Code in cima a quel picco.

378 398 

379Il runner usa `--capacity` per limitare quante sessioni esegue contemporaneamente. Non divide CPU o memoria tra di loro, quindi le sessioni su un runner condividono la CPU e la memoria del container. Per limitare la quota di una sessione, applica limiti dal tuo [script wrapper](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#wrapper-scripts). Cosa dare a un container quindi dipende da quante sessioni serve contemporaneamente:399Il runner usa `--capacity` per limitare quante sessioni esegue contemporaneamente. Non divide CPU o memoria tra di loro, quindi le sessioni su un runner condividono la CPU e la memoria del container. Per evitare che l'uso di memoria di una sessione termini le altre, esegui una sessione per runner con [il proprio limite di memoria](#give-each-session-its-own-memory-limit).

380 400 

381* **Una sessione per runner**: dai a ogni container i valori di una sessione. Usa questo dimensionamento a `--capacity 1`, che la [sezione hardening](#harden-your-deployment) consiglia, e per [runner on-demand](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners), dove imposti i valori sul carico di lavoro che il tuo hook [`spawn-runner`](https://code.claude.com/docs/it/self-hosted-environments-configuration#the-spawn-runner-hook) invia, come il modello di pod di un Kubernetes Job.401* **Una sessione per runner**: dai a ogni container i valori di una sessione. Usa questo dimensionamento a `--capacity 1`, che la [sezione hardening](#harden-your-deployment) consiglia, e per [runner on-demand](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners), dove imposti i valori sul carico di lavoro che il tuo hook [`spawn-runner`](https://code.claude.com/docs/it/self-hosted-environments-configuration#the-spawn-runner-hook) invia, come il modello di pod di un Kubernetes Job.

382* **Diverse sessioni per runner**: a un `--capacity` sopra uno, moltiplica i valori di una sessione per la capacità, perché fino a quel numero di sessioni possono essere eseguite nel container contemporaneamente. Le ricette [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) eseguono `--capacity 4` senza limiti di CPU o memoria, quindi aggiungi limiti dimensionati per la capacità che esegui.402* **Diverse sessioni per runner**: a un `--capacity` sopra uno, moltiplica i valori di una sessione per la capacità, perché fino a quel numero di sessioni possono essere eseguite nel container contemporaneamente. Le ricette [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) eseguono `--capacity 4` senza limiti di CPU o memoria, quindi aggiungi limiti dimensionati per la capacità che esegui.

403* **Diversi container runner su un host**: dimensiona l'host per la somma delle capacità dei runner, perché ogni runner conta solo le proprie sessioni rispetto a `--capacity`:

404 

405 * **Memoria**: moltiplica la memoria di una sessione per la somma, quindi aggiungi ciò che usano i processi propri dell'host

406 * **CPU**: moltiplica la richiesta di CPU di una sessione per la somma. Per permettere a ogni sessione di superare temporaneamente la richiesta contemporaneamente, moltiplica invece il suo limite di CPU.

407 

408 Dai a ogni runner il proprio container. Usa lo [stesso percorso `--base-dir`](#keep-the-base-directory-and-capacity-identical-across-runners) in ciascuno, su uno storage che nessun altro container runner monta, in modo che ogni runner abbia [la propria directory di lavoro](#harden-your-deployment).

409 

410### Dai a ogni sessione il proprio limite di memoria

411 

412Per evitare che una sessione termini le altre quando la memoria si esaurisce, esegui ogni runner a `--capacity 1` sotto il proprio limite di memoria, impostato sulla memoria di una sessione:

413 

414* **In un container**: esegui un runner per container e imposta il limite di memoria del container, come `limits.memory` su Kubernetes, `--memory` su Docker, o `mem_limit` in un file Compose. Mantieni la somma dei limiti dei container al di sotto della memoria dell'host, perché quando è l'host stesso a esaurirla, il kernel può uccidere processi ovunque sull'host.

415* **Sotto systemd senza un container**: imposta `MemoryMax` sull'unità del runner ed esegui un runner per host, perché i runner che [usano lo stesso `--base-dir`](#keep-the-base-directory-and-capacity-identical-across-runners) su un filesystem condividono i repository clonati lì. Ad esempio, a `--capacity 1` senza hook `checkout`, le loro sessioni su un repository possono lavorare nello stesso checkout contemporaneamente. Per eseguire diversi runner su un host, dai a ciascuno un container.

416 

417Quando un container o un'unità raggiunge il proprio limite di memoria, il kernel uccide i processi solo al suo interno. Se imposti `--capacity` sopra uno, le sessioni condividono un unico limite. Quando lo raggiungono, il kernel non sceglie per sessione quali processi uccidere, quindi l'uso di memoria di una sessione può terminare le altre.

418 

419Su Kubernetes, non puoi separare le sessioni con nessuno dei due valori dell'impostazione `singleProcessOOMKill` del kubelet. Non puoi nemmeno limitare la memoria totale di una sessione con un `ulimit` di memoria nel tuo [script wrapper](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#wrapper-scripts). Il kernel applica un valore come `ulimit -v` a ogni processo separatamente.

420 

421### Lascia spazio sotto i limiti di processi e thread

422 

423Per dimensionare un limite di processi e thread, misura ciò di cui ha bisogno una sessione e moltiplicalo per il numero di sessioni che condividono il limite. Quando quelle sessioni raggiungono il limite, il kernel rifiuta nuovi processi e thread, quindi comandi, build e test in ognuna di esse possono fallire. La chiamata rifiutata restituisce `EAGAIN`, il cui messaggio standard è `Resource temporarily unavailable`.

424 

425Supponi che una sessione raggiunga un picco di 300 processi e thread, e che quattro sessioni condividano il limite. Insieme ne richiedono 1.200, e con un limite di 2.400 lasci spazio per build che ne richiedono il doppio.

426 

427#### Dove impostare ciascun limite

428 

429Ogni limite in questa tabella conta i thread oltre ai processi, e `pids.max` è il file che contiene il limite di un cgroup:

430 

431| Limite | Dove lo imposti | Cosa lo condivide |

432| :- | :- | :- |

433| `pids.max` su Kubernetes | `podPidsLimit` nella configurazione del kubelet dei nodi che eseguono i runner. Non puoi impostarlo in una specifica di Pod. | I container di un Pod |

434| `pids.max` su Docker | `--pids-limit`, o `pids_limit` in un file Compose | Un container |

435| `pids.max` sotto systemd | `TasksMax` sull'unità del runner | Un'unità |

436| `ulimit -u` | La shell o il servizio che avvia il runner | Tutto ciò che sull'host viene eseguito con l'ID utente del runner. Non applicato per root. |

437 

438Quando non imposti `TasksMax`, systemd applica `DefaultTasksMax`, che per impostazione predefinita è il 15% del valore più basso tra `kernel.pid_max`, `kernel.threads-max` e il `pids.max` del cgroup root.

439 

440#### Misura il picco di una sessione

441 

442Per ottenere i numeri per i tuoi runner, misura una sessione sul suo host, che su Kubernetes è il nodo:

443 

444**1. Avvia un runner da solo**

445 

446Avvia un runner a `--capacity 1` senza nient'altro nel suo container o nella sua unità systemd, da solo sul suo host e nel suo ambiente:

447 

448* **Il suo host**: usane uno che non esegue nessun altro runner. Potrai così individuare il suo processo nel passaggio successivo.

449* **Il suo ambiente**: rendilo l'unico runner lì, ad esempio in un ambiente che [crei per il test](https://code.claude.com/docs/it/self-hosted-environments-quickstart.md#set-up-manually). Le sessioni vengono instradate a un ambiente e non a un runner.

450 

451Non avviare ancora una sessione, perché ti serve la directory del passaggio successivo prima che la build inizi.

452 

453**2. Trova la directory cgroup del runner**

454 

455Sull'host, non all'interno del container, trova l'ID del processo del runner, ad esempio con `ps`. Leggi `/proc/<pid>/cgroup` per quell'ID:

456 

457* **Una riga contiene `:pids:`**: l'host usa cgroup v1, e la directory è `/sys/fs/cgroup/pids` seguita dal testo dopo `:pids:`

458* **L'unica riga inizia con `0::`**: l'host usa cgroup v2, e la directory è `/sys/fs/cgroup` seguita dal testo dopo `0::`

459 

460**3. Esegui una build rappresentativa e registra il picco**

461 

462Esegui una sessione attraverso una build rappresentativa e rileva il picco dalla directory cgroup del runner:

463 

464* **La directory ha `pids.peak`**: leggi il file al termine della build

465* **La directory non ha `pids.peak`**: leggi `pids.current` una volta al secondo mentre la build è in esecuzione e conserva il valore più alto. Un picco tra due letture passa inosservato, quindi considera quel valore come una stima per difetto.

466 

467**4. Moltiplica per le sessioni che condividono il limite**

468 

469* **Il Pod, il container o l'unità di un runner**: moltiplica il picco per il `--capacity` del runner

470* **Un limite condiviso da diversi runner**: moltiplica il picco per la somma delle loro capacità

471 

472Poi aggiungi il picco di qualsiasi altra cosa che condivide il limite, come un altro container nel Pod.

473 

474**5. Imposta il limite al di sopra del risultato**

475 

476Con un limite più alto lasci spazio per build più pesanti, e con uno più basso fermi prima una fork bomb.

477 

478#### Controlla un limite `pids.max`

479 

480* **Verifica se `pids.max` è stato raggiunto**: cerca nel log del kernel dell'host, ad esempio con `dmesg`, una riga che contiene `cgroup: fork rejected by pids controller in` e il percorso di un cgroup. Il kernel lo registra solo la prima volta che rifiuta un processo o un thread in quel cgroup, quindi cerca nell'intero log.

481* **Visualizza il limite in vigore**: leggi `pids.max` nella directory cgroup del runner e in ogni directory al di sopra di essa. Il valore più basso è il limite in vigore, e `max` significa nessun limite a quel livello.

383 482 

384## Kubernetes483## Kubernetes

385 484 


577 676 

578Cosa il percorso di riutilizzo fa e non garantisce:677Cosa il percorso di riutilizzo fa e non garantisce:

579 678 

580* **Qualsiasi forma di clone funziona**: un clone completo, shallow, o single-branch al percorso viene usato così com'è. Il runner non passa mai `--depth` quando recupera in un clone esistente, quindi un pre-warm completo mantiene la sua cronologia completa e uno shallow rimane shallow. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, o un numero; predefinito 50) controlla solo il clone freddo che il runner fa quando nessun clone esiste ancora.679* **Profondità del clone**: crea il clone senza `--depth`, con o senza `--single-branch`. Il runner non passa mai `--depth` quando esegue il fetch in un clone con un remote `origin`, anche se imposti [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/it/self-hosted-environments-reference#environment-variable-only-settings). Con un clone completo, ogni sessione scarica solo i commit che mancano al clone. Con un clone shallow, una sessione su un branch che si è separato prima del commit più vecchio del clone scarica l'intera cronologia di quel branch.

581* **Le modifiche tracciate si resettano, i file non tracciati persistono**: a `--capacity 1`, ogni sessione inizia da un reset duro che cancella le modifiche tracciate della sessione precedente, ma il runner non esegue mai `git clean`, quindi i file non tracciati dalle sessioni precedenti dell'owner bloccato rimangono nell'albero.680* **Le modifiche tracciate si resettano, i file non tracciati persistono**: a `--capacity 1`, ogni sessione inizia da un reset duro che cancella le modifiche tracciate della sessione precedente, ma il runner non esegue mai `git clean`, quindi i file non tracciati dalle sessioni precedenti dell'owner bloccato rimangono nell'albero.

582* **Directory per sessione persistono anche**: accanto al checkout, il runner crea voci per sessione sotto `<base-dir>/_sessions/` per ogni sessione che esegue. La directory di configurazione Claude della sessione contiene una copia locale della trascrizione della conversazione. Accanto ad essa si trovano i file caricati della sessione, quando la sessione ne ha. La directory della sessione si trova lì anche: contiene qualsiasi worktree per sessione e checkout di hook `checkout` mentre la sessione è in esecuzione, e mantiene qualsiasi altra cosa Claude abbia scritto in essa.681* **Directory per sessione persistono anche**: accanto al checkout, il runner crea voci per sessione sotto `<base-dir>/_sessions/` per ogni sessione che esegue. La directory di configurazione Claude della sessione contiene una copia locale della trascrizione della conversazione. Accanto ad essa si trovano i file caricati della sessione, quando la sessione ne ha. La directory della sessione si trova lì anche: contiene qualsiasi worktree per sessione e checkout di hook `checkout` mentre la sessione è in esecuzione, e mantiene qualsiasi altra cosa Claude abbia scritto in essa.

583 682 


587* **Con il proxy git, un pre-warm `reftable` perde i suoi ref**: quando il runner sanitizza `.git/` prima di ogni sessione, mantiene `.git/refs/` e rimuove la directory `.git/reftable/`. Un clone pre-riscaldato nel formato dei ref `reftable` di git perde così i suoi ref, quindi pre-riscalda invece il clone nel formato dei ref `files` di git.686* **Con il proxy git, un pre-warm `reftable` perde i suoi ref**: quando il runner sanitizza `.git/` prima di ogni sessione, mantiene `.git/refs/` e rimuove la directory `.git/reftable/`. Un clone pre-riscaldato nel formato dei ref `reftable` di git perde così i suoi ref, quindi pre-riscalda invece il clone nel formato dei ref `files` di git.

588* **I clone lunghi non hanno bisogno di workaround**: il runner limita ogni operazione git con un watchdog senza progresso di 120 secondi e un hard cap di 30 minuti, non un timeout piatto, quindi un clone freddo lento che continua a segnalare progresso si completa.687* **I clone lunghi non hanno bisogno di workaround**: il runner limita ogni operazione git con un watchdog senza progresso di 120 secondi e un hard cap di 30 minuti, non un timeout piatto, quindi un clone freddo lento che continua a segnalare progresso si completa.

589 688 

689### Conferma che il runner usa il tuo clone

690 

691Per confermare che il runner usa il tuo clone, avvialo con [`--log-level debug`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags) e avvia una sessione sul repository. Il runner registra `Prefetched repo found at` e il percorso del clone. Se invece registra `No prefetched repo, fresh init at`, non ha trovato alcun clone utilizzabile al percorso indicato in quella riga. Verifica che il tuo clone si trovi in quel percorso, sia di proprietà dell'utente del runner e abbia un remote chiamato `origin`.

692 

693Se il runner trova il tuo clone e le sessioni si avviano comunque lentamente, verifica se il clone è shallow.

694 

590## Fissa la versione695## Fissa la versione

591 696 

592Per impostazione predefinita, il processo figlio di ogni sessione esegue il binario del runner stesso, e il runner disattiva l'auto-aggiornamento all'interno delle sessioni che genera. Con questa impostazione predefinita, ogni sessione esegue la versione che hai installato sull'host o incluso nell'immagine. Un aggiornamento a livello di host ha effetto la prossima volta che il runner si avvia.697Per impostazione predefinita, il processo figlio di ogni sessione esegue il binario del runner stesso, e il runner disattiva l'auto-aggiornamento all'interno delle sessioni che genera. Con questa impostazione predefinita, ogni sessione esegue la versione che hai installato sull'host o incluso nell'immagine. Un aggiornamento a livello di host ha effetto la prossima volta che il runner si avvia.


609* **Flotta fissa**: esegui un set statico di repliche runner e scala sulle [metriche Prometheus](https://code.claude.com/docs/it/self-hosted-environments-reference.md#prometheus-metrics) che ogni runner serve714* **Flotta fissa**: esegui un set statico di repliche runner e scala sulle [metriche Prometheus](https://code.claude.com/docs/it/self-hosted-environments-reference.md#prometheus-metrics) che ogni runner serve

610* **Runner on-demand**: esegui il sottocomando `claude self-hosted-runner orchestrator`, che esegue il polling di Anthropic per le sessioni in coda senza runner disponibile e invoca il tuo hook `spawn-runner` per avviarne uno per sessione. Vedi [Runner on-demand](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners).715* **Runner on-demand**: esegui il sottocomando `claude self-hosted-runner orchestrator`, che esegue il polling di Anthropic per le sessioni in coda senza runner disponibile e invoca il tuo hook `spawn-runner` per avviarne uno per sessione. Vedi [Runner on-demand](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners).

611 716 

717### Rilascia le sessioni inattive su una flotta fissa

718 

719Se le sessioni restano in coda su una flotta fissa mentre tutti i runner sono online, la causa potrebbe essere costituita dalle sessioni inattive. Per impostazione predefinita, una sessione mantiene il suo slot dopo la fine del suo turno, e il suo runner resta bloccato sull'[owner](https://code.claude.com/docs/it/self-hosted-environments#key-concepts) di quella sessione. Se l'[attività pianificata cloud](https://code.claude.com/docs/it/routines.md) del tuo team avvia una nuova sessione a ogni esecuzione, le sue sessioni inattive possono occupare tutti gli slot.

720 

721Per verificarlo, leggi `claude_code_self_hosted_runner_session_idle_seconds` nelle [metriche Prometheus](https://code.claude.com/docs/it/self-hosted-environments-reference.md#prometheus-metrics) di ogni runner. Ogni sessione detenuta da un runner ha la propria serie: `0` mentre la sessione è occupata, altrimenti i secondi trascorsi da quando è diventata inattiva. Scegli il tempo di inattività che vuoi consentire: più lungo delle pause che le persone fanno a metà di un'attività, e abbastanza breve da rilasciare ogni esecuzione prima che inizi quella successiva dell'attività pianificata. Confronta le serie con questo valore.

722 

723* **Serie sopra quel tempo, ad esempio `1800` per 30 minuti**: le sessioni inattive occupano quegli slot, quindi imposta `--release-idle-session-min`

724* **Tutte le serie sotto quel tempo**: nessuna sessione è rimasta inattiva così a lungo. Aggiungi runner, oppure imposta [`--kill-session-after-min`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags) per le [sessioni che non diventano mai inattive](#some-sessions-don’t-count-as-idle).

725* **Un runner senza serie**: nessuna sessione lo occupa. Consulta **Sessions stay queued** in [Risoluzione dei problemi](#troubleshooting).

726* **Un runner le cui metriche non rispondono**: il suo processo potrebbe essere terminato. Consulta **An environment that looks healthy** in [Quando il runner termina](#when-the-runner-exits).

727 

728Per rilasciare le sessioni inattive, avvia ogni runner con [`--release-idle-session-min`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags) e quel tempo in minuti, ad esempio `--release-idle-session-min 30`. Il runner rilascia quindi qualsiasi sessione che resta inattiva così a lungo, sia che l'abbia avviata un'attività pianificata sia una persona.

729 

730* **Lavoro non inviato**: una sessione rilasciata riprende al messaggio successivo, senza il lavoro di cui non aveva fatto il push. Per conservarne i commit, consulta [Le sessioni riprese perdono il lavoro non inviato](#additional-limitations).

731* **Uscita del runner**: un runner che rilascia la sua ultima sessione avvia una [normale uscita](#when-the-runner-exits). Fai in modo che il tuo supervisor lo riavvii su un filesystem pulito, come descritto in [Rafforza il tuo deploy](#harden-your-deployment).

732* **Sessioni che non diventano mai inattive**: imposta anche [`--kill-session-after-min`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags), perché [alcune sessioni non vengono considerate inattive](#some-sessions-don’t-count-as-idle)

733 

612## Problemi noti e limitazioni734## Problemi noti e limitazioni

613 735 

614Le seguenti sono le limitazioni in questa versione, con workaround dove uno esiste.736Le seguenti sono le limitazioni in questa versione, con workaround dove uno esiste.


642### Limitazioni aggiuntive764### Limitazioni aggiuntive

643 765 

644* **Le sessioni riprese perdono il lavoro non spinto**: un nuovo runner clona di nuovo il repository dal suo branch iniziale, quindi il lavoro che la sessione non aveva spinto è perso.766* **Le sessioni riprese perdono il lavoro non spinto**: un nuovo runner clona di nuovo il repository dal suo branch iniziale, quindi il lavoro che la sessione non aveva spinto è perso.

645 * **Per conservare il lavoro di cui è stato fatto il commit**: imposta [`--push-outcome-on-release`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags) su ogni runner nell'ambiente, perché un runner senza il flag riprende la sessione dal suo branch iniziale. Un runner con il flag esegue un push best-effort dei branch di risultato della sessione prima del rilascio, e la sessione ripresa parte da quei commit. Il push usa le credenziali git proprie dell'host del runner, anche su un runner che usa [git gestito da Anthropic](#use-the-anthropic-git-proxy). Le modifiche senza commit vengono comunque perse.767 * **Per conservare il lavoro di cui è stato fatto il commit**: imposta [`--push-outcome-on-release`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags) su ogni runner nell'ambiente, perché un runner senza il flag riprende la sessione dal suo branch iniziale. Un runner con il flag esegue un push best-effort dei branch di risultato della sessione prima del rilascio, e la sessione ripresa parte da quei commit. Il push usa le credenziali git proprie dell'host del runner, anche su un runner che usa [git gestito da Anthropic](#use-the-anthropic-git-proxy).

646 * **Con un hook `checkout`**: i repository estratti tramite un [hook del ciclo di vita `checkout`](https://code.claude.com/docs/it/self-hosted-environments-configuration#checkout) non vengono sottoposti a push. Crea invece uno snapshot di questi repository dall'[hook `post-session`](https://code.claude.com/docs/it/self-hosted-environments-configuration#post-session).768 * **Con un hook `checkout`**: i repository estratti tramite un [hook del ciclo di vita `checkout`](https://code.claude.com/docs/it/self-hosted-environments-configuration#checkout) non vengono sottoposti a push. Crea invece uno snapshot di questi repository dall'[hook `post-session`](https://code.claude.com/docs/it/self-hosted-environments-configuration#post-session).

647 * **Prima di abilitare il flag**: limita chi può eseguire il push sui ref `claude/*` sul remote di origine. Alla ripresa, il runner recupera il branch precedentemente spinto senza verificare chi ne ha eseguito il push.769 * **Prima di abilitare il flag**: limita chi può eseguire il push sui ref `claude/*` sul remote di origine. Alla ripresa, il runner recupera il branch precedentemente spinto senza verificare chi ne ha eseguito il push.

770 * **Le modifiche senza commit vengono comunque perse**: per chiedere a Claude di fare il commit e il push quando finisce di rispondere, vedi [Chiedere alle sessioni di eseguire il push del proprio lavoro](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)

648* **Un repository aggiunto a metà sessione può non riuscire a essere clonato**: Claude lo clona con `git clone` tramite HTTPS. Su un runner senza [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), il clone fallisce con un errore di autenticazione git se nulla sull'host può leggere il repository. Quando possibile, seleziona ogni repository di cui la sessione ha bisogno quando la crei.771* **Un repository aggiunto a metà sessione può non riuscire a essere clonato**: Claude lo clona con `git clone` tramite HTTPS. Su un runner senza [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), il clone fallisce con un errore di autenticazione git se nulla sull'host può leggere il repository. Quando possibile, seleziona ogni repository di cui la sessione ha bisogno quando la crei.

649* **Alcuni connettori non appaiono nelle sessioni self-hosted**: un connettore che non hai ancora connesso nelle Impostazioni di claude.ai non è elencato in una sessione self-hosted, e la sessione non ti chiederà di connettarlo. Connettilo prima nelle Impostazioni, quindi avvia una sessione fresca. L'aggiunta di un connettore a una sessione già in esecuzione non rende i suoi strumenti disponibili a Claude; avvia una sessione fresca per raccogliere un connettore appena aggiunto.772* **Alcuni connettori non appaiono nelle sessioni self-hosted**: un connettore che non hai ancora connesso nelle Impostazioni di claude.ai non è elencato in una sessione self-hosted, e la sessione non ti chiederà di connettarlo. Connettilo prima nelle Impostazioni, quindi avvia una sessione fresca. L'aggiunta di un connettore a una sessione già in esecuzione non rende i suoi strumenti disponibili a Claude; avvia una sessione fresca per raccogliere un connettore appena aggiunto.

650* **Quando qualcuno archivia o elimina una sessione, o rilascia il suo runner dal menu della sessione**: non fare affidamento sul push di [`--push-outcome-on-release`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags). Per salvare i commit in questi casi, esegui il push di `HEAD` su un branch di recupero da un [hook `post-session`](https://code.claude.com/docs/it/self-hosted-environments-configuration#post-session). Se parti dall'esempio presente lì, fai in modo che esegua il push anche quando non ci sono modifiche senza commit, perché esegue il push solo dopo un commit di snapshot.773* **Quando qualcuno archivia o elimina una sessione, o rilascia il suo runner dal menu della sessione**: non fare affidamento sul push di [`--push-outcome-on-release`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags). Per salvare i commit in questi casi, esegui il push di `HEAD` su un branch di recupero da un [hook `post-session`](https://code.claude.com/docs/it/self-hosted-environments-configuration#post-session). Se parti dall'esempio presente lì, fai in modo che esegua il push anche quando non ci sono modifiche senza commit, perché esegue il push solo dopo un commit di snapshot.


684* **Le sessioni falliscono subito dopo la presa in carico**: apri la sessione in claude.ai/code per vedere l'errore. Se l'errore mostra che git non è riuscito ad autenticarsi, controlla le [credenziali git](#configure-git) del runner. Su un runner avviato con `--use-anthropic-git-proxy`, consulta [Quando le sessioni non si avviano su un runner con il git proxy](#when-anthropic-doesnt-serve-a-session).807* **Le sessioni falliscono subito dopo la presa in carico**: apri la sessione in claude.ai/code per vedere l'errore. Se l'errore mostra che git non è riuscito ad autenticarsi, controlla le [credenziali git](#configure-git) del runner. Su un runner avviato con `--use-anthropic-git-proxy`, consulta [Quando le sessioni non si avviano su un runner con il git proxy](#when-anthropic-doesnt-serve-a-session).

685 808 

686 Una directory di base non scrivibile arresta il runner all'avvio invece di far fallire le sessioni. Consulta la voce **Il runner esce all'avvio con `cannot create or write to base directory`** in questo elenco.809 Una directory di base non scrivibile arresta il runner all'avvio invece di far fallire le sessioni. Consulta la voce **Il runner esce all'avvio con `cannot create or write to base directory`** in questo elenco.

810* **Una sessione viene presa in carico, ma Claude non risponde mai al suo primo messaggio**: se i tuoi runner raggiungono `api.anthropic.com` attraverso un proxy, configuralo in modo che lasci passare la risposta `/worker/events/stream` della sessione man mano che arriva. Aumentare i timeout del runner non serve. Per confermare la causa nel log del runner, consulta [Una sessione viene presa in carico, ma Claude non risponde mai al primo messaggio](#when-a-sessions-first-message-is-never-answered).

687* **Le sessioni non si avviano su un runner che ha impostato `--use-anthropic-git-proxy`**: cerca nel log del runner `access denied by the git proxy`, oppure un errore git che nomina un indirizzo `api.anthropic.com` contenente `/git_proxy/`. Per capire se Anthropic ha servito la sessione e correggere la causa, consulta [Quando le sessioni non si avviano su un runner con il git proxy](#when-anthropic-doesnt-serve-a-session).811* **Le sessioni non si avviano su un runner che ha impostato `--use-anthropic-git-proxy`**: cerca nel log del runner `access denied by the git proxy`, oppure un errore git che nomina un indirizzo `api.anthropic.com` contenente `/git_proxy/`. Per capire se Anthropic ha servito la sessione e correggere la causa, consulta [Quando le sessioni non si avviano su un runner con il git proxy](#when-anthropic-doesnt-serve-a-session).

688* **Le sessioni non riescono a raggiungere la rete attraverso un proxy di uscita autenticante**: quando l'origine impostata con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) fallisce, scade dopo 30 secondi o produce un valore vuoto, il runner risponde a quella connessione con `502 Bad Gateway` e registra il motivo. Il runner redige lo stderr del comando in quel log e non registra mai il valore dell'intestazione. Con `--proxy-authorization-command`, eseguire il comando stesso sull'host per confermare che stampa l'intero valore dell'intestazione su stdout. Se il runner esce invece all'avvio con `could not start the proxy-authorization listener`, non ha potuto aprire il suo listener di loopback.812* **Le sessioni non riescono a raggiungere la rete attraverso un proxy di uscita autenticante**: quando l'origine impostata con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) fallisce, scade dopo 30 secondi o produce un valore vuoto, il runner risponde a quella connessione con `502 Bad Gateway` e registra il motivo. Il runner redige lo stderr del comando in quel log e non registra mai il valore dell'intestazione. Con `--proxy-authorization-command`, eseguire il comando stesso sull'host per confermare che stampa l'intero valore dell'intestazione su stdout. Se il runner esce invece all'avvio con `could not start the proxy-authorization listener`, non ha potuto aprire il suo listener di loopback.

689* **Il runner registra righe `Poll failed` contenenti `rejecting the malformed poll response`**: il runner ha ricevuto una risposta di work-poll il cui corpo non è il JSON previsto dalla coda. Una possibile causa è un proxy di intercettazione o un captive portal che risponde con una propria pagina. Se il runner si connette attraverso un proxy, configura il proxy in modo che lasci passare inalterate le risposte da `api.anthropic.com`.813* **Il runner registra righe `Poll failed` contenenti `rejecting the malformed poll response`**: il runner ha ricevuto una risposta di work-poll il cui corpo non è il JSON previsto dalla coda. Una possibile causa è un proxy di intercettazione o un captive portal che risponde con una propria pagina. Se il runner si connette attraverso un proxy, configura il proxy in modo che lasci passare inalterate le risposte da `api.anthropic.com`.


708* **Una sessione non si avvia e mostra `This runner couldn't read`**: il runner ha chiesto un repository all'host git con le sue [credenziali git](#configure-git) e ha ricevuto una risposta di repository non trovato. Il repository non esiste, oppure quelle credenziali non possono raggiungerlo.832* **Una sessione non si avvia e mostra `This runner couldn't read`**: il runner ha chiesto un repository all'host git con le sue [credenziali git](#configure-git) e ha ricevuto una risposta di repository non trovato. Il repository non esiste, oppure quelle credenziali non possono raggiungerlo.

709 * **Se amministri il runner**: concedi alle sue credenziali git l'accesso in lettura al repository, poi avvia una nuova sessione.833 * **Se amministri il runner**: concedi alle sue credenziali git l'accesso in lettura al repository, poi avvia una nuova sessione.

710 * **Se hai avviato tu la sessione**: se il repository non esiste, avvia una nuova sessione con il repository corretto. Se il runner non riesce a raggiungere il repository, chiedi all'amministratore del runner di concedere l'accesso, poi avvia una nuova sessione.834 * **Se hai avviato tu la sessione**: se il repository non esiste, avvia una nuova sessione con il repository corretto. Se il runner non riesce a raggiungere il repository, chiedi all'amministratore del runner di concedere l'accesso, poi avvia una nuova sessione.

711* **Le sessioni impiegano minuti per avviarsi**: il clone iniziale di solito domina. Osservare la [metrica](https://code.claude.com/docs/it/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` per confermare e ridurre il clone con un [pre-warmed checkout](#reuse-a-pre-warmed-checkout) o un `CLAUDE_RUNNER_FETCH_DEPTH` più piccolo.835* **Le sessioni impiegano minuti per avviarsi o riprendere**: una possibile causa è un clone da zero. In una flotta che avvia ogni runner su un disco vuoto, senza [hook `checkout`](https://code.claude.com/docs/it/self-hosted-environments-configuration#checkout), il runner clona da zero i repository della sessione prima di avviare Claude Code. Una sessione che riprende su un disco vuoto attende di nuovo lo stesso clone.

836 

837 Per evitare il clone da zero, fornisci un [checkout pre-riscaldato](#reuse-a-pre-warmed-checkout). Se ne fornisci già uno, [verifica che il runner lo usi](#confirm-that-the-runner-uses-your-clone). Dove è il runner stesso a creare il clone ed esce dopo una sola sessione, abbassa [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/it/self-hosted-environments-reference#environment-variable-only-settings) dal valore predefinito di 50 commit per recuperare meno cronologia.

838 

839 Se usi un hook, questo viene eseguito al posto del clone del runner, quindi esamina invece ciò che fa il tuo hook. Osserva la [metrica](https://code.claude.com/docs/it/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` per vedere quanto durano gli avvii.

712* **I turni falliscono con un 401**: quando un turno termina con un 401 o un 403 dall'API di Anthropic, il runner recupera da Anthropic un nuovo [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/it/self-hosted-environments-configuration#wrapper-scripts) e lo passa alla sessione. Il turno fallito non viene ritentato. Questo token ha una durata breve e il runner lo ruota tramite lo stdin della sessione.840* **I turni falliscono con un 401**: quando un turno termina con un 401 o un 403 dall'API di Anthropic, il runner recupera da Anthropic un nuovo [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/it/self-hosted-environments-configuration#wrapper-scripts) e lo passa alla sessione. Il turno fallito non viene ritentato. Questo token ha una durata breve e il runner lo ruota tramite lo stdin della sessione.

713 841 

714 Quando un recupero fallisce, il runner registra una riga `inference_token refresh failed` che dice quando riproverà, e continua a riprovare finché la sessione è in esecuzione.842 Quando un recupero fallisce, il runner registra una riga `inference_token refresh failed` che dice quando riproverà, e continua a riprovare finché la sessione è in esecuzione.


788 916 

789Per una diagnosi guidata sull'host del runner, eseguire il [subcommand doctor](#troubleshooting).917Per una diagnosi guidata sull'host del runner, eseguire il [subcommand doctor](#troubleshooting).

790 918 

919### Una sessione viene presa in carico, ma Claude non risponde mai al primo messaggio

920 

921Se un runner prende in carico una sessione ma Claude non risponde mai al primo messaggio, e i tuoi runner raggiungono `api.anthropic.com` attraverso un proxy, la causa potrebbe essere il proxy. Anthropic invia a una sessione i suoi messaggi tramite un'unica risposta in streaming che rimane aperta. Se il tuo proxy la mette in buffer, o la chiude prima di inoltrare qualcosa, il primo messaggio non arriva mai. Le altre richieste della sessione continuano a riuscire.

922 

923Per risolvere, modifica il modo in cui il proxy gestisce questa richiesta:

924 

925```text theme={null}

926GET https://api.anthropic.com/v1/code/sessions/<session-id>/worker/events/stream

927```

928 

929* **Non mettere in buffer la risposta**: lasciala passare man mano che arriva. Il suo content type è `text/event-stream`.

930* **Lascia che la risposta resti aperta**: può restare aperta fino a un'ora. Se il proxy ha un timeout di inattività, mantienilo ben al di sopra di 15 secondi, perché per impostazione predefinita Anthropic invia un keep-alive almeno con quella frequenza.

931 

932Poi avvia una nuova sessione e verifica che Claude risponda. Aumentare i timeout del runner non serve: attendi solo più a lungo prima che il runner arresti la sessione.

933 

934#### Confermare la causa nel log del runner

935 

936Questi passaggi valgono per i runner con Claude Code v2.1.287 o successivo, con il valore predefinito `--log-level info`. I runner meno recenti registrano queste righe più tardi, oppure non le registrano affatto.

937 

9381. Attendi che trascorra [`--startup-timeout-min`](https://code.claude.com/docs/it/self-hosted-environments-reference#runner-cli-flags), 15 minuti per impostazione predefinita. Il runner arresta quindi la sessione e registra una riga che contiene `no child output for` e termina con `— releasing`.

9392. Cerca `SDKStartup: SSE` nel log del runner. Queste righe seguono una riga `finished: interrupted`, alcune righe dopo quella del passaggio 1. La maggior parte non ha un timestamp, quindi un raccoglitore di log potrebbe mostrarle altrove.

9403. Trova la riga in questa tabella:

941 

942| La riga di log contiene | Cosa fare |

943| :- | :- |

944| `SSE connect failed (no response in 30s)` o `SSE liveness timeout` | Verifica che il proxy inoltri la richiesta, lasci passare le intestazioni e i dati della risposta man mano che arrivano e non interrompa la connessione |

945| `SSE connect failed (HTTP` e un codice di stato | Controlla il log del proxy stesso. Se il proxy ha risposto direttamente alla richiesta, lascia passare la richiesta attraverso di esso. |

946| `SSE connect failed (` e qualsiasi altro testo | Il testo tra parentesi è l'errore. Cerca la stessa connessione nel log del proxy stesso. |

947| `SSE stream ended by server`, ripetutamente | Controlla il limite di tempo del proxy per le risposte di lunga durata. Una singola riga di questo tipo è normale. |

948| `SSE reconnected after` | Cerca una delle altre righe dopo di essa. Questa riga non significa che qualcosa abbia raggiunto la sessione. |

949 

950Se il log non contiene nessuna di queste righe, o il log del proxy non mostra nulla di anomalo, [segnala un problema](#report-an-issue).

951 

952#### Impedire alla sessione di riprovare

953 

954La sessione mantiene il messaggio in sospeso, e un runner che può servire il proprietario della sessione la prende di nuovo in carico. Finché non modifichi il proxy, la sessione resta in attesa nello stesso modo ogni volta. Per evitarlo, archivia la sessione in claude.ai/code.

955 

791## Cosa c'è dopo956## Cosa c'è dopo

792 957 

793* [Personalizza le sessioni](https://code.claude.com/docs/it/self-hosted-environments-configuration.md): script wrapper, lifecycle hook, runner on-demand, server MCP, e permessi958* [Personalizza le sessioni](https://code.claude.com/docs/it/self-hosted-environments-configuration.md): script wrapper, lifecycle hook, runner on-demand, server MCP, e permessi

Details

121* **La sessione non si avvia a causa di un errore git**: se l'errore include il messaggio di git `could not read Username for` seguito dall'URL del tuo host git, il runner non aveva credenziali HTTPS per quell'host.121* **La sessione non si avvia a causa di un errore git**: se l'errore include il messaggio di git `could not read Username for` seguito dall'URL del tuo host git, il runner non aveva credenziali HTTPS per quell'host.

122 * **Fornisci credenziali HTTPS**: vedi [Configura git](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#configure-git)122 * **Fornisci credenziali HTTPS**: vedi [Configura git](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#configure-git)

123 * **Clona invece tramite SSH**: se l'host del runner ha già una chiave SSH, vedi [Riscrivi gli URL git per le reti private](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)123 * **Clona invece tramite SSH**: se l'host del runner ha già una chiave SSH, vedi [Riscrivi gli URL git per le reti private](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)

124 * **Dopo una delle due correzioni**: avvia di nuovo il runner e osserva la sessione non riuscita invece di avviarne una nuova. Se non è riuscita più volte, attendi diversi minuti che il runner registri `Picked up session`.

125 * **Per usare invece un repository diverso**: [archivia](https://code.claude.com/docs/it/claude-code-on-the-web.md#archive-sessions) o [elimina](https://code.claude.com/docs/it/claude-code-on-the-web.md#delete-sessions) la sessione non riuscita, quindi avvia di nuovo il runner e avvia una nuova sessione. Altrimenti, il runner può raccogliere la sessione non riuscita invece di quella nuova.

124 126 

125### Se il runner esce127### Se il runner esce

126 128 

Details

83 83 

84| Flag | Default | Description |84| Flag | Default | Description |

85| :- | :- | :- |85| :- | :- | :- |

86| `--hook-concurrency <n>` | `4` | Numero massimo di hook `spawn-runner` in esecuzione in parallelo. Limita anche quante richieste di spawn vengono rivendicate per polling. |86| `--hook-concurrency <n>` | `4` | Numero massimo di hook `spawn-runner` in esecuzione in parallelo. Limita anche quante richieste di spawn vengono rivendicate per polling. L'orchestrator controlla la presenza di nuove richieste di spawn solo dopo che ogni hook avviato è terminato, quindi un hook lento ritarda gli hook successivi di quell'orchestrator. |

87| `--hook-timeout <sec>` | `60` | Termina l'albero dei processi dell'hook dopo questo numero di secondi. Il timeout più la sua grazia di 5 secondi deve rimanere al di sotto di `--expected-spawn-seconds`; l'orchestrator lo applica all'avvio. |87| `--hook-timeout <sec>` | `60` | Termina l'albero dei processi dell'hook dopo questo numero di secondi. Il timeout più la sua grazia di 5 secondi deve rimanere al di sotto di `--expected-spawn-seconds`; l'orchestrator lo applica all'avvio. |

88| `--expected-spawn-seconds <sec>` | `120` | Tempo p99 previsto tra il momento in cui l'orchestrator riceve una richiesta di spawn e quello in cui il runner si registra, inclusa qualsiasi attesa di capacità sulla tua piattaforma. Il server applica un intervallo da 10 a 3600. Inviato ad ogni polling come lease lato server: se nessun runner si registra prima che trascorra, la sessione viene ri-offerta con un ID ordine nuovo. Tutte le repliche devono condividere questo valore. |88| `--expected-spawn-seconds <sec>` | `120` | Tempo p99 previsto tra il momento in cui l'orchestrator riceve una richiesta di spawn e quello in cui il runner si registra, inclusa qualsiasi attesa di capacità sulla tua piattaforma. Il server applica un intervallo da 10 a 3600. Inviato ad ogni polling come lease lato server: se nessun runner si registra prima che trascorra, la sessione viene ri-offerta con un ID ordine nuovo. Tutte le repliche devono condividere questo valore. |

89| `--min-idle <n>` | `0` | Mantieni almeno N slot di sessione inattivi liberi generando proattivamente runner di standby. `0` disabilita il pre-riscaldamento. Abbina con il `--exit-if-unused-min` del runner in modo che i runner di standby in eccesso si riprendano. |89| `--min-idle <n>` | `0` | Mantieni almeno N slot di sessione inattivi liberi generando proattivamente runner di standby. `0` disabilita il pre-riscaldamento. Abbina con il `--exit-if-unused-min` del runner in modo che i runner di standby in eccesso si riprendano. |


116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Quanto tempo il runner attende dopo che una sessione raggiunge il suo limite `--kill-session-after-min`, affinché un turno in esecuzione finisca o il rilascio si completi, prima di terminare la sessione |116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Quanto tempo il runner attende dopo che una sessione raggiunge il suo limite `--kill-session-after-min`, affinché un turno in esecuzione finisca o il rilascio si completi, prima di terminare la sessione |

117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Limite massimo su quanto tempo il runner conta una sessione come occupata per il drenaggio `--drain-wait-sec` dopo che un turno finisce, mentre il processo della sessione segnala la fine del turno ad Anthropic. `0` o un valore inutilizzabile ricade al valore predefinito, quindi la tenuta non può essere disattivata. Richiede Claude Code v2.1.275 o successivo. |117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Limite massimo su quanto tempo il runner conta una sessione come occupata per il drenaggio `--drain-wait-sec` dopo che un turno finisce, mentre il processo della sessione segnala la fine del turno ad Anthropic. `0` o un valore inutilizzabile ricade al valore predefinito, quindi la tenuta non può essere disattivata. Richiede Claude Code v2.1.275 o successivo. |

118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Quanto tempo il runner attende che il sistema operativo consegni `SIGKILL` a un figlio bloccato in I/O non interrompibile prima di uscire lui stesso. Limitato inferiormente a `--post-session-hook-timeout-sec` più 15 secondi, e 30 in più quando `--push-outcome-on-release` è impostato, quindi il minimo effettivo è 75 secondi ai valori predefiniti. |118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Quanto tempo il runner attende che il sistema operativo consegni `SIGKILL` a un figlio bloccato in I/O non interrompibile prima di uscire lui stesso. Limitato inferiormente a `--post-session-hook-timeout-sec` più 15 secondi, e 30 in più quando `--push-outcome-on-release` è impostato, quindi il minimo effettivo è 75 secondi ai valori predefiniti. |

119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profondità di fetch git per cloni freschi. Imposta un numero intero positivo, o `full` o `0` per un fetch completo. I repository già presenti nello spazio di lavoro mantengono la loro profondità esistente. |119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profondità di fetch git per cloni freschi. Imposta un numero intero positivo, o `full` o `0` per un fetch completo. Per un clone già presente nel workspace, consulta [Riutilizzare un checkout pre-riscaldato](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Quanto tempo in millisecondi, per tentativo, un fetch git può attendere i primi dati mentre i numeri di avanzamento del server git continuano a crescere, come quando il server prepara il pack per un repository di grandi dimensioni. `0` o `off` disattiva l'attesa: un fetch di questo tipo viene quindi interrotto dopo due minuti senza dati. Qualsiasi altro numero intero viene limitato a un valore compreso tra `120000` e `1800000`, da 2 a 30 minuti. Richiede Claude Code v2.1.295 o successivo. |120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Quanto tempo in millisecondi, per tentativo, un fetch git può attendere i primi dati mentre i numeri di avanzamento del server git continuano a crescere, come quando il server prepara il pack per un repository di grandi dimensioni. `0` o `off` disattiva l'attesa: un fetch di questo tipo viene quindi interrotto dopo due minuti senza dati. Qualsiasi altro numero intero viene limitato a un valore compreso tra `120000` e `1800000`, da 2 a 30 minuti. Richiede Claude Code v2.1.295 o successivo. |

121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Quando `1`, salta il controllo della presenza `.git` dopo l'esecuzione di un hook `checkout`. Imposta questo quando il tuo hook materializza una fonte non-git. |121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Quando `1`, salta il controllo della presenza `.git` dopo l'esecuzione di un hook `checkout`. Imposta questo quando il tuo hook materializza una fonte non-git. |

122| `FORCE_AUTOUPDATE_PLUGINS` | unset | Quando `1`, consenti ai marketplace dei plugin di auto-aggiornare anche se il binario è bloccato |122| `FORCE_AUTOUPDATE_PLUGINS` | unset | Quando `1`, consenti ai marketplace dei plugin di auto-aggiornare anche se il binario è bloccato |


231 interval: 30s231 interval: 30s

232```232```

233 233 

234### Regole di avviso di esempio

235 

234Queste regole di avviso di esempio sono un punto di partenza; sintonizza le soglie per la dimensione della tua flotta:236Queste regole di avviso di esempio sono un punto di partenza; sintonizza le soglie per la dimensione della tua flotta:

235 237 

236```yaml theme={null}238```yaml theme={null}


252 annotations:254 annotations:

253 summary: "Runners are running mixed versions"255 summary: "Runners are running mixed versions"

254 - alert: ClaudeRunnerInitErrorsHigh256 - alert: ClaudeRunnerInitErrorsHigh

255 expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3257 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_init_errors_total[10m])) > 3

256 for: 5m258 for: 5m

257 labels: {severity: warning}259 labels: {severity: warning}

258 annotations:260 annotations:

259 summary: "Runner {{ $labels.pod }}: >3 session init failures in 10m (checkout hook / git / token / pre-init crash)"261 summary: "Sessions are failing before init (checkout hook / git / token / pre-init crash)"

260 - alert: ClaudeRunnerPollErrors262 - alert: ClaudeRunnerPollErrors

261 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0263 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0

262 for: 2m264 for: 2m


264 annotations:266 annotations:

265 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"267 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"

266 - alert: ClaudeRunnerSessionStartHookErrors268 - alert: ClaudeRunnerSessionStartHookErrors

267 expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3269 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m])) > 3

268 for: 5m270 for: 5m

269 labels: {severity: warning}271 labels: {severity: warning}

270 annotations:272 annotations:

271 summary: "Runner {{ $labels.pod }}: >3 SessionStart hook failures in 10m"273 summary: "SessionStart hooks are failing"

272 274 

273 - name: claude-code-self-hosted-orchestrator275 - name: claude-code-self-hosted-orchestrator

274 rules:276 rules:


285 annotations:287 annotations:

286 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"288 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"

287 - alert: ClaudeOrchestratorCircuitBroken289 - alert: ClaudeOrchestratorCircuitBroken

288 expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0290 expr: max by (namespace) (claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions and on (instance) max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1) > 0

289 for: 1m291 for: 1m

290 labels: {severity: critical}292 labels: {severity: critical}

291 annotations:293 annotations:


304 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"306 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"

305```307```

306 308 

309### Avvisi su runner persi e sessioni in attesa

310 

311Su una [flotta fissa](https://code.claude.com/docs/it/self-hosted-environments-deploy.md#scale-the-fleet), carica `ClaudeRunnersBelowFloor`. Con i [runner on-demand](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#on-demand-runners), carica invece `ClaudeOrchestratorSessionsWaiting` e `ClaudeOrchestratorQueueWaitHigh`.

312 

313#### Avviso quando una flotta fissa perde runner

314 

315`ClaudeRunnersBelowFloor` si attiva quando per 10 minuti restano meno runner registrati e raccolti della soglia minima:

316 

317```yaml theme={null}

318groups:

319 # Fixed fleets only. With on-demand runners the count follows demand,

320 # so ClaudeRunnersBelowFloor would fire whenever demand is low.

321 - name: claude-code-self-hosted-fixed-fleet-capacity

322 rules:

323 - alert: ClaudeRunnersBelowFloor

324 expr: (count(claude_code_self_hosted_runner_info{namespace="claude-runners"}) or vector(0)) < 2

325 for: 10m

326 labels: {severity: critical, namespace: claude-runners}

327 annotations:

328 summary: "Runners registered and scraped: {{ $value }}, below the floor. Check the runner workloads first, then the scrape targets if all are running."

329```

330 

331* **Soglia minima**: imposta il `2` in `expr` a circa metà del numero di repliche, arrotondato per eccesso. Con tre repliche mantieni `2`, e l'avviso si attiva quando resta un solo runner o nessuno.

332* **Namespace**: sostituisci `claude-runners` nel matcher e in `labels`, e copia l'avviso per ogni ulteriore namespace. Se i tuoi target non hanno un'etichetta `namespace`, rimuovi il matcher e l'etichetta, altrimenti l'avviso legge 0 e si attiva.

333* **`ClaudeRunnerPollStale` e `ClaudeRunnerPollErrors`**: mantienili caricati dalle [regole di avviso di esempio](#sample-alert-rules), perché `ClaudeRunnersBelowFloor` conta comunque un runner che non riesce a eseguire il polling

334 

335#### Avviso quando le sessioni attendono runner on-demand

336 

337`ClaudeOrchestratorSessionsWaiting` si attiva quando il numero di sessioni in attesa di un runner resta sopra 0 per 10 minuti. `ClaudeOrchestratorQueueWaitHigh` si attiva quando oltre l'1% delle attese in coda negli ultimi 10 minuti ha superato i 160 secondi, e questa condizione persiste per 5 minuti:

338 

339```yaml theme={null}

340groups:

341 # On-demand runners only. Needs no edit for the namespace.

342 - name: claude-code-self-hosted-on-demand-capacity

343 rules:

344 - alert: ClaudeOrchestratorSessionsWaiting

345 expr: |

346 max by (namespace) (

347 claude_code_self_hosted_orchestrator_pool_pending_sessions

348 and on (instance)

349 max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1

350 ) > 0

351 for: 10m

352 labels: {severity: warning}

353 annotations:

354 summary: "Sessions waiting for a runner: {{ $value }}, above the threshold for 10 minutes. Check claude_code_self_hosted_orchestrator_spawn_hooks_total by result, then runner workloads that don't start."

355 - alert: ClaudeOrchestratorQueueWaitHigh

356 expr: |

357 histogram_quantile(0.99, sum by (namespace, le) (

358 rate(claude_code_self_hosted_orchestrator_session_queue_wait_seconds_bucket[10m])

359 )) > 160

360 for: 5m

361 labels: {severity: warning}

362 annotations:

363 summary: "Over 1% of queue waits in the last 10 minutes exceeded 160 seconds. Check whether ClaudeOrchestratorDisconnected is firing, then claude_code_self_hosted_orchestrator_spawn_hooks_total by result and claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds."

364```

365 

366* **Soglia**: se c'è sempre qualche sessione in attesa, alza il `> 0` in `ClaudeOrchestratorSessionsWaiting` sopra il numero che vedi di solito

367* **`ClaudeOrchestratorDisconnected`**: mantienilo caricato dalle [regole di avviso di esempio](#sample-alert-rules), perché `ClaudeOrchestratorSessionsWaiting` smette di attivarsi circa 2 minuti dopo che l'ultimo orchestrator nel namespace si disconnette

368 

307### Passa attraverso le metriche del figlio della sessione369### Passa attraverso le metriche del figlio della sessione

308 370 

309Ogni sessione viene eseguita nel suo processo figlio con le sue metriche OpenTelemetry; a `--capacity` superiore a uno, il runner riscrive come quelle metriche figlio vengono esposte. L'impostazione di `OTEL_METRICS_EXPORTER=prometheus` sull'host del runner e `CLAUDE_CODE_ENABLE_TELEMETRY=1` nell'ambiente della sessione, ad esempio dal tuo [script wrapper](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#wrapper-scripts) o dall'ambiente del runner stesso, che le sessioni ereditano, ri-espone gli strumenti di contatore e gauge di ogni figlio sull'endpoint `/metrics` del runner, insieme alle serie del runner. Il runner riscrive l'esportatore del figlio per eseguire il push su OTLP a un ricevitore solo loopback sulla porta di salute, etichetta ogni serie con etichette `session_id` e `client_platform`, e rimuove le serie di una sessione quando quella sessione termina. Gli istogrammi non passano, e una metrica figlio il cui nome entrerebbe in collisione con il prefisso del runner è eliminata.371Ogni sessione viene eseguita nel suo processo figlio con le sue metriche OpenTelemetry; a `--capacity` superiore a uno, il runner riscrive come quelle metriche figlio vengono esposte. L'impostazione di `OTEL_METRICS_EXPORTER=prometheus` sull'host del runner e `CLAUDE_CODE_ENABLE_TELEMETRY=1` nell'ambiente della sessione, ad esempio dal tuo [script wrapper](https://code.claude.com/docs/it/self-hosted-environments-configuration.md#wrapper-scripts) o dall'ambiente del runner stesso, che le sessioni ereditano, ri-espone gli strumenti di contatore e gauge di ogni figlio sull'endpoint `/metrics` del runner, insieme alle serie del runner. Il runner riscrive l'esportatore del figlio per eseguire il push su OTLP a un ricevitore solo loopback sulla porta di salute, etichetta ogni serie con etichette `session_id` e `client_platform`, e rimuove le serie di una sessione quando quella sessione termina. Gli istogrammi non passano, e una metrica figlio il cui nome entrerebbe in collisione con il prefisso del runner è eliminata.

Details

324}324}

325```325```

326 326 

327Una voce ID modello come `"claude-opus-5"` consente anche versioni successive che la estendono, come Opus 5.5. Per bloccare una di quelle versioni, usa [`deniedModels`](#deniedmodels). Per fare in modo che ogni voce ID modello consenta solo la versione che nomina, usa [`availableModelsMatch`](#availablemodelsmatch). Vedi [Limita la selezione del modello](https://code.claude.com/docs/it/model-config.md#restrict-model-selection).327Una voce ID modello come `"claude-opus-5"` consente anche versioni successive che la estendono, come Opus 5.5. Per bloccare una di quelle versioni, usa [`deniedModels`](#deniedmodels). Per fare in modo che ogni voce ID modello consenta solo la versione che nomina, usa [`availableModelsMatch`](#availablemodelsmatch). Vedi [Limita la selezione del modello](https://code.claude.com/docs/it/model-config.md#restrict-model-selection). Per gli ID dei provider di terze parti, vedi [Fissa i modelli per i deploy di terze parti](https://code.claude.com/docs/it/model-config.md#pin-models-for-third-party-deployments).

328 328 

329### `availableModelsMatch`329### `availableModelsMatch`

330 330 


333* **Scope**: [`Managed`](#scopes). Claude Code ignora la chiave nelle impostazioni utente, progetto e locale e in `--settings`, con un avviso333* **Scope**: [`Managed`](#scopes). Claude Code ignora la chiave nelle impostazioni utente, progetto e locale e in `--settings`, con un avviso

334* **Type**: string, uno di:334* **Type**: string, uno di:

335 * `"prefix"`: una voce ID modello consente la sua versione e qualsiasi ID modello che la estende con un altro segmento335 * `"prefix"`: una voce ID modello consente la sua versione e qualsiasi ID modello che la estende con un altro segmento

336 * `"exact"`: una voce ID modello consente solo la versione che nomina, inclusi gli ID datati di quella versione, quindi `"claude-opus-5"` consente Opus 5 ma non `claude-opus-5-5`. Un alias di famiglia come `"opus"` consente comunque l'intera famiglia, e le voci `best`, `opusplan`, e `default` vengono ignorate336 * `"exact"`: una voce ID modello consente solo la versione che nomina, quindi `"claude-opus-5"` consente Opus 5 ma non `claude-opus-5-5`. Una voce come `"claude-opus-4-5"` consente anche il relativo ID modello Anthropic datato `claude-opus-4-5-20251101`. Un alias di famiglia come `"opus"` consente comunque l'intera famiglia, e le voci `best`, `opusplan`, e `default` vengono ignorate

337* **Default**: `"prefix"`337* **Default**: `"prefix"`

338 338 

339Questo esempio consente Opus 5 e Sonnet 5 e nessuna versione successiva di entrambi:339Questo esempio consente Opus 5 e Sonnet 5 e nessuna versione successiva di entrambi:


1371 1371 

1372Claude Code rimuove uno slash finale da un percorso di directory, quindi `~/.aws` e `~/.aws/` corrispondono alla stessa directory. Prima della v2.1.224, Claude Code passava lo slash finale alla sandbox, e Claude poteva comunque leggere o scrivere percorsi sotto una voce `denyRead` o `denyWrite` scritta con uno.1372Claude Code rimuove uno slash finale da un percorso di directory, quindi `~/.aws` e `~/.aws/` corrispondono alla stessa directory. Prima della v2.1.224, Claude Code passava lo slash finale alla sandbox, e Claude poteva comunque leggere o scrivere percorsi sotto una voce `denyRead` o `denyWrite` scritta con uno.

1373 1373 

1374Claude Code rimuove anche un `/**` finale, quindi `~/build/**` e `~/build` coprono la stessa directory. Se un wildcard come `*` funziona dipende da quale elenco è la voce e dalla piattaforma:1374##### Dove funzionano i caratteri jolly nei percorsi della sandbox

1375 1375 

1376* **`allowWrite` e `denyWrite`**: su macOS, i wildcard funzionano. Su Linux e WSL2, la sandbox monta percorsi concreti, quindi Claude Code salta una voce che contiene `*`, `?` o `[` una volta rimosso il `/**` finale, e quella voce non ha effetto. Claude Code aggiunge i percorsi dalle tue regole di permesso `Edit` a questi elenchi, quindi lo stesso limite si applica a loro, e la scheda **Config** di `/sandbox` avvisa in merito alle regole di permesso `Edit` e `Read` che contengono wildcard.1376I caratteri jolly `*`, `?` e `**` funzionano in tutti e quattro gli elenchi di percorsi di `sandbox.filesystem` su macOS, e in meno casi su Linux e WSL2:

1377* **`denyRead` e `allowRead`**: i wildcard funzionano su ogni piattaforma. Su Linux e WSL2, Claude Code espande una voce di lettura ai percorsi concreti che corrisponde, cosa che non fa per gli elenchi di scrittura.

1378 1377 

1379Le parentesi graffe corrispondono come caratteri ordinari in un nome, quindi `~/data/{keys,tokens}` copre una directory chiamata letteralmente `{keys,tokens}`, non due alternative. Per coprire `~/data/keys` e `~/data/tokens`, aggiungi ciascuno come voce separata.1378| Elenco di `sandbox.filesystem` | Cosa funziona su Linux e WSL2 | Esempio che non funziona su Linux e WSL2 | Cosa scrivere invece |

1379| :- | :- | :- | :- |

1380| `denyRead`, `allowRead` | Un `/**` finale funziona, quindi `~/build/**` copre la stessa directory di `~/build`. Qualsiasi altro carattere jolly funziona solo dopo il nome della prima directory del [percorso completo](#sandbox-path-prefixes) della voce. | `/**/*.pem` in `denyRead` non copre nulla, quindi non blocca alcuna lettura | `/srv/**/*.pem`, con una voce per ogni directory di primo livello |

1381| `allowWrite`, `denyWrite` | Funziona solo un `/**` finale, quindi `~/build/**` copre la stessa directory di `~/build` | `./src/*` copre solo un file o una directory in `src` che si chiama proprio `*`, e nulla se non esiste | `./src`, che copre tutto ciò che si trova sotto `src`, oppure una voce per ogni percorso |

1382 

1383In `~/keys/*.pem`, il carattere jolly viene dopo il nome della prima directory, che è `home` per una directory home `/home/alice`:

1384 

1385```text theme={null}

1386~/keys/*.pem the entry

1387/home/alice/keys/*.pem its full path

1388 ^^^^ the first directory name, home

1389```

1390 

1391Su Linux e WSL2, la scheda **Config** di `/sandbox` in una sessione avvisa in caso di regole di permesso `Edit` che contengono un carattere jolly diverso da un `/**` finale. Questi caratteri jolly non funzionano per i comandi nella sandbox. Aggiungi ogni percorso che la regola deve coprire, oppure la directory che li contiene, ad `allowWrite` per una regola di consenso o a `denyWrite` per una regola di divieto.

1392 

1393##### Nomi di directory con parentesi quadre, graffe o tonde

1394 

1395Per consentire o bloccare una directory il cui nome contiene parentesi quadre, scrivi il nome così com'è, ad esempio `./app/[slug]`. In quella voce, `[slug]` è il nome reale della directory, parentesi incluse:

1396 

1397```text theme={null}

1398app/

1399└── [slug]/

1400 └── page.tsx

1401```

1402 

1403Quella voce copre tutto ciò che si trova sotto la directory, quindi ometti un `/**` finale. Su macOS e su Linux e WSL2, la directory `app/[slug]` deve esistere quando il comando nella sandbox si avvia.

1404 

1405* **Parentesi quadre come `[slug]`**: in ogni elenco su macOS, e in `denyRead` e `allowRead` su Linux e WSL2, le parentesi in `./app/[slug]` sono anche un pattern. La voce corrisponde quindi anche a qualsiasi percorso sotto `app` il cui nome è un carattere tra quelli di `slug`, come `app/s` o `app/g`. Con quella voce in `allowRead`, o in `allowWrite` su macOS, i comandi nella sandbox possono raggiungere anche quei percorsi. Rinomina quelli che non dovrebbero raggiungere.

1406* **Parentesi quadre come `[user-id]` o `[post-id]`, in cui il carattere a sinistra del trattino viene dopo quello a destra nell'ordinamento**: `./app/[user-id]` copre solo la directory con esattamente quel nome, in ogni elenco su ogni piattaforma. Prima della v2.1.304, i comandi nella sandbox su Linux e WSL2 non riuscivano ad avviarsi finché `denyRead` o `allowRead` contenevano una voce di questo tipo.

1407* **Parentesi graffe e tonde**: sono caratteri ordinari, quindi `~/data/{keys,tokens}` copre una sola directory chiamata `{keys,tokens}`, non due alternative. Per coprire `~/data/keys` e `~/data/tokens`, aggiungile come voci separate.

1380 1408 

1381### `sandbox.filesystem.allowWrite`1409### `sandbox.filesystem.allowWrite`

1382 1410 


3470 3498 

3471La corrispondenza del nome host non distingue tra maiuscole e minuscole e tratta `hooks.example.com.`, con il punto finale che contrassegna un nome di dominio completamente qualificato, allo stesso modo di `hooks.example.com`, come fa il DNS. L'allowlist si applica agli hook da ogni fonte, incluse le impostazioni gestite.3499La corrispondenza del nome host non distingue tra maiuscole e minuscole e tratta `hooks.example.com.`, con il punto finale che contrassegna un nome di dominio completamente qualificato, allo stesso modo di `hooks.example.com`, come fa il DNS. L'allowlist si applica agli hook da ogni fonte, incluse le impostazioni gestite.

3472 3500 

3473Nell'opzione `managedSettings` dell'Agent SDK, Claude Code ignora questa chiave quando il suo elenco contiene voci, quindi passa invece l'elenco nell'opzione `settings` dell'SDK. Vedi [cosa fa ogni valore nelle impostazioni padre](https://code.claude.com/docs/it/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3501Nell'opzione `managedSettings` dell'Agent SDK, Claude Code ignora un elenco che contiene voci, quindi passalo invece nell'[opzione `settings`](https://code.claude.com/docs/it/agent-sdk/typescript#options) dell'SDK. Vedi [cosa fa un elenco vuoto nelle impostazioni padre](https://code.claude.com/docs/it/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3474 3502 

3475### `allowManagedHooksOnly`3503### `allowManagedHooksOnly`

3476 3504 


3520La portata dipende da quale file contiene la chiave:3548La portata dipende da quale file contiene la chiave:

3521 3549 

3522* **Nelle impostazioni gestite**: Claude Code disabilita ogni hook configurato, inclusi quelli gestiti, e continua a eseguire gli hook che l'[Agent SDK](https://code.claude.com/docs/it/agent-sdk/overview.md) registra nel processo3550* **Nelle impostazioni gestite**: Claude Code disabilita ogni hook configurato, inclusi quelli gestiti, e continua a eseguire gli hook che l'[Agent SDK](https://code.claude.com/docs/it/agent-sdk/overview.md) registra nel processo

3523* **Nell'opzione `managedSettings` dell'Agent SDK**: Claude Code tratta la chiave come `allowManagedHooksOnly: true`, quindi consulta [cosa viene eseguito sotto `allowManagedHooksOnly`](#what-runs-under-allowmanagedhooksonly) per sapere quali hook si arrestano. Su una macchina in cui un amministratore distribuisce impostazioni gestite, Claude Code ignora questa chiave a meno che l'amministratore non [consenta a un host di incorporamento di aggiungere policy](https://code.claude.com/docs/it/managed-settings.md#let-an-embedding-host-add-policy). Richiede Claude Code v2.1.309 o successivo.3551* **Nell'opzione `managedSettings` dell'Agent SDK**: su una macchina in cui un amministratore distribuisce impostazioni gestite, Claude Code ignora questa chiave a meno che l'amministratore non [consenta a un host di incorporamento di aggiungere policy](https://code.claude.com/docs/it/managed-settings.md#let-an-embedding-host-add-policy). Dove la chiave ha effetto, gli hook dell'utente, del progetto, locali e dei plugin si arrestano, così come quelli nell'opzione `settings` dell'SDK. Gli hook gestiti di un amministratore, gli hook dei plugin [forzati ad abilitare](#enabledplugins) e le tue [callback degli hook dell'SDK](https://code.claude.com/docs/it/agent-sdk/hooks.md) continuano a essere eseguiti. Richiede Claude Code v2.1.309 o successivo.

3524* **In qualsiasi altro file di impostazioni**: Claude Code disabilita gli hook dell'utente, del progetto, locali e dei plugin; gli hook gestiti, gli hook dell'Agent SDK e gli hook dai plugin forzati abilitati in [`enabledPlugins`](#enabledplugins) gestito continuano a essere eseguiti3552* **In qualsiasi altro file di impostazioni**: Claude Code disabilita gli hook dell'utente, del progetto, locali e dei plugin; gli hook gestiti, gli hook dell'Agent SDK e gli hook dai plugin forzati abilitati in [`enabledPlugins`](#enabledplugins) gestito continuano a essere eseguiti

3525 3553 

3526La chiave arresta anche i [mod](https://code.claude.com/docs/it/plugins/mods/overview.md), che sono plugin il cui codice registra hook:3554La chiave arresta anche i [mod](https://code.claude.com/docs/it/plugins/mods/overview.md), che sono plugin il cui codice registra hook:


3624 3652 

3625L'allowlist si applica agli hook da ogni fonte, incluse le impostazioni gestite.3653L'allowlist si applica agli hook da ogni fonte, incluse le impostazioni gestite.

3626 3654 

3627Nell'opzione `managedSettings` dell'Agent SDK, Claude Code ignora questa chiave quando il suo elenco contiene voci, quindi passa invece l'elenco nell'opzione `settings` dell'SDK. Vedi [cosa fa ogni valore nelle impostazioni padre](https://code.claude.com/docs/it/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3655Nell'opzione `managedSettings` dell'Agent SDK, Claude Code ignora un elenco che contiene voci, quindi passalo invece nell'[opzione `settings`](https://code.claude.com/docs/it/agent-sdk/typescript#options) dell'SDK. Vedi [cosa fa un elenco vuoto nelle impostazioni padre](https://code.claude.com/docs/it/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3628 3656 

3629### `workflowKeywordTriggerEnabled`3657### `workflowKeywordTriggerEnabled`

3630 3658 


3841* **Type**: Boolean3869* **Type**: Boolean

3842 * `true`: Claude Code non esegue mai il comando dichiarato dal marketplace, non installa o aggiorna i plugin con origine command, e smette di caricare quelli già installati3870 * `true`: Claude Code non esegue mai il comando dichiarato dal marketplace, non installa o aggiorna i plugin con origine command, e smette di caricare quelli già installati

3843 * `false`: Claude Code consente i plugin con origine command esplicitamente3871 * `false`: Claude Code consente i plugin con origine command esplicitamente

3844* **Default**: non impostato, quindi Claude Code segue [`allowManagedHooksOnly`](#allowmanagedhooksonly): un'organizzazione che limita l'esecuzione degli hook alle impostazioni gestite ottiene anche le origini command disabilitate3872* **Default**: non impostato, quindi Claude Code segue [`allowManagedHooksOnly`](#allowmanagedhooksonly): un'organizzazione che limita l'esecuzione degli hook alle impostazioni gestite ottiene anche le origini command disabilitate. Un'applicazione che passa [`disableAllHooks: true`](#disableallhooks) nell'opzione `managedSettings` dell'Agent SDK non disabilita di per sé le origini command.

3845 3873 

3846```json managed-settings.json theme={null}3874```json managed-settings.json theme={null}

3847{3875{

Details

127 127 

128```bash ~/.tmux.conf theme={null}128```bash ~/.tmux.conf theme={null}

129set -g allow-passthrough on129set -g allow-passthrough on

130set -g focus-events on

130set -s extended-keys on131set -s extended-keys on

131set -as terminal-features 'xterm*:extkeys'132set -as terminal-features 'xterm*:extkeys'

132```133```

133 134 

134La riga `allow-passthrough` consente alle notifiche e agli aggiornamenti di avanzamento di raggiungere il terminale esterno invece di essere inghiottiti da tmux. Le righe `extended-keys` consentono a tmux di distinguere Shift+Invio da Invio semplice in modo che la scorciatoia della nuova riga funzioni.135La riga `allow-passthrough` consente alle notifiche e agli aggiornamenti di avanzamento di raggiungere il terminale esterno invece di essere inghiottiti da tmux. Le righe `extended-keys` consentono a tmux di distinguere Shift+Invio da Invio semplice in modo che la scorciatoia della nuova riga funzioni.

135 136 

137L'elemento [`Image` di un mod](https://code.claude.com/docs/it/plugins/mods/reference#elements) richiede le righe `allow-passthrough` e `focus-events`, insieme agli altri [requisiti per disegnare all'interno di tmux](https://code.claude.com/docs/it/plugins/mods/gallery.md#draw-an-image-inside-tmux). Dopo aver aggiunto le righe, scollegati anche da tmux, ricollegati e riavvia Claude Code.

138 

136## Correggere l'eliminazione di una parola intera con Backspace su Windows139## Correggere l'eliminazione di una parola intera con Backspace su Windows

137 140 

138Su Windows, Claude Code legge un Backspace che arriva come `^H` come Ctrl+Backspace, che [elimina la parola precedente](https://code.claude.com/docs/it/interactive-mode.md#text-editing), tranne quando `TERM_PROGRAM` è `mintty` o `TERM` è `cygwin`. Su macOS e Linux, Claude Code lo legge come semplice Backspace.141Su Windows, Claude Code legge un Backspace che arriva come `^H` come Ctrl+Backspace, che [elimina la parola precedente](https://code.claude.com/docs/it/interactive-mode.md#text-editing), tranne quando `TERM_PROGRAM` è `mintty` o `TERM` è `cygwin`. Su macOS e Linux, Claude Code lo legge come semplice Backspace.

ultrareview.md +2 −2

Details

176Il sottocomando termina con uno di tre codici:176Il sottocomando termina con uno di tre codici:

177 177 

178* **0**: la review è stata completata, con o senza risultati178* **0**: la review è stata completata, con o senza risultati

179* **1**: la review non è stata avviata o è stata interrotta prima di terminare, la sessione cloud ha restituito un errore oppure il timeout è scaduto. Il codice è 1 anche quando la [cartella non è considerata attendibile](#trust-the-folder-before-the-review-runs), incluso quando rispondi `n` o premi Ctrl-C alla domanda sulla fiducia.179* **1**: la review non è stata avviata o è stata interrotta prima di terminare, la sessione cloud ha restituito un errore oppure il timeout è scaduto. Il codice è 1 anche quando la [cartella non è considerata attendibile](#trust-the-folder-before-the-review-runs), incluso quando rispondi `n`, premi Invio o premi Ctrl-C alla domanda sulla fiducia.

180* **130**: hai premuto Ctrl-C mentre il sottocomando stava avviando la review, attendendo i risultati o inviando il commento di `--post`, anziché alla domanda sulla fiducia180* **130**: hai premuto Ctrl-C mentre il sottocomando stava avviando la review, attendendo i risultati o inviando il commento di `--post`, anziché alla domanda sulla fiducia

181 181 

182Se il sottocomando termina prima dell'arrivo dei risultati, questi non raggiungono mai il tuo terminale. La review potrebbe essere ancora in esecuzione nel cloud. Eseguire di nuovo il sottocomando avvia una nuova review anziché riprendere quella, e la nuova review [usa un'esecuzione gratuita o viene addebitata come crediti di utilizzo](#pricing-and-free-runs).182Se il sottocomando termina prima dell'arrivo dei risultati, questi non raggiungono mai il tuo terminale. La review potrebbe essere ancora in esecuzione nel cloud. Eseguire di nuovo il sottocomando avvia una nuova review anziché riprendere quella, e la nuova review [usa un'esecuzione gratuita o viene addebitata come crediti di utilizzo](#pricing-and-free-runs).


198claude ultrareview 1234 --trust-workspace198claude ultrareview 1234 --trust-workspace

199```199```

200 200 

201Per esaminare una pull request non attendibile, esegui `claude ultrareview <PR number> --trust-workspace` da un branch di cui ti fidi. A differenza di `y`, il flag non salva nulla. La PR viene [clonata nel cloud](#review-a-pull-request), quindi non ti serve il suo branch in locale.201Per esaminare una pull request non attendibile, esegui `claude ultrareview <PR number> --trust-workspace` da un branch di cui ti fidi. La PR viene [clonata nel cloud](#review-a-pull-request), quindi non ti serve il suo branch in locale.

202 202 

203## Come ultrareview si confronta con /code-review203## Come ultrareview si confronta con /code-review

204 204 

vs-code.md +6 −1

Details

1001 1001 

1002### La dettatura o la scheda Web non funziona dietro un proxy con ispezione TLS1002### La dettatura o la scheda Web non funziona dietro un proxy con ispezione TLS

1003 1003 

1004Quando la dettatura o la scheda Web non funziona con un errore di certificato come `unable to get local issuer certificate`, imposta [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/it/network-config#custom-ca-certificates) nel blocco `env` di `~/.claude/settings.json`. Impostala sul percorso di un file PEM con il certificato della CA radice del tuo proxy, che il tuo team IT può fornirti. Il testo dell'errore si trova sul pulsante del microfono o nei log dell'estensione:1004Quando la dettatura o la scheda Web non funziona con un errore di certificato come `unable to get local issuer certificate`, imposta [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/it/network-config#custom-ca-certificates) nel blocco `env` di `~/.claude/settings.json`. Impostala sul percorso di un file PEM con il certificato della CA radice del tuo proxy, che il tuo team IT può fornirti. L'errore appare sul pulsante del microfono o nella scheda Web, oppure nei log:

1005 1005 

1006* **Dettatura**: il pulsante del microfono mostra il testo dell'errore dopo `Dictation error: WebSocket error:`.1006* **Dettatura**: il pulsante del microfono mostra il testo dell'errore dopo `Dictation error: WebSocket error:`.

1007* **Scheda Web**: la scheda che elenca le [sessioni cloud](#resume-cloud-sessions-from-claude-ai) mostra `Remote server is not connected` senza il testo dell'errore. Per leggerlo nei log:1007* **Scheda Web**: la scheda che elenca le [sessioni cloud](#resume-cloud-sessions-from-claude-ai) mostra `Remote server is not connected` senza il testo dell'errore. Per leggerlo nei log:

1008 1. Esegui **Claude Code: Show Logs** dalla [Command Palette](#vs-code-commands-and-shortcuts) per aprire il canale di output `Claude VSCode`.1008 1. Esegui **Claude Code: Show Logs** dalla [Command Palette](#vs-code-commands-and-shortcuts) per aprire il canale di output `Claude VSCode`.

1009 2. Fai clic su **Reconnect** nella scheda e attendi che smetta di mostrare `Connecting…`.1009 2. Fai clic su **Reconnect** nella scheda e attendi che smetta di mostrare `Connecting…`.

1010 3. Cerca nel canale `Error fetching remote sessions:` o `Failed to fetch organization UUID:`, quindi leggi il testo dell'errore dopo quel prefisso nella riga corrispondente più recente.1010 3. Cerca nel canale `Error fetching remote sessions:` o `Failed to fetch organization UUID:`, quindi leggi il testo dell'errore dopo quel prefisso nella riga corrispondente più recente.

1011* **Avviso nel log**: un avviso che menziona `an authority that Claude Code does not trust` segnala un errore di certificato. Dietro un proxy con ispezione TLS, imposta `NODE_EXTRA_CA_CERTS` in `env` in `~/.claude/settings.json`. Le versioni precedenti alla v2.1.309 non registrano questo avviso.

1011 1012 

1012Questa correzione richiede la versione 2.1.307 o successiva dell'estensione, quindi aggiorna prima l'estensione. Poi imposta `NODE_EXTRA_CA_CERTS` sul percorso completo del file del certificato, scritto senza `~`. Per un percorso Windows, scrivi ogni barra rovesciata due volte in `settings.json`, come in `C:\\certs\\example-ca.pem`.1013Questa correzione richiede la versione 2.1.307 o successiva dell'estensione, quindi aggiorna prima l'estensione. Poi imposta `NODE_EXTRA_CA_CERTS` sul percorso completo del file del certificato, scritto senza `~`. Per un percorso Windows, scrivi ogni barra rovesciata due volte in `settings.json`, come in `C:\\certs\\example-ca.pem`.

1013 1014 

1015> [!NOTE]

1016>

1017> In una finestra connessa a WSL, a un host SSH, a un dev container o a un altro sistema, salva il file del certificato e modifica `~/.claude/settings.json` su quel sistema, non sul tuo computer locale.

1018 

1014Questo esempio indica un file di certificato nel percorso Linux o macOS `/etc/ssl/certs/example-ca.pem`:1019Questo esempio indica un file di certificato nel percorso Linux o macOS `/etc/ssl/certs/example-ca.pem`:

1015 1020 

1016```json ~/.claude/settings.json theme={null}1021```json ~/.claude/settings.json theme={null}