SpyBara
Go Premium

Documentation 2026-10-09 23:02 UTC to 2026-10-10 18:02 UTC

28 files changed +553 −129. View all changes and history on the product overview
2026
Sat 10 18:58 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

124 124 

125Senza i messaggi parziali abilitati, ricevete tutti i tipi di messaggio tranne `StreamEvent`. I tipi comuni includono `SystemMessage` (inizializzazione della sessione), `AssistantMessage` (blocchi di contenuto completi), `ResultMessage` (risultato finale) e un messaggio di confine compatto che indica quando la cronologia della conversazione è stata compattata (`SDKCompactBoundaryMessage` in TypeScript; `SystemMessage` con sottotipo `"compact_boundary"` in Python).125Senza i messaggi parziali abilitati, ricevete tutti i tipi di messaggio tranne `StreamEvent`. I tipi comuni includono `SystemMessage` (inizializzazione della sessione), `AssistantMessage` (blocchi di contenuto completi), `ResultMessage` (risultato finale) e un messaggio di confine compatto che indica quando la cronologia della conversazione è stata compattata (`SDKCompactBoundaryMessage` in TypeScript; `SystemMessage` con sottotipo `"compact_boundary"` in Python).

126 126 

127<h3 id="handle-a-stream-that’s-cut-off">

128 Gestire uno stream interrotto

129</h3>

130 

131Se uno stream viene interrotto a metà messaggio, ad esempio quando interrompi il turno o la connessione cade, ricevi comunque il `message_stop` di quel messaggio prima che il turno termini. Anche un blocco di testo o di ragionamento interrotto riceve il proprio `content_block_stop`. Una chiamata a uno strumento interrotta no, quindi se `message_stop` arriva mentre il blocco di una chiamata a uno strumento è ancora aperto, considera incompleto l'input di quella chiamata.

132 

133Prima di Claude Code v2.1.290, uno stream interrotto poteva terminare il turno senza `message_stop`, quindi una risposta che visualizzi a partire dagli eventi di stream poteva restare mostrata come in corso. L'Agent SDK per TypeScript include Claude Code v2.1.290 o successivo a partire dalla v0.3.290, e l'Agent SDK per Python a partire dalla v0.2.164. Se una risposta resta mostrata come in corso dopo la fine del turno, aggiorna l'SDK.

134 

127<h2 id="stream-tool-calls">135<h2 id="stream-tool-calls">

128 Trasmettere chiamate di strumenti136 Trasmettere chiamate di strumenti

129</h2>137</h2>

Details

1588 1588 

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

1590 1590 

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

1592 1592 

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

1594 1594 


1631 1631 

1632Imposta `inline_pastes` per indicare a Claude Code quali parti di `message.content` l'utente ha incollato anziché digitato, una stringa per ogni incolla. Il testo del prompt resta dove l'utente lo ha inserito. Claude Code può racchiudere ogni incolla elencata in tag `<pasted_content>` nella sua posizione, così Claude può distinguere il materiale incollato dalle parole dell'utente. Vengono racchiuse solo le incolla nell'ultimo blocco di testo del prompt. Richiede TypeScript Agent SDK v0.3.280 o successiva.1632Imposta `inline_pastes` per indicare a Claude Code quali parti di `message.content` l'utente ha incollato anziché digitato, una stringa per ogni incolla. Il testo del prompt resta dove l'utente lo ha inserito. Claude Code può racchiudere ogni incolla elencata in tag `<pasted_content>` nella sua posizione, così Claude può distinguere il materiale incollato dalle parole dell'utente. Vengono racchiuse solo le incolla nell'ultimo blocco di testo del prompt. Richiede TypeScript Agent SDK v0.3.280 o successiva.

1633 1633 

1634Ogni campo per i contenuti incollati ha un limite di dimensione:

1635 

1636* `pasted_content`: se le voci più i blocchi di contenuto al loro interno sono più di 1.000, Claude Code ignora l'intero campo.

1637* `inline_pastes`: Claude Code usa le prime 100 voci non vuote e ignora le restanti.

1638 

1634Imposta `shouldQuery`, `client_composed` o `priority` per cambiare il modo in cui Claude Code gestisce un messaggio che invii:1639Imposta `shouldQuery`, `client_composed` o `priority` per cambiare il modo in cui Claude Code gestisce un messaggio che invii:

1635 1640 

1636* `shouldQuery`: impostalo a `false` per aggiungere il messaggio alla trascrizione senza attivare un turno dell'assistente. Il messaggio viene trattenuto e unito al successivo messaggio utente che attiva un turno. Usalo per iniettare contesto, come l'output di un comando che hai eseguito fuori banda, senza spendere una chiamata al modello.1641* `shouldQuery`: impostalo a `false` per aggiungere il messaggio alla trascrizione senza attivare un turno dell'assistente. Il messaggio viene trattenuto e unito al successivo messaggio utente che attiva un turno. Usalo per iniettare contesto, come l'output di un comando che hai eseguito fuori banda, senza spendere una chiamata al modello.


1775* `ttft_stream_ms`: tempo in millisecondi fino al primo evento di flusso `message_start`, quando si apre il flusso di risposta. Inferiore a `ttft_ms`; la differenza tra i due è il tempo impiegato per lo streaming del primo messaggio. Presente solo sul ramo di successo.1780* `ttft_stream_ms`: tempo in millisecondi fino al primo evento di flusso `message_start`, quando si apre il flusso di risposta. Inferiore a `ttft_ms`; la differenza tra i due è il tempo impiegato per lo streaming del primo messaggio. Presente solo sul ramo di successo.

1776* `user_message_uuid`: l'`uuid` del messaggio che hai inviato a cui questo turno ha risposto. Consulta [`user_message_uuid`](#user_message_uuid) per sapere quali risultati lo contengono.1781* `user_message_uuid`: l'`uuid` del messaggio che hai inviato a cui questo turno ha risposto. Consulta [`user_message_uuid`](#user_message_uuid) per sapere quali risultati lo contengono.

1777* `user_message_uuids`: gli `uuid` di ogni messaggio che hai inviato a cui Claude Code ha risposto in questo turno. Consulta [`user_message_uuids`](#user_message_uuids).1782* `user_message_uuids`: gli `uuid` di ogni messaggio che hai inviato a cui Claude Code ha risposto in questo turno. Consulta [`user_message_uuids`](#user_message_uuids).

1778* `resume_reason`: perché Claude Code ha rieseguito questo turno dopo che un riavvio lo ha interrotto. Presente in entrambi i rami. Consulta [`resume_reason`](#resume_reason).1783* `resume_reason`: perché questo turno continua un turno che un riavvio ha interrotto. Presente in entrambi i rami. Vedi [`resume_reason`](#resume_reason).

1779* `local_command`: il nome del comando che il turno ha inviato, sul risultato di successo di un turno che un comando ha completato senza entrare nel ciclo dell'agente, come `/compact`. Il nome viene ridotto a lettere minuscole e trattini bassi, quindi `/reload-plugins` riporta `reload_plugins`. Un comando fornito da un server MCP, e il `/mcp` integrato, riportano `mcp`. Un comando che hai definito tu riporta `custom`. Gli argomenti non sono mai inclusi. Assente su ogni turno che è entrato nel ciclo dell'agente e sugli invii che non hanno eseguito alcun comando. Richiede Agent SDK v0.3.268 o successivo.1784* `local_command`: il nome del comando che il turno ha inviato, sul risultato di successo di un turno che un comando ha completato senza entrare nel ciclo dell'agente, come `/compact`. Il nome viene ridotto a lettere minuscole e trattini bassi, quindi `/reload-plugins` riporta `reload_plugins`. Un comando fornito da un server MCP, e il `/mcp` integrato, riportano `mcp`. Un comando che hai definito tu riporta `custom`. Gli argomenti non sono mai inclusi. Assente su ogni turno che è entrato nel ciclo dell'agente e sugli invii che non hanno eseguito alcun comando. Richiede Agent SDK v0.3.268 o successivo.

1780* `request_sent_wall_ms`: millisecondi epoch in cui Claude Code ha inviato la richiesta API, per le join con i timestamp lato server. Presente solo insieme a [`user_message_uuid`](#user_message_uuid), su un risultato di successo con `is_error` false il cui turno ha inviato una richiesta API.1785* `request_sent_wall_ms`: millisecondi epoch in cui Claude Code ha inviato la richiesta API, per le join con i timestamp lato server. Presente solo insieme a [`user_message_uuid`](#user_message_uuid), su un risultato di successo con `is_error` false il cui turno ha inviato una richiesta API.

1781* `first_content_frame_ms`: tempo in millisecondi fino al primo evento di flusso `content_block_start` o `content_block_delta`, contando i blocchi di ragionamento come contenuto. Presente solo sul ramo di successo, quando `is_error` è false. Richiede Agent SDK v0.3.260 o successivo.1786* `first_content_frame_ms`: tempo in millisecondi fino al primo evento di flusso `content_block_start` o `content_block_delta`, contando i blocchi di ragionamento come contenuto. Presente solo sul ramo di successo, quando `is_error` è false. Richiede Agent SDK v0.3.260 o successivo.


1825 1830 

1826* **Un messaggio normale che hai inviato**, cioè uno senza `isSynthetic: true`: il turno risponde a quel messaggio per tutta la sua esecuzione. Quando invii più messaggi a breve distanza, Claude Code può unirli in un unico turno, e il campo contiene allora solo l'`uuid` dell'ultimo messaggio. Per abbinare la risposta a uno qualsiasi dei messaggi uniti, usa [`user_message_uuids`](#user_message_uuids).1831* **Un messaggio normale che hai inviato**, cioè uno senza `isSynthetic: true`: il turno risponde a quel messaggio per tutta la sua esecuzione. Quando invii più messaggi a breve distanza, Claude Code può unirli in un unico turno, e il campo contiene allora solo l'`uuid` dell'ultimo messaggio. Per abbinare la risposta a uno qualsiasi dei messaggi uniti, usa [`user_message_uuids`](#user_message_uuids).

1827* **Un messaggio che hai inviato con `isSynthetic: true`**: il turno risponde inizialmente a quel messaggio. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l'altra, da quel momento il turno risponde al messaggio raccolto. La restituzione dell'`uuid` di un messaggio sintetico richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non restituiscono nulla sui turni sintetici.1832* **Un messaggio che hai inviato con `isSynthetic: true`**: il turno risponde inizialmente a quel messaggio. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l'altra, da quel momento il turno risponde al messaggio raccolto. La restituzione dell'`uuid` di un messaggio sintetico richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non restituiscono nulla sui turni sintetici.

1828* **Il prompt che Claude Code genera per rieseguire un turno interrotto con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/it/env-vars)**: quando l'ultimo prompt del turno interrotto è un messaggio normale che hai inviato, sia che abbia aperto il turno sia che Claude Code lo abbia raccolto durante il turno, la riesecuzione risponde inizialmente a quel messaggio. [`resume_reason`](#resume_reason) distingue i frame della riesecuzione da quelli del tentativo interrotto. Quando l'ultimo prompt non è un tuo messaggio normale, la riesecuzione inizialmente non risponde ad alcun tuo messaggio. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l'altra, da quel momento il turno risponde al messaggio raccolto. La restituzione del prompt del turno interrotto richiede Agent SDK v0.3.268 o successivo.1833* **Il prompt che Claude Code genera per continuare un turno interrotto con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/it/env-vars)**: quando l'ultimo prompt del turno interrotto è un messaggio normale che hai inviato, sia che abbia aperto il turno sia che Claude Code lo abbia raccolto durante il turno, il turno continuato risponde inizialmente a quel messaggio. [`resume_reason`](#resume_reason) distingue i frame del turno continuato da quelli del tentativo interrotto. Quando l'ultimo prompt non è un tuo messaggio normale, il turno continuato inizialmente non risponde a nessun tuo messaggio. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l'altra, da quel momento il turno risponde al messaggio raccolto. Riportare il prompt del turno interrotto richiede Agent SDK v0.3.268 o successiva.

1829* **Qualsiasi altro prompt generato da Claude Code stesso**: il turno inizialmente non risponde ad alcun tuo messaggio e i suoi frame non contengono alcuna restituzione. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l'altra, da quel momento il turno risponde a quel messaggio. La restituzione in caso di raccolta richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non restituiscono nulla su questi turni.1834* **Qualsiasi altro prompt generato da Claude Code stesso**: il turno inizialmente non risponde ad alcun tuo messaggio e i suoi frame non contengono alcuna restituzione. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l'altra, da quel momento il turno risponde a quel messaggio. La restituzione in caso di raccolta richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non restituiscono nulla su questi turni.

1830 1835 

1831Claude Code restituisce l'`uuid` del messaggio a cui ha risposto su tre tipi di frame:1836Claude Code restituisce l'`uuid` del messaggio a cui ha risposto su tre tipi di frame:


1857 `resume_reason`1862 `resume_reason`

1858</h4>1863</h4>

1859 1864 

1860Il motivo per cui Claude Code ha rieseguito questo turno dopo un riavvio. Claude Code imposta questo campo su un turno che ha rieseguito con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/it/env-vars), in modo che tu possa distinguere la risposta e il risultato della riesecuzione da quelli del tentativo interrotto. Richiede Agent SDK v0.3.268 o successivo.1865Perché questo turno continua un turno che un riavvio ha interrotto. Claude Code imposta questo campo su un turno che continua un turno interrotto con [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/it/env-vars), così puoi distinguere la risposta e il risultato del turno continuato da quelli del tentativo interrotto. Richiede Agent SDK v0.3.268 o successiva.

1861 1866 

1862Claude Code imposta il campo su due tipi di frame:1867Claude Code imposta il campo su due tipi di frame:

1863 1868 

1864* **Il risultato della riesecuzione**: sia sul ramo di successo sia su quello di errore, indipendentemente dal fatto che il risultato contenga `user_message_uuid`.1869* **Il risultato del turno continuato**: sia nel ramo di successo sia in quello di errore, indipendentemente dal fatto che il risultato porti `user_message_uuid`.

1865* **I frame di risposta della riesecuzione**: quelli che contengono [`user_message_uuid`](#user_message_uuid).1870* **I frame di risposta del turno continuato**: quelli che portano [`user_message_uuid`](#user_message_uuid).

1866 1871 

1867Il valore è un breve token in minuscolo che indica perché il turno è stato rieseguito, come `interrupted_turn`.1872Il valore è un breve token in minuscolo, come `interrupted_turn`.

1868 1873 

1869<h4 id="queued_turn_count">1874<h4 id="queued_turn_count">

1870 `queued_turn_count`1875 `queued_turn_count`


2029};2034};

2030```2035```

2031 2036 

2032Claude Code imposta `user_message_uuid` e `user_message_uuids` sul primo evento di flusso non-ping del turno, e di nuovo quando cambia il messaggio a cui il turno sta rispondendo, secondo le condizioni descritte in [`user_message_uuid`](#user_message_uuid). Quando Claude Code riesegue un turno che un riavvio ha interrotto, gli eventi di flusso della riesecuzione che contengono questi campi contengono anche [`resume_reason`](#resume_reason).2037Claude Code imposta `user_message_uuid` e `user_message_uuids` sul primo evento di stream non ping del turno, e di nuovo quando cambia il messaggio a cui il turno sta rispondendo, alle condizioni descritte in [`user_message_uuid`](#user_message_uuid). Quando il turno continua un turno che un riavvio ha interrotto, gli eventi di stream che portano quei campi portano anche [`resume_reason`](#resume_reason).

2033 2038 

2034<h3 id="sdkcompactboundarymessage">2039<h3 id="sdkcompactboundarymessage">

2035 `SDKCompactBoundaryMessage`2040 `SDKCompactBoundaryMessage`


3560| - | - | - |3565| - | - | - |

3561| `script` | `string` | Script di workflow inline. Deve iniziare con `export const meta = { name, description }` come letterale, seguito dal corpo dello script usando `agent()`, `parallel()`, `pipeline()` e `phase()`. Un array `phases` facoltativo in `meta` raggruppa gli agenti sotto fasi denominate nella vista di progresso |3566| `script` | `string` | Script di workflow inline. Deve iniziare con `export const meta = { name, description }` come letterale, seguito dal corpo dello script usando `agent()`, `parallel()`, `pipeline()` e `phase()`. Un array `phases` facoltativo in `meta` raggruppa gli agenti sotto fasi denominate nella vista di progresso |

3562| `name` | `string` | Nome di un workflow incorporato o uno salvato in `.claude/workflows/`. Risolto in uno script |3567| `name` | `string` | Nome di un workflow incorporato o uno salvato in `.claude/workflows/`. Risolto in uno script |

3563| `scriptPath` | `string` | Percorso a un file di script di workflow su disco. Ha la precedenza su `script` e `name`. Claude Code persiste ogni invocazione dello script e restituisce il percorso nel risultato, quindi puoi modificare quel file e reinvocare con lo stesso `scriptPath` per iterare |3568| `scriptPath` | `string` | Percorso a un file di script di workflow su disco, come lo `scriptPath` restituito da un'esecuzione precedente. Ha la precedenza su `script` e `name`. Claude Code rifiuta `scriptPath` con un errore quando i tool della sessione non includono `Read` |

3564| `args` | `unknown` | Valore di input esposto allo script come `args` globale, per workflow denominati parametrizzati come una domanda di ricerca o un elenco di percorsi di file. Passa array e oggetti come valori JSON effettivi, non come stringa codificata in JSON |3569| `args` | `unknown` | Valore di input esposto allo script come `args` globale, per workflow denominati parametrizzati come una domanda di ricerca o un elenco di percorsi di file. Passa array e oggetti come valori JSON effettivi, non come stringa codificata in JSON |

3565| `resumeFromRunId` | `string` | ID di esecuzione di una precedente invocazione di `Workflow` da riprendere. Le chiamate `agent()` completate con input invariati restituiscono solitamente risultati memorizzati nella cache; il resto viene eseguito live. [Riprendi dopo una pausa](/docs/it/workflows#resume-after-a-pause) copre quali chiamate completate vengono rieseguite. Solo la stessa sessione |3570| `resumeFromRunId` | `string` | ID di esecuzione di una precedente invocazione di `Workflow` da riprendere. Le chiamate `agent()` completate con input invariati restituiscono solitamente risultati memorizzati nella cache; il resto viene eseguito live. [Riprendi dopo una pausa](/docs/it/workflows#resume-after-a-pause) copre quali chiamate completate vengono rieseguite. Solo la stessa sessione |

3566| `title` | `string` | Ignorato; il blocco `meta` dello script imposta il titolo |3571| `title` | `string` | Ignorato; il blocco `meta` dello script imposta il titolo |

agent-view.md +2 −0

Details

256 256 

257Le sessioni collegate vengono sempre visualizzate in [modalità fullscreen](/docs/it/fullscreen), indipendentemente dalla tua impostazione `tui`, perché una sessione in background non ha uno scrollback del terminale a cui aggiungere contenuto. Scorri con `PgUp`, `PgDn` o la rotella del mouse, e premi `Ctrl+O` per la modalità trascrizione. Lo scorrimento nativo del terminale e la modalità copia di tmux mostrano solo l'area visibile corrente, come quando esegui qualsiasi applicazione a schermo intero.257Le sessioni collegate vengono sempre visualizzate in [modalità fullscreen](/docs/it/fullscreen), indipendentemente dalla tua impostazione `tui`, perché una sessione in background non ha uno scrollback del terminale a cui aggiungere contenuto. Scorri con `PgUp`, `PgDn` o la rotella del mouse, e premi `Ctrl+O` per la modalità trascrizione. Lo scorrimento nativo del terminale e la modalità copia di tmux mostrano solo l'area visibile corrente, come quando esegui qualsiasi applicazione a schermo intero.

258 258 

259Una sessione collegata non [riporta il suo stato al tuo terminale](/docs/it/terminal-config#see-session-status-in-your-terminal).

260 

259Premi `←` su un prompt vuoto, oppure esegui `/exit`, per scollegarti e tornare ad agent view, sia che tu abbia aperto la sessione da agent view sia con `claude attach <id>` dalla tua shell.261Premi `←` su un prompt vuoto, oppure esegui `/exit`, per scollegarti e tornare ad agent view, sia che tu abbia aperto la sessione da agent view sia con `claude attach <id>` dalla tua shell.

260 262 

261`←` ti scollega anche mentre l'[overlay `/btw`](/docs/it/interactive-mode#side-questions-with-%2Fbtw) è aperto. Richiede Claude Code v2.1.257 o successivo. Una domanda laterale ancora in fase di risposta continua a essere eseguita mentre sei via. La prossima volta che ti colleghi, l'overlay si riapre con essa, o con la sua risposta.263`←` ti scollega anche mentre l'[overlay `/btw`](/docs/it/interactive-mode#side-questions-with-%2Fbtw) è aperto. Richiede Claude Code v2.1.257 o successivo. Una domanda laterale ancora in fase di risposta continua a essere eseguita mentre sei via. La prossima volta che ti colleghi, l'overlay si riapre con essa, o con la sua risposta.

Details

114 I messaggi inviati a metà turno non vengono sottoposti a checkpoint114 I messaggi inviati a metà turno non vengono sottoposti a checkpoint

115</h3>115</h3>

116 116 

117Quando un messaggio che [metti in coda mentre Claude lavora](/docs/it/interactive-mode#queue-messages-while-claude-works) raggiunge Claude durante il turno in esecuzione, si unisce a quel turno invece di iniziarne uno nuovo. Il messaggio appare nella conversazione, ma Claude Code non crea un checkpoint per esso. Un messaggio in coda che Claude Code invia come parte di un nuovo turno riceve un checkpoint come al solito, incluso quando diversi messaggi in coda [condividono quel turno](/docs/it/interactive-mode#when-claude-code-sends-what-you-queued).117Nel menu di rewind, un messaggio che hai [digitato mentre Claude stava ancora lavorando](/docs/it/interactive-mode#queue-messages-while-claude-works) può essere contrassegnato con **No code restore**. Claude ha letto quel messaggio prima della fine del suo turno. [I checkpoint vengono creati per i prompt che avviano un turno](#how-checkpoints-work), quindi questo messaggio non ne ha uno proprio. Le modifiche che Claude ha apportato dopo averlo letto vengono attribuite al prompt che ha avviato il turno.

118 118 

119Per annullare le modifiche che Claude ha apportato dopo un messaggio di questo tipo, riavvolgi al prompt che ha avviato il turno. Questo riavvolge l'intero turno, incluso il lavoro che Claude ha svolto prima dell'arrivo del tuo messaggio.119Non devi fare nulla riguardo al messaggio stesso. Per annullare le modifiche ai file di quella parte della sessione, seleziona il prompt che ha avviato il turno e scegli **Restore code** o **Restore code and conversation**. In questo modo vengono annullate le modifiche ai file apportate da Claude durante l'intero turno, comprese quelle precedenti all'arrivo del tuo messaggio. Selezionando il messaggio contrassegnato viene comunque offerta l'opzione **Restore conversation**, che riavvolge la conversazione fino a quel messaggio e lascia i tuoi file così come sono.

120 120 

121<h3 id="symlinked-and-hard-linked-paths-not-restored">121<h3 id="symlinked-and-hard-linked-paths-not-restored">

122 I percorsi symlink e hard-link non vengono ripristinati122 I percorsi symlink e hard-link non vengono ripristinati

chrome.md +3 −4

Details

129 Richieste di permesso nelle sessioni VS Code129 Richieste di permesso nelle sessioni VS Code

130</h3>130</h3>

131 131 

132In una sessione VS Code, il fatto che Claude Code ti chieda conferma prima di un'azione del browser dipende da come la sessione si è connessa al tuo browser:132In una sessione VS Code, quando Claude Code ti chiede conferma prima di un'azione del browser, la richiesta appare come un riquadro nel pannello della chat. Quando l'azione riguarda un sito che non hai consentito, il riquadro offre anche di consentire quel sito.

133 133 

134* **Hai digitato `@browser`**: l'estensione approva ogni azione del browser per cui Claude Code altrimenti ti chiederebbe conferma.134In una sessione che si è connessa al tuo browser all'avvio perché l'impostazione [Enabled by default](#enable-chrome-by-default) è attiva, Claude Code ti chiede conferma prima delle azioni del browser su un sito che non hai consentito, nelle modalità Manual, Edit automatically, Auto e Bypass permissions. Nelle modalità Auto e Bypass permissions, questo vale finché non digiti `@browser` in quella sessione.

135* **L'impostazione [Enabled by default](#enable-chrome-by-default) l'ha connessa all'avvio**: Claude Code ti chiede conferma prima delle azioni del browser su un sito che non hai consentito, nelle modalità Manual, Edit automatically, Auto e Bypass permissions, finché non digiti `@browser` in quella sessione.

136 135 

137<h3 id="browser-tools-in-plan-mode">136<h3 id="browser-tools-in-plan-mode">

138 Strumenti del browser in plan mode137 Strumenti del browser in plan mode

139</h3>138</h3>

140 139 

141In [plan mode](/docs/it/permission-modes#analyze-before-you-edit-with-plan-mode), un prompt di autorizzazione appare prima che Claude registri una GIF, apra una nuova scheda o esegua una scorciatoia, tranne in una sessione VS Code in cui hai digitato [`@browser`](#permission-prompts-in-vs-code-sessions). In una sessione CLI interattiva, se [la modalità bypass permissions è disponibile](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) e [il recupero del feature flag](/docs/it/env-vars#features-that-need-feature-flag-fetching) è disattivato, queste chiamate vengono eseguite senza un prompt.140In [plan mode](/docs/it/permission-modes#analyze-before-you-edit-with-plan-mode), una richiesta di permesso appare prima che Claude registri una GIF, apra una nuova scheda o esegua una scorciatoia. In una sessione CLI interattiva, se [la modalità bypass permissions è disponibile](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) e [il recupero del feature flag](/docs/it/env-vars#features-that-need-feature-flag-fetching) è disattivato, queste chiamate vengono eseguite senza un prompt.

142 141 

143Una chiamata `tabs_context_mcp` richiede anche un prompt quando imposta `createIfEmpty`, e così fa una chiamata `browser_batch` che include una qualsiasi di queste azioni.142Una chiamata `tabs_context_mcp` richiede anche un prompt quando imposta `createIfEmpty`, e così fa una chiamata `browser_batch` che include una qualsiasi di queste azioni.

144 143 

Details

263 Connettere gli sviluppatori263 Connettere gli sviluppatori

264</h2>264</h2>

265 265 

266Gli sviluppatori si connettono dai propri laptop con un unico accesso tramite browser, usando il proprio account aziendale. Non hanno bisogno di un account claude.ai, di una chiave API o di un abbonamento, perché le richieste al modello passano attraverso il gateway usando la credenziale upstream dell'organizzazione. La connessione è guidata dalle [impostazioni gestite lato client](/docs/it/claude-apps-gateway-config#client-side-managed-settings) che distribuisci tramite MDM, quindi non c'è alcuna configurazione manuale da parte dello sviluppatore; questa sezione descrive ciò che configura l'amministratore.266Gli sviluppatori si connettono dai propri laptop con un unico accesso tramite browser, usando il proprio account aziendale. Non hanno bisogno di un account claude.ai, di una chiave API o di un abbonamento, perché le richieste al modello passano attraverso il gateway usando la credenziale upstream dell'organizzazione. La connessione è guidata dalle [impostazioni gestite lato client](/docs/it/claude-apps-gateway-config#client-side-managed-settings) che distribuisci tramite MDM, e questa sezione descrive ciò che configura l'amministratore.

267 267 

268La CLI calcola l'impronta del certificato TLS foglia del gateway alla prima connessione e la fissa (pinning) per hostname. Verifica di nuovo questa impronta fissata durante l'accesso, nei rinnovi silenziosi della sessione e nel recupero delle impostazioni gestite, mentre le richieste di inferenza usano la validazione TLS standard senza il pinning. Le richieste instradate attraverso un proxy HTTPS saltano la verifica del pinning, quindi aggiungi l'host del gateway a `NO_PROXY` per mantenerle dirette.268La CLI calcola l'impronta del certificato TLS foglia del gateway alla prima connessione e la fissa (pinning) per hostname. Verifica di nuovo questa impronta fissata durante l'accesso, nei rinnovi silenziosi della sessione e nel recupero delle impostazioni gestite, mentre le richieste di inferenza usano la validazione TLS standard senza il pinning. Le richieste instradate attraverso un proxy HTTPS saltano la verifica del pinning, quindi aggiungi l'host del gateway a `NO_PROXY` per mantenerle dirette.

269 269 


287 Impostare l'URL del gateway287 Impostare l'URL del gateway

288</h3>288</h3>

289 289 

290Tre chiavi vanno nel [file delle impostazioni gestite](/docs/it/managed-settings#delivery-mechanisms) specifico per ogni sistema operativo che distribuisci tramite MDM o direttamente su disco. `forceLoginMethod` e `forceLoginGatewayUrl` aprono `/login` direttamente sulla schermata **Cloud gateway** con l'URL già compilato, e `parentSettingsBehavior: "merge"` permette a Claude Desktop di fornire l'allowlist di uscita del gateway alle sessioni di Claude Code che avvia, come spiegato in [Fornire la policy alle sessioni di Claude Desktop](#deliver-policy-to-claude-desktop-sessions):290Tre chiavi vanno nel [file delle impostazioni gestite](/docs/it/managed-settings#delivery-mechanisms) specifico per ogni sistema operativo che distribuisci tramite MDM o direttamente su disco. Per una macchina senza impostazioni gestite, consulta invece [Impostare l'URL del gateway nelle impostazioni utente](#set-the-gateway-url-in-user-settings). `forceLoginMethod` e `forceLoginGatewayUrl` aprono `/login` direttamente sulla schermata **Cloud gateway** con l'URL già compilato, e `parentSettingsBehavior: "merge"` permette a Claude Desktop di fornire l'allowlist di uscita del gateway alle sessioni di Claude Code che avvia, come spiegato in [Fornire la policy alle sessioni di Claude Desktop](#deliver-policy-to-claude-desktop-sessions):

291 291 

292```json theme={null}292```json theme={null}

293{293{


299 299 

300Lo sviluppatore preme Invio per connettersi. Il [prompt dell'impronta TLS alla prima connessione](#connect-developers) appare comunque. Una volta che il file è presente su una macchina, uno sviluppatore che non ha completato l'accesso al gateway vede uno dei messaggi descritti in [Administrator policy requires a Cloud gateway sign-in](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Gli sviluppatori che selezionano un provider cloud tramite una variabile d'ambiente come `CLAUDE_CODE_USE_BEDROCK` non hanno bisogno dell'accesso al gateway.300Lo sviluppatore preme Invio per connettersi. Il [prompt dell'impronta TLS alla prima connessione](#connect-developers) appare comunque. Una volta che il file è presente su una macchina, uno sviluppatore che non ha completato l'accesso al gateway vede uno dei messaggi descritti in [Administrator policy requires a Cloud gateway sign-in](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Gli sviluppatori che selezionano un provider cloud tramite una variabile d'ambiente come `CLAUDE_CODE_USE_BEDROCK` non hanno bisogno dell'accesso al gateway.

301 301 

302Uno sviluppatore non può configurarlo manualmente. Il selettore di accesso non ha un'opzione gateway, e `forceLoginGatewayUrl` viene ignorato nei file di impostazioni dello sviluppatore. `forceLoginMethod` da solo, senza un URL, lascia lo sviluppatore su un messaggio "Contact your IT administrator". Le chiavi di accesso vanno nel file che distribuisci alle macchine, non nel blocco `managed.policies[].cli` del gateway, che raggiunge solo i client già connessi.302Il selettore di accesso non ha un'opzione gateway, e nelle impostazioni gestite `forceLoginMethod` da solo, senza un URL, lascia lo sviluppatore su un messaggio "Contact your IT administrator". Le chiavi di accesso vanno nel file che distribuisci alle macchine, non nel blocco `managed.policies[].cli` del gateway, che raggiunge solo i client già connessi.

303 

304<h4 id="set-the-gateway-url-in-user-settings">

305 Impostare l'URL del gateway nelle impostazioni utente

306</h4>

307 

308Sulle macchine senza impostazioni gestite, chiedi a ogni sviluppatore di aggiungere `forceLoginMethod` e `forceLoginGatewayUrl` al proprio file di impostazioni utente, `~/.claude/settings.json`. Ciò richiede Claude Code v2.1.295 o successivo sulla macchina dello sviluppatore. Questo esempio indica un gateway su `claude-gateway.internal.example.com`:

309 

310```json theme={null}

311{

312 "forceLoginMethod": "gateway",

313 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

314}

315```

316 

317Quando lo sviluppatore esegue `/login` nel prompt di Claude Code, la schermata **Cloud gateway** si apre su quell'indirizzo e lo sviluppatore preme Invio per connettersi. Il [prompt dell'impronta TLS alla prima connessione](#connect-developers) appare comunque. Alle chiavi impostate in questo modo si applicano questi limiti:

318 

319* **Solo impostazioni utente**: Claude Code legge le due chiavi da `~/.claude/settings.json`, non dal `.claude/settings.json` o dal `.claude/settings.local.json` di un progetto.

320* **Le impostazioni gestite le disattivano**: una volta che le impostazioni di un amministratore raggiungono la macchina tramite un file di impostazioni gestite, un plist macOS o una policy HKLM di Windows, oppure un [policy helper](/docs/it/settings-reference#policyhelper), Claude Code ignora un gateway indicato nelle impostazioni utente.

303 321 

304<h3 id="allow-a-gateway-on-public-address-space-you-own">322<h3 id="allow-a-gateway-on-public-address-space-you-own">

305 Consentire un gateway su uno spazio di indirizzi pubblico di tua proprietà323 Consentire un gateway su uno spazio di indirizzi pubblico di tua proprietà

Details

981 * **Chiavi miste**: un file che contiene sia `code` sia `cli`, o la sua grafia precedente `settings`, blocca il gateway all'avvio. Metti ogni blocco sotto un'unica chiave, in un'unica modifica.981 * **Chiavi miste**: un file che contiene sia `code` sia `cli`, o la sua grafia precedente `settings`, blocca il gateway all'avvio. Metti ogni blocco sotto un'unica chiave, in un'unica modifica.

982</Warning>982</Warning>

983 983 

984Le impostazioni di Claude Code di una policy, come una regola che nega la lettura dei file `.env`, vanno in un blocco sotto la chiave `cli` o `code`. Entrambe le chiavi accettano lo stesso contenuto. La chiave determina dove vengono applicate le impostazioni:984Le impostazioni di Claude Code di una policy, come una regola che nega la lettura dei file `.env`, vanno in un blocco sotto la chiave `cli` o `code`. `code` è la chiave consigliata e `cli` è la chiave legacy. Entrambe le chiavi accettano lo stesso contenuto. La chiave decide dove vengono applicate le impostazioni:

985 985 

986* **`cli`**: il terminale, le estensioni VS Code e JetBrains e l'Agent SDK. Con `cli`, la scheda Code di Claude Desktop riceve le [impostazioni derivate](#claude-desktop-overlay), quindi una regola con ambito come `Read(./.env)` non blocca un utente lì.986* **`cli`**: il terminale, le estensioni VS Code e JetBrains e l'Agent SDK. Con `cli`, la scheda Code di Claude Desktop riceve le [impostazioni derivate](#claude-desktop-overlay), quindi una regola con ambito come `Read(./.env)` non blocca un utente lì.

987* **`code`**: gli stessi ambiti, e può essere coperta anche la scheda Code di Claude Desktop.987* **`code`**: gli stessi ambiti, e può essere coperta anche la scheda Code di Claude Desktop.

988 988 

989La scelta riguarda se queste impostazioni debbano coprire anche la scheda Code. In caso contrario, non modificare nulla. Un file che usa `cli` funziona come prima, e un gateway che trova `cli` in una policy con una chiave [`desktop`](#claude-desktop-overlay) emette un avviso all'avvio e si avvia comunque. Per coprire la scheda Code, passa a `code`, la chiave consigliata.989Un file che usa `cli` funziona come prima, e un gateway che trova `cli` in una policy con una chiave [`desktop`](#claude-desktop-overlay) avvisa all'avvio e si avvia comunque. Passa a `code` in modo che le impostazioni possano coprire anche la scheda Code.

990 990 

991Prima di passare, leggi [Applicare le impostazioni `code` nella scheda Code](#apply-code-settings-in-the-code-tab). La policy ha bisogno di una chiave `desktop` e le macchine degli utenti devono essere configurate prima che le impostazioni si applichino lì, e la ricerca web si disattiva in Claude Desktop.991Prima di passare, leggi [Applicare le impostazioni `code` nella scheda Code](#apply-code-settings-in-the-code-tab). La policy ha bisogno di una chiave `desktop` e le macchine degli utenti devono essere configurate prima che le impostazioni si applichino lì, e la ricerca web si disattiva in Claude Desktop.

992 992 


1713 1713 

1714Per Claude Desktop, imposta la chiave `bootstrapUrl` nella [configurazione gestita](https://claude.com/docs/third-party/claude-desktop/configuration) di Claude Desktop su `<listen.public_url>/user/bootstrap`. Il flusso di accesso e la policy per gruppo corrispondono quindi a quelli della CLI una volta che una policy si attiva lato server con una chiave `desktop`; senza l'opt-in, `/user/bootstrap` restituisce 404. Consulta [Claude Desktop overlay](#claude-desktop-overlay) per la metà lato server.1714Per Claude Desktop, imposta la chiave `bootstrapUrl` nella [configurazione gestita](https://claude.com/docs/third-party/claude-desktop/configuration) di Claude Desktop su `<listen.public_url>/user/bootstrap`. Il flusso di accesso e la policy per gruppo corrispondono quindi a quelli della CLI una volta che una policy si attiva lato server con una chiave `desktop`; senza l'opt-in, `/user/bootstrap` restituisce 404. Consulta [Claude Desktop overlay](#claude-desktop-overlay) per la metà lato server.

1715 1715 

1716Claude Code rispetta [`forceLoginGatewayUrl`](/docs/it/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/it/settings-reference#gatewayinternalnetworks) e il valore `"gateway"` di [`forceLoginMethod`](/docs/it/settings-reference#forceloginmethod) solo da una fonte gestita sulla macchina: `managed-settings.json`, il plist macOS o il registro HKLM di Windows, oppure un policy helper. Impostarli nel `~/.claude/settings.json` personale di uno sviluppatore o nel payload del gateway non configura l'accesso tramite gateway.1716Claude Code rispetta [`forceLoginGatewayUrl`](/docs/it/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/it/settings-reference#gatewayinternalnetworks) e il valore `"gateway"` di [`forceLoginMethod`](/docs/it/settings-reference#forceloginmethod) da una fonte gestita sulla macchina: `managed-settings.json`, il plist macOS o il registro HKLM di Windows, oppure un policy helper. Impostarli nel payload del gateway non configura l'accesso tramite gateway. Per il `~/.claude/settings.json` personale di uno sviluppatore, consulta [Impostare l'URL del gateway nelle impostazioni utente](/docs/it/claude-apps-gateway#set-the-gateway-url-in-user-settings).

1717 1717 

1718Lascia `forceLoginMethod` e `forceLoginOrgUUID` fuori dal payload. Claude Code legge comunque entrambe le chiavi dal payload per il controllo delle credenziali all'avvio, quindi uno sviluppatore che mantiene sulla macchina una credenziale emessa da Anthropic incorre nell'uscita all'avvio descritta in [La policy dell'amministratore richiede un accesso tramite Cloud gateway](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) anche dopo aver effettuato l'accesso.1718Lascia `forceLoginMethod` e `forceLoginOrgUUID` fuori dal payload. Claude Code legge comunque entrambe le chiavi dal payload per il controllo delle credenziali all'avvio, quindi uno sviluppatore che mantiene sulla macchina una credenziale emessa da Anthropic incorre nell'uscita all'avvio descritta in [La policy dell'amministratore richiede un accesso tramite Cloud gateway](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) anche dopo aver effettuato l'accesso.

1719 1719 

Details

135 Invia l'URL del gateway alle macchine degli sviluppatori135 Invia l'URL del gateway alle macchine degli sviluppatori

136</h3>136</h3>

137 137 

138Una volta che il gateway è in servizio, invia `forceLoginMethod`, `forceLoginGatewayUrl` e `parentSettingsBehavior: "merge"` a ogni macchina dello sviluppatore tramite impostazioni gestite, tramite MDM o scrivendo direttamente il `managed-settings.json` per OS. Senza questo, `/login` mostra il selettore di account standard senza opzione gateway.138Una volta che il gateway è in servizio, invia `forceLoginMethod`, `forceLoginGatewayUrl` e `parentSettingsBehavior: "merge"` a ogni macchina dello sviluppatore tramite impostazioni gestite, tramite MDM o scrivendo direttamente il `managed-settings.json` per OS.

139 139 

140Una volta che distribuisci le chiavi, Claude Code smette di utilizzare una chiave API rimasta o un accesso a claude.ai sulla macchina, quindi pianifica il push insieme alle tue istruzioni di accesso. [La policy dell'amministratore richiede un accesso al gateway Cloud](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) descrive i messaggi che gli sviluppatori vedono.140Una volta che distribuisci le chiavi, Claude Code smette di utilizzare una chiave API rimasta o un accesso a claude.ai sulla macchina, quindi pianifica il push insieme alle tue istruzioni di accesso. [La policy dell'amministratore richiede un accesso al gateway Cloud](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) descrive i messaggi che gli sviluppatori vedono.

141 141 

Details

277 277 

278I thread vengono eseguiti in [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) quando il modello del thread lo supporta, quindi la maggior parte delle chiamate di strumento vengono eseguite senza chiederti. Quando un thread ha bisogno della tua approvazione, il prompt è dentro quel thread e il thread aspetta finché non rispondi lì. Dire a Claude nella conversazione del progetto di procedere non lo raggiunge.278I thread vengono eseguiti in [auto mode](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) quando il modello del thread lo supporta, quindi la maggior parte delle chiamate di strumento vengono eseguite senza chiederti. Quando un thread ha bisogno della tua approvazione, il prompt è dentro quel thread e il thread aspetta finché non rispondi lì. Dire a Claude nella conversazione del progetto di procedere non lo raggiunge.

279 279 

280Ogni approvazione copre quel prompt, o il resto di quel thread se scegli l'opzione più ampia. Per consentire a ogni thread di eseguire determinati comandi senza chiedere, o per bloccarne alcuni, aggiungi [regole di autorizzazione](/docs/it/permissions) al `.claude/settings.json` del repository. I cloud thread le applicano solo in un progetto con un repository; vedi [Cosa i thread raccolgono dai tuoi repository](#what-threads-pick-up-from-your-repositories). In un progetto con diversi repository, nessuna regola di autorizzazione del repository raggiunge un cloud thread, quindi fai affidamento su auto mode e sulle approvazioni che dai dentro ogni thread.280Ogni approvazione copre quella richiesta, o il resto di quel thread se scegli l'opzione più ampia.

281 

282Per consentire a ogni thread di eseguire determinati comandi senza chiedere, o per bloccarne alcuni, aggiungi [regole di permesso](/docs/it/permissions) al `.claude/settings.json` del repository. Verifica che i cloud thread del tuo progetto le applichino:

283 

284* **Un repository**: i cloud thread applicano le regole. Vedi [Cosa i thread raccolgono dai tuoi repository](#what-threads-pick-up-from-your-repositories).

285* **Diversi repository, ambiente ospitato da Anthropic**: nessuna regola di permesso di alcun repository raggiunge un cloud thread, quindi fai affidamento sulla modalità auto e sulle approvazioni che dai dentro ogni thread.

286* **Diversi repository, ambiente self-hosted**: vedi [quali impostazioni del repository si applicano](/docs/it/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

281 287 

282<h3 id="run-a-thread-on-your-own-computer">288<h3 id="run-a-thread-on-your-own-computer">

283 Esegui un thread sul tuo computer289 Esegui un thread sul tuo computer


381 Cosa i thread prendono dai tuoi repository387 Cosa i thread prendono dai tuoi repository

382</h3>388</h3>

383 389 

384Ogni thread cloud clona ogni repository nel progetto e carica `CLAUDE.md` e skill da tutti loro. Le regole di permesso, gli hook e `env` provengono solo dal `.claude/settings.json` nella directory in cui il thread inizia: all'interno del repository quando il progetto ne ha uno, e sopra i cloni quando ne ha diversi, dove il file di nessun repository viene letto per loro.390Ogni thread cloud clona ogni repository nel progetto e carica `CLAUDE.md` e skill da tutti loro. Le regole di permesso, gli hook e `env` provengono solo dal `.claude/settings.json` nella directory in cui il thread inizia.

385 391 

386| In ogni repository | Un repository | Diversi repository |392| In ogni repository | Un repository | Diversi repository |

387| :- | :- | :- |393| :- | :- | :- |

388| `CLAUDE.md` | Caricato quando il thread inizia | Caricato da ogni repository quando il thread inizia |394| `CLAUDE.md` | Caricato quando il thread inizia | Caricato da ogni repository quando il thread inizia |

389| Skill, agenti e comandi in `.claude/` | Caricati | Caricati da ogni repository |395| Skill, agenti e comandi in `.claude/` | Caricati | Caricati da ogni repository |

390| Plugin abilitati in `.claude/settings.json` | Non caricati. Aggiungi invece il plugin in **Project settings > Plugins** | Non caricati. Aggiungi invece il plugin in **Project settings > Plugins** |396| Plugin abilitati in `.claude/settings.json` | Non caricati. Aggiungi invece il plugin in **Project settings > Plugins** | Non caricati. Aggiungi invece il plugin in **Project settings > Plugins** |

391| Regole di permesso, hook e `env` definiti in `.claude/settings.json` | Si applicano al thread, tranne le chiavi `env` che [nessuna sessione cloud onora](/docs/it/cloud-environments#what-carries-over-from-your-setup) | Non si applicano |397| Regole di permesso, hook e `env` definiti in `.claude/settings.json` | Si applicano al thread, tranne le chiavi `env` che [nessuna sessione cloud onora](/docs/it/cloud-environments#what-carries-over-from-your-setup) | Non si applicano in un ambiente ospitato da Anthropic. Per un ambiente self-hosted, vedi [quali impostazioni del repository si applicano](/docs/it/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

392 398 

393In un progetto con diversi repository, ogni clone è collegato al thread come una [directory aggiuntiva](/docs/it/memory#load-from-additional-directories) con il caricamento di `CLAUDE.md` attivato, motivo per cui il `CLAUDE.md` e le skill di ogni repository si caricano all'avvio anche se il thread inizia sopra di loro. In un tale progetto, inserisci le regole permanenti nelle istruzioni del progetto e fornisci ai thread le variabili d'ambiente attraverso l'[ambiente cloud](#choose-an-environment-for-threads).399In un progetto con diversi repository, inserisci le regole permanenti nelle istruzioni del progetto e fornisci ai thread le variabili d'ambiente attraverso l'[ambiente cloud](#choose-an-environment-for-threads).

394 400 

395<h3 id="choose-an-environment-for-threads">401<h3 id="choose-an-environment-for-threads">

396 Scegli un ambiente per i thread402 Scegli un ambiente per i thread


406 412 

407I thread cloud non hanno le skill, i server MCP, i plugin e gli strumenti installati solo sulla tua macchina. Un thread che Claude esegue sulla tua macchina attraverso [Remote Control](/docs/it/remote-control) utilizza ciò che è installato lì. Per rendere ciascuno di questi disponibile ai thread cloud:413I thread cloud non hanno le skill, i server MCP, i plugin e gli strumenti installati solo sulla tua macchina. Un thread che Claude esegue sulla tua macchina attraverso [Remote Control](/docs/it/remote-control) utilizza ciò che è installato lì. Per rendere ciascuno di questi disponibile ai thread cloud:

408 414 

409* Skill, subagent e comandi: eseguine il commit in un repository che hai aggiunto al progetto, ad esempio una skill in `.claude/skills/<skill-name>/SKILL.md`. Ogni thread cloud clona ogni repository nel progetto e carica `.claude/skills/`, `.claude/agents/` e `.claude/commands/` da ciascuno di loro, quindi una skill sottoposta a commit in un repository è disponibile in ogni thread cloud. I thread cloud caricano anche le skill che abiliti per il tuo account claude.ai.415* Skill, subagent e comandi: eseguine il commit in un repository che hai aggiunto al progetto, ad esempio una skill in `.claude/skills/<skill-name>/SKILL.md`. Ogni thread cloud clona ogni repository nel progetto e carica `.claude/skills/`, `.claude/agents/` e `.claude/commands/` da ciascuno di loro, quindi una skill sottoposta a commit in un repository è disponibile in ogni thread cloud. I thread cloud caricano anche le [skill che abiliti per il tuo account claude.ai](/docs/it/skills#skills-in-cowork-and-cloud-sessions).

410* Plugin: aggiungili in **Project settings > Plugins**; si caricano in ogni nuovo thread cloud. I plugin che un repository dichiara nel suo `.claude/settings.json` [non si caricano nei thread cloud](/docs/it/cloud-environments#what-carries-over-from-your-setup).416* Plugin: aggiungili in **Project settings > Plugins**; si caricano in ogni nuovo thread cloud. I plugin che un repository dichiara nel suo `.claude/settings.json` [non si caricano nei thread cloud](/docs/it/cloud-environments#what-carries-over-from-your-setup).

411* Server MCP: i thread cloud ottengono i loro strumenti MCP dai connettori sul tuo account claude.ai, che sono server MCP che colleghi una volta in [claude.ai/customize/connectors](https://claude.ai/customize/connectors) o attraverso il link **Manage connectors** in **Project settings > Environment**. Ogni thread cloud può utilizzarli tutti senza alcuna configurazione per progetto. La conversazione del progetto stessa non ha connettori, quindi invia il lavoro che ne richiede uno come compito per un thread cloud. In un progetto con un repository, i thread cloud caricano anche i server MCP dal [`.mcp.json`](/docs/it/cloud-environments#what-carries-over-from-your-setup) di quel repository. [How connectors reach Claude Code](/docs/it/mcp#how-connectors-reach-claude-code) elenca le regole per le sessioni cloud e le impostazioni che disattivano i connettori.417* Server MCP: i thread cloud ottengono i loro strumenti MCP dai connettori sul tuo account claude.ai, che sono server MCP che colleghi una volta in [claude.ai/customize/connectors](https://claude.ai/customize/connectors) o attraverso il link **Manage connectors** in **Project settings > Environment**. Ogni thread cloud può utilizzarli tutti senza alcuna configurazione per progetto. La conversazione del progetto stessa non ha connettori, quindi invia il lavoro che ne richiede uno come compito per un thread cloud. In un progetto con un repository, i thread cloud caricano anche i server MCP dal [`.mcp.json`](/docs/it/cloud-environments#what-carries-over-from-your-setup) di quel repository. [How connectors reach Claude Code](/docs/it/mcp#how-connectors-reach-claude-code) elenca le regole per le sessioni cloud e le impostazioni che disattivano i connettori.

412* Strumenti da riga di comando e pacchetti: installali nello [script di setup](/docs/it/cloud-environments#setup-scripts) dell'ambiente.418* Strumenti da riga di comando e pacchetti: installali nello [script di setup](/docs/it/cloud-environments#setup-scripts) dell'ambiente.

Details

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

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

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

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

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

113| `--name`, `-n` | Imposta un nome visualizzato per la sessione, mostrato in `/resume` e nel titolo del terminale. Puoi riprendere una sessione denominata con `claude --resume <name>`. In una sessione interattiva, se un'altra sessione live su questa macchina utilizza già il nome, Claude Code applica [una variante di esso](/docs/it/sessions#name-your-sessions) invece. <br /><br />[`/rename`](/docs/it/commands) cambia il nome a metà sessione e lo mostra anche sulla barra del prompt | `claude -n "my-feature-work"` |113| `--name`, `-n` | Imposta un nome visualizzato per la sessione, mostrato in `/resume` e nel titolo del terminale. Puoi riprendere una sessione denominata con `claude --resume <name>`. In una sessione interattiva, se un'altra sessione live su questa macchina utilizza già il nome, Claude Code applica [una variante di esso](/docs/it/sessions#name-your-sessions) invece. <br /><br />[`/rename`](/docs/it/commands) cambia il nome a metà sessione e lo mostra anche sulla barra del prompt | `claude -n "my-feature-work"` |

114| `--no-chrome` | Disabilita l'[integrazione del browser Chrome](/docs/it/chrome) per questa sessione | `claude --no-chrome` |114| `--no-chrome` | Disabilita l'[integrazione del browser Chrome](/docs/it/chrome) per questa sessione | `claude --no-chrome` |

Details

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

315| Le [impostazioni gestite dal server](/docs/it/server-managed-settings) della tua organizzazione | Sì, tranne nelle sessioni di [Claude Tag](https://claude.com/docs/claude-tag/overview) | Recuperate dai server di Anthropic all'avvio della sessione. Consulta [Copertura delle superfici](/docs/it/model-config#surface-coverage) per sapere come viene applicato `availableModels` nelle sessioni cloud. Le impostazioni distribuite sul tuo dispositivo tramite MDM o file di impostazioni gestite non si applicano, perché la sessione viene eseguita su una VM gestita da Anthropic; in un [ambiente self-hosted](/docs/it/self-hosted-environments), le sessioni leggono anche il file di impostazioni gestite nell'immagine runner, secondo [come Claude Code combina le fonti gestite](/docs/it/managed-settings#how-claude-code-combines-managed-sources) |315| Le [impostazioni gestite dal server](/docs/it/server-managed-settings) della tua organizzazione | Sì, tranne nelle sessioni di [Claude Tag](https://claude.com/docs/claude-tag/overview) | Recuperate dai server di Anthropic all'avvio della sessione. Consulta [Copertura delle superfici](/docs/it/model-config#surface-coverage) per sapere come viene applicato `availableModels` nelle sessioni cloud. Le impostazioni distribuite sul tuo dispositivo tramite MDM o file di impostazioni gestite non si applicano, perché la sessione viene eseguita su una VM gestita da Anthropic; in un [ambiente self-hosted](/docs/it/self-hosted-environments), le sessioni leggono anche il file di impostazioni gestite nell'immagine runner, secondo [come Claude Code combina le fonti gestite](/docs/it/managed-settings#how-claude-code-combines-managed-sources) |

316| Il tuo `~/.claude/CLAUDE.md` utente | No | Si trova sulla tua macchina, non nel repository. Consulta [Aggiungere preferenze personali senza fare il commit nel repository](#add-personal-preferences-without-committing-to-the-repo) |316| Il tuo `~/.claude/CLAUDE.md` utente | No | Si trova sulla tua macchina, non nel repository. Consulta [Aggiungere preferenze personali senza fare il commit nel repository](#add-personal-preferences-without-committing-to-the-repo) |

317| Le tue directory utente `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | No | Si trovano sulla tua macchina, non nel repository. Fai invece il commit dei loro contenuti nella directory `.claude/` del repository. Le sessioni cloud caricano automaticamente le skill che abiliti su claude.ai |317| Le tue directory utente `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | No | Si trovano sulla tua macchina, non nel repository. Fai invece il commit dei loro contenuti nella directory `.claude/` del repository. Le sessioni cloud caricano automaticamente le [skill che abiliti su claude.ai](/docs/it/skills#skills-in-cowork-and-cloud-sessions) |

318| Plugin abilitati solo nelle tue impostazioni utente | No | `enabledPlugins` con ambito utente si trova in `~/.claude/settings.json` sulla tua macchina |318| Plugin abilitati solo nelle tue impostazioni utente | No | `enabledPlugins` con ambito utente si trova in `~/.claude/settings.json` sulla tua macchina |

319| Server MCP che hai aggiunto con `claude mcp add` nell'ambito locale predefinito o nell'ambito utente | No | Questi scrivono in `~/.claude.json` sulla tua macchina, non nel repository. Aggiungi il server con `claude mcp add --scope project`, che scrive il file [`.mcp.json`](/docs/it/mcp#project-scope) del repository, e fai il commit di quel file. Una sessione con un solo repository lo carica |319| Server MCP che hai aggiunto con `claude mcp add` nell'ambito locale predefinito o nell'ambito utente | No | Questi scrivono in `~/.claude.json` sulla tua macchina, non nel repository. Aggiungi il server con `claude mcp add --scope project`, che scrive il file [`.mcp.json`](/docs/it/mcp#project-scope) del repository, e fai il commit di quel file. Una sessione con un solo repository lo carica |

320| Variabili di trasporto nel blocco `env` di `.claude/settings.json` del tuo repository, come `NODE_EXTRA_CA_CERTS` e le [variabili del certificato client mTLS](/docs/it/network-config#mtls-authentication) | No | L'ambiente di hosting gestisce la connessione API della sessione, quindi Claude Code ignora queste chiavi e annota ogni chiave ignorata nel log di debug della sessione |320| Variabili di trasporto nel blocco `env` di `.claude/settings.json` del tuo repository, come `NODE_EXTRA_CA_CERTS` e le [variabili del certificato client mTLS](/docs/it/network-config#mtls-authentication) | No | L'ambiente di hosting gestisce la connessione API della sessione, quindi Claude Code ignora queste chiavi e annota ogni chiave ignorata nel log di debug della sessione |

commands.md +1 −1

Details

77| `/compact [instructions]` | Libera contesto riassumendo la conversazione fino a questo punto. Facoltativamente, passa istruzioni su cosa privilegiare nel riepilogo. Consulta [come la compattazione gestisce regole, skill e file di memoria](/docs/it/context-window#what-survives-compaction) |77| `/compact [instructions]` | Libera contesto riassumendo la conversazione fino a questo punto. Facoltativamente, passa istruzioni su cosa privilegiare nel riepilogo. Consulta [come la compattazione gestisce regole, skill e file di memoria](/docs/it/context-window#what-survives-compaction) |

78| `/config [key=value ...]` | Apre l'interfaccia delle [Impostazioni](/docs/it/settings) per regolare tema, modello, [stile di output](/docs/it/output-styles) e altre preferenze. Passa una o più coppie `key=value` per impostare direttamente un'impostazione senza aprire l'interfaccia, ad esempio `/config thinking=false`, `/config theme=dark` o `/config model=sonnet`. La forma `key=value` funziona anche in modalità non interattiva (`-p`) e dall'app mobile Claude tramite [Remote Control](/docs/it/remote-control). La forma `key=value` non può attivare un'impostazione che richiede la tua conferma nel pannello, come [`autoContinueAtUsageLimit`](/docs/it/interactive-mode#turn-automatic-continue-off), anche se può disattivarla. Esegui `/config --help` per elencare le chiavi accettate. Alias: `/settings` |78| `/config [key=value ...]` | Apre l'interfaccia delle [Impostazioni](/docs/it/settings) per regolare tema, modello, [stile di output](/docs/it/output-styles) e altre preferenze. Passa una o più coppie `key=value` per impostare direttamente un'impostazione senza aprire l'interfaccia, ad esempio `/config thinking=false`, `/config theme=dark` o `/config model=sonnet`. La forma `key=value` funziona anche in modalità non interattiva (`-p`) e dall'app mobile Claude tramite [Remote Control](/docs/it/remote-control). La forma `key=value` non può attivare un'impostazione che richiede la tua conferma nel pannello, come [`autoContinueAtUsageLimit`](/docs/it/interactive-mode#turn-automatic-continue-off), anche se può disattivarla. Esegui `/config --help` per elencare le chiavi accettate. Alias: `/settings` |

79| `/context [all]` | Visualizza l'utilizzo corrente del contesto come griglia colorata. Mostra suggerimenti di ottimizzazione per strumenti che occupano molto contesto, memoria sovraccarica e avvisi di capacità. Quando la conversazione supera la finestra di contesto, l'output include un [avviso](/docs/it/errors#context-exceeds-the-token-limit) che mostra di quanto hai superato il limite e quale comando libera spazio. In [modalità a schermo intero](/docs/it/fullscreen), `/context` comprime il dettaglio per elemento per mantenere visibile la griglia. Passa `all` per espanderlo |79| `/context [all]` | Visualizza l'utilizzo corrente del contesto come griglia colorata. Mostra suggerimenti di ottimizzazione per strumenti che occupano molto contesto, memoria sovraccarica e avvisi di capacità. Quando la conversazione supera la finestra di contesto, l'output include un [avviso](/docs/it/errors#context-exceeds-the-token-limit) che mostra di quanto hai superato il limite e quale comando libera spazio. In [modalità a schermo intero](/docs/it/fullscreen), `/context` comprime il dettaglio per elemento per mantenere visibile la griglia. Passa `all` per espanderlo |

80| `/copy [N]` | Copia l'ultima risposta dell'assistente negli appunti. Passa un numero `N` per copiare l'N-esima risposta più recente: `/copy 2` copia la penultima. Quando sono presenti blocchi di codice, mostra un selettore interattivo per selezionare singoli blocchi o la risposta completa. Premi `w` nel selettore per scrivere la selezione in un file invece che negli appunti, utile tramite SSH |80| `/copy [N]` | Copia l'ultima risposta dell'assistente negli appunti. Passa un numero `N` per copiare l'N-esima risposta più recente: `/copy 2` copia la penultima. Quando sono presenti blocchi di codice o citazioni, mostra un selettore interattivo per selezionare singoli blocchi o la risposta completa. Premi `w` nel selettore per scrivere la selezione in un file invece che negli appunti, utile tramite SSH |

81| `/cost` | Alias di `/usage` |81| `/cost` | Alias di `/usage` |

82| `/dataviz [request]` | **[Skill](/docs/it/skills#bundled-skills).** Linee guida di design per grafici, diagrammi e dashboard. Claude sceglie la forma del grafico in base ai dati, assegna i colori in base al ruolo, convalida la tavolozza per l'accessibilità ai daltonici e il contrasto con uno script incluso, e applica regole su marcatori, interazione e accessibilità. Usa una tavolozza segnaposto neutra rispetto al brand che sostituisci con la tua |82| `/dataviz [request]` | **[Skill](/docs/it/skills#bundled-skills).** Linee guida di design per grafici, diagrammi e dashboard. Claude sceglie la forma del grafico in base ai dati, assegna i colori in base al ruolo, convalida la tavolozza per l'accessibilità ai daltonici e il contrasto con uno script incluso, e applica regole su marcatori, interazione e accessibilità. Usa una tavolozza segnaposto neutra rispetto al brand che sostituisci con la tua |

83| `/debug [description]` | **[Skill](/docs/it/skills#bundled-skills).** Abilita il logging di debug per la sessione corrente e risolve i problemi leggendo il log di debug della sessione. Il logging di debug è disattivato per impostazione predefinita a meno che tu non abbia avviato con `claude --debug`, quindi eseguire `/debug` a metà sessione avvia l'acquisizione dei log da quel momento in poi. Facoltativamente, descrivi il problema per focalizzare l'analisi |83| `/debug [description]` | **[Skill](/docs/it/skills#bundled-skills).** Abilita il logging di debug per la sessione corrente e risolve i problemi leggendo il log di debug della sessione. Il logging di debug è disattivato per impostazione predefinita a meno che tu non abbia avviato con `claude --debug`, quindi eseguire `/debug` a metà sessione avvia l'acquisizione dei log da quel momento in poi. Facoltativamente, descrivi il problema per focalizzare l'analisi |

env-vars.md +3 −3

Details

285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Imposta su `1` per disattivare il [cambio automatico di modello quando un classificatore di sicurezza segnala una richiesta](/docs/it/model-config#automatic-model-fallback), il comportamento controllato dall'impostazione [`switchModelsOnFlag`](/docs/it/settings-reference#switchmodelsonflag) |285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Imposta su `1` per disattivare il [cambio automatico di modello quando un classificatore di sicurezza segnala una richiesta](/docs/it/model-config#automatic-model-fallback), il comportamento controllato dall'impostazione [`switchModelsOnFlag`](/docs/it/settings-reference#switchmodelsonflag) |

286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Imposta su `1` per impedire a Claude Code di inviare il campo di output strutturato `output_config.format` e il valore `anthropic-beta` associato, per un [gateway LLM](/docs/it/llm-gateway-protocol#feature-pass-through) il cui upstream li rifiuta. Lascia attive le altre funzionalità di pre-release che [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/it/llm-gateway-protocol#disable-pre-release-capabilities) disattiva. Richiede Claude Code v2.1.288 o versioni successive |286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Imposta su `1` per impedire a Claude Code di inviare il campo di output strutturato `output_config.format` e il valore `anthropic-beta` associato, per un [gateway LLM](/docs/it/llm-gateway-protocol#feature-pass-through) il cui upstream li rifiuta. Lascia attive le altre funzionalità di pre-release che [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/it/llm-gateway-protocol#disable-pre-release-capabilities) disattiva. Richiede Claude Code v2.1.288 o versioni successive |

287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Imposta su `1` per disattivare il controllo sui [percorsi critici](/docs/it/permission-modes#critical-paths) per un `rm` ricorsivo la cui destinazione è interamente l'output di una sostituzione di comando, come `rm -rf "$(pwd)"`. Gli altri controlli sui percorsi critici continuano a essere eseguiti. Impostala nell'ambiente che avvia Claude Code, poiché Claude Code ignora una copia fornita tramite un blocco `env` delle impostazioni. Richiede Claude Code v2.1.281 o versioni successive |287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Imposta su `1` per disattivare il controllo sui [percorsi critici](/docs/it/permission-modes#critical-paths) per un `rm` ricorsivo la cui destinazione è interamente l'output di una sostituzione di comando, come `rm -rf "$(pwd)"`. Gli altri controlli sui percorsi critici continuano a essere eseguiti. Impostala nell'ambiente che avvia Claude Code, poiché Claude Code ignora una copia fornita tramite un blocco `env` delle impostazioni. Richiede Claude Code v2.1.281 o versioni successive |

288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Imposta su `1` per disattivare gli aggiornamenti automatici del titolo del terminale basati sul contesto della conversazione. Questo salta anche la richiesta in background al modello piccolo/veloce che [genera un titolo per la sessione](/docs/it/sessions#name-your-sessions) |288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Imposta su `1` per disattivare gli aggiornamenti automatici del titolo del terminale basati sul contesto della conversazione. Salta anche la richiesta in background al modello piccolo/veloce che [genera un titolo per la sessione](/docs/it/sessions#name-your-sessions) e disattiva i [report di stato al tuo terminale](/docs/it/terminal-config#see-session-status-in-your-terminal) |

289| `CLAUDE_CODE_DISABLE_THINKING` | Imposta su `1` per omettere completamente il parametro `thinking` dalle richieste API. È un'opzione di compatibilità per proxy e gateway che rifiutano il parametro. Sui modelli che ragionano per impostazione predefinita, omettere il parametro significa che il modello potrebbe comunque ragionare. Per disattivare esplicitamente il [ragionamento esteso](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) sull'API Anthropic, usa invece `MAX_THINKING_TOKENS=0`. Nessuna delle due variabili disattiva il ragionamento su Opus 5.5, Sonnet 5.5, Haiku 5.5 o sui modelli Fable, per i quali il ragionamento non può essere disattivato. Sui [provider di terze parti](/docs/it/third-party-integrations), anche `MAX_THINKING_TOKENS=0` omette il parametro, quindi lì le due variabili si comportano allo stesso modo |289| `CLAUDE_CODE_DISABLE_THINKING` | Imposta su `1` per omettere completamente il parametro `thinking` dalle richieste API. È un'opzione di compatibilità per proxy e gateway che rifiutano il parametro. Sui modelli che ragionano per impostazione predefinita, omettere il parametro significa che il modello potrebbe comunque ragionare. Per disattivare esplicitamente il [ragionamento esteso](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) sull'API Anthropic, usa invece `MAX_THINKING_TOKENS=0`. Nessuna delle due variabili disattiva il ragionamento su Opus 5.5, Sonnet 5.5, Haiku 5.5 o sui modelli Fable, per i quali il ragionamento non può essere disattivato. Sui [provider di terze parti](/docs/it/third-party-integrations), anche `MAX_THINKING_TOKENS=0` omette il parametro, quindi lì le due variabili si comportano allo stesso modo |

290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Imposta su `1` per saltare la [compattazione automatica](/docs/it/costs#reduce-token-usage) proattiva quando Claude Code non riconosce l'ID del modello, come un alias di un [gateway LLM](/docs/it/llm-gateway). Senza questa variabile, Claude Code compatta in base alla finestra di contesto che presume per l'ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` può invece correggere la finestra presunta; consulta [Correggere la finestra per un gateway o un ID di modello personalizzato](/docs/it/model-config#correct-the-window-for-a-gateway-or-custom-model-id) per sapere quando si applica ciascuna variabile. Richiede Claude Code v2.1.223 o versioni successive |290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Imposta su `1` per saltare la [compattazione automatica](/docs/it/costs#reduce-token-usage) proattiva quando Claude Code non riconosce l'ID del modello, come un alias di un [gateway LLM](/docs/it/llm-gateway). Senza questa variabile, Claude Code compatta in base alla finestra di contesto che presume per l'ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` può invece correggere la finestra presunta; consulta [Correggere la finestra per un gateway o un ID di modello personalizzato](/docs/it/model-config#correct-the-window-for-a-gateway-or-custom-model-id) per sapere quando si applica ciascuna variabile. Richiede Claude Code v2.1.223 o versioni successive |

291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Imposta su `1` per disattivare lo scorrimento virtuale nel [rendering a schermo intero](/docs/it/fullscreen) e visualizzare ogni messaggio nella trascrizione. Usala se lo scorrimento in modalità a schermo intero mostra aree vuote dove dovrebbero comparire i messaggi |291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Imposta su `1` per disattivare lo scorrimento virtuale nel [rendering a schermo intero](/docs/it/fullscreen) e visualizzare ogni messaggio nella trascrizione. Usala se lo scorrimento in modalità a schermo intero mostra aree vuote dove dovrebbero comparire i messaggi |


309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tempo in millisecondi da attendere, dopo che il ciclo di query diventa inattivo, prima di uscire automaticamente. Utile per workflow automatizzati e script che usano la modalità SDK |309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tempo in millisecondi da attendere, dopo che il ciclo di query diventa inattivo, prima di uscire automaticamente. Utile per workflow automatizzati e script che usano la modalità SDK |

310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Imposta su `1` per abilitare i [team di agenti](/docs/it/agent-teams). I team di agenti sono sperimentali e disabilitati per impostazione predefinita |310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Imposta su `1` per abilitare i [team di agenti](/docs/it/agent-teams). I team di agenti sono sperimentali e disabilitati per impostazione predefinita |

311| `CLAUDE_CODE_EXTRA_BODY` | Oggetto JSON di cui fare il merge nel livello superiore del corpo di ogni richiesta API. Utile per passare parametri specifici del provider che Claude Code non espone direttamente. Un valore esportato nella tua shell si applica anche alle [sessioni in background](/docs/it/agent-view) che avvii con `claude agents` o `--bg`. Prima della v2.1.206, le sessioni in background ignoravano un valore esportato dalla shell e usavano la copia ereditata dal processo supervisore in background |311| `CLAUDE_CODE_EXTRA_BODY` | Oggetto JSON di cui fare il merge nel livello superiore del corpo di ogni richiesta API. Utile per passare parametri specifici del provider che Claude Code non espone direttamente. Un valore esportato nella tua shell si applica anche alle [sessioni in background](/docs/it/agent-view) che avvii con `claude agents` o `--bg`. Prima della v2.1.206, le sessioni in background ignoravano un valore esportato dalla shell e usavano la copia ereditata dal processo supervisore in background |

312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sovrascrive il limite di token predefinito per le letture di file. Utile quando devi leggere file più grandi per intero |312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sovrascrive il limite predefinito di token per le [letture di file](/docs/it/tools-reference#large-files), pari a 25.000 token. Utile quando devi leggere per intero file più grandi. Una lettura che Claude effettua con il parametro `allow_large` può superare questo limite quando la finestra di contesto ha spazio |

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

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

315| `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](/docs/it/fullscreen), questa variabile non cambia il renderer |315| `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](/docs/it/fullscreen), questa variabile non cambia il renderer |


340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Limite alle chiamate a [WebSearch](/docs/it/tools-reference#session-search-limit) (predefinito: 200). Quando Claude raggiunge il limite, le ulteriori chiamate a WebSearch restituiscono un avviso che gli indica di proseguire con le informazioni già raccolte. Accetta un numero intero positivo senza limite superiore. Qualsiasi altro valore viene ignorato e si applica il valore predefinito, quindi il limite può essere aumentato ma non disattivato. Richiede Claude Code v2.1.212 o successiva |340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Limite alle chiamate a [WebSearch](/docs/it/tools-reference#session-search-limit) (predefinito: 200). Quando Claude raggiunge il limite, le ulteriori chiamate a WebSearch restituiscono un avviso che gli indica di proseguire con le informazioni già raccolte. Accetta un numero intero positivo senza limite superiore. Qualsiasi altro valore viene ignorato e si applica il valore predefinito, quindi il limite può essere aumentato ma non disattivato. Richiede Claude Code v2.1.212 o successiva |

341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Imposta su `1` per avviare i server MCP stdio solo con un ambiente di base sicuro più l'`env` configurato per il server, invece di ereditare l'ambiente della tua shell |341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Imposta su `1` per avviare i server MCP stdio solo con un ambiente di base sicuro più l'`env` configurato per il server, invece di ereditare l'ambiente della tua shell |

342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Tempo trascorso in millisecondi prima che una chiamata a uno strumento MCP ancora in esecuzione [passi a un'attività in background](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls) (predefinito: 120000, ovvero 2 minuti). Imposta su `0` per disattivare il passaggio automatico in background. Richiede Claude Code v2.1.212 o successiva |342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Tempo trascorso in millisecondi prima che una chiamata a uno strumento MCP ancora in esecuzione [passi a un'attività in background](/docs/it/mcp#automatic-backgrounding-of-long-tool-calls) (predefinito: 120000, ovvero 2 minuti). Imposta su `0` per disattivare il passaggio automatico in background. Richiede Claude Code v2.1.212 o successiva |

343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Per quanto tempo, in millisecondi, il primo turno di una sessione [non interattiva](/docs/it/headless) attende i server MCP che si stanno ancora connettendo, al posto dell'[attesa predefinita del primo turno](/docs/it/agent-sdk/mcp#connection-timing). Quando è impostata, l'attesa riguarda ogni server in sospeso. Imposta su `0` per saltare l'attesa. Un server [`--permission-prompt-tool`](/docs/it/cli-reference#cli-flags) mantiene la propria attesa `MCP_TIMEOUT` indipendentemente dal valore. Richiede Claude Code v2.1.274 o successiva |343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Per quanto tempo, in millisecondi, il primo turno di una sessione [non interattiva](/docs/it/headless) attende i server MCP che si stanno ancora connettendo, al posto dell'[attesa del primo turno](/docs/it/agent-sdk/mcp#connection-timing) predefinita. Quando è impostata, l'attesa riguarda tutti i server in sospeso; in un [ambiente self-hosted](/docs/it/self-hosted-environments-configuration#connection-timing), cambia solo la durata dell'attesa. Imposta a `0` per saltare l'attesa. Un server [`--permission-prompt-tool`](/docs/it/cli-reference#cli-flags) mantiene la propria attesa `MCP_TIMEOUT` indipendentemente dal valore. Richiede Claude Code v2.1.274 o successiva |

344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Timeout di inattività in millisecondi per le chiamate agli strumenti MCP. Quando un server MCP stdio, HTTP, SSE, WebSocket o un [connettore claude.ai](/docs/it/mcp#use-mcp-servers-from-claude-ai) non invia alcuna risposta né alcuna notifica di avanzamento per questo intervallo, la chiamata allo strumento si interrompe con un errore invece di attendere il `MCP_TOOL_TIMEOUT` complessivo. Sovrascrive i valori predefiniti per trasporto di 300000 (5 minuti) per i server di rete e 1800000 (30 minuti) per i server stdio. Imposta su `0` per disabilitare il controllo di inattività. I valori inferiori a 1000 vengono portati a un secondo, e il valore è limitato al `MCP_TOOL_TIMEOUT` effettivo. Un `timeout` per server in `.mcp.json` di almeno 1000 porta la finestra di inattività di quel server almeno al valore di `timeout`. Non si applica ai server IDE né ai server in-process dell'SDK. Richiede Claude Code v2.1.187 o successiva. Prima della v2.1.203, i server stdio erano esenti dal timeout di inattività |344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Timeout di inattività in millisecondi per le chiamate agli strumenti MCP. Quando un server MCP stdio, HTTP, SSE, WebSocket o un [connettore claude.ai](/docs/it/mcp#use-mcp-servers-from-claude-ai) non invia alcuna risposta né alcuna notifica di avanzamento per questo intervallo, la chiamata allo strumento si interrompe con un errore invece di attendere il `MCP_TOOL_TIMEOUT` complessivo. Sovrascrive i valori predefiniti per trasporto di 300000 (5 minuti) per i server di rete e 1800000 (30 minuti) per i server stdio. Imposta su `0` per disabilitare il controllo di inattività. I valori inferiori a 1000 vengono portati a un secondo, e il valore è limitato al `MCP_TOOL_TIMEOUT` effettivo. Un `timeout` per server in `.mcp.json` di almeno 1000 porta la finestra di inattività di quel server almeno al valore di `timeout`. Non si applica ai server IDE né ai server in-process dell'SDK. Richiede Claude Code v2.1.187 o successiva. Prima della v2.1.203, i server stdio erano esenti dal timeout di inattività |

345| `CLAUDE_CODE_MESSAGING_SOCKET` | Impostata da Claude Code, non da te: nelle sessioni che associano un [socket della casella in arrivo](/docs/it/cross-session-messaging#the-sessions-inbox-socket), Claude Code esporta il percorso di quel socket verso hook e comandi Bash quando associa il socket. In una sessione che si avvia con la messaggistica attiva, Claude Code associa il socket prima che venga eseguito qualsiasi hook. Le altre sessioni sulla macchina recapitano i messaggi a questo percorso. Ogni sessione esporta il proprio socket anziché uno ereditato da un processo padre, e i messaggi che vi arrivano passano attraverso i [controlli in ingresso](/docs/it/cross-session-messaging#control-inbound-messages) della sessione. I blocchi `env` delle impostazioni non possono impostarla. Richiede Claude Code v2.1.224 o successiva |345| `CLAUDE_CODE_MESSAGING_SOCKET` | Impostata da Claude Code, non da te: nelle sessioni che associano un [socket della casella in arrivo](/docs/it/cross-session-messaging#the-sessions-inbox-socket), Claude Code esporta il percorso di quel socket verso hook e comandi Bash quando associa il socket. In una sessione che si avvia con la messaggistica attiva, Claude Code associa il socket prima che venga eseguito qualsiasi hook. Le altre sessioni sulla macchina recapitano i messaggi a questo percorso. Ogni sessione esporta il proprio socket anziché uno ereditato da un processo padre, e i messaggi che vi arrivano passano attraverso i [controlli in ingresso](/docs/it/cross-session-messaging#control-inbound-messages) della sessione. I blocchi `env` delle impostazioni non possono impostarla. Richiede Claude Code v2.1.224 o successiva |

346| `CLAUDE_CODE_MESSAGING_TOKEN` | Impostata da Claude Code, non da te: nelle sessioni che associano un [socket della casella in arrivo](/docs/it/cross-session-messaging#the-sessions-inbox-socket), Claude Code esporta questo token per sessione verso hook e comandi Bash insieme a `CLAUDE_CODE_MESSAGING_SOCKET`. Uno script che scrive sul socket può inviare `{"type":"auth","token":"<token>"}` come prima riga per dimostrare di appartenere alla sessione. Su Windows nativo, Claude Code richiede questa riga e chiude qualsiasi connessione che non si apra con una riga valida. Le [regole sui processi figli propri](/docs/it/cross-session-messaging#the-sessions-inbox-socket) indicano quando Claude Code consulta il token. Ogni sessione esporta il proprio token, mai uno ereditato da una sessione padre. I blocchi `env` delle impostazioni non possono impostarla. Richiede Claude Code v2.1.228 o successiva |346| `CLAUDE_CODE_MESSAGING_TOKEN` | Impostata da Claude Code, non da te: nelle sessioni che associano un [socket della casella in arrivo](/docs/it/cross-session-messaging#the-sessions-inbox-socket), Claude Code esporta questo token per sessione verso hook e comandi Bash insieme a `CLAUDE_CODE_MESSAGING_SOCKET`. Uno script che scrive sul socket può inviare `{"type":"auth","token":"<token>"}` come prima riga per dimostrare di appartenere alla sessione. Su Windows nativo, Claude Code richiede questa riga e chiude qualsiasi connessione che non si apra con una riga valida. Le [regole sui processi figli propri](/docs/it/cross-session-messaging#the-sessions-inbox-socket) indicano quando Claude Code consulta il token. Ogni sessione esporta il proprio token, mai uno ereditato da una sessione padre. I blocchi `env` delle impostazioni non possono impostarla. Richiede Claude Code v2.1.228 o successiva |

errors.md +67 −8

Details

247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Errori della riga di comando](#windows-reported-an-error-ebadf) |247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Errori della riga di comando](#windows-reported-an-error-ebadf) |

248| `Cannot switch renderers in this session` | [Errori della riga di comando](#cannot-switch-renderers-in-this-session) |248| `Cannot switch renderers in this session` | [Errori della riga di comando](#cannot-switch-renderers-in-this-session) |

249| `Cannot switch renderers while work is running in the background` | [Errori della riga di comando](#cannot-switch-renderers-in-this-session) |249| `Cannot switch renderers while work is running in the background` | [Errori della riga di comando](#cannot-switch-renderers-in-this-session) |

250| `Claude Code couldn't restart` | [Errori della riga di comando](#claude-code-couldnt-restart) |

250| `Couldn't open Claude Desktop` | [Errori della riga di comando](#couldnt-open-claude-desktop) |251| `Couldn't open Claude Desktop` | [Errori della riga di comando](#couldnt-open-claude-desktop) |

251| `Failed to open Claude Desktop. Please try opening it manually.` | [Errori della riga di comando](#couldnt-open-claude-desktop) |252| `Failed to open Claude Desktop. Please try opening it manually.` | [Errori della riga di comando](#couldnt-open-claude-desktop) |

252| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Errori della riga di comando](#terminal-setup-left-your-zed-keymap-unchanged) |253| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Errori della riga di comando](#terminal-setup-left-your-zed-keymap-unchanged) |


308| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Errori degli strumenti](#disk-quota-or-temp-filesystem-is-full) |309| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Errori degli strumenti](#disk-quota-or-temp-filesystem-is-full) |

309| `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) |310| `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) |

310| `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) |311| `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) |

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

311| `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) |313| `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) |

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

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


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Errori della sessione in background](#session-isnt-responding) |336| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Errori della sessione in background](#session-isnt-responding) |

335| `Session <id> was stopped while the respawn was in flight` | [Errori della sessione in background](#session-was-stopped-while-the-respawn-was-in-flight) |337| `Session <id> was stopped while the respawn was in flight` | [Errori della sessione in background](#session-was-stopped-while-the-respawn-was-in-flight) |

336| `This session was running agent '<name>', which is no longer available` | [Errori della sessione in background](#session-agent-no-longer-available) |338| `This session was running agent '<name>', which is no longer available` | [Errori della sessione in background](#session-agent-no-longer-available) |

339| `This session restarted <time> after its next /loop wakeup was due, so that wakeup will not fire` | [Errori della sessione in background](#restarted-after-its-next-loop-wakeup-was-due) |

337| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Errori della sessione in background](#claude_code_process_wrapper-launcher-errors) |340| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Errori della sessione in background](#claude_code_process_wrapper-launcher-errors) |

338| `EUNKNOWN: unknown error, uv_spawn` | [Errori della sessione in background](#eunknown-when-starting-a-background-session) |341| `EUNKNOWN: unknown error, uv_spawn` | [Errori della sessione in background](#eunknown-when-starting-a-background-session) |

339| `EACCES: permission denied, posix_spawn` | [Errori della sessione in background](#eacces-when-starting-a-background-session) |342| `EACCES: permission denied, posix_spawn` | [Errori della sessione in background](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |442| :- | :- | :- |

440| [`CLAUDE_CODE_MAX_RETRIES`](/docs/it/env-vars) | 10 | Numero di tentativi di riprovazione. Limitato a 15 a partire dalla v2.1.186; a partire dalla v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` aumenta il valore predefinito e rimuove il limite. Abbassalo per far emergere i guasti più velocemente negli script. |443| [`CLAUDE_CODE_MAX_RETRIES`](/docs/it/env-vars) | 10 | Numero di tentativi di riprovazione. Limitato a 15 a partire dalla v2.1.186; a partire dalla v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` aumenta il valore predefinito e rimuove il limite. Abbassalo per far emergere i guasti più velocemente negli script. |

441| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/it/env-vars) | unset | Imposta su `1` in sessioni non presenziate come i lavori CI per ritentare gli errori di capacità `429` e `529` indefinitamente invece di fallire dopo `CLAUDE_CODE_MAX_RETRIES` tentativi. Claude Code fallisce immediatamente quando una richiesta a velocità standard riceve un `429` che segnala un limite di spesa o crediti di utilizzo esauriti, anche uno da un [gateway spend cap](#spend-limit-reached) che si ripristina secondo una pianificazione. Prima della v2.1.239, il watchdog ritentava questi indefinitamente. Per le richieste in modalità veloce, vedi [Handle rate limits](/docs/it/fast-mode#handle-rate-limits). Sulla v2.1.199 o successivo aumenta anche il conteggio dei tentativi predefinito per altri errori transitori, come errori del server, timeout e connessioni interrotte, a 300, approssimativamente tre ore di backoff, e rimuove il limite di 15 su `CLAUDE_CODE_MAX_RETRIES` se imposti esplicitamente quella variabile. |444| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/it/env-vars) | unset | Imposta su `1` in sessioni non presenziate come i lavori CI per ritentare gli errori di capacità `429` e `529` indefinitamente invece di fallire dopo `CLAUDE_CODE_MAX_RETRIES` tentativi. Claude Code fallisce immediatamente quando una richiesta a velocità standard riceve un `429` che segnala un limite di spesa o crediti di utilizzo esauriti, anche uno da un [gateway spend cap](#spend-limit-reached) che si ripristina secondo una pianificazione. Prima della v2.1.239, il watchdog ritentava questi indefinitamente. Per le richieste in modalità veloce, vedi [Handle rate limits](/docs/it/fast-mode#handle-rate-limits). Sulla v2.1.199 o successivo aumenta anche il conteggio dei tentativi predefinito per altri errori transitori, come errori del server, timeout e connessioni interrotte, a 300, approssimativamente tre ore di backoff, e rimuove il limite di 15 su `CLAUDE_CODE_MAX_RETRIES` se imposti esplicitamente quella variabile. |

445| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](/docs/it/env-vars) | unset | Tempo massimo in millisecondi che ogni richiesta API trascorre in attesa durante gli errori `429` e `529` quando `CLAUDE_CODE_RETRY_WATCHDOG` è impostato. Se non è impostato, l'attesa non ha limite. Richiede Claude Code v2.1.295 o successivo. |

442| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/it/env-vars) | 500 | Ritardo iniziale in millisecondi del backoff tra i nuovi tentativi di una richiesta che l'API rifiuta con un errore di sovraccarico `529`. Aumentalo, fino a 32000, per distribuire i nuovi tentativi su un intervallo più lungo quando l'API è al limite della capacità. Non ha effetto quando `CLAUDE_CODE_RETRY_WATCHDOG` è impostato su `1`, o quando la richiesta rifiutata è stata inviata in [modalità veloce](/docs/it/fast-mode#handle-rate-limits). Richiede Claude Code v2.1.292 o successivo. |446| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/it/env-vars) | 500 | Ritardo iniziale in millisecondi del backoff tra i nuovi tentativi di una richiesta che l'API rifiuta con un errore di sovraccarico `529`. Aumentalo, fino a 32000, per distribuire i nuovi tentativi su un intervallo più lungo quando l'API è al limite della capacità. Non ha effetto quando `CLAUDE_CODE_RETRY_WATCHDOG` è impostato su `1`, o quando la richiesta rifiutata è stata inviata in [modalità veloce](/docs/it/fast-mode#handle-rate-limits). Richiede Claude Code v2.1.292 o successivo. |

443| [`API_TIMEOUT_MS`](/docs/it/env-vars) | 600000 | Timeout per richiesta in millisecondi. Aumentalo per reti lente o proxy. Limita anche quanto a lungo Claude Code attende le intestazioni di risposta, descritto in [No response from API](#no-response-from-api). |447| [`API_TIMEOUT_MS`](/docs/it/env-vars) | 600000 | Timeout per richiesta in millisecondi. Aumentalo per reti lente o proxy. Limita anche quanto a lungo Claude Code attende le intestazioni di risposta, descritto in [No response from API](#no-response-from-api). |

444| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/it/env-vars) | unset | Limite di nuovi invii di una [richiesta non in streaming](#streaming-response-ended-before-any-complete-data-was-received) che va in timeout. Al raggiungimento del limite, la richiesta fallisce. Una risposta di Claude che impiega più del timeout per essere generata va di nuovo in timeout a ogni nuovo invio, quindi imposta un numero basso come `0` per fallire prima. Ogni tentativo non in streaming va in timeout dopo 300 secondi in una sessione locale, oppure dopo `API_TIMEOUT_MS` quando imposti un valore positivo. Richiede Claude Code v2.1.285 o successivo. |448| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/it/env-vars) | unset | Limite di nuovi invii di una [richiesta non in streaming](#streaming-response-ended-before-any-complete-data-was-received) che va in timeout. Al raggiungimento del limite, la richiesta fallisce. Una risposta di Claude che impiega più del timeout per essere generata va di nuovo in timeout a ogni nuovo invio, quindi imposta un numero basso come `0` per fallire prima. Ogni tentativo non in streaming va in timeout dopo 300 secondi in una sessione locale, oppure dopo `API_TIMEOUT_MS` quando imposti un valore positivo. Richiede Claude Code v2.1.285 o successivo. |


1900 1904 

1901Claude Code salta questo controllo quando un [file di impostazioni gestite, una policy MDM o un policy helper](/docs/it/managed-settings) imposta [`forceLoginMethod`](/docs/it/settings-reference#forceloginmethod) a `"gateway"`, o imposta [`forceLoginGatewayUrl`](/docs/it/settings-reference#forcelogingatewayurl) senza `forceLoginMethod`. Con entrambe le configurazioni, Claude Code apre il passaggio di accesso sulla schermata **Cloud gateway** piuttosto che su un metodo di accesso Anthropic. Claude Code salta anche il controllo quando una fonte di impostazioni gestite sulla macchina esiste ma non può essere letta, poiché quella fonte potrebbe contenere la configurazione del gateway. Prima della v2.1.247, Claude Code eseguiva il controllo anche sotto questa configurazione e usciva con questo errore quando gli endpoint di Anthropic non erano raggiungibili.1905Claude Code salta questo controllo quando un [file di impostazioni gestite, una policy MDM o un policy helper](/docs/it/managed-settings) imposta [`forceLoginMethod`](/docs/it/settings-reference#forceloginmethod) a `"gateway"`, o imposta [`forceLoginGatewayUrl`](/docs/it/settings-reference#forcelogingatewayurl) senza `forceLoginMethod`. Con entrambe le configurazioni, Claude Code apre il passaggio di accesso sulla schermata **Cloud gateway** piuttosto che su un metodo di accesso Anthropic. Claude Code salta anche il controllo quando una fonte di impostazioni gestite sulla macchina esiste ma non può essere letta, poiché quella fonte potrebbe contenere la configurazione del gateway. Prima della v2.1.247, Claude Code eseguiva il controllo anche sotto questa configurazione e usciva con questo errore quando gli endpoint di Anthropic non erano raggiungibili.

1902 1906 

1907Claude Code salta il controllo anche su una macchina senza impostazioni gestite quando il tuo `~/.claude/settings.json` [specifica un gateway](/docs/it/claude-apps-gateway#set-the-gateway-url-in-user-settings) con `forceLoginMethod` e `forceLoginGatewayUrl`. Prima della v2.1.295, Claude Code eseguiva il controllo in quel caso.

1908 

1903**Cosa fare:**1909**Cosa fare:**

1904 1910 

1905* Se il messaggio nomina una variabile proxy, controlla che il suo valore punti al proxy giusto e chiedi al tuo team di rete di consentire connessioni HTTPS attraverso di esso all'host nel messaggio. Vedi [Network configuration](/docs/it/network-config).1911* Se il messaggio nomina una variabile proxy, controlla che il suo valore punti al proxy giusto e chiedi al tuo team di rete di consentire connessioni HTTPS attraverso di esso all'host nel messaggio. Vedi [Network configuration](/docs/it/network-config).


3412 3418 

3413Claude Code mostra lo stesso errore per qualsiasi skill che [inietta contesto dinamico](/docs/it/skills#when-an-injected-command-fails), e un comando iniettato non riuscito interrompe l'invocazione di quella skill. Due stringhe analoghe vengono generate prima ancora che il comando venga eseguito:3419Claude Code mostra lo stesso errore per qualsiasi skill che [inietta contesto dinamico](/docs/it/skills#when-an-injected-command-fails), e un comando iniettato non riuscito interrompe l'invocazione di quella skill. Due stringhe analoghe vengono generate prima ancora che il comando venga eseguito:

3414 3420 

3415* `Shell command permission check failed for pattern "..."`: il controllo dei permessi del comando non lo ha consentito. [Controlli dei permessi sui comandi iniettati](/docs/it/skills#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`3421* `Shell command permission check failed for pattern "..."`: il controllo dei permessi del comando non lo ha consentito. [Permission checks on injected commands](/docs/it/skills#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`

3416* ``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](/docs/it/skills#how-injected-commands-run)3422* ``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 oppure modifica il frontmatter in `shell: powershell`. Consulta [How injected commands run](/docs/it/skills#how-injected-commands-run)

3417 3423 

3418**Cosa fare:**3424**Cosa fare:**

3419 3425 


3816 3822 

3817* In una sessione avviata senza quelle restrizioni, esegui `/tui fullscreen`, oppure `/tui default` per tornare indietro. Claude Code salva lì l'[impostazione `tui`](/docs/it/settings-reference#tui)3823* In una sessione avviata senza quelle restrizioni, esegui `/tui fullscreen`, oppure `/tui default` per tornare indietro. Claude Code salva lì l'[impostazione `tui`](/docs/it/settings-reference#tui)

3818 3824 

3825<h3 id="claude-code-couldnt-restart">

3826 Claude Code couldn't restart

3827</h3>

3828 

3829Claude Code si stava riavviando, ad esempio per passare al rendering a schermo intero o tornare da esso dopo che hai eseguito [`/tui`](/docs/it/fullscreen#enable-fullscreen-rendering). Ha chiuso la sessione ma non è riuscito ad avviare il nuovo processo, quindi ha stampato questo messaggio ed è terminato con stato 1:

3830 

3831```text theme={null}

3832Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.

3833```

3834 

3835Quando il riavvio non aveva alcuna conversazione da riaprire, ad esempio perché `/tui` era il tuo primo input in una nuova sessione, il messaggio è `Claude Code couldn't restart. Start Claude Code again.`

3836 

3837**Cosa fare:**

3838 

3839* Esegui di nuovo `claude` nella tua shell dalla stessa directory. Se il messaggio diceva che la conversazione è salvata, esegui [`/resume`](/docs/it/sessions#resume-a-session) nella nuova sessione e selezionala

3840* Se i riavvii continuano a non riuscire, avvia Claude Code dalla tua shell con [`claude --debug-file claude-debug.log`](/docs/it/cli-reference#cli-flags). Se un riavvio da quella sessione non riesce, `claude-debug.log` nella directory da cui sei partito registra una riga `Failed to relaunch:` con l'errore del sistema operativo. Includi quella riga quando [segnali il problema](#report-an-error)

3841 

3819<h3 id="couldnt-open-claude-desktop">3842<h3 id="couldnt-open-claude-desktop">

3820 Impossibile aprire Claude Desktop3843 Impossibile aprire Claude Desktop

3821</h3>3844</h3>


4593* Oppure riavvia Claude Code con [`CLAUDE_CODE_TMPDIR`](/docs/it/env-vars) impostata su una directory in un file system con spazio disponibile4616* Oppure riavvia Claude Code con [`CLAUDE_CODE_TMPDIR`](/docs/it/env-vars) impostata su una directory in un file system con spazio disponibile

4594* Poi chiedi a Claude di eseguire di nuovo il comando. L'output che aveva stampato è andato perso, non troncato4617* Poi chiedi a Claude di eseguire di nuovo il comando. L'output che aveva stampato è andato perso, non troncato

4595 4618 

4619<h3 id="file-is-not-valid-utf-8">

4620 File is not valid UTF-8

4621</h3>

4622 

4623Claude 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:

4624 

4625```text wrap theme={null}

4626File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary. This tool saves the whole file as UTF-8, which would replace every byte it cannot decode with U+FFFD. Nothing was written. Make the change with a shell command that reads and writes the file in its own encoding, or ask the user whether to convert the file to UTF-8 first.

4627```

4628 

4629Anche un file che dovrebbe essere UTF-8 riceve questo messaggio quando contiene anche una sola sequenza di byte non valida, perché il controllo riguarda i byte del file nel loro insieme.

4630 

4631**Cosa fare:**

4632 

4633* Per mantenere il file nella sua codifica attuale, lascia che Claude apporti la modifica con un comando shell che legge e scrive il file in quella codifica, come gli indica il messaggio

4634* Per continuare a modificare il file con lo strumento Edit, convertilo in UTF-8, oppure correggi i byte non validi in un file che dovrebbe essere UTF-8, poi chiedi di nuovo a Claude di apportare la modifica

4635 

4636Prima della v2.1.296, Edit e NotebookEdit applicavano una modifica di questo tipo e salvavano ogni byte che non riuscivano a decodificare come `U+FFFD`. Su quelle versioni, aggiorna Claude Code.

4637 

4596<h3 id="the-source-file-is-not-valid-utf-8-text">4638<h3 id="the-source-file-is-not-valid-utf-8-text">

4597 The source file is not valid UTF-8 text4639 The source file is not valid UTF-8 text

4598</h3>4640</h3>


4752 Comando bloccato dai controlli di isolamento worktree4794 Comando bloccato dai controlli di isolamento worktree

4753</h3>4795</h3>

4754 4796 

4755Claude ha eseguito un comando Bash o Monitor in una [sessione isolata in un worktree](/docs/it/worktrees#how-claude-code-enforces-isolation), e Claude Code l'ha rifiutato per uno di due motivi:4797Claude ha eseguito un comando Bash, [PowerShell](/docs/it/tools-reference#powershell-tool) o [Monitor](/docs/it/tools-reference#monitor-tool) in una [sessione isolata in un worktree](/docs/it/worktrees#how-claude-code-enforces-isolation), e Claude Code l'ha rifiutato per uno di questi motivi:

4756 4798 

4757* Il comando punta git al checkout principale.4799* Il comando verrebbe eseguito nel checkout principale o in un altro worktree. Il messaggio dice che la sua directory di lavoro `resolved to the shared checkout` o `is in a different worktree`.

4758* Claude Code non può verificare dal testo del comando che qualsiasi git che il comando esegue rimanga all'interno del worktree. Un comando che non nomina mai git può comunque essere rifiutato per questo motivo, perché espandere un'indirezione di variabile come `${!name}` o eseguire una sostituzione di funzione Bash come `${ command; }` produce un valore in fase di esecuzione che può essere esso stesso un comando.4800* Un comando Bash o Monitor punta git al checkout principale.

4801* Claude Code non può verificare dal testo di un comando Bash o Monitor che qualsiasi git che il comando esegue rimanga all'interno del worktree. Un comando che non nomina mai git può comunque essere rifiutato per questo motivo, perché espandere un'indirezione di variabile come `${!name}` o eseguire una sostituzione di funzione Bash come `${ command; }` produce un valore in fase di esecuzione che può essere esso stesso un comando.

4759 4802 

4760La parte centrale del messaggio nomina cosa non poteva essere verificato:4803Il messaggio dice `is isolated in the worktree <path>, but this command`, seguito dal motivo, come un comando il cui testo Claude Code non è riuscito a verificare:

4761 4804 

4762```text wrap theme={null}4805```text wrap theme={null}

4763This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.4806This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.


4765 4808 

4766**Cosa fare:**4809**Cosa fare:**

4767 4810 

4768* Di solito nulla: Claude legge il messaggio e riscrive il comando nel modo che la sua frase finale chiede4811* **Git puntato al checkout principale, o testo del comando che non può essere verificato**: nulla. Claude legge il messaggio e riscrive il comando nel modo che la sua frase finale chiede. Se un comando che hai chiesto continua ad essere rifiutato a causa di un'espansione nel suo testo, scrivi il valore contrassegnato letteralmente ed esegui git come suo proprio comando semplice dall'interno del worktree

4769* Se un comando che hai chiesto continua ad essere rifiutato, scrivi il valore contrassegnato letteralmente: sostituisci l'indirezione o la sostituzione con il suo valore, ed esegui git come suo proprio comando semplice dall'interno del worktree

4770* Per agire sul checkout principale di proposito, esegui il comando tu stesso in un terminale al di fuori della sessione4812* Per agire sul checkout principale di proposito, esegui il comando tu stesso in un terminale al di fuori della sessione

4771 4813 

4772<h3 id="this-session-has-no-saved-transcript">4814<h3 id="this-session-has-no-saved-transcript">


4946* Oppure riprendi con `--agent <name>` nominando un agente che esiste, per eseguire invece la sessione come quell'agente4988* Oppure riprendi con `--agent <name>` nominando un agente che esiste, per eseguire invece la sessione come quell'agente

4947* Se l'agente ha ambito di progetto e non hai concesso la fiducia alla directory originale della sessione, esegui Claude Code lì una volta, accetta la finestra di dialogo di fiducia, quindi riprendi di nuovo4989* Se l'agente ha ambito di progetto e non hai concesso la fiducia alla directory originale della sessione, esegui Claude Code lì una volta, accetta la finestra di dialogo di fiducia, quindi riprendi di nuovo

4948 4990 

4991<h3 id="restarted-after-its-next-loop-wakeup-was-due">

4992 This session restarted after its next /loop wakeup was due

4993</h3>

4994 

4995Un [`/loop` autoregolato](/docs/it/scheduled-tasks#let-claude-choose-the-interval) in una [sessione in background](/docs/it/agent-view) si è interrotto. Il processo della sessione è terminato mentre il loop attendeva il suo prossimo risveglio, e quel risveglio è diventato dovuto prima che si avviasse il [processo successivo](/docs/it/agent-view#the-supervisor-process) della sessione. Il risveglio mancato non viene eseguito in ritardo. L'avviso indica di quanto il risveglio era in ritardo quando la sessione si è riavviata:

4996 

4997```text theme={null}

4998This session restarted 12m after its next /loop wakeup was due, so that wakeup will not fire. The loop stays stopped until Claude schedules it again: reply to continue it.

4999```

5000 

5001Prima della v2.1.295, in questa situazione il loop si interrompeva senza alcun avviso.

5002 

5003**Cosa fare:**

5004 

5005* Per continuare il loop, [rispondi alla sessione](/docs/it/agent-view#peek-and-reply) e dillo, ad esempio `keep the loop running`. Claude legge l'avviso insieme alla tua risposta e può pianificare il prossimo risveglio

5006* Se hai finito con il loop, non fare nulla. Si è già interrotto

5007 

4949<h3 id="claude_code_process_wrapper-launcher-errors">5008<h3 id="claude_code_process_wrapper-launcher-errors">

4950 Errori del launcher CLAUDE\_CODE\_PROCESS\_WRAPPER5009 Errori del launcher CLAUDE\_CODE\_PROCESS\_WRAPPER

4951</h3>5010</h3>

headless.md +3 −1

Details

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

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

91 91 

92Quando stderr è un terminale e l'esecuzione ha atteso cinque secondi, Claude Code stampa su stderr una riga che inizia con `Waiting for background work to finish` e indica il lavoro in questione. Con l'[output `json` o `stream-json`](#get-structured-output), la riga viene stampata solo quando stdout non è un terminale, quindi il JSON letto dal tuo script non la contiene mai.

93 

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

93 95 

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


296 298 

297Quando una directory `--plugin-dir` o un archivio stesso non riesce a caricarsi, la sua voce `plugin_errors` include il percorso assoluto risolto come `path`. Usalo per capire quale dei vari valori `--plugin-dir` ha fallito. Il campo `path` richiede Claude Code v2.1.283 o successivo.299Quando una directory `--plugin-dir` o un archivio stesso non riesce a caricarsi, la sua voce `plugin_errors` include il percorso assoluto risolto come `path`. Usalo per capire quale dei vari valori `--plugin-dir` ha fallito. Il campo `path` richiede Claude Code v2.1.283 o successivo.

298 300 

299Utilizza i campi del server MCP allo stesso modo. Quando passi [`--mcp-config`](/docs/it/cli-reference#cli-flags) con `-p`, Claude Code attende i server ancora in sospeso prima di eseguire il primo turno, fino al timeout di avvio [`MCP_TIMEOUT`](/docs/it/env-vars), 30 secondi per impostazione predefinita. Un server remoto con un [elenco di strumenti memorizzato nella cache](/docs/it/agent-sdk/mcp#connection-timing) salta l'attesa, mostra `pending` in `system/init` e si connette alla sua prima chiamata a uno strumento. L'attesa richiede Claude Code v2.1.221 o successivo.301Utilizza i campi del server MCP allo stesso modo. Quando passi [`--mcp-config`](/docs/it/cli-reference#cli-flags) con `-p`, Claude Code attende i server ancora in sospeso prima di eseguire il primo turno, fino al timeout di avvio [`MCP_TIMEOUT`](/docs/it/env-vars), 30 secondi per impostazione predefinita. Un server remoto con un [elenco di strumenti memorizzato nella cache](/docs/it/agent-sdk/mcp#connection-timing) salta l'attesa, mostra `pending` in `system/init` e si connette alla sua prima chiamata a uno strumento. In un [ambiente self-hosted](/docs/it/self-hosted-environments-configuration#connection-timing), si applica invece un'attesa più breve. L'attesa richiede Claude Code v2.1.221 o successivo.

300 302 

301Claude Code convalida ogni voce `--mcp-config` all'avvio e salta le voci che non superano la convalida, ad esempio una voce `url` senza `type`. L'esecuzione continua ed esce correttamente, quindi controlla questi campi per rilevare un server che non è mai stato caricato:303Claude Code convalida ogni voce `--mcp-config` all'avvio e salta le voci che non superano la convalida, ad esempio una voce `url` senza `type`. L'esecuzione continua ed esce correttamente, quindi controlla questi campi per rilevare un server che non è mai stato caricato:

302 304 

Details

22 22 

23| Scorciatoia | Descrizione | Contesto |23| Scorciatoia | Descrizione | Contesto |

24| :- | :- | :- |24| :- | :- | :- |

25| `Ctrl+C` | Interrompi, o cancella l'input | Interrompe un'operazione in esecuzione. Se nulla è in esecuzione, il primo pressione cancella l'input del prompt e una seconda pressione esce da Claude Code |25| `Ctrl+C` | Interrompi, o cancella l'input | Interrompe un'operazione in esecuzione. Se nulla è in esecuzione, la prima pressione cancella l'input del prompt e una seconda pressione esce da Claude Code. Premi `Su` mentre il prompt è ancora vuoto per recuperare la bozza cancellata; questa funzione richiede Claude Code v2.1.288 o versione successiva |

26| `Ctrl+X Ctrl+K` | Arresta tutti i [subagent in background](/docs/it/sub-agents#run-subagents-in-foreground-or-background) in questa sessione e disattiva le [risposte automatiche degli artefatti](/docs/it/artifacts#let-claude-reply-to-comments-on-its-own) per il resto della sessione. Premi due volte entro 3 secondi per confermare. Puoi premerla anche mentre è aperta la richiesta di permesso di un subagent in background | Controllo subagent |26| `Ctrl+X Ctrl+K` | Arresta tutti i [subagent in background](/docs/it/sub-agents#run-subagents-in-foreground-or-background) in questa sessione e disattiva le [risposte automatiche degli artefatti](/docs/it/artifacts#let-claude-reply-to-comments-on-its-own) per il resto della sessione. Premi due volte entro 3 secondi per confermare. Puoi premerla anche mentre è aperta la richiesta di permesso di un subagent in background | Controllo subagent |

27| `Ctrl+D` | Esci dalla sessione Claude Code | Il primo pressione mostra un suggerimento di conferma e un secondo pressione entro 800ms esce. Quando il prompt contiene testo, `Ctrl+D` elimina il carattere dopo il cursore invece |27| `Ctrl+D` | Esci dalla sessione Claude Code | Il primo pressione mostra un suggerimento di conferma e un secondo pressione entro 800ms esce. Quando il prompt contiene testo, `Ctrl+D` elimina il carattere dopo il cursore invece |

28| `Ctrl+G` o `Ctrl+X Ctrl+E` | Apri nell'editor di testo predefinito | Modifica il tuo prompt o la risposta personalizzata nell'editor di testo predefinito. `Ctrl+X Ctrl+E` è il binding nativo di readline. Attiva **Mostra l'ultima risposta nell'editor esterno** in `/config` per anteporre la risposta precedente di Claude come contesto commentato con `#` sopra il tuo prompt; Claude Code rimuove il blocco di commento quando salvi |28| `Ctrl+G` o `Ctrl+X Ctrl+E` | Apri nell'editor di testo predefinito | Modifica il tuo prompt o la risposta personalizzata nell'editor di testo predefinito. `Ctrl+X Ctrl+E` è il binding nativo di readline. Attiva **Mostra l'ultima risposta nell'editor esterno** in `/config` per anteporre la risposta precedente di Claude come contesto commentato con `#` sopra il tuo prompt; Claude Code rimuove il blocco di commento quando salvi |

Details

132Il runner e le sue sessioni effettuano diversi tipi di connessione in uscita, e non è richiesta alcuna connettività in entrata da Anthropic:132Il runner e le sue sessioni effettuano diversi tipi di connessione in uscita, e non è richiesta alcuna connettività in entrata da Anthropic:

133 133 

134* **Piano di controllo**: il runner esegue il polling di `api.anthropic.com` per il lavoro e pubblica gli eventi di progresso della configurazione e di errore, tutto HTTPS in uscita. Il polling funge anche da heartbeat del runner.134* **Piano di controllo**: il runner esegue il polling di `api.anthropic.com` per il lavoro e pubblica gli eventi di progresso della configurazione e di errore, tutto HTTPS in uscita. Il polling funge anche da heartbeat del runner.

135* **SCM connector**: l'orchestrator facoltativo [SCM connector](/docs/it/self-hosted-environments-reference#scm-connector-flags) tunnel è l'unica connessione WebSocket.135* **Git**: il runner clona dal tuo host git e vi esegue il push su HTTPS o SSH, autenticato con credenziali fornite dal tuo deploy. Vedi [Configura git](/docs/it/self-hosted-environments-deploy#configure-git) per le opzioni, incluse le credenziali coniate per sessione. Con il [proxy git Anthropic](/docs/it/self-hosted-environments-deploy#use-the-anthropic-git-proxy), il traffico git per i repository su github.com passa invece attraverso `api.anthropic.com`.

136* **Git**: il runner clona da e spinge verso il tuo host git su HTTPS o SSH, autenticato con credenziali che la tua distribuzione fornisce; [Configura git](/docs/it/self-hosted-environments-deploy#configure-git) copre le opzioni, incluse credenziali coniate per sessione e il [proxy git Anthropic](/docs/it/self-hosted-environments-deploy#use-the-anthropic-git-proxy), che instrada git attraverso `api.anthropic.com` invece.136* **Session child**: il processo Claude Code figlio mantiene il flusso di eventi della sessione verso `api.anthropic.com`, ed effettua le proprie chiamate in uscita per l'inferenza del modello e per i comandi git eseguiti durante la sessione. In una sessione che utilizza [git gestito da Anthropic](/docs/it/self-hosted-environments-deploy#use-the-anthropic-git-proxy), il figlio invia il suo traffico `git` e `gh` per github.com tramite una connessione WebSocket che apre verso `api.anthropic.com`.

137* **Session child**: il processo Claude Code figlio della sessione mantiene il flusso di eventi della sessione a `api.anthropic.com`, e effettua le proprie chiamate in uscita per l'inferenza del modello e per i comandi git eseguiti durante la sessione. Vedi [Requisiti di rete](/docs/it/self-hosted-environments-deploy#network-requirements) per l'elenco completo dell'uscita. Il [diagramma sopra](#how-self-hosted-environments-work) mostra questi percorsi, a parte l'SCM connector facoltativo.137* **SCM connector**: l'[SCM connector](/docs/it/self-hosted-environments-reference#scm-connector-flags) facoltativo dell'orchestrator non è disponibile, quindi il suo tunnel non si apre. Il tunnel è una connessione WebSocket verso `api.anthropic.com`.

138 

139Vedi [Requisiti di rete](/docs/it/self-hosted-environments-deploy#network-requirements) per l'elenco completo dell'uscita. Il [diagramma sopra](#how-self-hosted-environments-work) mostra questi percorsi, a parte l'SCM connector facoltativo e la connessione git gestita da Anthropic.

138 140 

139Per impostazione predefinita, l'inferenza del modello utilizza l'API Anthropic. Il piano di controllo consegna l'endpoint API a ogni sessione, e la sessione si autentica con un token OAuth emesso da Anthropic e limitato alla sessione. Per inviare invece le richieste del modello al tuo account cloud, vedi [Invia le richieste del modello a Bedrock o Agent Platform](/docs/it/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).141Per impostazione predefinita, l'inferenza del modello utilizza l'API Anthropic. Il piano di controllo consegna l'endpoint API a ogni sessione, e la sessione si autentica con un token OAuth emesso da Anthropic e limitato alla sessione. Per inviare invece le richieste del modello al tuo account cloud, vedi [Invia le richieste del modello a Bedrock o Agent Platform](/docs/it/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).

140 142 

Details

31| Variabile | Descrizione |31| Variabile | Descrizione |

32| :- | :- |32| :- | :- |

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Il JWT della sessione, con prefisso `sk-ant-cc-`. Il suo claim `act` identifica il creatore della sessione, con l'email del creatore quando la superficie di creazione l'ha registrata. Il valore è il token al momento dello spawn; gli aggiornamenti arrivano sullo stdin del figlio, quindi un wrapper vede solo il valore iniziale. Consulta [Verify session identity](/docs/it/self-hosted-environments-identity). |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Il JWT della sessione, con prefisso `sk-ant-cc-`. Il suo claim `act` identifica il creatore della sessione, con l'email del creatore quando la superficie di creazione l'ha registrata. Il valore è il token al momento dello spawn; gli aggiornamenti arrivano sullo stdin del figlio, quindi un wrapper vede solo il valore iniziale. Consulta [Verify session identity](/docs/it/self-hosted-environments-identity). |

34| `CCR_SESSION_ACCOUNT_EMAIL` | L'email del creatore della sessione, pre-estratta dal runner dal claim `act.email` del token senza verifica della firma. Adatta per l'etichettatura, come i trailer dei commit. Quando l'email controlla il rilascio delle credenziali, verifica il token e leggi il claim da esso; consulta [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator). Non impostata quando il token non contiene un'email del creatore. Trattala come informazione personale identificabile. |34| `CCR_SESSION_ACCOUNT_EMAIL` | L'email del creatore della sessione, pre-estratta dal runner dal claim `act.email` del token senza verifica della firma. Adatta per l'etichettatura, come i trailer dei commit. Quando l'email controlla il rilascio delle credenziali, verifica il token e leggi il claim da esso. Consulta [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator). Non impostata quando il token non contiene un'email del creatore, ad esempio nelle sessioni create dall'identità di servizio della tua organizzazione. Trattala come informazione personale identificabile. |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` o `scheduled_trigger`. Anthropic registra il valore una volta alla creazione della sessione, quindi il wrapper e ogni hook del ciclo di vita vedono lo stesso valore. Usala solo per l'analisi dell'adozione e l'etichettatura, non come segnale di autorizzazione. Non impostata quando la sessione non ha una superficie registrata o riconosciuta, quindi fai riferimento ad essa come `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` sotto `set -u`. Richiede Claude Code v2.1.229 o successivo. |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` o `scheduled_trigger`. Anthropic registra il valore una volta alla creazione della sessione, quindi il wrapper e ogni hook del ciclo di vita vedono lo stesso valore. Usala solo per l'analisi dell'adozione e l'etichettatura, non come segnale di autorizzazione. Non impostata quando la sessione non ha una superficie registrata o riconosciuta. Richiede Claude Code v2.1.229 o successivo. |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | Percorso assoluto al binario Claude Code del runner stesso. Termina il wrapper con `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` per passare il controllo al binario bloccato senza hardcodificare un percorso di installazione. |36| `CLAUDE_RUNNER_CLAUDE_BIN` | Percorso assoluto al binario Claude Code del runner stesso. Termina il wrapper con `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` per passare il controllo al binario bloccato senza hardcodificare un percorso di installazione. |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID sessione nel formato taggato `cse_...`. Questa è la stessa sessione che gli [hook del ciclo di vita](#lifecycle-hooks) vedono come `CLAUDE_RUNNER_SESSION_ID` nel formato `session_...`; le variabili UUID corrispondono in entrambi, e sostituire il prefisso `cse_` con `session_` produce l'ID mostrato nell'URL della sessione. |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID sessione nel formato taggato `cse_...`. Questa è la stessa sessione che gli [hook del ciclo di vita](#lifecycle-hooks) vedono come `CLAUDE_RUNNER_SESSION_ID` nel formato `session_...`; le variabili UUID corrispondono in entrambi, e sostituire il prefisso `cse_` con `session_` produce l'ID mostrato nell'URL della sessione. |

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

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

40| `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_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. |41| `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`](/docs/it/self-hosted-environments-reference#runner-cli-flags); consulta [Reuse a pre-warmed checkout](/docs/it/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |42| `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`](/docs/it/self-hosted-environments-reference#runner-cli-flags); consulta [Reuse a pre-warmed checkout](/docs/it/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |

41| `ANTHROPIC_BASE_URL` | L'URL di base dell'API che il figlio utilizzerà, fornito dal piano di controllo per sessione e normalmente `https://api.anthropic.com`. Non sovrascriverlo: la credenziale di inferenza della sessione è un token OAuth emesso da Anthropic che altri provider non accettano. |43| `ANTHROPIC_BASE_URL` | L'URL di base dell'API che il figlio utilizzerà, fornito dal piano di controllo per sessione e normalmente `https://api.anthropic.com`. Non sovrascriverlo: la credenziale di inferenza della sessione è un token OAuth emesso da Anthropic che altri provider non accettano. |


43 45 

44Il 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.

45 47 

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

49 

50<h3 id="give-a-default-to-variables-that-can-be-unset">

51 Assegnare un valore predefinito alle variabili che possono non essere impostate

52</h3>

53 

54`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:-}`.

55 

56Ovunque una shell espanda il link del thread Slack, adotta queste precauzioni:

57 

58* **Mettilo tra virgolette**: il link può contenere caratteri che la shell interpreta, come `?` e `&`, quindi metti la variabile tra virgolette, come in `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`.

59* **Tieni il suo valore fuori dalle stringhe di `eval` e `sh -c`**: non sostituire il suo valore in una stringa eseguita da `eval` o `sh -c`, nemmeno tra virgolette. Fai invece in modo che quella stringa faccia riferimento alla variabile.

60 

46<h3 id="keep-stdin-and-file-descriptor-3-attached">61<h3 id="keep-stdin-and-file-descriptor-3-attached">

47 Mantenere stdin e il descrittore di file 3 collegati62 Mantenere stdin e il descrittore di file 3 collegati

48</h3>63</h3>

49 64 

50Lo stdin del figlio è il canale di controllo del runner. Le rotazioni dei token e i segnali di fine sessione arrivano su di esso. Il runner apre anche una pipe sul descrittore di file 3 e legge da essa i segnali di attività del figlio per gestire i timeout di inattività e di avvio. Un semplice `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` preserva entrambi automaticamente.65Lo stdin del figlio è il canale di controllo del runner. Le rotazioni dei token e i segnali di fine sessione arrivano su di esso. Il runner apre anche una pipe sul descrittore di file 3 e legge da essa i segnali di attività del figlio per gestire i timeout di inattività e di avvio. Un semplice `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` preserva entrambi automaticamente.

51 66 

52Se il tuo wrapper mette in background il figlio con un semplice `&`, interrompe lo stdin del figlio: la sessione sembra sana fino a quando non scade la durata di circa 30 minuti del token OAuth iniziale, dopodiché ogni chiamata API fallisce con `401 authentication_error`. Se il tuo wrapper deve mettere in background il figlio, ad esempio per mantenere attivo un trap di teardown, salva stdin sul descrittore di file 4 o superiore e ricollegalo esplicitamente:67Se il tuo wrapper mette in background il figlio con un semplice `&`, interrompe lo stdin del figlio. La sessione sembra sana fino a quando non scade la durata di circa 30 minuti del token OAuth iniziale, dopodiché ogni chiamata API che usa il token fallisce con `401 authentication_error`. Se il tuo wrapper deve mettere in background il figlio, ad esempio per mantenere attivo un trap di teardown, salva stdin sul descrittore di file 4 o superiore e ricollegalo esplicitamente:

53 68 

54```bash theme={null}69```bash theme={null}

55exec 4<&070exec 4<&0


59wait "$CHILD"74wait "$CHILD"

60```75```

61 76 

62Non chiudere né riutilizzare il descrittore di file 3 nel wrapper. Reindirizzare lo stdout e lo stderr del figlio va bene.77Puoi reindirizzare lo stdout del figlio. Mantieni il descrittore di file 3 e lo stderr collegati al runner:

78 

79* **Descrittore di file 3**: trasporta i segnali di attività del figlio al runner. Non chiuderlo né riutilizzarlo nel wrapper.

80* **stderr**: quando il wrapper o il figlio esce con codice diverso da zero, il runner pubblica le ultime righe dello stderr nella sessione e le stampa nel proprio log. L'utente della sessione vede quelle righe, quindi non stampare segreti sullo stderr e rimuovi `set -x` prima di distribuire il wrapper. Se reindirizzi lo stderr, le sessioni vengono comunque eseguite, ma il runner segnala un errore con il solo codice di uscita.

63 81 

64<h3 id="pass-the-system-prompt-flags-through">82<h3 id="pass-the-system-prompt-flags-through">

65 Passare i flag del prompt di sistema83 Passare i flag del prompt di sistema


108 checkout126 checkout

109</h3>127</h3>

110 128 

111Viene eseguito una volta per repository, al posto del clone e del fetch integrati del runner. Usa l'hook per clonare da un mirror read-through, popolare un albero di lavoro da un archivio o applicare l'autenticazione git per sessione. Il runner imposta queste variabili, e può impostare altre variabili `CLAUDE_RUNNER_` che la tabella non elenca:129Viene eseguito una volta per repository, al posto del clone e del fetch integrati del runner. Usa l'hook per clonare da un mirror read-through che raggiungi tramite HTTPS o SSH, popolare un albero di lavoro da un archivio o applicare l'autenticazione git per sessione. Il runner imposta queste variabili, e può impostare altre variabili `CLAUDE_RUNNER_` che la tabella non elenca:

112 130 

113| Variabile | Descrizione |131| Variabile | Descrizione |

114| :- | :- |132| :- | :- |

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

116| `CLAUDE_RUNNER_REPO_REF` | Revisione da controllare: ramo, tag o commit SHA come la sessione lo ha richiesto. Vuoto significa il ramo predefinito del repository. |134| `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. |

117| `CLAUDE_RUNNER_CHECKOUT_PATH` | Percorso assoluto dove l'albero di lavoro deve essere lasciato |135| `CLAUDE_RUNNER_CHECKOUT_PATH` | Percorso assoluto dove l'albero di lavoro deve essere lasciato |

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

119| `CLAUDE_RUNNER_SESSION_UUID` | Lo stesso ID sessione nel modulo UUID canonico |137| `CLAUDE_RUNNER_SESSION_UUID` | Lo stesso ID sessione nel modulo UUID canonico |

120| `CLAUDE_RUNNER_API_BASE_URL` | URL di base dell'API Anthropic per le chiamate limitate alla sessione |138| `CLAUDE_RUNNER_API_BASE_URL` | URL di base dell'API Anthropic per le chiamate limitate alla sessione |

121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app` o `ios`. Non impostato quando la sessione non ha una superficie registrata o riconosciuta. |139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app` o `ios`. Non impostata quando la sessione non ha una superficie registrata o riconosciuta, quindi fai riferimento a essa come `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` con `set -u`. Richiede Claude Code v2.1.229 o successivo. |

122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Il token di accesso della sessione, per le chiamate API limitate alla sessione |140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Il token di accesso della sessione, per le chiamate API limitate alla sessione |

123| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Impostazioni git che il runner fissa per il git eseguito dal tuo hook. [Configurazione git all'interno degli hook del ciclo di vita](#git-configuration-inside-lifecycle-hooks) le descrive. Richiede Claude Code v2.1.280 o successivo. |141| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Impostazioni git che il runner fissa per il git eseguito dal tuo hook. [Configurazione git all'interno degli hook del ciclo di vita](#git-configuration-inside-lifecycle-hooks) le descrive. Richiede Claude Code v2.1.280 o successivo. |

124 142 

125Lo script deve lasciare un albero di lavoro in `CLAUDE_RUNNER_CHECKOUT_PATH` controllato alla revisione richiesta. HEAD staccato va bene; il runner crea il ramo di lavoro della sessione in cima. Il runner verifica che il percorso contenga un `.git` in seguito; se l'hook materializza una fonte non-git come Perforce o un tarball scompattato, impostare `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` nell'ambiente del runner per saltare quel controllo. I flussi basati su Git come la creazione del ramo di lavoro e il push dei risultati richiedono un checkout git, quindi esportare i risultati da alberi non-git con un hook [`post-session`](#post-session).143Lo script deve lasciare in `CLAUDE_RUNNER_CHECKOUT_PATH` un albero di lavoro con il checkout della revisione richiesta. Un HEAD staccato va bene, perché il runner crea sopra di esso il branch di lavoro della sessione.

126 144 

127Il runner non passa una credenziale git all'hook. Invece, coniare una credenziale di clone per sessione dall'identità della sessione: verificare `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con una libreria JWT standard rispetto all'endpoint JWKS sotto `CLAUDE_RUNNER_API_BASE_URL`, come descritto in [Verify the token from your service](/docs/it/self-hosted-environments-identity#verify-the-token-from-your-service), quindi fare in modo che il servizio di credenziale emetta una credenziale di clone di breve durata per l'identità nel claim `act` del token. `CLAUDE_RUNNER_CLAUDE_BIN` non è impostato nell'ambiente dell'hook di checkout, quindi il subcomando `decode-token` non è disponibile qui. Ricadere in qualsiasi autenticazione git che l'host ha già, come un agente SSH, un helper di credenziale o `.netrc`, è anche un'opzione.145Dopo che il tuo hook termina, il runner verifica che `CLAUDE_RUNNER_CHECKOUT_PATH` contenga un `.git`. Se il tuo hook materializza una sorgente non git come Perforce o un tarball scompattato, imposta `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` nell'ambiente del runner per saltare quel controllo. I flussi basati su git come la creazione del branch di lavoro e il push dei risultati richiedono un checkout git, quindi esporta i risultati da alberi non git con un [hook `post-session`](#post-session).

128 146 

129Quando l'hook esce con codice diverso da zero, o esce 0 senza lasciare un checkout utilizzabile dietro, ciò che il runner fa dipende dal repository:147<h4 id="get-git-credentials-in-the-hook">

148 Ottenere le credenziali git nell'hook

149</h4>

130 150 

131* **Un repository a cui la sessione spinge i risultati**: il runner fallisce la sessione e su un'uscita diversa da zero mostra la coda dello stderr dello script all'utente.151Il runner non passa una credenziale git all'hook. Nemmeno il sottocomando `decode-token` è disponibile qui, perché `CLAUDE_RUNNER_CLAUDE_BIN` non è impostato nell'ambiente dell'hook di checkout. Genera invece una credenziale di clone per sessione a partire dall'identità della sessione, oppure ricorri all'autenticazione git dell'host stesso:

132* **Un repository che la sessione legge solo**, come un repository aggiunto a una sessione in esecuzione: il runner registra una riga `[runner:warn]` con il dettaglio del fallimento, pubblica un passo `Skipped` alla sessione, rimuove ciò che l'hook ha lasciato al percorso di checkout e continua con i repository rimanenti. Quando il runner non può rimuovere il percorso immediatamente, ritenta la rimozione alla fine della sessione. Se saltare lascia la sessione senza alcun repository, il runner fallisce comunque la sessione.

133 152 

134Prima della v2.1.228, il runner falliva la sessione su un fallimento dell'hook per qualsiasi repository, quindi un repository di sola lettura che l'hook non poteva servire falliva di nuovo la sessione su ogni nuovo runner su cui la sessione riprendeva.153* **Credenziale di clone per sessione**: verifica `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con una libreria JWT standard rispetto all'endpoint JWKS sotto `CLAUDE_RUNNER_API_BASE_URL`, come descritto in [Verify the token from your service](/docs/it/self-hosted-environments-identity#verify-the-token-from-your-service). Poi fai in modo che il tuo servizio di credenziali emetta una credenziale di clone di breve durata per l'identità nel claim `act` del token. Associa quella credenziale a `act.sub` e non richiedere `act.email`.

154* **Autenticazione git dell'host**: usa qualsiasi autenticazione git di cui l'host dispone già, come un agente SSH, un credential helper o `.netrc`.

135 155 

136Il runner rimuove il percorso di checkout dopo la fine della sessione.156<h4 id="when-the-hook-fails">

157 Quando l'hook fallisce

158</h4>

159 

160L'hook fallisce quando esce con un codice diverso da zero, o esce con 0 senza lasciare un checkout utilizzabile:

161 

162* **Un repository a cui la sessione spinge i risultati**: il runner fallisce la sessione e su un'uscita diversa da zero mostra la coda dello stderr dello script all'utente.

163* **Un repository che la sessione legge soltanto**, come un repository aggiunto a una sessione in esecuzione: il runner registra una riga `[runner:warn]` con il dettaglio del fallimento, pubblica un passaggio `Skipped` nella sessione, rimuove ciò che l'hook ha lasciato nel percorso di checkout e continua con i repository rimanenti. Se saltarlo lascia la sessione senza alcun repository, il runner fa comunque fallire la sessione.

164 

165Quando l'hook ha successo, il runner rimuove il percorso di checkout dopo la fine della sessione.

137 166 

138<h3 id="post-session">167<h3 id="post-session">

139 post-session168 post-session


151| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Percorsi assoluti separati da due punti degli alberi di lavoro della sessione. Vuoto per sessioni senza repository. |180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Percorsi assoluti separati da due punti degli alberi di lavoro della sessione. Vuoto per sessioni senza repository. |

152| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Percorso al log di debug della sessione, ancora su disco mentre l'hook viene eseguito |181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Percorso al log di debug della sessione, ancora su disco mentre l'hook viene eseguito |

153| `CLAUDE_RUNNER_API_BASE_URL` | URL di base dell'API Anthropic per le chiamate limitate alla sessione |182| `CLAUDE_RUNNER_API_BASE_URL` | URL di base dell'API Anthropic per le chiamate limitate alla sessione |

154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app` o `ios`. Non impostato quando la sessione non ha una superficie registrata o riconosciuta. Richiede Claude Code v2.1.229 o successivo. |183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app` o `ios`. Non impostata quando la sessione non ha una superficie registrata o riconosciuta, quindi fai riferimento a essa come `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` con `set -u`. Richiede Claude Code v2.1.229 o successivo. |

155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Il token di accesso della sessione, per le chiamate API limitate alla sessione |184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Il token di accesso della sessione, per le chiamate API limitate alla sessione |

156| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Impostazioni git che il runner fissa per il git eseguito dal tuo hook. [Configurazione git all'interno degli hook del ciclo di vita](#git-configuration-inside-lifecycle-hooks) le descrive. Richiede Claude Code v2.1.280 o successivo. |185| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Impostazioni git che il runner fissa per il git eseguito dal tuo hook. [Configurazione git all'interno degli hook del ciclo di vita](#git-configuration-inside-lifecycle-hooks) le descrive. Richiede Claude Code v2.1.280 o successivo. |

157 186 

158`CLAUDE_RUNNER_EXIT_REASON` assume uno di quattro valori:187`CLAUDE_RUNNER_EXIT_REASON` assume uno di quattro valori:

159 188 

160* `completed`: la sessione è terminata in modo pulito. Il processo Claude Code è uscito normalmente, oppure la sessione è stata archiviata o eliminata mentre era ancora in esecuzione.189* `completed`: la sessione è terminata in modo pulito. Il processo Claude Code è uscito normalmente, oppure è uscito da solo dopo che la sessione è stata archiviata o eliminata.

161* `failed`: il processo Claude Code è andato in crash, oppure la configurazione è fallita dopo l'avvio.190* `failed`: il processo Claude Code è andato in crash, oppure la configurazione è fallita dopo l'avvio.

162* `interrupted`: il runner ha interrotto la sessione. Ha rilasciato la sessione per liberare lo slot, la sessione è scaduta all'avvio, il server ha spostato la sessione da questo runner, il runner era in drenaggio, oppure la sessione ha superato il limite [`--kill-session-after-min`](/docs/it/self-hosted-environments-reference#runner-cli-flags).191* `interrupted`: il runner ha interrotto la sessione, in uno di questi casi:

192 * Il runner ha rilasciato la sessione per liberare lo slot.

193 * La sessione è andata in timeout all'avvio.

194 * Il server ha spostato la sessione da questo runner.

195 * Il polling del runner ha rilevato un'archiviazione o un'eliminazione prima che il processo uscisse.

196 * Il runner era in fase di drain.

197 * La sessione ha superato il limite [`--kill-session-after-min`](/docs/it/self-hosted-environments-reference#runner-cli-flags).

163* `abandoned`: riservato per una sessione che un altro runner ha rivendicato. L'hook attualmente non si attiva in quel caso.198* `abandoned`: riservato per una sessione che un altro runner ha rivendicato. L'hook attualmente non si attiva in quel caso.

164 199 

165I [contatori del ciclo di vita della sessione](/docs/it/self-hosted-environments-reference#session-lifecycle-counter-semantics) contano un rilascio, un timeout di avvio e uno spostamento del server come `completed` piuttosto che `interrupted`, perché il runner ha restituito lo slot in modo pulito. Aspettati quella differenza se confronti le ricevute dell'hook con i contatori.200Se confronti le ricevute dell'hook con i [contatori del ciclo di vita della sessione](/docs/it/self-hosted-environments-reference#session-lifecycle-counter-semantics), aspettati che alcune ricevute `interrupted` vengano contate lì come `completed`. I contatori contano come `completed` un rilascio, un timeout all'avvio, uno spostamento da parte del server e un'archiviazione o eliminazione rilevata per prima dal polling del runner, perché il runner ha restituito lo slot in modo pulito.

166 201 

167Lo stato di uscita dell'hook non influisce mai sul risultato della sessione; un fallimento viene registrato e ignorato. Il runner attende fino a `--post-session-hook-timeout-sec`, 60 secondi per impostazione predefinita, ad ogni fine sessione incluso l'arresto del runner. Questo esempio salva il lavoro non committato in un ramo di salvataggio:202Lo stato di uscita dell'hook non influisce mai sul risultato della sessione; un fallimento viene registrato e ignorato. Il runner attende fino a `--post-session-hook-timeout-sec`, 60 secondi per impostazione predefinita, ad ogni fine sessione incluso l'arresto del runner. Questo esempio salva il lavoro non committato in un ramo di salvataggio:

168 203 

169```bash theme={null}204```bash theme={null}

170#!/usr/bin/env bash205#!/usr/bin/env bash

171set -u206set -u

207export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

172IFS=':'208IFS=':'

173# -c overrides beat repo-local settings, blocking session-written fsmonitor,209# -c overrides beat repo-local settings, blocking session-written fsmonitor,

174# hook-path, and gpg-program config from executing code with the hook's210# hook-path, and gpg-program config from executing code with the hook's

175# privileges. -c commit.gpgsign=false also leaves these rescue commits211# privileges. -c commit.gpgsign=false also leaves these rescue commits

176# unsigned under --configure-git.212# unsigned under --configure-git.

177# Repo-local credential.helper and pushurl still apply, and on a runner213# Repo-local credential.helper and pushurl still apply, and on a runner

178# before v2.1.280 so does core.sshCommand; if the hook holds credentials214# before v2.1.280 so does core.sshCommand; see the note below the script

179# the session didn't, see the note below the script.215# before you give this push a credential.

180g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \216g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

181 -c commit.gpgsign=false "$@"; }217 -c commit.gpgsign=false "$@"; }

182for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do218for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do


188done224done

189```225```

190 226 

191L'hook esegue il push con le credenziali git disponibili nel proprio ambiente sull'host del runner. Con l'[approccio senza credenziali nell'immagine](/docs/it/self-hosted-environments-deploy#configure-git), anche quando il clone integrato passa attraverso il proxy git di Anthropic, non ce ne sono, quindi genera una credenziale di push di breve durata all'interno dell'hook prima del push: scambia il token della sessione che l'hook riceve in `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con il tuo servizio di token, verificandolo come descritto in [Verificare l'identità della sessione](/docs/it/self-hosted-environments-identity). Quando l'hook dispone di una credenziale che la sessione non aveva, sostituisci `origin` con un URL fornito dall'operatore e passa `-c credential.helper=` insieme al tuo helper. [Configurazione git all'interno degli hook del ciclo di vita](#git-configuration-inside-lifecycle-hooks) descrive su cosa può ancora influire la configurazione scritta dalla sessione.227La riga `GIT_ALLOW_PROTOCOL` nello script limita git ai remote HTTPS, HTTP e SSH. Se l'ambiente del runner imposta già un proprio elenco `GIT_ALLOW_PROTOCOL` non vuoto, lo script mantiene quell'elenco.

228 

229L'hook esegue il push con le credenziali git disponibili nel proprio ambiente sull'host del runner. Con l'[approccio senza credenziali nell'immagine](/docs/it/self-hosted-environments-deploy#configure-git), anche quando il clone integrato passa attraverso il proxy git di Anthropic, non ce ne sono, quindi genera una credenziale di push di breve durata all'interno dell'hook prima del push: scambia il token della sessione che l'hook riceve in `CLAUDE_CODE_SESSION_ACCESS_TOKEN` con il tuo servizio di token, verificandolo come descritto in [Verificare l'identità della sessione](/docs/it/self-hosted-environments-identity).

230 

231Tratta qualsiasi credenziale che il tuo hook fornisce a git come una credenziale che una sessione può ottenere, e generala in modo che non possa fare nulla di più di questo push. Il git nel tuo hook legge file di configurazione che una sessione può scrivere, e un credential helper o un filter driver indicato in uno di essi viene eseguito con i privilegi del tuo hook. Le impostazioni in quei file possono anche cambiare la destinazione di un push, qualunque remote tu indichi. Per le impostazioni git che il runner fissa nel tuo hook e quelle che lascia a quei file, consulta [Configurazione git all'interno degli hook del ciclo di vita](#git-configuration-inside-lifecycle-hooks).

192 232 

193<h4 id="hook-timing-when-the-runner-releases-a-session">233<h4 id="hook-timing-when-the-runner-releases-a-session">

194 Hook timing quando il runner rilascia una sessione234 Hook timing quando il runner rilascia una sessione


264| `CLAUDE_RUNNER_ORDER_ID` | Chiave di idempotenza opaca, unica per richiesta di spawn e sicura per i nomi delle risorse Kubernetes. Utilizzarla come chiave di dedup del provisioner. |304| `CLAUDE_RUNNER_ORDER_ID` | Chiave di idempotenza opaca, unica per richiesta di spawn e sicura per i nomi delle risorse Kubernetes. Utilizzarla come chiave di dedup del provisioner. |

265| `CLAUDE_RUNNER_SESSION_ID` | La sessione per cui è questa richiesta. Si ripete su ogni richiesta per la sessione, quindi utilizzarla per la registrazione e l'instradamento, non come chiave di dedup. Vuoto per le richieste di pre-warming, che avviano un runner standby prima di qualsiasi sessione specifica quando [`--min-idle`](/docs/it/self-hosted-environments-reference#orchestrator-cli-flags) è impostato, quindi non assumere che la variabile sia impostata. |305| `CLAUDE_RUNNER_SESSION_ID` | La sessione per cui è questa richiesta. Si ripete su ogni richiesta per la sessione, quindi utilizzarla per la registrazione e l'instradamento, non come chiave di dedup. Vuoto per le richieste di pre-warming, che avviano un runner standby prima di qualsiasi sessione specifica quando [`--min-idle`](/docs/it/self-hosted-environments-reference#orchestrator-cli-flags) è impostato, quindi non assumere che la variabile sia impostata. |

266| `CLAUDE_RUNNER_SESSION_UUID` | Lo stesso ID sessione nel modulo UUID canonico. Vuoto per le richieste di pre-warming. |306| `CLAUDE_RUNNER_SESSION_UUID` | Lo stesso ID sessione nel modulo UUID canonico. Vuoto per le richieste di pre-warming. |

267| `CLAUDE_RUNNER_ATTEMPT` | Quante richieste di spawn questa sessione ha avuto. `0` per le richieste di pre-warming. |307| `CLAUDE_RUNNER_ATTEMPT` | Un contatore per sessione da usare per i log. Non è un conteggio dei nuovi tentativi né delle richieste. `0` per le richieste di pre-warming, anche se pure una richiesta per una sessione può riportare `0`. |

268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Ora del server dalla risposta del poll header HTTP `Date`. Quando l'hook verifica l'`exp` del JWT dell'ordine di lavoro, confrontare rispetto a questo valore invece dell'orologio locale per tollerare lo skew. Vuoto quando il gateway ha omesso l'header. |308| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Ora del server dalla risposta del poll header HTTP `Date`. Quando l'hook verifica l'`exp` del JWT dell'ordine di lavoro, confrontare rispetto a questo valore invece dell'orologio locale per tollerare lo skew. Vuoto quando il gateway ha omesso l'header. |

269| `CLAUDE_RUNNER_POOL_ID` | L'ID dell'ambiente a cui il nuovo runner dovrebbe unirsi, nel modulo `ccpool_...` |309| `CLAUDE_RUNNER_POOL_ID` | L'ID dell'ambiente a cui il nuovo runner dovrebbe unirsi, nel modulo `ccpool_...` |

270| `CLAUDE_RUNNER_ACCOUNT_ID` | ID taggato dell'account che ha accodato la sessione, per l'instradamento per account, la quota o il chargeback. Vuoto quando non disponibile, e sempre vuoto per le sessioni del canale Claude Tag, che nessun account accoda. |310| `CLAUDE_RUNNER_ACCOUNT_ID` | ID taggato dell'account che ha accodato la sessione, per l'instradamento per account, la quota o il chargeback. Vuoto quando non disponibile, e sempre vuoto per le sessioni del canale Claude Tag, che nessun account accoda. |

271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email dell'account che ha accodato la sessione. Vuoto quando non disponibile. Trattare l'email come informazioni personali identificabili e non registrarla. |311| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email dell'account che ha accodato la sessione. Vuoto quando non disponibile. Trattare l'email come informazioni personali identificabili e non registrarla. |

272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL della prima fonte git della sessione, per l'instradamento a un runner con quel repository pre-riscaldato. Vuoto quando la sessione non ha fonti git. |312| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL della prima fonte git della sessione, per l'instradamento a un runner con quel repository pre-riscaldato. Vuoto quando la sessione non ha fonti git. |

273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisione della prima fonte git della sessione: ramo, SHA o tag. Vuoto quando non specificato. |313| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisione della prima fonte git della sessione: branch, SHA, tag o nome completo del riferimento. Vuoto quando non specificato. |

274| `CLAUDE_RUNNER_REPO_SOURCES` | Array JSON di `{url, revision}` per tutte le fonti git della sessione, per gli hook che instradano su un repository secondario. Vuoto quando non ci sono fonti. |314| `CLAUDE_RUNNER_REPO_SOURCES` | Array JSON di `{url, revision}` per tutte le fonti git della sessione, per gli hook che instradano su un repository secondario. Vuoto quando non ci sono fonti. |

275| `CLAUDE_RUNNER_CORRELATION_ID` | L'ID di correlazione fornito alla creazione della sessione, ripetuto in modo che l'hook possa mappare questo ordine di lavoro alla richiesta che ha creato la sessione. Vuoto quando la sessione non ne ha uno. |315| `CLAUDE_RUNNER_CORRELATION_ID` | L'ID di correlazione fornito alla creazione della sessione, ripetuto in modo che l'hook possa mappare questo ordine di lavoro alla richiesta che ha creato la sessione. Vuoto quando la sessione non ne ha uno. |

276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app`, `ios` o `scheduled_trigger`, per l'analisi dell'adozione. Non impostato quando la sessione non ha una superficie registrata o riconosciuta, e per le richieste di pre-warming; controllarlo con `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, che rimane sicuro sotto `set -u`. |316| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La superficie client che ha creato la sessione, come `web_claude_ai`, `desktop_app`, `ios` o `scheduled_trigger`, per l'analisi dell'adozione. Non impostato quando la sessione non ha una superficie registrata o riconosciuta, e per le richieste di pre-warming; controllarlo con `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, che rimane sicuro sotto `set -u`. |


282* **Utilizzare `--capacity 1` sui runner generati**: un ordine di lavoro legato alla sessione registra esattamente un runner legato a quella sessione, quindi una capacità più alta aggiunge slot che non ricevono mai lavoro, e il runner registra un avviso all'avvio.322* **Utilizzare `--capacity 1` sui runner generati**: un ordine di lavoro legato alla sessione registra esattamente un runner legato a quella sessione, quindi una capacità più alta aggiunge slot che non ricevono mai lavoro, e il runner registra un avviso all'avvio.

283* **Gli ordini di lavoro di pre-warming si registrano non legati**: il runner standby non è legato a una sessione e rivendica il lavoro in coda come un runner di flotta fissa.323* **Gli ordini di lavoro di pre-warming si registrano non legati**: il runner standby non è legato a una sessione e rivendica il lavoro in coda come un runner di flotta fissa.

284 324 

285Il contratto ha quattro regole agnostiche del provisioner:325Il contratto ha quattro regole, qualunque sia la piattaforma su cui il tuo hook esegue il provisioning:

286 326 

2871. **Essere idempotenti su `CLAUDE_RUNNER_ORDER_ID`.** La rielaborazione della stessa richiesta deve generare al massimo un runner. Derivare un nome di risorsa deterministico dall'ID e lasciare che la propria piattaforma rifiuti il duplicato. Non chiave su `CLAUDE_RUNNER_SESSION_ID` invece. Ogni richiesta per una sessione porta lo stesso ID sessione con un nuovo ID ordine, quindi un carico di lavoro denominato o deduplicato dall'ID sessione viene creato una volta e mai più per quella sessione.3271. **Essere idempotenti su `CLAUDE_RUNNER_ORDER_ID`.** La rielaborazione della stessa richiesta deve generare al massimo un runner. Derivare un nome di risorsa deterministico dall'ID e lasciare che la propria piattaforma rifiuti il duplicato. Non chiave su `CLAUDE_RUNNER_SESSION_ID` invece. Ogni richiesta per una sessione porta lo stesso ID sessione con un nuovo ID ordine, quindi un carico di lavoro denominato o deduplicato dall'ID sessione viene creato una volta e mai più per quella sessione.

2882. **Non ritentare il carico di lavoro.** Un ID ordine significa al massimo un carico di lavoro creato. Se il runner non si registra mai, Anthropic richiede con un ID ordine fresco dopo `--expected-spawn-seconds`.3282. **Non ritentare il carico di lavoro.** Un ID ordine significa al massimo un carico di lavoro creato. Se il runner non si registra mai, Anthropic richiede con un ID ordine fresco dopo `--expected-spawn-seconds`.

2893. **Utilizzare il contratto del codice di uscita.** Uscita 0 significa inviato. Uscita 1 significa fallimento ritentabile; la sessione si ritira e viene riottenuta. Uscita 2 o superiore significa non ritentabile; la sessione è bloccata dallo spawn di nuovo fino a quando un [Owner](/docs/it/cloud-environments#organization-shared-environments) non seleziona **Retry** su di essa nella scheda **Activity** dell'ambiente. Su uscita diversa da zero, la coda dello stderr dell'hook appare lì come motivo del fallimento, quindi scrivere l'errore azionabile su stderr e mai segreti. Per una richiesta di pre-warming non c'è sessione da fallire: l'orchestratore registra un'uscita diversa da zero localmente solo, e il server richiede di nuovo lo spawn dopo il lease.3293. **Usa il contratto del codice di uscita.** Esci con lo stato corrispondente all'esito:

2904. **Impostare `--expected-spawn-seconds` ad almeno il tempo di avvio p99.** Questo è il lease lato server. Tutte le repliche dell'orchestratore devono utilizzare lo stesso valore.330 

331 * **Uscita 0**: inviato.

332 * **Uscita 1**: errore che si può riprovare. La sessione attende e viene riproposta.

333 * **Uscita 2 o superiore**: errore che non si può riprovare. Alla sessione viene impedito un nuovo spawn finché un utente non le invia un nuovo messaggio o un [Owner](/docs/it/cloud-environments#organization-shared-environments) non seleziona **Retry** su di essa nella scheda **Activity** dell'ambiente.

334 

335 In caso di uscita diversa da zero, la parte finale dello stderr dell'hook appare nella scheda **Activity** come motivo dell'errore, quindi scrivi su stderr l'errore su cui si può intervenire e non scriverci mai segreti. In un hook shell, [mantieni riprovabili gli errori transitori](#keep-transient-failures-retryable-in-a-shell-hook).

336 

337 Una richiesta di pre-warming non ha una sessione da far fallire: l'orchestratore registra un'uscita diversa da zero solo localmente, e il server richiede di nuovo lo spawn dopo la scadenza del lease di `--expected-spawn-seconds`.

3384. **Imposta `--expected-spawn-seconds` ad almeno il tuo tempo p99 dalla richiesta di spawn alla registrazione del runner.** Misura a partire da quando l'orchestratore riceve la richiesta di spawn e includi sia l'eventuale attesa di capacità sulla tua piattaforma sia il tempo di avvio. Questo valore è il lease lato server, e l'ordine di lavoro scade insieme a esso, quindi un runner il cui carico di lavoro impiega più tempo non può registrarsi. Tutte le repliche dell'orchestratore devono utilizzare lo stesso valore.

291 339 

292Tutto ciò che l'hook scrive su stdout o stderr appare nel log dell'orchestratore con le credenziali automaticamente redatte. Se le sessioni rimangono in coda, controllare il corpo `/healthz` dell'orchestratore per i conteggi della coda, quindi aprire la scheda **Activity** dell'ambiente sulla [pagina di amministrazione **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): espandere una sessione fallita lì per il suo errore di spawn e selezionare **Retry** per richiederlo di nuovo.340Tutto ciò che l'hook scrive su stdout o stderr appare nel log dell'orchestratore con le credenziali automaticamente redatte. Se le sessioni rimangono in coda, controllare il corpo `/healthz` dell'orchestratore per i conteggi della coda, quindi aprire la scheda **Activity** dell'ambiente sulla [pagina di amministrazione **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): espandere una sessione fallita lì per il suo errore di spawn e selezionare **Retry** per richiederlo di nuovo.

293 341 

294Una sessione che rimane in coda senza errore di spawn nella scheda **Activity** può significare che l'hook è chiave sull'ID sessione. Per confermare, controllare se la propria piattaforma ha un carico di lavoro per la prima richiesta di spawn di quella sessione e nessuno per le richieste. Se così, chiave il carico di lavoro su `CLAUDE_RUNNER_ORDER_ID` invece.342Una sessione che rimane in coda senza errore di spawn nella scheda **Activity** può significare che l'hook è chiave sull'ID sessione. Per confermare, controllare se la propria piattaforma ha un carico di lavoro per la prima richiesta di spawn di quella sessione e nessuno per le richieste. Se così, chiave il carico di lavoro su `CLAUDE_RUNNER_ORDER_ID` invece.

295 343 

344<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

345 Mantieni riprovabili gli errori transitori in un hook shell

346</h4>

347 

348In un hook shell che usa `set -e`, un errore che un nuovo tentativo avrebbe potuto risolvere può bloccare la sessione. L'hook si ferma al comando che fallisce ed esce con lo stato di quel comando, e l'orchestratore applica il contratto del codice di uscita a quello stato. Molti errori restituiscono uno stato pari a 2 o superiore, come `127` quando un comando non è installato e `22` da `curl --fail` in caso di errore HTTP, quindi bloccano la sessione al primo errore.

349 

350Una sessione che l'hook ha già bloccato rimane bloccata finché un utente non le invia un nuovo messaggio o un [Owner](/docs/it/cloud-environments#organization-shared-environments) non seleziona **Retry** su di essa nella scheda **Activity** dell'ambiente.

351 

352Per trasformare invece un errore di questo tipo in uscita 1, inserisci queste righe subito sotto la riga `#!` dell'hook, prima di qualsiasi cosa possa fallire:

353 

354```bash theme={null}

355set -e

356PERMANENT=; permanent() { printf '%s\n' "$*" >&2; PERMANENT=1; exit 2; }

357trap 'rc=$?; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

358```

359 

360Queste righe cambiano il comportamento del resto dell'hook, quindi dopo averle aggiunte controlla l'hook per ciascuno di questi schemi:

361 

362* **`exit 2` o superiore isolato**: con il trap impostato, diventa uscita 1. Per un errore che nessun nuovo tentativo può risolvere, chiama invece `permanent` con il motivo, ad esempio `permanent "namespace claude-runners does not exist"`. Chiamalo nella shell principale, non all'interno di `$( )`, `( )` o di una pipe.

363* **`exec`**: non iniziare l'ultimo comando dell'hook con `exec`, perché `exec` sostituisce la shell e il trap non viene eseguito.

364* **Secondo trap `EXIT`**: un secondo `trap ... EXIT` sostituisce il primo, quindi unisci i due in un unico trap. Metti i tuoi comandi di pulizia subito dopo `rc=$?;` e termina ciascuno con `|| true;`. La pulizia viene quindi eseguita sia in caso di errore sia in caso di successo, e un comando di pulizia che fallisce non imposta lo stato di uscita dell'hook. Questo trap unificato mostra la struttura, con `your-cleanup-command` al posto del tuo comando:

365 

366 ```bash theme={null}

367 trap 'rc=$?; your-cleanup-command || true; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

368 ```

369* **Comandi a cui è consentito fallire**: se prima l'hook non usava `set -e`, ora si ferma al primo comando che restituisce un valore diverso da zero, come una ricerca che non trova nulla o un invio duplicato che la tua piattaforma rifiuta. Se l'hook agisce in base al risultato, rendi quel comando la condizione di un `if`. Se ne ignora il risultato, fai seguire il comando da `|| true`.

370 

371Per verificare che il trap funzioni, aggiungi subito sotto la riga `trap` una riga che chiama un comando inesistente, come `no-such-command`. Esegui il file dell'hook dalla tua shell e verifica che `echo $?` stampi `1`, quindi rimuovi la riga.

372 

296<h2 id="send-model-requests-to-bedrock-or-agent-platform">373<h2 id="send-model-requests-to-bedrock-or-agent-platform">

297 Inviare le richieste al modello a Bedrock o ad Agent Platform374 Inviare le richieste al modello a Bedrock o ad Agent Platform

298</h2>375</h2>


381Una sessione che invia le richieste al modello ad Amazon Bedrock o ad Agent Platform di Google Cloud differisce da una sessione sull'API di Anthropic nei seguenti modi:458Una sessione che invia le richieste al modello ad Amazon Bedrock o ad Agent Platform di Google Cloud differisce da una sessione sull'API di Anthropic nei seguenti modi:

382 459 

383* **Policy da claude.ai**: le [impostazioni gestite dal server](/docs/it/server-managed-settings) non raggiungono queste sessioni. Nemmeno le policy dell'organizzazione che un Owner imposta nelle impostazioni di amministrazione di Claude Code le raggiungono, quindi Claude Code non le applica all'interno della sessione. Inserisci le regole su cui fai affidamento nel [file delle impostazioni gestite](/docs/it/managed-settings#delivery-mechanisms) dell'immagine del runner.460* **Policy da claude.ai**: le [impostazioni gestite dal server](/docs/it/server-managed-settings) non raggiungono queste sessioni. Nemmeno le policy dell'organizzazione che un Owner imposta nelle impostazioni di amministrazione di Claude Code le raggiungono, quindi Claude Code non le applica all'interno della sessione. Inserisci le regole su cui fai affidamento nel [file delle impostazioni gestite](/docs/it/managed-settings#delivery-mechanisms) dell'immagine del runner.

461* **Skill dell'account**: queste sessioni non scaricano le skill abilitate per l'account claude.ai di una persona. Consulta [Come viene assemblata la configurazione di ogni sessione](#how-each-session’s-config-is-assembled).

384* **File**: i file che le persone allegano a una sessione in claude.ai o nell'app mobile o desktop non la raggiungono, e Claude non può inviare file indietro con lo [strumento `SendUserFile`](/docs/it/tools-reference). Inserisci invece i file di input nel repository o sul runner.462* **File**: i file che le persone allegano a una sessione in claude.ai o nell'app mobile o desktop non la raggiungono, e Claude non può inviare file indietro con lo [strumento `SendUserFile`](/docs/it/tools-reference). Inserisci invece i file di input nel repository o sul runner.

385* **Selezione del modello**: il control plane di Anthropic invia il modello di ogni sessione e, quando una sessione viene avviata senza un modello, Claude Code usa quello predefinito per il provider. Il runner rimuove `ANTHROPIC_MODEL` e `ANTHROPIC_DEFAULT_MODEL` dall'ambiente che passa alle sessioni. Gli esempi nelle pagine dei provider impostano `ANTHROPIC_MODEL`, ma nell'ambiente del runner nessuna delle due variabili ha effetto. Le variabili per famiglia descritte in Fissare le versioni dei modelli per [Amazon Bedrock](/docs/it/amazon-bedrock#4-pin-model-versions) e per [Agent Platform](/docs/it/google-vertex-ai#5-pin-model-versions) raggiungono invece le sessioni. Determinano a cosa si risolve un alias come `opus`, non a cosa si risolve un ID completo del modello.463* **Selezione del modello**: il control plane di Anthropic invia il modello di ogni sessione e, quando una sessione viene avviata senza un modello, Claude Code usa quello predefinito per il provider. Non puoi scegliere il modello con `ANTHROPIC_MODEL` o `ANTHROPIC_DEFAULT_MODEL` nell'ambiente del runner, ma puoi fissare a cosa si risolve un alias:

464 * **`ANTHROPIC_MODEL` e `ANTHROPIC_DEFAULT_MODEL`**: il runner le rimuove dall'ambiente che passa alle sessioni, anche se gli esempi nelle pagine dei provider impostano `ANTHROPIC_MODEL`.

465 * **Variabili per famiglia per fissare i modelli**: le variabili descritte in Fissare le versioni dei modelli per [Amazon Bedrock](/docs/it/amazon-bedrock#4-pin-model-versions) e per [Agent Platform](/docs/it/google-vertex-ai#5-pin-model-versions) raggiungono invece le sessioni. Determinano a cosa si risolve un alias come `opus`, non a cosa si risolve un ID completo del modello.

386* **Modelli non serviti dal tuo account**: una sessione può fallire su un messaggio con un errore che indica il modello. Abilita i modelli che i tuoi sviluppatori possono scegliere, il modello in background descritto in Fissare le versioni dei modelli e il modello del classificatore usato dalla [modalità auto](/docs/it/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). Su Amazon Bedrock, consenti ciascuno di essi nella tua policy.466* **Modelli non serviti dal tuo account**: una sessione può fallire su un messaggio con un errore che indica il modello. Abilita i modelli che i tuoi sviluppatori possono scegliere, il modello in background descritto in Fissare le versioni dei modelli e il modello del classificatore usato dalla [modalità auto](/docs/it/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). Su Amazon Bedrock, consenti ciascuno di essi nella tua policy.

387* **Ricerca web e modalità veloce**: la [ricerca web](/docs/it/tools-reference#websearch-tool-behavior) non è disponibile su Amazon Bedrock e la [modalità veloce](/docs/it/fast-mode) non è disponibile su nessuno dei due provider. Per altre funzionalità che variano in base al provider, consulta [Funzionalità della CLI che variano in base al provider](/docs/it/feature-availability#cli-capabilities-that-vary-by-provider).467* **Ricerca web e modalità veloce**: la [ricerca web](/docs/it/tools-reference#websearch-tool-behavior) non è disponibile su Amazon Bedrock e la [modalità veloce](/docs/it/fast-mode) non è disponibile su nessuno dei due provider. Per altre funzionalità che variano in base al provider, consulta [Funzionalità della CLI che variano in base al provider](/docs/it/feature-availability#cli-capabilities-that-vary-by-provider).

388 468 


411 491 

412Le sessioni ereditano l'ambiente del runner, quindi imposta lì [`ENABLE_TOOL_SEARCH`](/docs/it/mcp#scale-with-mcp-tool-search) per controllare la ricerca degli strumenti MCP per ogni sessione avviata da un runner; la pagina MCP descrive i valori.492Le sessioni ereditano l'ambiente del runner, quindi imposta lì [`ENABLE_TOOL_SEARCH`](/docs/it/mcp#scale-with-mcp-tool-search) per controllare la ricerca degli strumenti MCP per ogni sessione avviata da un runner; la pagina MCP descrive i valori.

413 493 

494<a id="connection-timing" />

495 

496<h3 id="wait-for-mcp-servers-before-the-first-turn">

497 Attendere i server MCP prima del primo turno

498</h3>

499 

500Una sessione self-hosted attende brevemente i server MCP che si stanno ancora connettendo, in due punti distinti. Un server che manca un'attesa ha i suoi strumenti assenti all'inizio del primo turno, e questi diventano disponibili in seguito senza alcun intervento da parte tua. Le due attese sono:

501 

502* **Avvio della sessione**: prima che l'elenco degli strumenti venga acquisito per la prima volta, la sessione attende per impostazione predefinita fino a 5 secondi un server HTTP o SSE la cui voce imposta [`alwaysLoad: true`](/docs/it/mcp#exempt-a-server-from-deferral), oppure tutti i server quando imposti [`MCP_CONNECTION_NONBLOCKING=0`](/docs/it/env-vars) nell'ambiente del runner. Altrimenti i server HTTP e SSE si connettono in background. Mentre la sessione attende qui, l'inizializzazione è più lenta. [`MCP_CONNECT_TIMEOUT_MS`](/docs/it/env-vars) modifica il valore predefinito di 5 secondi.

503* **Primo turno**: dopo l'arrivo del messaggio, il primo turno attende fino a 2 secondi i server stdio che si stanno ancora connettendo. Mentre la sessione attende qui, la prima risposta è più lenta. Per modificare la durata di questa attesa, imposta [`CLAUDE_CODE_MCP_STARTUP_WAIT_MS`](/docs/it/env-vars) nell'ambiente del runner. Non modifica quali server sono coperti dall'attesa. Richiede Claude Code v2.1.274 o successiva.

504 

505`claude mcp add` non ha un flag `alwaysLoad`. Per impostare la chiave, aggiungi invece il server con `claude mcp add-json`, che la accetta nel JSON del server e la scrive in `.claude.json`. Nel tuo Dockerfile:

506 

507```dockerfile theme={null}

508RUN claude mcp add-json core '{"type":"http","url":"https://mcp.example.com/mcp","alwaysLoad":true}' --scope user

509```

510 

511Se gli strumenti di un server non compaiono nemmeno nei turni successivi, verifica se il server ha effettivamente raggiunto la sessione, come descritto in [Server MCP](#mcp-servers).

512 

414<h3 id="turn-off-built-in-session-tools">513<h3 id="turn-off-built-in-session-tools">

415 Disattivare gli strumenti di sessione integrati514 Disattivare gli strumenti di sessione integrati

416</h3>515</h3>


572 671 

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

574 673 

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

675 

676* **Impostazioni di progetto**: un `.claude/settings.json` committato nel repository si sovrappone alla baseline a livello utente. In una sessione con più repository, [ha effetto al massimo il file di un solo repository](#repository-settings-in-sessions-with-several-repositories).

677* **Impostazioni gestite**: le sessioni leggono [`managed-settings.json`](/docs/it/settings#where-settings-live) dal percorso di sistema standard nella tua immagine del runner. Per sapere se le sue chiavi si applicano insieme alle [impostazioni gestite dal server](/docs/it/server-managed-settings), consulta [come Claude Code combina le fonti gestite](/docs/it/managed-settings#how-claude-code-combines-managed-sources).

678 

679Per l'ordine in cui si applicano queste fonti, consulta [precedenza delle impostazioni](/docs/it/settings#settings-precedence).

576 680 

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

578 682 


580* **Chi li crea**: il piano di controllo popola gli script da costanti fisse nella propria distribuzione, mai da input per sessione o di terze parti.684* **Chi li crea**: il piano di controllo popola gli script da costanti fisse nella propria distribuzione, mai da input per sessione o di terze parti.

581* **Cosa ancora li governa**: gli hook forniti attraverso `--settings` entrano nella configurazione ordinaria dell'hook unito, non nel livello gestito, quindi le impostazioni gestite si applicano ancora. `disableAllHooks` li disabilita, e non sono tra le categorie che [`allowManagedHooksOnly`](/docs/it/settings-reference#allowmanagedhooksonly) mantiene caricate.685* **Cosa ancora li governa**: gli hook forniti attraverso `--settings` entrano nella configurazione ordinaria dell'hook unito, non nel livello gestito, quindi le impostazioni gestite si applicano ancora. `disableAllHooks` li disabilita, e non sono tra le categorie che [`allowManagedHooksOnly`](/docs/it/settings-reference#allowmanagedhooksonly) mantiene caricate.

582 686 

687Quando una persona avvia una propria sessione, Claude Code scarica anche le [skill abilitate per il suo account claude.ai](/docs/it/skills#skills-in-cowork-and-cloud-sessions) nella directory di configurazione di quella sessione. L'esecuzione di una [routine](/docs/it/routines) non riceve le skill del suo proprietario, e una sessione che [invia le richieste al modello a Bedrock o Agent Platform](#send-model-requests-to-bedrock-or-agent-platform) non ne scarica alcuna. Per una skill di cui quelle sessioni hanno bisogno, fai il commit nella directory `.claude/skills/` del repository oppure aggiungila alla tua immagine del runner.

688 

583Al di fuori delle sessioni [Claude Tag](https://claude.com/docs/claude-tag/overview), una sessione in un ambiente self-hosted viene eseguita con la [memoria automatica](/docs/it/memory#auto-memory) disattivata per impostazione predefinita. Per le istruzioni che devono valere tra una sessione e l'altra, usa il `CLAUDE.md` nell'immagine del runner o nel repository.689Al di fuori delle sessioni [Claude Tag](https://claude.com/docs/claude-tag/overview), una sessione in un ambiente self-hosted viene eseguita con la [memoria automatica](/docs/it/memory#auto-memory) disattivata per impostazione predefinita. Per le istruzioni che devono valere tra una sessione e l'altra, usa il `CLAUDE.md` nell'immagine del runner o nel repository.

584 690 

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

Details

20 20 

21* **Container effimeri per sessione**: esegui ogni processo runner in un container o VM fresco che viene distrutto quando il processo esce, con `--capacity 1` e il valore predefinito `--drain-grace-sec 0` in modo che ogni container serva esattamente una sessione. A una capacità più alta, o con un drain grace positivo, un container serve più sessioni dallo stesso [owner bloccato](/docs/it/self-hosted-environments#key-concepts); vedi [Ciclo di vita del runner](/docs/it/self-hosted-environments#runner-lifecycle). Non riutilizzare un filesystem tra i riavvii del runner, tranne nella configurazione deliberata [pre-warmed checkout](#reuse-a-pre-warmed-checkout), e mai tra owner.21* **Container effimeri per sessione**: esegui ogni processo runner in un container o VM fresco che viene distrutto quando il processo esce, con `--capacity 1` e il valore predefinito `--drain-grace-sec 0` in modo che ogni container serva esattamente una sessione. A una capacità più alta, o con un drain grace positivo, un container serve più sessioni dallo stesso [owner bloccato](/docs/it/self-hosted-environments#key-concepts); vedi [Ciclo di vita del runner](/docs/it/self-hosted-environments#runner-lifecycle). Non riutilizzare un filesystem tra i riavvii del runner, tranne nella configurazione deliberata [pre-warmed checkout](#reuse-a-pre-warmed-checkout), e mai tra owner.

22 * <span id="processes-a-stopped-session-leaves" />Quando il runner arresta una sessione, non invia alcun segnale a un processo ancora in esecuzione dopo che il suo comando shell è terminato, come un servizio che si è demonizzato. Distruggere il container o la VM termina quel processo.22 * <span id="processes-a-stopped-session-leaves" />Quando il runner arresta una sessione, non invia alcun segnale a un processo ancora in esecuzione dopo che il suo comando shell è terminato, come un servizio che si è demonizzato. Distruggere il container o la VM termina quel processo.

23* **Nessuna credenziale ampia nell'immagine**: non includere chiavi SSH di lunga durata, credenziali del provider cloud, o token di accesso personale che concedono più di quanto una sessione necessita. Crea credenziali utilizzate durante una sessione, come token push o API, per sessione dal tuo [script wrapper](/docs/it/self-hosted-environments-configuration#wrapper-scripts). Per il clone iniziale, che avviene prima che lo script wrapper venga eseguito, usa un [`checkout` lifecycle hook](/docs/it/self-hosted-environments-configuration#checkout) o [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy); vedi [Configura git](#configure-git).23* **Nessuna credenziale ampia nell'immagine**: non includere chiavi SSH di lunga durata, credenziali del provider cloud, o token di accesso personale che concedono più di quanto una sessione necessita. Crea credenziali utilizzate durante una sessione, come token push o API, per sessione dal tuo [script wrapper](/docs/it/self-hosted-environments-configuration#wrapper-scripts). Il clone iniziale avviene prima che lo script wrapper venga eseguito, quindi gestiscilo con un [`checkout` lifecycle hook](/docs/it/self-hosted-environments-configuration#checkout), oppure con [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) quando tutti i repository di una sessione si trovano su github.com. Per entrambi, vedi [Configura git](#configure-git).

24* **Mantieni le credenziali GitHub dell'host lontane dalle sessioni**: Claude può usare qualsiasi credenziale GitHub che una sessione può leggere, con qualunque accesso quella credenziale conceda. Tieni le credenziali GitHub con ambito ampio dell'host runner fuori da qualsiasi cosa una sessione possa leggere. Una tale credenziale può essere un token di accesso personale, il token che `gh auth login` salva per il tuo account, o un `GH_TOKEN` nell'ambiente del runner.

25 * **Con [git gestito da Anthropic](#use-the-anthropic-git-proxy)**: con una tale credenziale, Claude raggiunge GitHub direttamente invece che tramite git gestito da Anthropic.

26 * **Senza git gestito da Anthropic**: una credenziale di clone può restare nell'immagine se ne limiti l'ambito in modo rigoroso come descritto in [Includi la configurazione git nella tua immagine](#ship-git-config-in-your-image).

24* **Mantieni il segreto dell'ambiente lontano dagli host che eseguono sessioni**: il segreto dell'ambiente può registrare runner e raccogliere qualsiasi sessione in coda sull'ambiente. Su una flotta fissa vive su ogni host runner, dove il codice di qualsiasi sessione può leggere il file segreto. Preferisci [runner on-demand](/docs/it/self-hosted-environments-configuration#on-demand-runners), dove il segreto rimane sull'host dell'orchestrator, che non esegue mai codice utente, e ogni runner riceve un ordine di lavoro monouso che registra esattamente un runner. Su una flotta fissa, tratta il file environment-secret come leggibile da ogni sessione e ruota il segreto dopo qualsiasi sospetto compromesso della sessione.27* **Mantieni il segreto dell'ambiente lontano dagli host che eseguono sessioni**: il segreto dell'ambiente può registrare runner e raccogliere qualsiasi sessione in coda sull'ambiente. Su una flotta fissa vive su ogni host runner, dove il codice di qualsiasi sessione può leggere il file segreto. Preferisci [runner on-demand](/docs/it/self-hosted-environments-configuration#on-demand-runners), dove il segreto rimane sull'host dell'orchestrator, che non esegue mai codice utente, e ogni runner riceve un ordine di lavoro monouso che registra esattamente un runner. Su una flotta fissa, tratta il file environment-secret come leggibile da ogni sessione e ruota il segreto dopo qualsiasi sospetto compromesso della sessione.

25* **Egress di rete default-deny**: limita il traffico in uscita del container runner e sessione al tuo confine di rete su ogni ambiente; [Default-deny egress](#default-deny-egress) copre cosa consentire e perché.28* **Egress di rete default-deny**: limita il traffico in uscita del container runner e sessione al tuo confine di rete su ogni ambiente; [Default-deny egress](#default-deny-egress) copre cosa consentire e perché.

26* **IAM host con privilegi minimi**: l'identità di calcolo allegata all'host runner, come un profilo di istanza o un account di servizio del nodo, dovrebbe concedere solo ciò di cui il runner stesso ha bisogno. Le sessioni dovrebbero ottenere le proprie credenziali attraverso il tuo script wrapper piuttosto che ereditare quelle dell'host.29* **IAM host con privilegi minimi**: l'identità di calcolo allegata all'host runner, come un profilo di istanza o un account di servizio del nodo, dovrebbe concedere solo ciò di cui il runner stesso ha bisogno. Le sessioni dovrebbero ottenere le proprie credenziali attraverso il tuo script wrapper piuttosto che ereditare quelle dell'host.


42 La guardia viene eseguita indipendentemente da [`--trust-workspace`](/docs/it/self-hosted-environments-reference#runner-cli-flags), e non copre gli hook del repository, `.mcp.json`, o le regole Bash; vedi [Permessi e approvazione degli strumenti](/docs/it/self-hosted-environments-configuration#permissions-and-tool-approval) per dove quelle concessioni appartengono.45 La guardia viene eseguita indipendentemente da [`--trust-workspace`](/docs/it/self-hosted-environments-reference#runner-cli-flags), e non copre gli hook del repository, `.mcp.json`, o le regole Bash; vedi [Permessi e approvazione degli strumenti](/docs/it/self-hosted-environments-configuration#permissions-and-tool-approval) per dove quelle concessioni appartengono.

43 46 

44<Note>47<Note>

45 L'allowlist IP della tua organizzazione non copre il traffico del runner self-hosted per impostazione predefinita. Non fare affidamento su di essa come controllo di rete per il traffico del runner o della sessione; applica invece default-deny egress al tuo confine di rete, e contatta il tuo team di account Anthropic se desideri l'applicazione dell'allowlist IP per la tua organizzazione.48 Se la tua organizzazione ha abilitato l'[allowlist IP](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting), aggiungi gli indirizzi di egress pubblici dei tuoi runner e dei container di sessione all'allowlist prima di avviarli. Se esegui [runner on-demand](/docs/it/self-hosted-environments-configuration#on-demand-runners), aggiungi anche l'indirizzo dell'host dell'orchestrator. Non fare affidamento sull'allowlist come controllo di rete per il traffico del runner o della sessione. Applica invece default-deny egress al tuo confine di rete.

46</Note>49</Note>

47 50 

48<h2 id="network-requirements">51<h2 id="network-requirements">


55 58 

56| Host | Porta | Utilizzato per |59| Host | Porta | Utilizzato per |

57| :- | :- | :- |60| :- | :- | :- |

58| `api.anthropic.com` | 443, HTTPS; WSS solo per il connettore SCM | Piano di controllo del runner e streaming della sessione, inferenza del modello, flag delle funzionalità, analitiche dei prodotti, recuperi della chiave [JWKS](/docs/it/self-hosted-environments-identity), firma dei commit, il proxy git quando `--use-anthropic-git-proxy` è impostato, e il tunnel [SCM connector](/docs/it/self-hosted-environments-reference#scm-connector-flags) dell'orchestrator quando `--scm-connector-host` è impostato |61| `api.anthropic.com` | 443, HTTPS; WSS per il [git gestito da Anthropic](#use-the-anthropic-git-proxy) | Piano di controllo del runner e streaming della sessione, inferenza del modello, flag delle funzionalità, analitiche dei prodotti, recuperi della chiave [JWKS](/docs/it/self-hosted-environments-identity), firma dei commit e git gestito da Anthropic quando `--use-anthropic-git-proxy` è impostato |

59| Il tuo host git, come `github.com` o il tuo host GitHub Enterprise | 443 o 22 | Clonazione e push dei repository. Non necessario se il runner usa `--use-anthropic-git-proxy`, che instrada il traffico git attraverso `api.anthropic.com`. |62| Il tuo host git, come `github.com` o il tuo host GitHub Enterprise | 443 o 22 | Clonazione e push dei repository su ogni host git usato dalle sessioni del runner. Su un runner che usa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), vedi [quando il percorso `github.com` è ancora necessario](#github-com-egress-with-the-anthropic-git-proxy). |

63 

64<span id="github-com-egress-with-the-anthropic-git-proxy" />Un runner che usa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) instrada il suo traffico git verso `github.com` attraverso `api.anthropic.com`, quindi non ha bisogno del percorso dell'host git per `github.com`. Ne ha comunque bisogno se imposti `--push-outcome-on-release` o esegui il push da un hook `post-session`.

60 65 

61Se questi host sono necessari dipende dalla tua configurazione:66Se questi host sono necessari dipende dalla tua configurazione:

62 67 


71| `browser-intake-us5-datadoghq.com` | 443 | Caricamenti di rapporti di errore di Anthropic, inviati solo quando la [segnalazione di errori](/docs/it/data-usage#telemetry-services) è abilitata per l'account della sessione. Soppressa da `DISABLE_ERROR_REPORTING=1` o `DISABLE_TELEMETRY=1`. |76| `browser-intake-us5-datadoghq.com` | 443 | Caricamenti di rapporti di errore di Anthropic, inviati solo quando la [segnalazione di errori](/docs/it/data-usage#telemetry-services) è abilitata per l'account della sessione. Soppressa da `DISABLE_ERROR_REPORTING=1` o `DISABLE_TELEMETRY=1`. |

72| Gli endpoint del tuo provider cloud per le richieste al modello, le ricerche dei modelli e il rinnovo delle credenziali, come `bedrock-runtime.us-east-1.amazonaws.com` o `aiplatform.googleapis.com` | 443 | Solo quando il runner [invia richieste al modello ad Amazon Bedrock o ad Agent Platform di Google Cloud](/docs/it/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |77| Gli endpoint del tuo provider cloud per le richieste al modello, le ricerche dei modelli e il rinnovo delle credenziali, come `bedrock-runtime.us-east-1.amazonaws.com` o `aiplatform.googleapis.com` | 443 | Solo quando il runner [invia richieste al modello ad Amazon Bedrock o ad Agent Platform di Google Cloud](/docs/it/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |

73 78 

74Il runner non raggiunge `statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, o `platform.claude.com`. Questi host appaiono in alcuni elenchi di controllo di rete enterprise più vecchi, ma non è necessario aggiungerli alla lista di indirizzi consentiti per il traffico del runner o della sessione: i recuperi dei flag delle funzionalità vanno a `api.anthropic.com`, e il runner si autentica con il segreto dell'ambiente piuttosto che con OAuth interattivo. Due flussi lato host raggiungono `claude.ai`, quindi eseguili da un host il cui egress lo consente piuttosto che ampliare l'egress del container della sessione: il programma di installazione a una riga recupera `install.sh` da `claude.ai` al momento dell'installazione, e il `claude auth login` interattivo, che la [configurazione guidata](/docs/it/self-hosted-environments-quickstart#set-up-an-environment-and-runner), la modalità firmata di `doctor`, e il [dispatch da CI](/docs/it/self-hosted-environments-testing#authenticate-from-ci) usano, accede attraverso `claude.ai`, `claude.com`, e `platform.claude.com`. `mcp-proxy.anthropic.com` non è richiesto neanche: le sessioni self-hosted non lo usano, e la consegna dei tuoi connettori claude.ai dell'organizzazione alle sessioni, quando abilitata per la tua organizzazione, viene instradata attraverso `api.anthropic.com`. Vedi [Server MCP](/docs/it/self-hosted-environments-configuration#mcp-servers).79Non è necessario aggiungere questi host all'allowlist per il traffico del runner o della sessione:

80 

81* **`statsig.anthropic.com`, `*.sentry.io`, `claude.ai` e `platform.claude.com`**: questi host appaiono in alcuni elenchi di controllo di rete enterprise più vecchi, ma il runner non li raggiunge. I recuperi dei flag delle funzionalità vanno a `api.anthropic.com`, e il runner si autentica con il segreto dell'ambiente piuttosto che con OAuth interattivo.

82* **`mcp-proxy.anthropic.com`**: le sessioni self-hosted non lo usano. Quando la consegna dei connettori è abilitata per la tua organizzazione, i connettori claude.ai della tua organizzazione raggiungono le sessioni attraverso `api.anthropic.com`. Vedi [Server MCP](/docs/it/self-hosted-environments-configuration#mcp-servers).

83 

84Questi flussi lato host raggiungono invece `claude.ai`, quindi eseguili da un host il cui egress lo consente piuttosto che ampliare l'egress del container della sessione:

85 

86* **Il programma di installazione a una riga**: recupera `install.sh` da `claude.ai` al momento dell'installazione.

87* **`claude auth login` interattivo**: accede attraverso `claude.ai`, `claude.com` e `platform.claude.com`. La [configurazione guidata](/docs/it/self-hosted-environments-quickstart#run-the-guided-setup), la modalità con accesso di `doctor` e il [dispatch da CI](/docs/it/self-hosted-environments-testing#authenticate-from-ci) lo usano. Il browser con cui accedi carica anche i controlli del browser della pagina di accesso di claude.ai da `hcaptcha.com`, `*.hcaptcha.com` e `challenges.cloudflare.com`.

75 88 

76<h3 id="default-deny-egress">89<h3 id="default-deny-egress">

77 Default-deny egress90 Default-deny egress


127* **Lascia che il runner configuri git**: avvia il runner con `--configure-git` per fargli scrivere la stessa identità e configurazione di firma dei commit che usano le sessioni ospitate da Anthropic140* **Lascia che il runner configuri git**: avvia il runner con `--configure-git` per fargli scrivere la stessa identità e configurazione di firma dei commit che usano le sessioni ospitate da Anthropic

128* **Spedisci la configurazione git nella tua immagine**: imposta l'identità e le credenziali push tu stesso, ad esempio per eseguire il commit sotto la tua identità bot141* **Spedisci la configurazione git nella tua immagine**: imposta l'identità e le credenziali push tu stesso, ad esempio per eseguire il commit sotto la tua identità bot

129 142 

143Per i repository su github.com, puoi anche avviare il runner con [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), o impostare `CLAUDE_RUNNER_USE_GIT_PROXY=1`, per chiedere ad Anthropic di servire git per le sessioni del runner.

144 

130Piani minimi di versione git sull'host runner: [`--configure-git`](#let-the-runner-configure-git) la firma dei commit SSH richiede Git 2.34 o più recente, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) richiede 2.32 o più recente, e la ripresa delle sessioni da rami spinti da [`--push-outcome-on-release`](/docs/it/self-hosted-environments-reference#runner-cli-flags) richiede 2.29 o più recente. Git 2.24 è sufficiente se ometti tutti e tre e gestisci l'identità git tu stesso.145Piani minimi di versione git sull'host runner: [`--configure-git`](#let-the-runner-configure-git) la firma dei commit SSH richiede Git 2.34 o più recente, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) richiede 2.32 o più recente, e la ripresa delle sessioni da rami spinti da [`--push-outcome-on-release`](/docs/it/self-hosted-environments-reference#runner-cli-flags) richiede 2.29 o più recente. Git 2.24 è sufficiente se ometti tutti e tre e gestisci l'identità git tu stesso.

131 146 

132<h3 id="let-the-runner-configure-git">147<h3 id="let-the-runner-configure-git">


138* `user.name = Claude` e `user.email = noreply@anthropic.com`, corrispondendo alle sessioni ospitate da Anthropic153* `user.name = Claude` e `user.email = noreply@anthropic.com`, corrispondendo alle sessioni ospitate da Anthropic

139* Firma dei commit e dei tag in formato SSH, instradata attraverso uno shim gestito dal runner che firma ogni commit tramite il servizio di firma di Anthropic usando le credenziali della sessione stessa. Le firme sono verificabili su GitHub rispetto alla chiave di firma SSH pubblicata di Anthropic.154* Firma dei commit e dei tag in formato SSH, instradata attraverso uno shim gestito dal runner che firma ogni commit tramite il servizio di firma di Anthropic usando le credenziali della sessione stessa. Le firme sono verificabili su GitHub rispetto alla chiave di firma SSH pubblicata di Anthropic.

140* `push.negotiate = true`, in modo che git chieda al tuo host git quali commit ha già prima di impacchettare un push. Richiede Claude Code v2.1.257 o successivo.155* `push.negotiate = true`, in modo che git chieda al tuo host git quali commit ha già prima di impacchettare un push. Richiede Claude Code v2.1.257 o successivo.

141* `core.hooksPath` che punta a una directory di hook gestita dal runner. I suoi hook `commit-msg` e `prepare-commit-msg` aggiungono un trailer `Co-authored-by:` per il creatore della sessione a ogni commit, costruito dall'email in [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/it/self-hosted-environments-configuration#wrapper-scripts) e omesso quando quella variabile non è impostata. Se la tua immagine imposta già `core.hooksPath`, il runner lascia la tua impostazione in posizione, salta l'installazione di questi hook, e stampa un avviso `[runner:git]`.156* `core.hooksPath` che punta a una directory di hook gestita dal runner. I suoi hook `commit-msg` e `prepare-commit-msg` aggiungono a ogni commit un trailer `Co-authored-by:` per il creatore della sessione. Il trailer è costruito dall'email in [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/it/self-hosted-environments-configuration#wrapper-scripts) e omesso quando quella variabile non è impostata. Se la tua immagine imposta già `core.hooksPath` e il runner non usa [git gestito da Anthropic](#use-the-anthropic-git-proxy), il runner mantiene la tua impostazione, salta l'installazione di questi hook e stampa un avviso `[runner:git]`.

142 157 

143La firma dei commit richiede git 2.34 o più recente; il runner controlla all'avvio e esce con un errore se il tuo git è più vecchio. Questo flag non configura le credenziali push, che fornisci comunque nell'immagine.158La firma dei commit richiede git 2.34 o più recente; il runner controlla all'avvio e esce con un errore se il tuo git è più vecchio. Questo flag non configura le credenziali push, che fornisci comunque nell'immagine.

144 159 

145Su un runner con v2.1.280 o successivo, anche i commit che fai da un lifecycle hook `checkout` o `post-session` vengono firmati come la sessione, senza il trailer `Co-authored-by:`. [Configurazione git all'interno dei lifecycle hook](/docs/it/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) descrive le impostazioni git che il runner fissa all'interno di quegli hook.160Su un runner con v2.1.280 o successivo, anche i commit che fai da un lifecycle hook `checkout` o `post-session` vengono firmati come la sessione, senza il trailer `Co-authored-by:`. [Configurazione git all'interno dei lifecycle hook](/docs/it/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) descrive le impostazioni git che il runner fissa all'interno di quegli hook.

146 161 

162Con o senza `--configure-git`, Claude Code istruisce Claude a terminare i suoi messaggi di commit con un trailer `Claude-Session: <url>` e le descrizioni delle sue pull request con l'URL della sessione. Per ometterli entrambi, imposta [`attribution.sessionUrl`](/docs/it/settings-reference#attribution-sessionurl) su `false` nel file [`~/.claude/settings.json`](/docs/it/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) dell'host runner, quindi riavvia il runner.

163 

147<h3 id="ship-git-config-in-your-image">164<h3 id="ship-git-config-in-your-image">

148 Spedisci la configurazione git nella tua immagine165 Spedisci la configurazione git nella tua immagine

149</h3>166</h3>


186 Usa il proxy git di Anthropic203 Usa il proxy git di Anthropic

187</h3>204</h3>

188 205 

189Avvia il runner con `--use-anthropic-git-proxy`, o imposta `CLAUDE_RUNNER_USE_GIT_PROXY=1`, per fargli clonare attraverso il proxy git di Anthropic, autenticato con il token a breve durata della sessione stessa. Per le sessioni utente ordinarie, il proxy usa il token OAuth di GitHub o GitHub Enterprise memorizzato per il creatore della sessione; per le sessioni bot e agente, usa il token di installazione dell'app GitHub della tua organizzazione. In entrambi i casi, l'immagine del runner non ha bisogno di credenziali git: nessuna chiave SSH, nessun credential helper, nessun `.netrc`. Questo è lo stesso percorso di autenticazione che usano gli ambienti ospitati da Anthropic.206Con il proxy git di Anthropic, chiamato anche git gestito da Anthropic, l'immagine del runner non ha bisogno di chiavi SSH, credential helper, `.netrc` o altre credenziali git per la sessione stessa. Invece, il runner chiede ad Anthropic di servire git per le sue sessioni. Per una sessione utente servita da Anthropic, il clone del runner e i fetch e i push della sessione stessa passano attraverso Anthropic, che usa il token OAuth di GitHub memorizzato per il creatore della sessione. [Come Anthropic serve git per una sessione](#how-anthropic-serves-git-for-a-session) tratta le sessioni bot e agente.

207 

208Il proxy git è disattivato a meno che tu non lo [attivi](#turn-the-anthropic-git-proxy-on). Un runner che raggiunge il tuo host git con le proprie credenziali non ne ha bisogno, e il suo git funziona con qualsiasi host git.

209 

210In cambio, il proxy git limita ciò che il runner supporta e cambia ciò di cui ha bisogno:

211 

212* **Solo github.com**: Anthropic serve una sessione solo quando tutti i suoi repository sono su github.com, e il proxy git non supporta ancora GitHub Enterprise Server. Su un runner con il proxy git, una sessione con un repository su un altro host git [non riesce ad avviarsi](#when-anthropic-doesnt-serve-a-session).

213* **Credenziali solo per i repository della sessione**: Anthropic fornisce le credenziali git per i repository che fanno parte della sessione, non per altri repository sullo stesso host git. Un submodule privato, una dipendenza che il tuo package manager recupera con git o un marketplace di plugin in un altro repository non ricevono alcuna credenziale da Anthropic. Chiedi alle persone che creano le sessioni di [aggiungere ogni repository](/docs/it/web-quickstart#start-a-task) di cui una sessione ha bisogno al momento della creazione.

214* **Solo push di branch**: un push che elimina un branch fallisce, così come un push verso qualsiasi altro tipo di ref, come un tag. Per sapere quali branch un push può aggiornare, vedi [Proxy GitHub](/docs/it/cloud-environments#github-proxy).

215* **Account GitHub collegati**: la persona che ha creato una sessione utente deve aver collegato GitHub su claude.ai, altrimenti la sessione [non si avvia](#creator-has-no-github-connection).

216* **`--capacity 1`**: il proxy git richiede una sessione per processo runner, quindi esegui più repliche per il parallelismo. [Attiva il proxy git di Anthropic](#turn-the-anthropic-git-proxy-on) elenca i requisiti.

217* **Configurazione git globale sostituita**: il runner [elimina e sostituisce la configurazione git globale](#git-proxy-replaces-global-git-config) dell'utente con cui viene eseguito. Eseguilo come utente dedicato o in un container.

218* **Credenziali dell'host per i push dell'host**: il push di [`--push-outcome-on-release`](/docs/it/self-hosted-environments-reference#runner-cli-flags) del runner e qualsiasi push effettuato dal tuo [hook `post-session`](/docs/it/self-hosted-environments-configuration#post-session) usano comunque le credenziali git dell'host runner e il suo [percorso di rete verso `github.com`](#github-com-egress-with-the-anthropic-git-proxy). Per quelle credenziali, vedi [Spedisci la configurazione git nella tua immagine](#ship-git-config-in-your-image).

219* **Decisione per sessione**: Anthropic decide per ogni sessione sul runner se servire il suo git, e una sessione che non serve non riesce ad avviarsi. [Quando le sessioni non riescono ad avviarsi su un runner con il proxy git](#when-anthropic-doesnt-serve-a-session) ne illustra le cause.

220 

221<span id="git-proxy-replaces-global-git-config" />

222 

223<Warning>

224 Con `--use-anthropic-git-proxy` impostato, il runner elimina e sostituisce la configurazione git globale dell'utente con cui viene eseguito, senza conservarne un backup. Lo fa all'avvio e prima di ogni sessione. Un login o un credential helper che tenevi lì va perso. Le impostazioni scritte da [`--configure-git`](#let-the-runner-configure-git) vengono mantenute. Esegui il runner come utente dedicato o in un container, mai con il tuo utente.

225</Warning>

226 

227Mantieni le impostazioni git non segrete, come l'identità e `safe.directory`, nella configurazione git di sistema.

228 

229<h4 id="turn-the-anthropic-git-proxy-on">

230 Attiva il proxy git di Anthropic

231</h4>

232 

233Prima di avviare il runner con `--use-anthropic-git-proxy`, verifica che l'host runner soddisfi ciascuno di questi requisiti. Il runner rifiuta di avviarsi quando il requisito di capacità o quello di git non è soddisfatto:

190 234 

191Il proxy richiede `--capacity 1` perché l'URL del proxy è per sessione, e git 2.32 o più recente perché git più vecchio ignora il meccanismo di configurazione che il proxy usa per isolare le sessioni l'una dall'altra. Il runner rifiuta di avviarsi se uno dei due requisiti non è soddisfatto. Poiché il proxy recupera dal lato di Anthropic, il tuo host git deve essere raggiungibile dall'infrastruttura di Anthropic, lo stesso requisito che hanno le sessioni ospitate da Anthropic; per un host git che è solo instradabile all'interno della tua rete, usa un [`checkout` lifecycle hook](/docs/it/self-hosted-environments-configuration#checkout) invece. Ogni processo runner gestisce una sessione alla volta, quindi esegui più repliche per il parallelismo. Quando il proxy è abilitato, `--git-host-rewrite` e `--git-ssh-rewrite` non hanno effetto: l'URL del proxy punta a `api.anthropic.com`, non al tuo host git.235* **Claude Code v2.1.267 o successivo**: le versioni precedenti accettano il flag ma non segnalano la richiesta ad Anthropic di servire git né stampano la riga `Registering as opted in`, quindi Anthropic non serve le loro sessioni.

236* **`--capacity 1`, il valore predefinito**: ogni processo runner gestisce una sessione alla volta, quindi esegui più repliche per il parallelismo.

237* **Git 2.32 o più recente**: git più vecchio ignora la configurazione git per sessione che il runner imposta per il proxy git.

192 238 

193<Warning>239<Warning>

194 Le ricette [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) su questa pagina usano `--capacity 4`. Se aggiungi `--use-anthropic-git-proxy` o `CLAUDE_RUNNER_USE_GIT_PROXY=1` a una di esse senza cambiare la capacità a `1`, il runner esce all'avvio ogni volta che il tuo orchestrator lo riavvia. Imposta `--capacity 1` ed esegui più repliche per il parallelismo. [Quando il runner esce](#when-the-runner-exits) mostra la riga che il runner stampa.240 Le ricette [Kubernetes](#kubernetes) e [Docker Compose](#docker-compose) su questa pagina usano `--capacity 4`. Se aggiungi `--use-anthropic-git-proxy` o `CLAUDE_RUNNER_USE_GIT_PROXY=1` a una di esse senza cambiare la capacità a `1`, il runner esce all'avvio ogni volta che il tuo orchestrator lo riavvia. Imposta `--capacity 1` ed esegui più repliche per il parallelismo. [Quando il runner esce](#when-the-runner-exits) mostra la riga che il runner stampa.

195</Warning>241</Warning>

196 242 

197Il runner segnala anche l'opt-in ad Anthropic quando si registra, stampando `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)` all'avvio. La segnalazione dell'opt-in richiede Claude Code v2.1.267 o successivo, e le versioni precedenti accettano il flag senza segnalarlo o stampare quella riga. Ogni sessione su un runner con opt-in usa quindi o git gestito da Anthropic o l'URL del proxy per sessione. Quando una sessione usa l'URL del proxy per sessione, il runner registra una riga `[runner:warn]` dicendo così.243Per attivare il proxy git, aggiungi `--use-anthropic-git-proxy` al comando del runner, oppure imposta `CLAUDE_RUNNER_USE_GIT_PROXY=1` nell'ambiente del runner. Questo comando, eseguito in una shell sull'host runner, avvia il runner della [guida rapida](/docs/it/self-hosted-environments-quickstart#set-up-manually) con il proxy git attivo:

244 

245```bash theme={null}

246claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>' --use-anthropic-git-proxy

247```

248 

249All'avvio, il runner stampa `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)`. Anthropic decide quindi per ogni sessione su quel runner se servire il suo git. Per ogni sessione che serve, il runner registra una riga `[runner:session]` contenente `governed git ACTIVE`. Se invece una sessione non riesce ad avviarsi, vedi [Quando le sessioni non riescono ad avviarsi su un runner con il proxy git](#when-anthropic-doesnt-serve-a-session).

250 

251<h4 id="how-anthropic-serves-git-for-a-session">

252 Come Anthropic serve git per una sessione

253</h4>

254 

255Per una sessione servita da Anthropic, il clone del runner e i fetch e i push della sessione stessa passano attraverso Anthropic, autenticati con il token a breve durata della sessione stessa:

256 

257* **Sessioni utente**: Anthropic usa il token OAuth di GitHub memorizzato per il creatore della sessione.

258* **Sessioni bot e agente**: Anthropic usa il token di installazione della GitHub App della tua organizzazione.

259* **Riscritture degli URL**: `--git-host-rewrite` e `--git-ssh-rewrite` non hanno effetto su un repository servito dal proxy git.

260 

261<h4 id="when-anthropic-doesnt-serve-a-session">

262 Quando le sessioni non riescono ad avviarsi su un runner con il proxy git

263</h4>

264 

265Su un runner avviato con `--use-anthropic-git-proxy`, una sessione non riesce ad avviarsi quando Anthropic non serve il suo git. Cerca nel log del runner un errore git che nomina un indirizzo `api.anthropic.com` contenente `/git_proxy/`.

266 

267Per ogni sessione, un runner con Claude Code v2.1.267 o successivo registra anche una riga `[runner:session]` contenente `governed git ACTIVE` quando Anthropic serve il git della sessione, oppure una riga `[runner:warn]` contenente `the server withheld Anthropic-managed git for this session` quando non lo fa. Trova la riga che vedi tra questi casi:

268 

269* **Né `governed git ACTIVE` né la riga `withheld`**: un runner precedente a Claude Code v2.1.267 non registra nessuna delle due righe, e Anthropic non serve le sue sessioni. Aggiorna il runner a v2.1.267 o successivo seguendo [Fissa la versione](#pin-the-version).

270* **La riga `withheld`**: Anthropic non ha servito la sessione. Un runner che prima funzionava con il proxy git può fallire in questo modo senza alcuna modifica da parte tua.

271 * **Un repository non è su github.com**: una sessione con anche un solo repository su un altro host git, come GitHub Enterprise Server, non viene servita, compresi i suoi repository su github.com. [Disattiva il proxy git di Anthropic](#turn-the-anthropic-git-proxy-off) per i runner di quell'ambiente.

272 * **Tutti i repository sono su github.com**: segnala il problema al [tuo team di account Anthropic](#report-an-issue) con l'ID della sessione dalla riga `withheld`. Anthropic registra il motivo dal proprio lato.

273* **Una riga contenente `remote: access denied by the git proxy`**: una sessione servita da Anthropic può comunque essere rifiutata, ad esempio quando la policy dell'organizzazione nega l'accesso git per la sessione, o la sessione non è autorizzata per il repository. Il log del runner mostra allora una riga contenente `remote: access denied by the git proxy`, e il resto di quella riga ne indica il motivo.

274* <span id="creator-has-no-github-connection" />**`GitHub authentication required`**: compare quando il creatore della sessione non ha una connessione GitHub funzionante su claude.ai. Il clone della sessione fallisce e l'errore git riporta `GitHub authentication required. Please reconnect your GitHub account.` Chiedi a quella persona di collegare o ricollegare GitHub nelle sue impostazioni di claude.ai.

275 

276Dopo aver corretto la causa, avvia di nuovo le sessioni non riuscite.

277 

278<h4 id="turn-the-anthropic-git-proxy-off">

279 Disattiva il proxy git di Anthropic

280</h4>

281 

282Se le sessioni in un ambiente usano un repository su un host git diverso da github.com, come GitHub Enterprise Server, disattiva `--use-anthropic-git-proxy` per i runner di quell'ambiente.

283 

284<Steps>

285 <Step title="Rimuovi il flag">

286 Rimuovi `--use-anthropic-git-proxy` dal comando del runner. Se hai impostato `CLAUDE_RUNNER_USE_GIT_PROXY` nell'ambiente del runner, ad esempio in una pod spec o in un file Compose, rimuovila da lì. In una shell, annulla la sua impostazione:

287 

288 ```bash theme={null}

289 unset CLAUDE_RUNNER_USE_GIT_PROXY

290 ```

291 </Step>

292 

293 <Step title="Fornisci al runner le credenziali git">

294 Fornisci credenziali che funzionino senza un prompt per ogni host git usato dalle sessioni dei runner, github.com compreso. Qualsiasi credenziale presente nella configurazione git globale dell'utente del runner non c'è più, perché il runner ha eliminato quella configurazione mentre `--use-anthropic-git-proxy` era impostato. [Spedisci le credenziali nella tua immagine](#ship-git-config-in-your-image) o usa un [lifecycle hook `checkout`](/docs/it/self-hosted-environments-configuration#checkout).

295 </Step>

296 

297 <Step title="Apri il percorso di rete">

298 Consenti al runner di raggiungere ogni host git usato dalle sessioni dei runner sulla porta 443 o 22. Vedi la riga dell'host git in [Requisiti di rete](#network-requirements).

299 </Step>

300 

301 <Step title="Riavvia i runner">

302 Riavvia i runner in modo che si registrino senza il proxy git. Quindi avvia di nuovo ogni sessione non riuscita.

303 </Step>

304</Steps>

198 305 

199<h4 id="github-api-access-without-the-github-cli">306<h4 id="github-api-access-without-the-github-cli">

200 Accesso all'API di GitHub senza la GitHub CLI307 Accesso all'API di GitHub senza la GitHub CLI


266```dockerfile theme={null}373```dockerfile theme={null}

267FROM debian:bookworm-slim374FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION375ARG CLAUDE_CODE_VERSION

269RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client \376RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq \

270 && rm -rf /var/lib/apt/lists/*377 && rm -rf /var/lib/apt/lists/*

271RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \378RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \

272 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude379 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners489kubectl create namespace claude-runners

383```490```

384 491 

385Crea il Secret di supporto da un file locale che contiene il valore che hai copiato nel passaggio [**Copy environment key**](/docs/it/self-hosted-environments-quickstart#set-up-an-environment-and-runner) dell'interfaccia utente di amministrazione, in modo che il segreto non appaia mai nella tua cronologia della shell. Esegui `(umask 077 && cat > ./environment-secret)`, incolla il segreto, premi Invio, quindi Ctrl-D. Quindi crea il Secret e cancella il file:492Crea il Secret di supporto da un file locale che contiene il valore che hai copiato nel passaggio [**Copy environment key**](/docs/it/self-hosted-environments-quickstart#set-up-manually) dell'interfaccia utente di amministrazione, in modo che il segreto non appaia mai nella tua cronologia della shell. Esegui `(umask 077 && cat > ./environment-secret)`, incolla il segreto, premi Invio, quindi Ctrl-D. Quindi crea il Secret e cancella il file:

386 493 

387```bash theme={null}494```bash theme={null}

388kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret495kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret


500 Riutilizza un checkout pre-riscaldato607 Riutilizza un checkout pre-riscaldato

501</h2>608</h2>

502 609 

503Per i repository grandi, il clone può dominare l'avvio della sessione. A `--capacity 1` senza un [`checkout` hook](/docs/it/self-hosted-environments-configuration#checkout), il runner mantiene un clone canonico per repository a `<base-dir>/<repo-owner>/<repo>` e lo riutilizza tra le sessioni: recupera il ref richiesto, stacca `HEAD`, e lo resetta duramente, il che è quasi istantaneo quando poco è cambiato. Per saltare il clone freddo, fornisci il clone in uno di due modi:610Per i repository grandi, il clone può dominare l'avvio della sessione. Per saltare il clone freddo, fornisci tu stesso un clone al percorso in cui il runner mantiene il proprio. Senza un [`checkout` hook](/docs/it/self-hosted-environments-configuration#checkout), il runner mantiene un clone canonico per repository a `<base-dir>/<repo-owner>/<repo>` e lo riutilizza tra le sessioni:

611 

612* **A `--capacity 1`**: il runner recupera il ref richiesto, stacca `HEAD` e lo resetta duramente, il che è quasi istantaneo quando poco è cambiato.

613* **A una `--capacity` superiore a uno**: il runner esegue il fetch in quel clone, quindi estrae da esso un worktree separato per ogni sessione. Un clone pre-riscaldato fa risparmiare il download ma non il checkout.

614 

615Fornisci il clone nell'immagine o su un volume persistente:

504 616 

505* **Clone nell'immagine**: costruisci il clone nella tua immagine runner a quel percorso. Ogni container fresco inizia quindi con il clone caldo senza riutilizzare un disco.617* **Clone nell'immagine**: costruisci il clone nella tua immagine runner a quel percorso. Ogni container fresco inizia quindi con il clone caldo senza riutilizzare un disco.

506* **Clone su un volume persistente**: su runner che pre-blocchi a un account di un utente con [`--lock-to-account`](/docs/it/self-hosted-environments-reference#runner-cli-flags), punta `--base-dir` a un volume persistente, in modo che il disco serva solo quell'account. Un runner pre-bloccato non raccoglie mai sessioni di canale Claude Tag, quindi questa opzione non si applica ai runner che le servono.618* **Clone su un volume persistente**: su runner che pre-blocchi a un account di un utente con [`--lock-to-account`](/docs/it/self-hosted-environments-reference#runner-cli-flags), punta `--base-dir` a un volume persistente, in modo che il disco serva solo quell'account. Un runner pre-bloccato non raccoglie mai sessioni di canale Claude Tag, quindi questa opzione non si applica ai runner che le servono.


508Cosa il percorso di riutilizzo fa e non garantisce:620Cosa il percorso di riutilizzo fa e non garantisce:

509 621 

510* **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.622* **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.

511* **Le modifiche tracciate si resettano, i file non tracciati persistono**: 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.623* **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.

512* **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.624* **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.

513 625 

514 Per impostazione predefinita il runner lascia questi in posizione quando la sessione termina, quindi su un disco che sopravvive al processo runner si accumulano. Ogni sessione viene eseguita come l'utente del runner stesso, quindi qualsiasi sessione successiva che il disco serve può leggerli. Se mantieni un `--base-dir` persistente, dimensiona il volume per quella crescita. Lo stesso si applica a qualsiasi configurazione che riavvia il runner sullo stesso filesystem, inclusa la [ricetta Docker Compose](#docker-compose).626 Per impostazione predefinita il runner lascia questi in posizione quando la sessione termina, quindi su un disco che sopravvive al processo runner si accumulano. Ogni sessione viene eseguita come l'utente del runner stesso, quindi qualsiasi sessione successiva che il disco serve può leggerli. Se mantieni un `--base-dir` persistente, dimensiona il volume per quella crescita. Lo stesso si applica a qualsiasi configurazione che riavvia il runner sullo stesso filesystem, inclusa la [ricetta Docker Compose](#docker-compose).


522 634 

523Il processo Claude Code figlio di ogni sessione esegue il binario del runner stesso, e il runner disattiva l'auto-aggiornamento all'interno delle sessioni che genera, quindi ogni sessione esegue la versione che hai installato sull'host o costruito nell'immagine. Un aggiornamento a livello di host ha effetto la prossima volta che il runner si avvia.635Il processo Claude Code figlio di ogni sessione esegue il binario del runner stesso, e il runner disattiva l'auto-aggiornamento all'interno delle sessioni che genera, quindi ogni sessione esegue la versione che hai installato sull'host o costruito nell'immagine. Un aggiornamento a livello di host ha effetto la prossima volta che il runner si avvia.

524 636 

525Un modello che le vostre sessioni utilizzano può richiedere una versione più recente di Claude Code rispetto a quella che eseguono. Il server rifiuta quindi le richieste per quel modello con [Claude Code non supporta questo modello](/docs/it/errors#claude-code-does-not-support-this-model). Prima di fissare una versione, controllate [le versioni di Claude Code che i modelli richiedono](/docs/it/model-config#available-models) per ogni modello che le vostre sessioni utilizzano.637Scegli quale versione eseguono le tue sessioni e quando cambia:

526 638 

639* **Prima di fissare una versione**: controlla [le versioni di Claude Code che i modelli richiedono](/docs/it/model-config#available-models) per ogni modello che le tue sessioni utilizzano. Se un modello richiede una versione più recente di quella eseguita dalle tue sessioni, il server rifiuta le richieste per quel modello con [Claude Code does not support this model](/docs/it/errors#claude-code-does-not-support-this-model).

527* **Per mantenere una flotta su una versione**: costruisci l'immagine con una versione fissata, o su un host nudo installa una versione specifica e [disabilita gli auto-aggiornamenti](/docs/it/setup#disable-auto-updates)640* **Per mantenere una flotta su una versione**: costruisci l'immagine con una versione fissata, o su un host nudo installa una versione specifica e [disabilita gli auto-aggiornamenti](/docs/it/setup#disable-auto-updates)

528* **Per aggiornare**: installa la versione più recente o ricostruisci l'immagine, quindi riavvia i runner641* **Per aggiornare una flotta fissa**: leggi le voci del [changelog](/docs/en/changelog) tra la tua versione e quella che stai installando, quindi installa la versione più recente o ricompila l'immagine e riavvia i runner

642* **Per aggiornare i runner on-demand**: leggi le voci del [changelog](/docs/en/changelog) tra la tua versione e quella che stai installando, quindi cambia l'immagine che il tuo [hook `spawn-runner`](/docs/it/self-hosted-environments-configuration#the-spawn-runner-hook) avvia. Ogni nuovo runner ottiene la nuova versione. Un runner già attivo, incluso un runner in standby avviato da [`--min-idle`](/docs/it/self-hosted-environments-reference#orchestrator-cli-flags), mantiene la sua versione finché non termina. Non riavviarlo, perché il suo ordine di lavoro è monouso.

529* **Plugin**: i marketplace dei plugin non si auto-aggiornano neanche; imposta `FORCE_AUTOUPDATE_PLUGINS=1` nell'ambiente del runner per lasciare che i plugin si auto-aggiornino mentre il binario rimane fissato643* **Plugin**: i marketplace dei plugin non si auto-aggiornano neanche; imposta `FORCE_AUTOUPDATE_PLUGINS=1` nell'ambiente del runner per lasciare che i plugin si auto-aggiornino mentre il binario rimane fissato

530 644 

531<h2 id="scale-the-fleet">645<h2 id="scale-the-fleet">


580</h3>694</h3>

581 695 

582* **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.696* **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.

583 * **Per conservare il lavoro di cui è stato fatto il commit**: imposta [`--push-outcome-on-release`](/docs/it/self-hosted-environments-reference#runner-cli-flags). Il runner esegue quindi un push best-effort dei branch di risultato della sessione prima del rilascio, e la sessione ripresa parte da quei commit. Le modifiche senza commit vengono comunque perse.697 * **Per conservare il lavoro di cui è stato fatto il commit**: imposta [`--push-outcome-on-release`](/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.

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

584 * **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.699 * **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.

585* **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.700* **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.

586* **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.701* **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.


606* **Il runner non appare nell'ambiente**: confermare che l'host possa raggiungere `api.anthropic.com` su HTTPS, che il segreto dell'ambiente sia attuale e che l'orologio dell'host sia entro cinque minuti dall'ora reale; uno scostamento maggiore causa il fallimento dell'autenticazione. Il runner registra `[runner:fatal]` con il motivo del rifiuto in caso di errore di autenticazione.721* **Il runner non appare nell'ambiente**: confermare che l'host possa raggiungere `api.anthropic.com` su HTTPS, che il segreto dell'ambiente sia attuale e che l'orologio dell'host sia entro cinque minuti dall'ora reale; uno scostamento maggiore causa il fallimento dell'autenticazione. Il runner registra `[runner:fatal]` con il motivo del rifiuto in caso di errore di autenticazione.

607* **Il runner esce all'avvio con `cannot create or write to base directory`**: il runner non può creare o scrivere in `--base-dir`, che per impostazione predefinita è `/workspace`. Correggere la proprietà della directory o puntare `--base-dir` a un percorso scrivibile, come descritto in [Keep the base directory and capacity identical across runners](#keep-the-base-directory-and-capacity-identical-across-runners). Se il runner registra invece `[runner:fatal]` dicendo che il controllo della directory di base è scaduto, la directory si trova su un mount NFS o CSI bloccato. Controllare l'integrità del mount piuttosto che i permessi. Il runner stampa entrambi questi errori di avvio su stderr prima di aprire `--log-file`, quindi cercarli nel terminale o nei log del container della piattaforma piuttosto che nel file di log. Prima della v2.1.225, il runner non controllava la directory di base all'avvio e questa configurazione errata causava il fallimento delle sessioni dopo il pickup.722* **Il runner esce all'avvio con `cannot create or write to base directory`**: il runner non può creare o scrivere in `--base-dir`, che per impostazione predefinita è `/workspace`. Correggere la proprietà della directory o puntare `--base-dir` a un percorso scrivibile, come descritto in [Keep the base directory and capacity identical across runners](#keep-the-base-directory-and-capacity-identical-across-runners). Se il runner registra invece `[runner:fatal]` dicendo che il controllo della directory di base è scaduto, la directory si trova su un mount NFS o CSI bloccato. Controllare l'integrità del mount piuttosto che i permessi. Il runner stampa entrambi questi errori di avvio su stderr prima di aprire `--log-file`, quindi cercarli nel terminale o nei log del container della piattaforma piuttosto che nel file di log. Prima della v2.1.225, il runner non controllava la directory di base all'avvio e questa configurazione errata causava il fallimento delle sessioni dopo il pickup.

608* **Le sessioni rimangono in coda**: ogni runner online può essere bloccato a un proprietario diverso. Controllare la [metrica](/docs/it/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_locked_account` di ogni runner o il campo `locked_account` della sua riga di log `[runner:health]` per vedere chi la detiene. Entrambi mostrano l'email del proprietario solo dopo che il runner ha ricevuto un token di sessione con un claim `act.email`, che le sessioni di un agente Claude Tag non hanno mai. Senza il claim, il runner non emette alcuna serie `locked_account` e registra `locked_account=yes`, il che indica che il runner è bloccato ma non a quale proprietario. Aggiungere repliche o attendere che un runner esistente si svuoti e si riavvii. Se l'ambiente utilizza runner on-demand, controllare l'orchestrator; vedere [On-demand runners](/docs/it/self-hosted-environments-configuration#on-demand-runners).723* **Le sessioni rimangono in coda**: ogni runner online può essere bloccato a un proprietario diverso. Controllare la [metrica](/docs/it/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_locked_account` di ogni runner o il campo `locked_account` della sua riga di log `[runner:health]` per vedere chi la detiene. Entrambi mostrano l'email del proprietario solo dopo che il runner ha ricevuto un token di sessione con un claim `act.email`, che le sessioni di un agente Claude Tag non hanno mai. Senza il claim, il runner non emette alcuna serie `locked_account` e registra `locked_account=yes`, il che indica che il runner è bloccato ma non a quale proprietario. Aggiungere repliche o attendere che un runner esistente si svuoti e si riavvii. Se l'ambiente utilizza runner on-demand, controllare l'orchestrator; vedere [On-demand runners](/docs/it/self-hosted-environments-configuration#on-demand-runners).

609* **Le sessioni falliscono immediatamente dopo il pickup**: aprire la sessione in claude.ai/code per vedere l'errore. Le cause più comuni sono le [credenziali git](#configure-git) mancanti nell'immagine del runner e gli strumenti di compilazione non installati. Una directory di base non scrivibile arresta il runner all'avvio invece di far fallire le sessioni. Vedere la voce **Il runner esce all'avvio con `cannot create or write to base directory`** in questo elenco.724* **Le sessioni falliscono subito dopo la presa in carico**: apri la sessione in claude.ai/code per vedere l'errore. Le cause più comuni sono la mancanza di [credenziali git](#configure-git) nell'immagine del runner e strumenti di build non installati. 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). 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.

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

610* **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.726* **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.

611* **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, il più delle volte perché qualcosa tra il runner e `api.anthropic.com`, come un proxy intercettante o un portale captive, ha risposto con la sua stessa pagina. Il runner rifiuta la risposta, la conta sotto il tipo `transport` della [metrica](/docs/it/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, e riprova secondo la pianificazione di poll fallito descritta in [Session lifecycle](/docs/it/self-hosted-environments#session-lifecycle). Il runner continua a servire le sue sessioni live. Configurare il proxy per passare le risposte da `api.anthropic.com` inalterate. Prima della v2.1.246, il runner leggeva tale risposta come una coda di lavoro vuota, il che potrebbe terminare le sue sessioni live o farla uscire.727* **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, il più delle volte perché qualcosa tra il runner e `api.anthropic.com`, come un proxy intercettante o un portale captive, ha risposto con la sua stessa pagina. Il runner rifiuta la risposta, la conta sotto il tipo `transport` della [metrica](/docs/it/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, e riprova secondo la pianificazione di poll fallito descritta in [Session lifecycle](/docs/it/self-hosted-environments#session-lifecycle). Il runner continua a servire le sue sessioni live. Configurare il proxy per passare le risposte da `api.anthropic.com` inalterate. Prima della v2.1.246, il runner leggeva tale risposta come una coda di lavoro vuota, il che potrebbe terminare le sue sessioni live o farla uscire.

612* **Il ramo di una sessione non esiste più sul remoto**: per un'origine git che la sessione legge solo, il runner salta quella origine e continua con le rimanenti. Per l'origine a cui la sessione spinge i risultati, un ramo eliminato, tipicamente perché è stato unito e auto-eliminato, fa fallire la sessione con un errore che nomina il repository e il ramo e chiede di ripristinare il ramo e riprovare. Il runner fa fallire la sessione con lo stesso errore quando saltare lascerebbe senza alcun repository. Prima della v2.1.228, tale sessione iniziava in una directory vuota.728* **Il ramo di una sessione non esiste più sul remoto**: per un'origine git che la sessione legge solo, il runner salta quella origine e continua con le rimanenti. Per l'origine a cui la sessione spinge i risultati, un ramo eliminato, tipicamente perché è stato unito e auto-eliminato, fa fallire la sessione con un errore che nomina il repository e il ramo e chiede di ripristinare il ramo e riprovare. Il runner fa fallire la sessione con lo stesso errore quando saltare lascerebbe senza alcun repository. Prima della v2.1.228, tale sessione iniziava in una directory vuota.


616 732 

617 Il controllo di accesso viene eseguito di nuovo ogni volta che la sessione inizia su un runner, quindi una volta che l'identità git del runner ha accesso in lettura, il prossimo avvio clona il repository. Prima della v2.1.274, ognuno di questi rifiuti faceva fallire l'avvio della sessione.733 Il controllo di accesso viene eseguito di nuovo ogni volta che la sessione inizia su un runner, quindi una volta che l'identità git del runner ha accesso in lettura, il prossimo avvio clona il repository. Prima della v2.1.274, ognuno di questi rifiuti faceva fallire l'avvio della sessione.

618* **Le sessioni impiegano minuti per avviarsi**: il clone iniziale di solito domina. Osservare la [metrica](/docs/it/self-hosted-environments-reference#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.734* **Le sessioni impiegano minuti per avviarsi**: il clone iniziale di solito domina. Osservare la [metrica](/docs/it/self-hosted-environments-reference#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.

619* **I turni falliscono con un 401**: ogni sessione autentica le chiamate del modello con il token di breve durata [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/it/self-hosted-environments-configuration#wrapper-scripts) che il runner recupera da Anthropic e ruota sullo stdin della sessione. Quando un turno termina con un 401 o 403 dall'API del modello, il runner recupera un token fresco e lo passa alla sessione. Il turno fallito non viene riprovato.735* **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`](/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.

620 736 

621 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.737 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.

622 738 


637 753 

638* **Un'uscita normale**: il runner ha terminato le sue sessioni e si è scaricato, ha raggiunto il suo tempo di ritiro, o gli è stato detto di fermarsi. Riavviarlo in modo che l'ambiente abbia di nuovo capacità. [Runner lifecycle](/docs/it/self-hosted-environments#runner-lifecycle) descrive queste uscite.754* **Un'uscita normale**: il runner ha terminato le sue sessioni e si è scaricato, ha raggiunto il suo tempo di ritiro, o gli è stato detto di fermarsi. Riavviarlo in modo che l'ambiente abbia di nuovo capacità. [Runner lifecycle](/docs/it/self-hosted-environments#runner-lifecycle) descrive queste uscite.

639* **Un avvio fallito**: il runner non può avviarsi con la configurazione o l'host che gli è stato assegnato, quindi esce secondi dopo l'avvio, e esce nello stesso modo ogni volta che lo riavvii. Riavviarlo più velocemente non aiuta. Qualcuno deve leggere il suo output e correggere la causa.755* **Un avvio fallito**: il runner non può avviarsi con la configurazione o l'host che gli è stato assegnato, quindi esce secondi dopo l'avvio, e esce nello stesso modo ogni volta che lo riavvii. Riavviarlo più velocemente non aiuta. Qualcuno deve leggere il suo output e correggere la causa.

756* **Contatto perso**: un runner che non riesce a raggiungere Anthropic per un tempo superiore al suo [lease](/docs/it/self-hosted-environments#session-lifecycle), ad esempio mentre il suo host è in sospensione, può essere rimosso dall'ambiente. Quando un runner rimosso si riconnette, esce. Il suo log può mostrare una riga `[runner:fatal]` che contiene `runner record gone server-side` oppure, dopo un'interruzione più lunga, [`poll auth failed`](/docs/it/self-hosted-environments-quickstart#set-up-an-environment-and-runner). Il runner non si registra di nuovo da solo, quindi riavvialo.

640 757 

641Configurare il supervisore per riavviare il runner ogni volta che esce, per attendere più a lungo tra i riavvii quando il runner continua a uscire subito dopo l'avvio, e per avvisare qualcuno quando ciò continua a accadere.758Configurare il supervisore per riavviare il runner ogni volta che esce, per attendere più a lungo tra i riavvii quando il runner continua a uscire subito dopo l'avvio, e per avvisare qualcuno quando ciò continua a accadere.

642 759 

Details

195 195 

196I wrapper ricevono il percorso assoluto al binario del runner stesso in `CLAUDE_RUNNER_CLAUDE_BIN`; utilizza quel percorso piuttosto che un `claude` risolto da PATH in modo che la decodifica venga eseguita sullo stesso binario che il runner stesso utilizza.196I wrapper ricevono il percorso assoluto al binario del runner stesso in `CLAUDE_RUNNER_CLAUDE_BIN`; utilizza quel percorso piuttosto che un `claude` risolto da PATH in modo che la decodifica venga eseguita sullo stesso binario che il runner stesso utilizza.

197 197 

198Utilizza `jq -re` piuttosto che `jq -r` in modo che un claim mancante causi un'uscita diversa da zero. Con solo `-r`, un claim mancante stampa la stringa letterale `null` ed esce con zero, il che passa silenziosamente un valore errato a valle. Passa `--no-verify` a `decode-token` solo per l'ispezione offline dove l'endpoint JWKS è irraggiungibile.198Utilizza `jq -re` piuttosto che `jq -r` in modo che un claim mancante causi un'uscita diversa da zero. Con solo `-r`, un claim mancante stampa la stringa letterale `null` ed esce con zero, il che passa silenziosamente un valore errato a valle.

199 

200Se `decode-token` non riesce a recuperare le chiavi dall'endpoint JWKS o non riesce a verificare il token, stampa il motivo su stderr, non stampa alcun claim ed esce con codice 1. Passa `--no-verify` a `decode-token` solo per l'ispezione offline dove l'endpoint JWKS è irraggiungibile.

199 201 

200<h2 id="claims-reference">202<h2 id="claims-reference">

201 Riferimento dei claim203 Riferimento dei claim

Details

34L'host del runner ha bisogno di:34L'host del runner ha bisogno di:

35 35 

36* Un host o container Linux o macOS con HTTPS in uscita verso `api.anthropic.com`, verso `claude.ai` e gli host di download a cui reindirizza per il passaggio di installazione sottostante, e verso il tuo host git per il clone; la [tabella dei requisiti di rete](/docs/it/self-hosted-environments-deploy#network-requirements) ha l'elenco completo. Windows non è supportato come host runner; esegui il runner in un container Linux invece. Le workstation degli sviluppatori non sono interessate, poiché le sessioni iniziano da claude.ai in un browser.36* Un host o container Linux o macOS con HTTPS in uscita verso `api.anthropic.com`, verso `claude.ai` e gli host di download a cui reindirizza per il passaggio di installazione sottostante, e verso il tuo host git per il clone; la [tabella dei requisiti di rete](/docs/it/self-hosted-environments-deploy#network-requirements) ha l'elenco completo. Windows non è supportato come host runner; esegui il runner in un container Linux invece. Le workstation degli sviluppatori non sono interessate, poiché le sessioni iniziano da claude.ai in un browser.

37* Un repository per la sessione di test: uno pubblico, oppure uno che questo host può già clonare tramite il suo URL HTTPS senza che vengano richieste credenziali.

37* Un orologio sincronizzato all'ora reale, ad esempio con NTP. L'autenticazione fallisce quando l'orologio è più di cinque minuti indietro; vedi [Troubleshooting](/docs/it/self-hosted-environments-deploy#troubleshooting).38* Un orologio sincronizzato all'ora reale, ad esempio con NTP. L'autenticazione fallisce quando l'orologio è più di cinque minuti indietro; vedi [Troubleshooting](/docs/it/self-hosted-environments-deploy#troubleshooting).

38 39 

39<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


57 Configura un ambiente e un runner58 Configura un ambiente e un runner

58</h2>59</h2>

59 60 

60Claude Code include una configurazione guidata: una sessione Claude Code interattiva che ti guida attraverso la creazione dell'ambiente nell'interfaccia di amministrazione, avvia un runner locale con il file secret che salvi, conferma che il runner si registra, e scrive un foglio di aiuto in `./runner-setup/CHEAT-SHEET.md`. Eseguilo su una macchina dove hai effettuato l'accesso con `claude auth login` usando un account che detiene un ruolo Owner; non è disponibile con chiavi API o provider di modelli di terze parti. Su host dove una sessione interattiva non è possibile, usa i passaggi manuali sottostanti invece. Conferma che il [controllo della versione](#software-on-the-runner-host) è passato per primo: sulle versioni precedenti a 2.1.224, questo comando avvia una sessione Claude ordinaria con le parole come prompt invece della configurazione guidata. Per avviare la configurazione guidata, esegui il subcommand setup e segui i prompt:61Usa la [configurazione guidata](#run-the-guided-setup) oppure i [passaggi manuali](#set-up-manually). La configurazione guidata è un singolo comando che avvia una sessione Claude Code interattiva e ti guida attraverso il resto. Usa invece i passaggi manuali su un host dove una sessione interattiva non è possibile. Usali anche quando qualcuno che detiene il ruolo Owner ha creato l'ambiente e ti ha consegnato il suo secret, poiché la configurazione guidata richiede un accesso come Owner.

62 

63<h3 id="run-the-guided-setup">

64 Esegui la configurazione guidata

65</h3>

66 

67La configurazione guidata ti guida attraverso la creazione dell'ambiente nell'interfaccia di amministrazione, avvia un runner locale con il file secret che salvi, conferma che il runner si registra e scrive un foglio di aiuto in `./runner-setup/CHEAT-SHEET.md`. Prima di eseguirla, verifica l'accesso e la versione:

68 

69* **Accesso**: eseguila su una macchina dove hai effettuato l'accesso con `claude auth login` usando un account che detiene un ruolo Owner. Con solo una chiave API o un provider di modelli di terze parti, la sessione si avvia ma i suoi controlli sull'organizzazione falliscono.

70* **Versione**: conferma che il [controllo della versione](#software-on-the-runner-host) è passato. Sulle versioni precedenti a 2.1.224, il comando setup avvia una sessione Claude con le parole come prompt invece della configurazione guidata.

71 

72Per avviare la configurazione guidata, esegui il subcommand setup nella tua shell e segui le istruzioni:

61 73 

62```bash theme={null}74```bash theme={null}

63claude self-hosted-runner setup75claude self-hosted-runner setup

64```76```

65 77 

66Per configurare manualmente invece:78La configurazione non avvia da sola una sessione di test: ti dice di avviarne una su claude.ai/code. L'ultimo passaggio della configurazione arresta il runner che ha avviato. Se esci dalla configurazione prima di quel passaggio, il runner continua a essere in esecuzione. Per proseguire dopo l'ultimo passaggio, avvia di nuovo il runner nella tua shell con il comando presente in `./runner-setup/CHEAT-SHEET.md`, quindi [indirizza una sessione all'ambiente](#route-a-session).

79 

80<h3 id="set-up-manually">

81 Configura manualmente

82</h3>

83 

84Crea l'ambiente su claude.ai, avvia il runner da un terminale sull'host, quindi torna su claude.ai per confermare che il runner appare e indirizzare una sessione verso di esso. Se qualcuno che detiene il ruolo Owner ha già creato l'ambiente e ti ha consegnato il suo secret, inizia dal passaggio 2.

67 85 

68<Steps>86<Steps>

69 <Step title="Crea un ambiente">87 <Step title="Crea un ambiente">


73 </Step>91 </Step>

74 92 

75 <Step title="Avvia un runner">93 <Step title="Avvia un runner">

76 Crea la directory del secret. Questo passaggio e il successivo richiedono root per il percorso `/etc/claude`; qualsiasi percorso che il processo runner può leggere funziona, quindi regola entrambi i comandi e il valore `--environment-secret-file` insieme se ne usi uno diverso.94 Crea la directory del secret. Questo comando e il successivo usano `/etc/claude`, che richiede root, e il file secret che creano è leggibile solo dall'utente che li esegue. Se il runner verrà eseguito come un altro utente, esce con `error: Failed to read environment secret file <path> (EACCES: permission denied, open '<path>')`. In tal caso, esegui entrambi i comandi come utente del runner con una directory in cui quell'utente può scrivere al posto di `/etc/claude`, e passa lo stesso percorso a `--environment-secret-file`. Qualsiasi percorso che il processo runner può leggere funziona.

77 95 

78 ```bash theme={null}96 ```bash theme={null}

79 mkdir -p /etc/claude97 mkdir -p /etc/claude


89 107 

90 Se il runner non può creare o scrivere nel percorso, esce all'avvio con un errore che nomina la directory invece di registrarsi. Vedi [Troubleshooting](/docs/it/self-hosted-environments-deploy#troubleshooting).108 Se il runner non può creare o scrivere nel percorso, esce all'avvio con un errore che nomina la directory invece di registrarsi. Vedi [Troubleshooting](/docs/it/self-hosted-environments-deploy#troubleshooting).

91 109 

92 Quindi avvia il runner con `--environment-secret-file` e `--base-dir`. Il runner si registra con il tuo ambiente e inizia il polling per il lavoro. Se il runner esce, riavvialo manualmente. Le distribuzioni di produzione eseguono il runner sotto un orchestrator che riavvia i runner usciti, normalmente con un filesystem fresco per ogni riavvio; [Riutilizza un checkout pre-riscaldato](/docs/it/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) copre la configurazione del disco persistente supportata.110 Quindi avvia il runner con `--environment-secret-file` e `--base-dir`:

93 111 

94 ```bash theme={null}112 ```bash theme={null}

95 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

96 ```114 ```

115 

116 Il runner registra `Registered: runner_id=<runner-id>` una volta che si è registrato con il tuo ambiente, quindi inizia il polling per il lavoro. Se il runner esce in seguito, riavvialo manualmente. Vedi [Se il runner esce](#if-the-runner-exits) per sapere quando succede.

97 </Step>117 </Step>

98 118 

99 <Step title="Verifica che il runner appaia">119 <Step title="Verifica che il runner appaia">

100 Ritorna alla [pagina **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). Lo stato del tuo ambiente cambia da **No runners deployed** a **Healthy** entro pochi secondi dall'avvio del runner; apri l'ambiente e seleziona **Activity** per vedere il runner stesso.120 Ritorna alla [pagina **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). Lo stato del tuo ambiente cambia da **No runners deployed** a **Healthy** entro pochi secondi dall'avvio del runner; apri l'ambiente e seleziona **Activity** per vedere il runner stesso. Se non hai accesso alla pagina di amministrazione, la riga `Registered: runner_id=<runner-id>` nel log del runner del passaggio precedente ti fornisce lo stesso segnale.

101 </Step>121 </Step>

102 122 

103 <Step title="Indirizza una sessione all'ambiente">123 <Step title="Indirizza una sessione all'ambiente">

104 Avvia una sessione su claude.ai/code e seleziona il tuo ambiente dal selettore di ambiente, dove gli ambienti self-hosted appaiono insieme a quelli ospitati da Anthropic. Il runner clona con qualsiasi credenziale git che l'host ha già, quindi scegli un repository che questo host può già clonare, o uno pubblico; le opzioni di credenziale per i repository privati in produzione sono su [Configura git](/docs/it/self-hosted-environments-deploy#configure-git). Il prossimo runner disponibile raccoglie la sessione in coda e registra `Picked up session <session-id>` insieme al suo conteggio attivo e alla capacità, in modo che tu possa confermare dall'output del runner stesso quale host ha preso la sessione. Guarda la sessione lavorare e leggi le risposte di Claude su [claude.ai/code](https://claude.ai/code). Se la sessione rimane in coda invece, vedi [Troubleshooting](/docs/it/self-hosted-environments-deploy#troubleshooting).124 <span id="route-a-session" />Avvia una sessione su claude.ai/code e seleziona il tuo ambiente dal selettore di ambiente, dove gli ambienti self-hosted appaiono insieme a quelli ospitati da Anthropic. Come repository, scegli quello indicato nei [prerequisiti](#host-and-network): un repository pubblico, o uno che questo host può già clonare. Il runner clona con qualsiasi credenziale git che l'host ha già.

125 

126 Il prossimo runner disponibile raccoglie la sessione in coda e registra `Picked up session <session-id>` insieme al suo conteggio attivo e alla capacità, in modo che tu possa confermare dall'output del runner stesso quale host ha preso la sessione. Guarda la sessione lavorare e leggi le risposte di Claude su [claude.ai/code](https://claude.ai/code).

127 

128 Se la sessione non inizia a lavorare, individua il caso che corrisponde a ciò che vedi:

129 

130 * **La sessione rimane in coda**: vedi [Risoluzione dei problemi](/docs/it/self-hosted-environments-deploy#troubleshooting).

131 * **La sessione non si avvia a causa di un errore git**: l'errore appare nella sessione e nel log del runner. Se 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. Vedi [Configura git](/docs/it/self-hosted-environments-deploy#configure-git), che copre anche le opzioni di credenziale per i repository privati in produzione.

105 </Step>132 </Step>

106</Steps>133</Steps>

107 134 

108Il runner esce per progettazione una volta che le sue sessioni attive finiscono; vedi [Runner lifecycle](/docs/it/self-hosted-environments#runner-lifecycle). Per la produzione, distribuiscilo sotto un orchestrator che lo riavvia all'uscita e attende più a lungo tra i riavvii quando il runner continua a uscire subito dopo l'avvio. Vedi [Distribuisci in produzione](/docs/it/self-hosted-environments-deploy) e [Quando il runner esce](/docs/it/self-hosted-environments-deploy#when-the-runner-exits).135<h3 id="if-the-runner-exits">

136 Se il runner esce

137</h3>

138 

139Se il runner esce durante questa guida rapida, avvialo di nuovo con lo stesso comando. Il runner può uscire da solo:

140 

141* **Sessioni terminate**: il log mostra `[runner:exit] account workload drained — exiting`. Il runner esce per progettazione una volta che le sue sessioni attive finiscono. Vedi [Ciclo di vita del runner](/docs/it/self-hosted-environments#runner-lifecycle).

142* **Contatto perso**: il log mostra una riga `[runner:fatal]` con `runner record gone server-side` o con `poll auth failed`. Se il runner perde il contatto con Anthropic per un po' di tempo, ad esempio perché l'host va in sospensione, può uscire la prossima volta che raggiunge Anthropic.

143 

144Un turno terminato non chiude la tua sessione di test. Dopo il primo turno la sessione è ancora collegata e il runner è ancora attivo, quindi puoi [inviare alla sessione un messaggio di follow-up](#send-a-follow-up-message-to-a-running-session) senza prima riavviare il runner.

145 

146Per la produzione, distribuisci il runner sotto un orchestrator che lo riavvia all'uscita e attende più a lungo tra i riavvii quando il runner continua a uscire subito dopo l'avvio. Vedi [Distribuisci in produzione](/docs/it/self-hosted-environments-deploy) e [Quando il runner esce](/docs/it/self-hosted-environments-deploy#when-the-runner-exits).

109 147 

110<h2 id="send-a-follow-up-message-to-a-running-session">148<h2 id="send-a-follow-up-message-to-a-running-session">

111 Inviare un messaggio di follow-up a una sessione in esecuzione149 Inviare un messaggio di follow-up a una sessione in esecuzione

Details

52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Rilascia uno slot di sessione dopo N minuti di inattività una volta che un turno finisce o la sessione attende l'azione dell'utente. Una sessione che è ancora a metà turno, inclusa una che contiene un compito in background che non finisce mai o un'approvazione richiesta dall'interno di una chiamata di strumento in esecuzione, non conta come inattiva; abbina con `--kill-session-after-min` come backstop duro. Dopo che il compito in background di una sessione finisce, il runner considera la sessione occupata fino a quando il turno di follow-up che legge il risultato inizia, per al massimo la finestra [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Fino a quando il runner riceve un segnale di arresto o raggiunge il suo tempo di ritiro, un rilascio che lascia il runner senza sessioni attive avvia lo stesso percorso di uscita di un drenaggio normale, governato da `--drain-grace-sec`. Dopo un primo segnale che hai differito con [`--defer-shutdown-max-min`](/docs/it/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), il runner esce non appena un rilascio lo lascia senza sessioni. `0` disabilita. |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Rilascia uno slot di sessione dopo N minuti di inattività una volta che un turno finisce o la sessione attende l'azione dell'utente. Una sessione che è ancora a metà turno, inclusa una che contiene un compito in background che non finisce mai o un'approvazione richiesta dall'interno di una chiamata di strumento in esecuzione, non conta come inattiva; abbina con `--kill-session-after-min` come backstop duro. Dopo che il compito in background di una sessione finisce, il runner considera la sessione occupata fino a quando il turno di follow-up che legge il risultato inizia, per al massimo la finestra [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Fino a quando il runner riceve un segnale di arresto o raggiunge il suo tempo di ritiro, un rilascio che lascia il runner senza sessioni attive avvia lo stesso percorso di uscita di un drenaggio normale, governato da `--drain-grace-sec`. Dopo un primo segnale che hai differito con [`--defer-shutdown-max-min`](/docs/it/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), il runner esce non appena un rilascio lo lascia senza sessioni. `0` disabilita. |

53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | off | Rimuovi le directory per sessione di una sessione sotto `<base-dir>/_sessions/` quando la sessione termina su questo runner, indipendentemente dall'esito. [Reuse a pre-warmed checkout](/docs/it/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) descrive cosa contengono e chi può leggerli quando rimangono. La rimozione è best-effort: le directory per sessione rimangono in posizione quando il runner viene ucciso o raggiunge la scadenza di drenaggio prima che la pulizia venga eseguita. Con il flag attivo, il log di debug di una sessione fallita o interrotta non viene mantenuto su disco. Richiede Claude Code v2.1.268 o successivo. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | off | Rimuovi le directory per sessione di una sessione sotto `<base-dir>/_sessions/` quando la sessione termina su questo runner, indipendentemente dall'esito. [Reuse a pre-warmed checkout](/docs/it/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) descrive cosa contengono e chi può leggerli quando rimangono. La rimozione è best-effort: le directory per sessione rimangono in posizione quando il runner viene ucciso o raggiunge la scadenza di drenaggio prima che la pulizia venga eseguita. Con il flag attivo, il log di debug di una sessione fallita o interrotta non viene mantenuto su disco. Richiede Claude Code v2.1.268 o successivo. |

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Ritira il runner a un timestamp Unix assoluto in secondi, per l'infrastruttura che uccide il runner a un'ora nota; [Runner lifecycle](/docs/it/self-hosted-environments#runner-lifecycle) descrive la sequenza di rilascio e come dimensionare il margine. I valori prima del 2001 o dopo l'anno 5138 vengono rifiutati dal flag e ignorati dalla variabile d'ambiente. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Ritira il runner a un timestamp Unix assoluto in secondi, per l'infrastruttura che uccide il runner a un'ora nota; [Runner lifecycle](/docs/it/self-hosted-environments#runner-lifecycle) descrive la sequenza di rilascio e come dimensionare il margine. I valori prima del 2001 o dopo l'anno 5138 vengono rifiutati dal flag e ignorati dalla variabile d'ambiente. |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Quali degli elenchi di regole del classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) che il control plane invia con una sessione possono raggiungere quella sessione: `all`, `no-allow` o `none`. Vedi [Elenchi di regole della modalità auto](#auto-mode-rule-lists) per cosa applica ciascun valore. Un valore non valido arresta il runner all'avvio. Richiede Claude Code v2.1.295 o successivo. |

55| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Quanto tempo aspettare affinché il processo Claude esca correttamente dopo la fine di una sessione, prima di forzare l'uccisione. Aumenta il valore se gli hook `SessionEnd` del figlio hanno bisogno di più tempo. |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Quanto tempo aspettare affinché il processo Claude esca correttamente dopo la fine di una sessione, prima di forzare l'uccisione. Aumenta il valore se gli hook `SessionEnd` del figlio hanno bisogno di più tempo. |

56| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Rilascia uno slot di sessione se il figlio non ha segnalato che si è inizializzato entro N minuti dalla generazione. Cancellato dal segnale di init del figlio sul [canale di attività](/docs/it/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), non dall'output ordinario, dopo di che `--release-idle-session-min` prende il sopravvento. `0` disabilita. |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Rilascia uno slot di sessione se il figlio non ha segnalato che si è inizializzato entro N minuti dalla generazione. La clonazione avviene prima della generazione, quindi il tempo di clonazione non viene conteggiato. Cancellato dal segnale di init del figlio sul [canale di attività](/docs/it/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), non dall'output ordinario, dopo di che `--release-idle-session-min` prende il sopravvento. `0` disabilita. |

57| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Semina la fiducia persistente per i percorsi del repository di ogni sessione in modo che `permissions.allow` e `additionalDirectories` impegnati nel repo siano onorati. Imposta `false` per eliminare le concessioni di autorizzazione impegnate nel repo e configurare le regole di autorizzazione nella `settings.json` della configurazione dell'host; le impostazioni `sandbox.*` impegnate nel repository si applicano comunque in entrambi i casi, motivo per cui la [guardia repo-settings](/docs/it/self-hosted-environments-deploy#harden-your-deployment) le scansiona indipendentemente da questo flag. |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Semina la fiducia persistente per i percorsi del repository di ogni sessione in modo che `permissions.allow` e `additionalDirectories` impegnati nel repo siano onorati. Imposta `false` per eliminare le concessioni di autorizzazione impegnate nel repo e configurare le regole di autorizzazione nella `settings.json` della configurazione dell'host; le impostazioni `sandbox.*` impegnate nel repository si applicano comunque in entrambi i casi, motivo per cui la [guardia repo-settings](/docs/it/self-hosted-environments-deploy#harden-your-deployment) le scansiona indipendentemente da questo flag. |

58| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clona tramite il [proxy git di Anthropic](/docs/it/self-hosted-environments-deploy#use-the-anthropic-git-proxy) invece dell'autenticazione git gestita dal cliente. Richiede `--capacity 1` e git 2.32 o più recente; il runner rifiuta di avviarsi altrimenti. Sostituisce i flag di riscrittura. |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clona i repository su github.com tramite il [proxy git di Anthropic](/docs/it/self-hosted-environments-deploy#use-the-anthropic-git-proxy) invece dell'autenticazione git gestita dal cliente. Richiede `--capacity 1` e git 2.32 o più recente; il runner rifiuta di avviarsi altrimenti. Sostituisce i flag di riscrittura. |

59 60 

60La maggior parte dei flag di durata ha un massimo, scelto per mantenere ogni timeout entro il limite del timer a 32 bit del runtime di circa 24,85 giorni. I flag `--*-min` hanno un limite di 10080 minuti, 7 giorni; `--drain-grace-sec` a 604800 secondi, anche 7 giorni; e `--drain-wait-sec` a 86400 secondi, 24 ore. `--session-stop-grace-sec` e `--post-session-hook-timeout-sec` non hanno limiti. Superare un limite si comporta diversamente per superficie:61La maggior parte dei flag di durata ha un massimo, scelto per mantenere ogni timeout entro il limite del timer a 32 bit del runtime di circa 24,85 giorni. I flag `--*-min` hanno un limite di 10080 minuti, 7 giorni; `--drain-grace-sec` a 604800 secondi, anche 7 giorni; e `--drain-wait-sec` a 86400 secondi, 24 ore. `--session-stop-grace-sec` e `--post-session-hook-timeout-sec` non hanno limiti. Superare un limite si comporta diversamente per superficie:

61 62 

62* **Flag**: l'avvio fallisce con un errore.63* **Flag**: l'avvio fallisce con un errore.

63* **Variabile d'ambiente**: il runner fissa il valore al limite del timer piuttosto che rifiutarlo.64* **Variabile d'ambiente**: il runner fissa il valore al limite del timer piuttosto che rifiutarlo.

64 65 

66<h3 id="auto-mode-rule-lists">

67 Elenchi di regole della modalità auto

68</h3>

69 

70`--server-auto-mode-lists` ti permette di decidere quali regole del classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) provenienti dall'esterno del runner raggiungono le sessioni sui tuoi runner. Il control plane di Anthropic può inviare elenchi di regole con una sessione e chiedere al runner di applicarli. Alcune voci possono essere regole scritte da un amministratore della tua organizzazione. Gli elenchi sono `environment`, `soft_deny` e `allow`:

71 

72* **`environment`**: una voce può far sì che il classificatore consenta di più così come di meno.

73* **`soft_deny`**: una voce blocca un'azione a meno che l'utente non l'abbia richiesta esplicitamente o non si applichi un'eccezione `allow`.

74* **`allow`**: le eccezioni alle voci `soft_deny`.

75 

76Il valore del flag sceglie quali elenchi applica il runner:

77 

78* **`no-allow`**: il valore predefinito. Applica `environment` e `soft_deny` e trattiene `allow`. Una voce `environment` può comunque far sì che il classificatore consenta di più, quindi il valore predefinito non esclude ogni allentamento.

79* **`all`**: applica tutti e tre gli elenchi.

80* **`none`**: non ne applica nessuno. Scegli `none` per escludere ogni allentamento proveniente da questi elenchi. Elimina anche le restrizioni di `soft_deny`.

81 

82Nessuna impostazione del runner fa sì che il control plane chieda al runner di applicare gli elenchi. Quando non lo chiede, le sessioni non ricevono alcun elenco, qualunque cosa tu imposti. Per vedere cosa è successo, avvia il runner con `--log-level debug`. Per ogni sessione il runner registra quindi una riga contenente `the server asked this runner to apply`, oppure una contenente `the server did not ask this runner to apply the auto mode lists it sends`.

83 

65<h2 id="orchestrator-cli-flags">84<h2 id="orchestrator-cli-flags">

66 Flag CLI dell'orchestrator85 Flag CLI dell'orchestrator

67</h2>86</h2>


72| :- | :- | :- |91| :- | :- | :- |

73| `--hook-concurrency <n>` | `4` | Numero massimo di hook `spawn-runner` in esecuzione in parallelo. Limita anche quante richieste di spawn vengono rivendicate per polling. |92| `--hook-concurrency <n>` | `4` | Numero massimo di hook `spawn-runner` in esecuzione in parallelo. Limita anche quante richieste di spawn vengono rivendicate per polling. |

74| `--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. |93| `--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. |

75| `--expected-spawn-seconds <sec>` | `120` | Tempo di avvio p99 previsto per i runner generati, nell'intervallo applicato dal server da 10 a 3600. Inviato ad ogni polling come il 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. |94| `--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. |

76| `--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. |95| `--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. |

77| `--debug-dir <path>` | unset | Scrivi il work order e lo stderr dell'hook di ogni richiesta di spawn su disco. Solo debug; non impostare mai in produzione. |96| `--debug-dir <path>` | unset | Scrivi il work order e lo stderr dell'hook di ogni richiesta di spawn su disco. Solo debug; non impostare mai in produzione. |

78 97 


108| `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. |127| `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. |

109| `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. |128| `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. |

110| `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. |129| `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. |

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

111| `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. |131| `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. |

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

113| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Quando `1`, disabilita lo strumento Artifact nelle sessioni indipendentemente dall'impostazione di amministrazione dell'organizzazione, e elimina il requisito di uscita `*.frame.claudeusercontent.com` |133| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Quando `1`, disabilita lo strumento Artifact nelle sessioni indipendentemente dall'impostazione di amministrazione dell'organizzazione, e elimina il requisito di uscita `*.frame.claudeusercontent.com` |


178| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Errori cumulativi di PollSpawnHints per tipo: `transport`, `timeout`, `5xx`, `429` o `4xx`. Tutte e cinque le serie sono presenti dall'avvio del processo; avviso su `rate(...[5m]) > 0`. |198| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Errori cumulativi di PollSpawnHints per tipo: `transport`, `timeout`, `5xx`, `429` o `4xx`. Tutte e cinque le serie sono presenti dall'avvio del processo; avviso su `rate(...[5m]) > 0`. |

179| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Richieste di spawn rivendicabili in questo momento |199| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Richieste di spawn rivendicabili in questo momento |

180| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Richieste di spawn in backoff di retry dopo un errore di hook riprova |200| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Richieste di spawn in backoff di retry dopo un errore di hook riprova |

181| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Richieste di spawn bloccate fino a quando un Owner non le riprova dalla scheda **Activity** dell'ambiente; avviso se superiore a zero |201| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Sessioni a cui è impedito lo spawn. Ognuna resta bloccata finché un utente non le invia un nuovo messaggio o un Owner non la riprova dalla scheda **Activity** dell'ambiente. Il conteggio può restare sopra zero anche dopo che hai risolto la causa. Avviso se superiore a zero. |

182| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Sessioni totali in attesa di un runner per questo ambiente. Aggregato a livello di ambiente, identico su ogni istanza dell'orchestrator: usa `MAX` piuttosto che `SUM` tra le istanze. |202| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Sessioni totali in attesa di un runner per questo ambiente. Aggregato a livello di ambiente, identico su ogni istanza dell'orchestrator: usa `MAX` piuttosto che `SUM` tra le istanze. |

183| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sessioni attualmente assegnate a un runner vivo in questo ambiente. Aggregato a livello di ambiente, identico su ogni istanza dell'orchestrator: usa `MAX` piuttosto che `SUM` tra le istanze. |203| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sessioni attualmente assegnate a un runner vivo in questo ambiente. Aggregato a livello di ambiente, identico su ogni istanza dell'orchestrator: usa `MAX` piuttosto che `SUM` tra le istanze. |

184| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Risultati cumulativi dell'hook `spawn-runner`: `ok`, `retryable`, `non_retryable`. Conta le invocazioni dell'hook dell'orchestrator, non i figli della sessione che i runner generano: non comparabili a `sessions_started_total`, poiché la capacità superiore a uno, i pool caldi e i runner generati di nuovo per la stessa sessione divergono i due. |204| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Risultati cumulativi dell'hook `spawn-runner`: `ok`, `retryable`, `non_retryable`. Conta le invocazioni dell'hook dell'orchestrator, non i figli della sessione che i runner generano: non comparabili a `sessions_started_total`, poiché la capacità superiore a uno, i pool caldi e i runner generati di nuovo per la stessa sessione divergono i due. |


285 for: 1m305 for: 1m

286 labels: {severity: critical}306 labels: {severity: critical}

287 annotations:307 annotations:

288 summary: "{{ $value }} sessions circuit-broken — spawn-runner hook is repeatedly non-retryable; fix infra then retry from the Activity tab"308 summary: "Sessions blocked from spawning: {{ $value }}. Read each one's error in the Activity tab, fix the cause, then select Retry"

289 - alert: ClaudeOrchestratorPollErrors309 - alert: ClaudeOrchestratorPollErrors

290 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0310 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

291 for: 2m311 for: 2m


320 340 

321Prima della v2.1.260, il runner terminava ogni sessione che raggiungeva il suo limite `--kill-session-after-min` e la contava in `sessions_interrupted_total`.341Prima della v2.1.260, il runner terminava ogni sessione che raggiungeva il suo limite `--kill-session-after-min` e la contava in `sessions_interrupted_total`.

322 342 

323Il `CLAUDE_RUNNER_EXIT_REASON` dell'hook [`post-session`](/docs/it/self-hosted-environments-configuration#post-session) classifica gli handoff puliti diversamente. L'hook segnala un rilascio, un timeout di avvio e un deassign del server come `interrupted`, perché il runner ha fermato il figlio. Questi contatori registrano gli stessi eventi come `completed`, perché lo slot è stato restituito correttamente.343Il `CLAUDE_RUNNER_EXIT_REASON` dell'hook [`post-session`](/docs/it/self-hosted-environments-configuration#post-session) classifica gli handoff puliti diversamente. L'hook li segnala come `interrupted`, perché il runner ha fermato il figlio: un rilascio, un timeout di avvio, un deassign del server e un'archiviazione o eliminazione che il polling ha notato per primo. Questi contatori registrano gli stessi eventi come `completed`, perché lo slot è stato restituito correttamente.

324 344 

325Se riconcili le ricevute dell'hook direttamente contro `sessions_completed_total`, sottostimi i completamenti. Usa l'hook per le garanzie per sessione e i contatori per i tassi aggregati.345Se riconcili le ricevute dell'hook direttamente contro `sessions_completed_total`, sottostimi i completamenti. Usa l'hook per le garanzie per sessione e i contatori per i tassi aggregati.

326 346 

Details

87 87 

88I flag di dispatch `--environment` e `--ref` richiedono Claude Code v2.1.224 o successivo sulla macchina che esegue lo script, lo stesso limite minimo del runner stesso. Con l'hook in posizione e un runner avviato su questo host, lo script di test:88I flag di dispatch `--environment` e `--ref` richiedono Claude Code v2.1.224 o successivo sulla macchina che esegue lo script, lo stesso limite minimo del runner stesso. Con l'hook in posizione e un runner avviato su questo host, lo script di test:

89 89 

901. Crea una sessione sull'ambiente di test con `claude -p "<prompt>" --environment <environment-id> --output-format json`, eseguito da un checkout git in modo che la CLI possa rilevare automaticamente il repository dal remote `origin`. L'opzionale `--ref <branch>` basa il checkout della sessione su un ref denominato invece di HEAD locale. Il comando crea la sessione, stampa una riga di JSON contenente `session_id` e esce senza attendere la risposta di Claude.901. Crea una sessione sull'ambiente di test con `claude -p "<prompt>" --environment <environment-id> --output-format json`. Esegui il comando da un checkout git in modo che la CLI possa rilevare automaticamente il repository dal remote `origin`. L'opzionale `--ref <branch>` basa il checkout della sessione su un ref denominato invece di HEAD locale. Il comando esce senza attendere la risposta di Claude. Ciò che stampa indica al tuo script l'esito:

91 * **Sessione creata**: una riga di JSON come `{"ok":true,"session_id":"session_...","title":"...","url":"...","pool_id":"..."}`

92 * **Creazione della sessione non riuscita**: la riga `{"ok":false,"error":"..."}`, e il comando esce con stato 1

93 * **Alcuni errori precedenti**, come le sessioni cloud non disponibili per la tua organizzazione o un prompt mancante: l'errore su stderr senza alcuna riga JSON, e il comando esce con stato 1

912. Attende che la risposta appaia in `$E2E_REPLY_DIR/<session_id>.txt`, scritta dall'hook Stop sul runner una volta completato il turno.942. Attende che la risposta appaia in `$E2E_REPLY_DIR/<session_id>.txt`, scritta dall'hook Stop sul runner una volta completato il turno.

923. Invia un follow-up con `claude -p "<message>" --cloud <session_id> --output-format json` (vedere [Inviare un messaggio di follow-up a una sessione in esecuzione](/docs/it/claude-code-on-the-web#send-follow-ups-from-the-cli)), che pubblica un evento utente nella sessione esistente e esce.953. Invia un follow-up con `claude -p "<message>" --cloud <session_id> --output-format json` (vedere [Inviare un messaggio di follow-up a una sessione in esecuzione](/docs/it/claude-code-on-the-web#send-follow-ups-from-the-cli)), che pubblica un evento utente nella sessione esistente e esce.

934. Attende la risposta del follow-up nello stesso modo del passo 2.964. Attende la risposta del follow-up nello stesso modo del passo 2.


104 Script di esempio107 Script di esempio

105</h2>108</h2>

106 109 

107Lo script seguente esegue il ciclo completo contro `$CLAUDE_TEST_ENVIRONMENT_ID`, l'ID `ccpool_...` del tuo ambiente di test, mostrato nella finestra di dialogo dei dettagli dell'ambiente nella pagina di amministrazione o restituito dalla [chiamata create-environment](#create-a-dedicated-test-environment), e asserisce su una frase sentinella in ogni risposta. Eseguilo da un checkout git del repository su cui desideri che la sessione lavori, dopo aver avviato un runner su questo host con l'hook di cattura installato e `E2E_REPLY_DIR` esportato. Per prima cosa, accedi con un account claude.ai sulla macchina che esegue lo script, come descritto in [Autenticarsi dalla CI](#authenticate-from-ci). Senza tale accesso, il primo invio non riesce con un errore come `Unable to get organization UUID for cloud session creation`.110Lo script di esempio viene eseguito sulla stessa macchina del test runner. Prima di eseguirlo, prepara quella macchina:

111 

112* **Checkout del repository**: esegui lo script da un checkout git del repository su cui desideri che la sessione lavori.

113* **Runner**: avvia un runner su questo host con l'hook di cattura installato e `E2E_REPLY_DIR` esportato.

114* **Accesso**: accedi con un account claude.ai sulla macchina che esegue lo script, come descritto in [Autenticarsi dalla CI](#authenticate-from-ci).

115* **ID dell'ambiente**: imposta `CLAUDE_TEST_ENVIRONMENT_ID` sull'ID `ccpool_...` del tuo ambiente di test, mostrato nella finestra di dialogo dei dettagli dell'ambiente nella pagina di amministrazione o restituito dalla [chiamata create-environment](#create-a-dedicated-test-environment).

116 

117Lo script seguente esegue il ciclo completo contro `$CLAUDE_TEST_ENVIRONMENT_ID` e asserisce su una frase sentinella in ogni risposta.

108 118 

109```bash theme={null}119```bash theme={null}

110#!/usr/bin/env bash120#!/usr/bin/env bash


152TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"162TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"

153EXPECT1="ok: custom tools are reachable"163EXPECT1="ok: custom tools are reachable"

154create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \164create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \

155 --ref "$TEST_REPO_REF" --output-format json)165 --ref "$TEST_REPO_REF" --output-format json < /dev/null)

156echo "create: $create_json"166echo "create: $create_json"

157SESSION_ID=$(jq -er '.session_id' <<<"$create_json")167SESSION_ID=$(jq -er '.session_id' <<<"$create_json")

158 168 


163# 3. Post a follow-up via the CLI.173# 3. Post a follow-up via the CLI.

164TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"174TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"

165EXPECT2="ok: follow-up delivered"175EXPECT2="ok: follow-up delivered"

166followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json)176followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json < /dev/null)

167echo "followup: $followup_json"177echo "followup: $followup_json"

168jq -e '.ok == true' <<<"$followup_json" >/dev/null178jq -e '.ok == true' <<<"$followup_json" >/dev/null

169 179 

Details

638| [`claudeMdExcludes`](#claudemdexcludes) | Salta file [CLAUDE.md](/docs/it/memory#exclude-specific-claude-md-files) specifici quando viene caricata la memoria | Memoria e contesto | Any file |638| [`claudeMdExcludes`](#claudemdexcludes) | Salta file [CLAUDE.md](/docs/it/memory#exclude-specific-claude-md-files) specifici quando viene caricata la memoria | Memoria e contesto | Any file |

639| [`cleanupPeriodDays`](#cleanupperioddays) | Scegli per quanti giorni Claude Code conserva le [trascrizioni](/docs/it/data-usage#data-retention) prima di eliminarle | Privacy e telemetria | Any file |639| [`cleanupPeriodDays`](#cleanupperioddays) | Scegli per quanti giorni Claude Code conserva le [trascrizioni](/docs/it/data-usage#data-retention) prima di eliminarle | Privacy e telemetria | Any file |

640| [`companyAnnouncements`](#companyannouncements) | Mostra gli annunci della tua organizzazione all'avvio | Interfaccia e terminale | Any file |640| [`companyAnnouncements`](#companyannouncements) | Mostra gli annunci della tua organizzazione all'avvio | Interfaccia e terminale | Any file |

641| [`copyFullResponse`](#copyfullresponse) | Fai in modo che [`/copy`](/docs/it/commands) copi la risposta completa senza mostrare il selettore dei blocchi di codice | Impostazioni di configurazione globale | Global config |641| [`copyFullResponse`](#copyfullresponse) | Fai in modo che [`/copy`](/docs/it/commands) copi la risposta completa senza mostrare il selettore | Impostazioni di configurazione globale | Global config |

642| [`copyOnSelect`](#copyonselect) | Disattiva la copia automatica del testo che selezioni con il mouse nel [rendering a schermo intero](/docs/it/fullscreen#use-the-mouse) e nella vista agenti | Impostazioni di configurazione globale | Global config |642| [`copyOnSelect`](#copyonselect) | Disattiva la copia automatica del testo che selezioni con il mouse nel [rendering a schermo intero](/docs/it/fullscreen#use-the-mouse) e nella vista agenti | Impostazioni di configurazione globale | Global config |

643| [`crossSessionInbound`](#crosssessioninbound) | Scegli se Claude Code consegna i [messaggi dalle tue altre sessioni](/docs/it/cross-session-messaging#control-inbound-messages), mostra un avviso senza consegnarli o li rifiuta | Agenti, sessioni e worktree | Any file |643| [`crossSessionInbound`](#crosssessioninbound) | Scegli se Claude Code consegna i [messaggi dalle tue altre sessioni](/docs/it/cross-session-messaging#control-inbound-messages), mostra un avviso senza consegnarli o li rifiuta | Agenti, sessioni e worktree | Any file |

644| [`defaultShell`](#defaultshell) | Scegli se Bash o PowerShell esegue i comandi shell che digiti con il [prefisso `!`](/docs/it/interactive-mode#shell-mode-with-prefix) | Interfaccia e terminale | Any file |644| [`defaultShell`](#defaultshell) | Scegli se Bash o PowerShell esegue i comandi shell che digiti con il [prefisso `!`](/docs/it/interactive-mode#shell-mode-with-prefix) | Interfaccia e terminale | Any file |


684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Disattiva o attiva gli snapshot dei file che [`/rewind`](/docs/it/checkpointing) ripristina | Memoria e contesto | Any file |684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Disattiva o attiva gli snapshot dei file che [`/rewind`](/docs/it/checkpointing) ripristina | Memoria e contesto | Any file |

685| [`fileSuggestion`](#filesuggestion) | Fornisci l'[autocompletamento dei file `@`](/docs/it/interactive-mode#quick-commands) da un tuo comando | Interfaccia e terminale | Any file |685| [`fileSuggestion`](#filesuggestion) | Fornisci l'[autocompletamento dei file `@`](/docs/it/interactive-mode#quick-commands) da un tuo comando | Interfaccia e terminale | Any file |

686| [`footerLinksRegexes`](#footerlinksregexes) | Trasforma gli ID di issue o di revisione nell'output in [link cliccabili](/docs/it/statusline#clickable-links) sotto la casella di input | Interfaccia e terminale | User or managed |686| [`footerLinksRegexes`](#footerlinksregexes) | Trasforma gli ID di issue o di revisione nell'output in [link cliccabili](/docs/it/statusline#clickable-links) sotto la casella di input | Interfaccia e terminale | User or managed |

687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Imposta l'[URL del gateway](/docs/it/claude-apps-gateway#set-the-gateway-url) a cui si connette la schermata di accesso | Autenticazione e provider | Managed |687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Imposta l'[URL del gateway](/docs/it/claude-apps-gateway#set-the-gateway-url) a cui si connette la schermata di accesso | Autenticazione e provider | User or managed |

688| [`forceLoginMethod`](#forceloginmethod) | [Limita l'accesso](/docs/it/authentication#restrict-login-to-your-organization) a claude.ai, Claude Console o un [gateway cloud](/docs/it/claude-apps-gateway) | Autenticazione e provider | Any file |688| [`forceLoginMethod`](#forceloginmethod) | [Limita l'accesso](/docs/it/authentication#restrict-login-to-your-organization) a claude.ai, Claude Console o un [gateway cloud](/docs/it/claude-apps-gateway) | Autenticazione e provider | Any file |

689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Vincola gli accessi a claude.ai alla tua organizzazione](/docs/it/authentication#restrict-login-to-your-organization); solo una fonte gestita lo applica | Autenticazione e provider | Any file |689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Vincola gli accessi a claude.ai alla tua organizzazione](/docs/it/authentication#restrict-login-to-your-organization); solo una fonte gestita lo applica | Autenticazione e provider | Any file |

690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Blocca l'avvio finché le [impostazioni gestite dal server](/docs/it/server-managed-settings) non vengono recuperate di nuovo | Impostazioni aziendali e gestite | Managed |690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Blocca l'avvio finché le [impostazioni gestite dal server](/docs/it/server-managed-settings) non vengono recuperate di nuovo | Impostazioni aziendali e gestite | Managed |


6085 6085 

6086Limita il tipo di account con cui le persone possono accedere. Imposta `"claudeai"` per consentire solo account claude.ai, `"console"` per consentire solo account Claude Console, o `"gateway"` per inviare le persone a un [cloud gateway](/docs/it/claude-apps-gateway) invece di un accesso di prima parte. Gli amministratori lo impostano nelle impostazioni gestite e lo associano a [`forceLoginOrgUUID`](#forceloginorguuid) per mantenere gli accessi claude.ai degli sviluppatori all'interno di un'organizzazione. Se lo imposti su `"claudeai"` o `"console"` in qualsiasi file di impostazioni, Claude Code smette anche di offrire l'[accesso Console senza chiave](/docs/it/authentication#sign-in-without-an-api-key) nelle sessioni a cui si applica quel file.6086Limita il tipo di account con cui le persone possono accedere. Imposta `"claudeai"` per consentire solo account claude.ai, `"console"` per consentire solo account Claude Console, o `"gateway"` per inviare le persone a un [cloud gateway](/docs/it/claude-apps-gateway) invece di un accesso di prima parte. Gli amministratori lo impostano nelle impostazioni gestite e lo associano a [`forceLoginOrgUUID`](#forceloginorguuid) per mantenere gli accessi claude.ai degli sviluppatori all'interno di un'organizzazione. Se lo imposti su `"claudeai"` o `"console"` in qualsiasi file di impostazioni, Claude Code smette anche di offrire l'[accesso Console senza chiave](/docs/it/authentication#sign-in-without-an-api-key) nelle sessioni a cui si applica quel file.

6087 6087 

6088* **Scope**: [`Any file`](#scopes). Claude Code onora `"gateway"` solo da una fonte gestita sulla macchina: `managed-settings.json`, il plist macOS o il registro HKLM di Windows, o un helper di policy. Tratta `"gateway"` come non impostato nelle impostazioni utente, progetto, locali, HKCU e gestite dal server, la stessa regola di [`forceLoginGatewayUrl`](#forcelogingatewayurl).6088* **Scope**: [`Any file`](#scopes). Claude Code onora `"gateway"` dalle stesse fonti di [`forceLoginGatewayUrl`](#forcelogingatewayurl) e lo tratta come non impostato ovunque altrove.

6089* **Type**: string, uno di:6089* **Type**: string, uno di:

6090 * `"claudeai"`: solo gli account claude.ai possono accedere6090 * `"claudeai"`: solo gli account claude.ai possono accedere

6091 * `"console"`: solo gli account Claude Console possono accedere6091 * `"console"`: solo gli account Claude Console possono accedere


6108 6108 

6109Imposta l'URL del gateway a cui si connette la schermata `/login` Cloud gateway, in modo che le persone raggiungano il tuo [cloud gateway](/docs/it/claude-apps-gateway) senza digitare il suo indirizzo. La schermata non ha un campo URL: con questa chiave impostata, mostra l'URL del tuo gateway e si connette quando la persona preme Invio; senza di essa, dice loro di contattare il loro amministratore IT.6109Imposta l'URL del gateway a cui si connette la schermata `/login` Cloud gateway, in modo che le persone raggiungano il tuo [cloud gateway](/docs/it/claude-apps-gateway) senza digitare il suo indirizzo. La schermata non ha un campo URL: con questa chiave impostata, mostra l'URL del tuo gateway e si connette quando la persona preme Invio; senza di essa, dice loro di contattare il loro amministratore IT.

6110 6110 

6111O questa chiave o `forceLoginMethod: "gateway"` rende la macchina solo gateway, ad eccezione delle sessioni che selezionano un provider cloud con `CLAUDE_CODE_USE_*`. `/login` si apre quindi sulla schermata Cloud gateway senza un selettore di metodo di accesso. Vedi [La policy dell'amministratore richiede un accesso Cloud gateway](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) per cosa succede a un accesso di prima parte residuo o a una chiave API. Imposta entrambe le chiavi in modo che la schermata si connetta invece di mostrare un errore.6111Nelle impostazioni gestite, questa chiave o `forceLoginMethod: "gateway"` rende la macchina solo gateway, ad eccezione delle sessioni che selezionano un provider cloud con `CLAUDE_CODE_USE_*`. `/login` si apre quindi sulla schermata Cloud gateway senza un selettore di metodo di accesso. Vedi [La policy dell'amministratore richiede un accesso Cloud gateway](/docs/it/errors#administrator-policy-requires-a-cloud-gateway-sign-in) per cosa succede a un accesso di prima parte residuo o a una chiave API. Imposta entrambe le chiavi in modo che la schermata si connetta invece di mostrare un errore.

6112 6112 

6113* **Scope**: [`Managed`](#scopes). Letto solo da una fonte sulla macchina: `managed-settings.json`, il plist macOS o il registro HKLM di Windows, o un helper di policy. Claude Code lo ignora nelle impostazioni HKCU e gestite dal server.6113* **Scope**: [`User or managed`](#scopes). Letto da una fonte gestita sulla macchina: `managed-settings.json`, il plist macOS o il registro HKLM di Windows, o un helper di policy. Su una macchina che non ha nessuna di queste, Claude Code v2.1.295 o successivo lo legge anche dalle [impostazioni utente](/docs/it/claude-apps-gateway#set-the-gateway-url-in-user-settings). Claude Code lo ignora nelle impostazioni HKCU e gestite dal server.

6114* **Type**: string, un URL completo incluso lo schema6114* **Type**: string, un URL completo incluso lo schema

6115* **Default**: non impostato, quindi la schermata Cloud gateway mostra un errore che dice alle persone di contattare il loro amministratore IT6115* **Default**: non impostato, quindi la schermata Cloud gateway mostra un errore che dice alle persone di contattare il loro amministratore IT

6116 6116 


6806 `copyFullResponse`6806 `copyFullResponse`

6807</h3>6807</h3>

6808 6808 

6809Fai in modo che [`/copy`](/docs/it/commands) copi la risposta completa ogni volta, senza il selettore che altrimenti mostra quando la risposta contiene blocchi di codice. Selezionare **Always copy full response** in quel selettore imposta questa chiave su `true`. Appare in `/config` come **Skip the /copy picker**.6809Fai in modo che [`/copy`](/docs/it/commands) copi la risposta completa ogni volta, senza mostrare il selettore. Selezionare **Always copy full response** in quel selettore imposta questa chiave su `true`. Appare in `/config` come **Skip the /copy picker**.

6810 6810 

6811* **Scope**: [`Global config`](#scopes)6811* **Scope**: [`Global config`](#scopes)

6812* **Type**: Boolean6812* **Type**: Boolean

6813 * `true`: `/copy` copia la risposta completa senza mostrare il selettore6813 * `true`: `/copy` copia la risposta completa senza mostrare il selettore

6814 * `false`: quando la risposta contiene blocchi di codice, `/copy` mostra un selettore dove scegli un blocco di codice o la risposta completa6814 * `false`: quando la risposta contiene blocchi di codice o citazioni, `/copy` mostra un selettore dove scegli un blocco o la risposta completa

6815* **Default**: `false`6815* **Default**: `false`

6816 6816 

6817```json ~/.claude.json theme={null}6817```json ~/.claude.json theme={null}

skills.md +1 −1

Details

235 235 

236Se una skill esiste solo in `~/.claude/skills/` sulla tua macchina, Claude Code segnala che la skill non è stata trovata quando una [routine](/docs/it/routines) la invoca, perché ogni esecuzione di una routine inizia come una nuova sessione cloud. Per rendere disponibile una skill personale in queste sessioni:236Se una skill esiste solo in `~/.claude/skills/` sulla tua macchina, Claude Code segnala che la skill non è stata trovata quando una [routine](/docs/it/routines) la invoca, perché ogni esecuzione di una routine inizia come una nuova sessione cloud. Per rendere disponibile una skill personale in queste sessioni:

237 237 

238* Per le sessioni Cowork e cloud, abilita la skill per il tuo account claude.ai.238* Per le sessioni Cowork e cloud, abilita la skill per il tuo account claude.ai. [Alcune sessioni in un ambiente self-hosted](/docs/it/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) non caricano le skill del tuo account.

239* Per le sessioni cloud, puoi in alternativa fare il commit della skill in `.claude/skills/` del repository. I plugin dichiarati in `.claude/settings.json` del repository e i plugin abilitati solo nelle tue impostazioni utente [non vengono caricati nelle sessioni cloud](/docs/it/cloud-environments#what-carries-over-from-your-setup).239* Per le sessioni cloud, puoi in alternativa fare il commit della skill in `.claude/skills/` del repository. I plugin dichiarati in `.claude/settings.json` del repository e i plugin abilitati solo nelle tue impostazioni utente [non vengono caricati nelle sessioni cloud](/docs/it/cloud-environments#what-carries-over-from-your-setup).

240 240 

241Le [attività pianificate di Desktop](/docs/it/desktop-scheduled-tasks) vengono eseguite localmente sulla tua macchina, quindi caricano `~/.claude/skills/`.241Le [attività pianificate di Desktop](/docs/it/desktop-scheduled-tasks) vengono eseguite localmente sulla tua macchina, quindi caricano `~/.claude/skills/`.

Details

122}122}

123```123```

124 124 

125<h2 id="see-session-status-in-your-terminal">

126 Visualizzare lo stato della sessione nel terminale

127</h2>

128 

129Se il tuo terminale implementa l'OSC 7501 Program Status Protocol, può mostrare se ogni sessione interattiva di Claude Code è al lavoro, in attesa di te o completata, il che è utile quando esegui attività lunghe o più sessioni contemporaneamente. Non c'è nulla da attivare in Claude Code. Per scoprire se il tuo terminale implementa il protocollo e dove mostra lo stato, consulta la sua documentazione.

130 

131Se lo implementa e non vedi alcuno stato per una sessione, verifica ciascuna di queste cause:

132 

133* **Versione di Claude Code**: la segnalazione dello stato richiede Claude Code v2.1.295 o successiva. Esegui `claude --version` nella tua shell per verificarlo.

134* **tmux**: all'interno di tmux, Claude Code verifica il supporto in tmux invece che nel tuo terminale, e [`allow-passthrough`](#configure-tmux) non ha alcun effetto su questo. Avvia la sessione al di fuori di tmux.

135* **Sessione in background**: una [sessione in background](/docs/it/agent-view) non segnala il proprio stato al tuo terminale, nemmeno mentre sei collegato a essa. La vista agenti mostra invece il suo stato.

136* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](/docs/it/env-vars#variables)**: se imposti questa variabile su `1`, Claude Code non verifica il supporto né segnala lo stato. Rimuovila.

137 

125<h2 id="configure-tmux">138<h2 id="configure-tmux">

126 Configurare tmux139 Configurare tmux

127</h2>140</h2>

tools-reference.md +27 −10

Details

279 279 

280Lo strumento Edit esegue la sostituzione esatta di stringhe. Accetta un `old_string` e un `new_string` e sostituisce il primo con il secondo. Non utilizza regex o fuzzy matching.280Lo strumento Edit esegue la sostituzione esatta di stringhe. Accetta un `old_string` e un `new_string` e sostituisce il primo con il secondo. Non utilizza regex o fuzzy matching.

281 281 

282Tre controlli devono superare affinché una modifica venga applicata. Prima di qualsiasi controllo, un percorso corrispondente a una [regola di negazione `Read`](/docs/it/permissions#tool-specific-permission-rules) viene rifiutato, inclusa la creazione di un nuovo file lì. Il rifiuto richiede Claude Code v2.1.208 o successivo.282Questi controlli devono essere superati affinché una modifica venga applicata. Prima di qualsiasi controllo, un percorso corrispondente a una [regola di negazione `Read`](/docs/it/permissions#tool-specific-permission-rules) viene rifiutato, inclusa la creazione di un nuovo file lì. Il rifiuto richiede Claude Code v2.1.208 o successivo.

283 283 

284* **Read-before-edit**: Claude legge il file nella conversazione corrente prima di modificarlo, e una lettura interrotta con un avviso [`PARTIAL view`](#read-tool-behavior) non conta. Claude Opus 4.6, Claude Haiku 4.5 e i modelli più vecchi richiedono sempre la lettura. I modelli più recenti possono modificare un file non letto quando la lettura non richiederebbe un prompt di autorizzazione e lo strumento Read è disponibile.284* **Read-before-edit**: Claude legge il file nella conversazione corrente prima di modificarlo, e una lettura interrotta con un [avviso `PARTIAL view`](#large-files) non conta. Claude Opus 4.6, Claude Haiku 4.5 e i modelli più vecchi richiedono sempre la lettura. I modelli più recenti possono modificare un file non letto quando la lettura non richiederebbe una richiesta di permesso e lo strumento Read è disponibile.

285* **Match**: `old_string` deve apparire nel file esattamente come scritto. Una singola differenza di spazio bianco o indentazione è sufficiente per non trovare una corrispondenza.285* **Match**: `old_string` deve apparire nel file esattamente come scritto. Una singola differenza di spazio bianco o indentazione è sufficiente per non trovare una corrispondenza.

286* **Uniqueness**: `old_string` deve apparire esattamente una volta. Quando appare più di una volta, Claude fornisce una stringa più lunga con contesto circostante sufficiente per identificare un'occorrenza, oppure imposta `replace_all: true` per sostituirle tutte.286* **Uniqueness**: `old_string` deve apparire esattamente una volta. Quando appare più di una volta, Claude fornisce una stringa più lunga con contesto circostante sufficiente per identificare un'occorrenza, oppure imposta `replace_all: true` per sostituirle tutte.

287 287 

288Un file che è cambiato su disco dopo che Claude l'ha letto per l'ultima volta può comunque essere modificato quando `old_string` corrisponde esattamente al contenuto attuale in modo univoco e Claude Code può leggere il file senza richiedere un prompt. La corrispondenza con il contenuto attuale del file mantiene questa sicurezza, e il risultato nota che il file contiene altre modifiche in modo che Claude lo rilegga prima di modifiche che dipendono dal contenuto circostante. In qualsiasi altro caso, come un `old_string` obsoleto o uno che corrisponde più di una volta senza `replace_all`, Claude legge di nuovo il file prima di modificarlo. La gestione rilassata di file non letti e modificati richiede Claude Code v2.1.208 o successivo; prima di ciò, Claude Code rifiutava qualsiasi modifica a un file che non aveva letto nella conversazione o che era cambiato su disco dopo la lettura.288Un file che è cambiato su disco dopo che Claude l'ha letto per l'ultima volta può comunque essere modificato quando `old_string` corrisponde esattamente al contenuto attuale in modo univoco e Claude Code può leggere il file senza richiedere un prompt. La corrispondenza con il contenuto attuale del file mantiene questa sicurezza, e il risultato nota che il file contiene altre modifiche in modo che Claude lo rilegga prima di modifiche che dipendono dal contenuto circostante. In qualsiasi altro caso, come un `old_string` obsoleto o uno che corrisponde più di una volta senza `replace_all`, Claude legge di nuovo il file prima di modificarlo. La gestione rilassata di file non letti e modificati richiede Claude Code v2.1.208 o successivo; prima di ciò, Claude Code rifiutava qualsiasi modifica a un file che non aveva letto nella conversazione o che era cambiato su disco dopo la lettura.

289 289 

290La visualizzazione di un file con Bash soddisfa il requisito read-before-edit quando il comando è `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, o `rg` su un singolo file senza pipe o reindirizzamenti. L'output tramite pipe e altri comandi Bash non contano verso il controllo read-before-edit.290La visualizzazione di un file con Bash soddisfa anche il requisito read-before-edit quando il comando è `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, o `rg` su un singolo file senza pipe o reindirizzamenti. Una ricerca che non trova corrispondenze lascia il file non letto. L'output tramite pipe e altri comandi Bash non contano verso il controllo read-before-edit.

291 291 

292Quando Claude visualizza un file in questo modo, Claude Code carica anche gli eventuali [`CLAUDE.md` delle sottodirectory](/docs/it/memory#how-claude-md-files-load) e le [regole con ambito di percorso](/docs/it/memory#path-specific-rules) che si applicano a quel file. Consulta [Regole di permesso Read e Edit](/docs/it/permissions#read-and-edit) per sapere quali comandi Bash sono coperti dalle tue regole di negazione `Read` e `Edit`.292Quando Claude visualizza un file in questo modo, Claude Code carica anche gli eventuali [`CLAUDE.md` delle sottodirectory](/docs/it/memory#how-claude-md-files-load) e le [regole con ambito di percorso](/docs/it/memory#path-specific-rules) che si applicano a quel file. Consulta [Regole di permesso Read e Edit](/docs/it/permissions#read-and-edit) per sapere quali comandi Bash sono coperti dalle tue regole di negazione `Read` e `Edit`.

293 293 

294<h3 id="non-utf-8-files">

295 File non UTF-8

296</h3>

297 

298Edit e [NotebookEdit](#notebookedit-tool-behavior) si rifiutano di modificare un file i cui byte non vengono decodificati come UTF-8 e non scrivono nulla, perché salvarlo di nuovo come UTF-8 trasformerebbe ogni byte che non sono riusciti a decodificare nel carattere sostitutivo `U+FFFD`. Questo riguarda, ad esempio, un file con testo non ASCII in una codifica legacy come Windows-1252 o Shift-JIS, un file binario e un file UTF-8 con una sequenza di byte non valida. L'[errore che Claude riceve](/docs/it/errors#file-is-not-valid-utf-8) gli indica di apportare la modifica con un comando shell che legge e scrive il file nella sua codifica, oppure di chiederti se convertire prima il file in UTF-8. Edit legge invece come UTF-16 un file che inizia con un byte-order mark UTF-16 little-endian, quindi quel file rimane modificabile.

299 

300Write non condivide questo rifiuto. Su un file che Edit rifiuterebbe, Write sostituisce l'intero file con il nuovo contenuto e lo salva come UTF-8, quindi la codifica originale del file va persa. Write si rifiuta, e non scrive nulla, quando il file su disco non viene decodificato e il nuovo contenuto contiene `U+FFFD`, il carattere che Read mostra per i byte che non riesce a decodificare.

301 

294<h2 id="endconversation-tool-behavior">302<h2 id="endconversation-tool-behavior">

295 Comportamento dello strumento EndConversation303 Comportamento dello strumento EndConversation

296</h2>304</h2>


455* `insert`: aggiungi una nuova cella dopo la target. Senza `cell_id`, la nuova cella va all'inizio del notebook. Richiede `cell_type` impostato a `code` o `markdown`.463* `insert`: aggiungi una nuova cella dopo la target. Senza `cell_id`, la nuova cella va all'inizio del notebook. Richiede `cell_type` impostato a `code` o `markdown`.

456* `delete`: rimuovi la cella target.464* `delete`: rimuovi la cella target.

457 465 

466NotebookEdit rifiuta un file notebook che non viene decodificato come UTF-8, secondo la [stessa regola di Edit](#non-utf-8-files), e non scrive nulla.

467 

458Le regole di autorizzazione utilizzano il formato di percorso `Edit(...)`. Una regola come `Edit(notebooks/**)` copre le chiamate NotebookEdit su file in quella directory.468Le regole di autorizzazione utilizzano il formato di percorso `Edit(...)`. Una regola come `Edit(notebooks/**)` copre le chiamate NotebookEdit su file in quella directory.

459 469 

460<h2 id="powershell-tool">470<h2 id="powershell-tool">


547 557 

548Lo strumento Read accetta un percorso di file e restituisce i contenuti con numeri di riga. Claude è istruito a passare sempre percorsi assoluti.558Lo strumento Read accetta un percorso di file e restituisce i contenuti con numeri di riga. Claude è istruito a passare sempre percorsi assoluti.

549 559 

550Per impostazione predefinita, Read restituisce il file dall'inizio. Quando una lettura dell'intero file supera il limite di token, Read restituisce la prima pagina con un avviso `PARTIAL view` che comunica a Claude quanto del file ha ricevuto e come leggere di più con `offset` e `limit`. Una lettura che passa un `offset` o `limit` esplicito e supera comunque il limite di token restituisce un errore.

551 

552Una lettura con un `limit` esplicito si interrompe non appena le righe selezionate superano ciò che il limite di token potrebbe mai contenere e restituisce un errore senza caricare il resto dell'intervallo. L'errore comunica a Claude di usare un `limit` più piccolo, o di cercare contenuti specifici con [Grep](#grep-tool-behavior) invece quando una singola riga è così grande. Prima della v2.1.208, Claude Code caricava l'intero intervallo in memoria prima di rifiutarlo, quindi la lettura di un file con una singola riga estremamente lunga poteva esaurire la memoria.

553 

554La lettura di un file vuoto restituisce un avviso che il file esiste ma i suoi contenuti sono vuoti, e un `offset` oltre l'ultima riga restituisce un avviso che fornisce il conteggio delle righe del file. Prima della v2.1.208, la lettura di un file vuoto restituiva invece l'avviso past-the-end.560La lettura di un file vuoto restituisce un avviso che il file esiste ma i suoi contenuti sono vuoti, e un `offset` oltre l'ultima riga restituisce un avviso che fornisce il conteggio delle righe del file. Prima della v2.1.208, la lettura di un file vuoto restituiva invece l'avviso past-the-end.

555 561 

556Read gestisce diversi tipi di file oltre al testo semplice:562Read gestisce diversi tipi di file oltre al testo semplice:

557 563 

558* **Immagini**: PNG, JPG e altri formati di immagine vengono restituiti come contenuto visivo che Claude può vedere, non come byte grezzi. Claude Code ridimensiona e ricomprime le immagini grandi per adattarsi ai limiti di dimensione dell'immagine del modello prima di inviarle, quindi Claude potrebbe vedere una versione ridotta di uno screenshot grande. Un'immagine che è ancora più grande di 500KB dopo quel ridimensionamento viene ricodificata come JPEG a qualità ridotta con le sue dimensioni in pixel invariate. Se Claude perde dettagli a livello di pixel fine in un'immagine grande, chiedigli di ritagliare prima la regione di interesse, ad esempio con ImageMagick tramite Bash.564* **Immagini**: PNG, JPG e altri formati di immagine vengono restituiti come contenuto visivo che Claude può vedere, non come byte grezzi. Claude Code ridimensiona e ricomprime le immagini grandi per adattarsi ai limiti di dimensione dell'immagine del modello prima di inviarle, quindi Claude potrebbe vedere una versione ridotta di uno screenshot grande. Un'immagine che è ancora più grande di 500KB dopo quel ridimensionamento viene ricodificata come JPEG a qualità ridotta con le sue dimensioni in pixel invariate. Se Claude perde dettagli a livello di pixel fine in un'immagine grande, chiedigli di ritagliare prima la regione di interesse, ad esempio con ImageMagick tramite Bash.

559* **PDF**: Claude legge i file `.pdf` brevi per intero. Per i PDF più lunghi di 10 pagine, legge in intervalli con un parametro `pages`, come `"1-5"`, fino a 20 pagine alla volta. Le letture di intervalli di pagine rendono le pagine con `pdftoppm` da poppler-utils, quindi installarlo con `brew install poppler` su macOS o `apt-get install poppler-utils` su Debian e Ubuntu. Su Windows e altre piattaforme, installare una build di poppler che metta `pdftoppm` nel vostro `PATH`. Senza di esso, una lettura di intervallo di pagine fallisce con `pdftoppm is not installed`.565* **PDF**: Claude legge i file `.pdf` brevi per intero. Per i PDF più lunghi di 10 pagine, legge in intervalli con un parametro `pages`, come `"1-5"`, fino a 20 pagine alla volta. Le letture di intervalli di pagine rendono le pagine con `pdftoppm` da poppler-utils, quindi installarlo con `brew install poppler` su macOS o `apt-get install poppler-utils` su Debian e Ubuntu. Su Windows e altre piattaforme, installare una build di poppler che metta `pdftoppm` nel vostro `PATH`. Senza di esso, una lettura di intervallo di pagine fallisce con `pdftoppm is not installed`.

560* **Notebook Jupyter**: i file `.ipynb` restituiscono tutte le celle con i loro output, inclusi codice, markdown e visualizzazioni. Claude Code rifiuta di leggere un file notebook più grande di 100 MB; l'errore comunica a Claude come leggere una porzione del notebook invece, come una sezione di celle, con un comando shell.566* **Notebook Jupyter**: i file `.ipynb` restituiscono tutte le celle con i loro output, inclusi codice, markdown e visualizzazioni. Un notebook le cui celle superano i 256 KB, o il [limite di token](#large-files), restituisce invece un errore. Claude Code rifiuta di leggere un file notebook più grande di 100 MB; l'errore comunica a Claude come leggere una porzione del notebook invece, come una sezione di celle, con un comando shell.

561 567 

562Read legge solo file, non directory. Claude elenca i contenuti della directory con un comando shell come `ls`.568Read legge solo file, non directory. Claude elenca i contenuti della directory con un comando shell come `ls`.

563 569 

570<h3 id="large-files">

571 File di grandi dimensioni

572</h3>

573 

574Claude può leggere un file di testo più grande di quanto restituisca una singola chiamata Read. Per impostazione predefinita, una chiamata restituisce al massimo 25.000 token, o il valore impostato in [`CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS`](/docs/it/env-vars), e rifiuta un file intero di oltre 256 KB, quindi Claude legge un file più grande a pagine con `offset` e `limit`. Su Claude Code v2.1.296 o versioni successive può invece leggere l'intero file, o un lungo intervallo di righe, in una sola chiamata impostando `allow_large: true` quando necessario, ad esempio perché hai chiesto l'intero file. Quella lettura viene dimensionata in base allo spazio rimasto nella [finestra di contesto](/docs/it/context-window) della sessione invece che ai limiti predefiniti. Immagini, PDF e notebook mantengono i loro limiti.

575 

576Cosa riceve Claude quando una lettura supera i limiti predefiniti:

577 

578* **File intero oltre il limite di token**: la prima pagina del file, con un avviso `PARTIAL view` che indica quanto del file ha ricevuto e come leggere di più con `offset` e `limit`

579* **File intero oltre 256 KB, o una lettura con `offset` o `limit` oltre il limite di token**: un errore che gli indica di leggere una porzione con `offset` e `limit`, o di cercare invece contenuti specifici con [Grep](#grep-tool-behavior)

580 

564<h2 id="sendfeedback-tool-behavior">581<h2 id="sendfeedback-tool-behavior">

565 Comportamento dello strumento SendFeedback582 Comportamento dello strumento SendFeedback

566</h2>583</h2>


734 Comportamento dello strumento Write751 Comportamento dello strumento Write

735</h2>752</h2>

736 753 

737Lo strumento Write crea un nuovo file o sovrascrive uno esistente con il contenuto completo fornito. Non aggiunge o unisce.754Lo strumento Write crea un nuovo file o sovrascrive uno esistente con il contenuto completo fornito. Non aggiunge contenuto né esegue il merge. Write sovrascrive anche un file esistente i cui byte non possono essere decodificati e salva il nuovo contenuto come UTF-8, come descritto in [file non UTF-8](#non-utf-8-files).

738 755 

739Se Claude deve leggere un file esistente nella conversazione corrente prima di sovrascriverlo dipende dal modello e dal file:756Se Claude deve leggere un file esistente nella conversazione corrente prima di sovrascriverlo dipende dal modello e dal file:

740 757 

741* Claude Opus 4.6, Claude Haiku 4.5 e i modelli più vecchi richiedono sempre la lettura, quindi una Write su un file esistente non letto fallisce con un errore.758* Claude Opus 4.6, Claude Haiku 4.5 e i modelli più vecchi richiedono sempre la lettura, quindi una Write su un file esistente non letto fallisce con un errore.

742* I modelli più recenti possono sovrascrivere un file che non hanno mai letto in questa sessione nelle stesse condizioni di [read-before-edit](#edit-tool-behavior): leggerlo non richiederebbe un prompt di autorizzazione e lo strumento Read è disponibile.759* I modelli più recenti possono sovrascrivere un file che non hanno mai letto in questa sessione nelle stesse condizioni di [read-before-edit](#edit-tool-behavior): leggerlo non richiederebbe un prompt di autorizzazione e lo strumento Read è disponibile.

743* I notebook Jupyter e i file che Claude ha letto solo parzialmente con un avviso [`PARTIAL view`](#read-tool-behavior) richiedono la lettura su ogni modello.760* I notebook Jupyter e i file che Claude ha letto solo parzialmente con un [avviso `PARTIAL view`](#large-files) richiedono la lettura su ogni modello.

744 761 

745Questo vincolo non si applica ai nuovi file. Prima della v2.1.228, ogni modello richiedeva la lettura prima di sovrascrivere un file esistente.762Questo vincolo non si applica ai nuovi file. Prima della v2.1.228, ogni modello richiedeva la lettura prima di sovrascrivere un file esistente.

746 763 

vs-code.md +1 −1

Details

479 479 

480Claude apre nuove schede per le attività del browser e condivide lo stato di accesso del tuo browser, quindi può accedere a qualsiasi sito a cui sei già connesso.480Claude apre nuove schede per le attività del browser e condivide lo stato di accesso del tuo browser, quindi può accedere a qualsiasi sito a cui sei già connesso.

481 481 

482Per fare in modo che ogni sessione si connetta al tuo browser al suo avvio, senza digitare `@browser`, consulta [Abilitare Chrome per impostazione predefinita](/docs/it/chrome#enable-chrome-by-default). Per i casi in cui Claude Code ti chiede conferma prima di un'azione del browser in una sessione connessa in questo modo, consulta [Richieste di permesso nelle sessioni di VS Code](/docs/it/chrome#permission-prompts-in-vs-code-sessions).482Per fare in modo che ogni sessione si connetta al tuo browser al suo avvio, senza digitare `@browser`, consulta [Abilitare Chrome per impostazione predefinita](/docs/it/chrome#enable-chrome-by-default). Per i casi in cui Claude Code ti chiede conferma prima di un'azione del browser, consulta [Richieste di permesso nelle sessioni di VS Code](/docs/it/chrome#permission-prompts-in-vs-code-sessions).

483 483 

484Per le istruzioni di configurazione, l'elenco completo delle funzionalità e la risoluzione dei problemi, consulta [Usa Claude Code con Chrome](/docs/it/chrome).484Per le istruzioni di configurazione, l'elenco completo delle funzionalità e la risoluzione dei problemi, consulta [Usa Claude Code con Chrome](/docs/it/chrome).

485 485