SpyBara
Go Premium

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

24 files changed +149 −110. View all changes and history on the product overview
2026
Wed 7 07:57 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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


5532 5532 

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

5534 5534 

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

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

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

5538 5538 

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

agent-view.md +1 −0

Details

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

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

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

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

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

823 824 

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

agents.md +1 −1

Details

20 20 

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

22 22 

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

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

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

26 26 

Details

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

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

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

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

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

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

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


91 </Step>91 </Step>

92 92 

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

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

95 </Step>95 </Step>

96 96 

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

Details

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

159 159 

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

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

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

163 163 

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

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


227 227 

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

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

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

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

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

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

Details

249 Postgres249 Postgres

250</h3>250</h3>

251 251 

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

253 

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

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

256 

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

253 258 

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


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

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

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

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

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

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

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

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

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

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

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

Details

70```70```

71 71 

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

73 Distribuire il gateway73 Eseguire il deploy del gateway

74</h2>74</h2>

75 75 

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

77 77 

78<Steps>78<Steps>

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

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

81 81 

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

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

84 84 

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

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


103 </Step>103 </Step>

104 104 

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

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

107 107 

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

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


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

137 ```137 ```

138 138 

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

140 140 

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

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


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

162 ```162 ```

163 163 

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

165 165 

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

167 167 

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

169 </Step>169 </Step>

170 170 

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

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

173 173 

174 Per prima cosa, create il gruppo di subnet che posiziona il database nelle subnet private e un gruppo di parametri con `rds.force_ssl=1` in modo che il server rifiuti le connessioni in testo semplice. La versione del motore è fissata una volta perché la famiglia del gruppo di parametri deve corrispondere alla versione principale del motore che l'istanza esegue:174 Per prima cosa, crea il gruppo di subnet che colloca il database nelle subnet private e un gruppo di parametri con `rds.force_ssl=1` in modo che il server rifiuti le connessioni in testo semplice. La versione del motore viene fissata una sola volta perché la famiglia del gruppo di parametri deve corrispondere alla versione principale del motore eseguita dall'istanza:

175 175 

176 ```bash theme={null}176 ```bash theme={null}

177 aws rds create-db-subnet-group --db-subnet-group-name claude-gateway-db \177 aws rds create-db-subnet-group --db-subnet-group-name claude-gateway-db \


186 --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate"186 --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate"

187 ```187 ```

188 188 

189 Quindi create l'istanza con una password principale generata:189 Quindi crea l'istanza con una password principale generata:

190 190 

191 ```bash theme={null}191 ```bash theme={null}

192 PGPASS="$(openssl rand -hex 24)"192 PGPASS="$(openssl rand -hex 24)"


201 --no-publicly-accessible --storage-encrypted201 --no-publicly-accessible --storage-encrypted

202 ```202 ```

203 203 

204 L'argomento letterale `--master-user-password` è visibile nella tabella dei processi e nei log di audit/EDR mentre il comando viene eseguito, la stessa esposizione che la nota del passaggio dei segreti copre. Su un host condiviso o monitorato, passate la password tramite `--cli-input-json` da un file `0600` al posto, il modo in cui `setup.sh` del bundle lo fa.204 L'argomento letterale `--master-user-password` è visibile nella tabella dei processi e nei log di audit/EDR mentre il comando è in esecuzione, la stessa esposizione trattata nella nota del passaggio dei segreti. Su un host condiviso o monitorato, passa invece la password tramite `--cli-input-json` da un file `0600`, come fa il `setup.sh` del bundle.

205 205 

206 Attendete che l'istanza si avvii, il che può richiedere diversi minuti, quindi leggete il suo endpoint privato e assemblate la stringa di connessione che il gateway utilizzerà:206 Attendi che l'istanza sia disponibile, il che può richiedere diversi minuti, quindi leggi il suo endpoint privato e componi la stringa di connessione che il gateway utilizzerà:

207 207 

208 ```bash theme={null}208 ```bash theme={null}

209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db


212 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"212 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"

213 ```213 ```

214 214 

215 `sslmode=verify-full` fa sì che il gateway verifichi la catena del certificato del server RDS e il nome host, non solo crittografare. L'ancora di fiducia è il [bundle di certificati AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), che il passaggio di compilazione dell'immagine sottostante copia in `/etc/claude/rds-global-bundle.pem` e affida tramite `NODE_EXTRA_CA_CERTS`. Non aggiungete un parametro `sslrootcert=` in stile libpq all'URL: il driver del gateway legge solo `sslmode` dalla stringa di query e inoltrerebbe `sslrootcert` a Postgres come parametro di avvio, che il server rifiuta.215 `sslmode=verify-full` fa sì che il gateway verifichi la catena e il nome host del certificato del server RDS, e non si limiti a crittografare. L'ancora di fiducia è il [bundle di certificati AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), che il passaggio di build dell'immagine più avanti copia in `/etc/claude/rds-global-bundle.pem` e considera attendibile tramite `NODE_EXTRA_CA_CERTS`. Non aggiungere all'URL un parametro `sslrootcert=` in stile libpq: il driver del gateway legge solo `sslmode` dalla stringa di query e inoltrerebbe `sslrootcert` a Postgres come parametro di avvio, che il server rifiuta.

216 216 

217 Il servizio ECS o i pod EKS devono essere eseguiti in questo VPC in modo che possano raggiungere l'endpoint privato dell'istanza, e il gruppo di sicurezza `claude-gateway-db` ammette solo il gruppo di sicurezza del gateway.217 Il servizio ECS o i pod EKS devono essere eseguiti in questo VPC per poter raggiungere l'endpoint privato dell'istanza, e il gruppo di sicurezza `claude-gateway-db` ammette solo il gruppo di sicurezza del gateway.

218 </Step>218 </Step>

219 219 

220 <Step title="Scrivere gateway.yaml">220 <Step title="Scrivere gateway.yaml">

221 Il blocco `upstreams` punta a Bedrock con `auth: {}`, quindi il gateway si autentica tramite la catena di credenziali predefinita di AWS dal ruolo di attività su ECS o dal ruolo IRSA su EKS. Consultate il [riferimento di configurazione](/docs/it/claude-apps-gateway-config) per ogni campo.221 Il blocco `upstreams` punta a Bedrock con `auth: {}`, quindi il gateway si autentica tramite la catena di credenziali predefinita di AWS, dal ruolo di attività su ECS o dal ruolo IRSA su EKS. Consulta il [riferimento di configurazione](/docs/it/claude-apps-gateway-config) per ogni campo.

222 222 

223 Due campi `listen` descrivono cosa sta davanti al gateway:223 Due campi `listen` descrivono ciò che sta davanti al gateway:

224 224 

225 * `public_url`: l'origine esterna `https://`, obbligatoria per qualsiasi bind non-loopback; consultate il [riferimento `listen`](/docs/it/claude-apps-gateway-config#listen). Il gateway costruisce l'`redirect_uri` dell'IdP e il suo documento di scoperta solo da questo valore, mai da intestazioni `X-Forwarded-*`.225 * `public_url`: l'origine esterna `https://`, obbligatoria per qualsiasi bind non di loopback; consulta il [riferimento `listen`](/docs/it/claude-apps-gateway-config#listen). Il gateway costruisce il `redirect_uri` dell'IdP e il proprio documento di discovery solo da questo valore, mai dalle intestazioni `X-Forwarded-*`.

226 * `trusted_proxies`: gli intervalli di origine del front end. Il gateway onora `X-Forwarded-For` solo quando il peer TCP è in questo elenco, quindi cammina nella catena oltre i hop affidabili, in modo che i limiti di velocità di accesso per IP e gli eventi di audit registrino gli IP degli sviluppatori al posto di quello del load balancer.226 * `trusted_proxies`: gli intervalli di origine del front end. Il gateway considera `X-Forwarded-For` solo quando il peer TCP è in questo elenco, quindi percorre la catena oltre gli hop attendibili, in modo che i rate limit di accesso per IP e gli eventi di audit registrino gli IP degli sviluppatori anziché quelli del load balancer.

227 227 

228 Su entrambi i percorsi il front end è un ALB interno, creato direttamente o da AWS Load Balancer Controller, e i nodi di un ALB prendono indirizzi dalle subnet a cui è collegato, quindi impostate `trusted_proxies` ai CIDR di quelle subnet. Questo affida ogni host in quelle subnet come proxy. Evitate che l'origine di ingresso dell'ALB, il vostro CIDR aziendale, si sovrapponga ad essi, e non condividete le subnet con carichi di lavoro non affidabili che potrebbero falsificare gli IP dei client tramite `X-Forwarded-For`.228 Su entrambi i percorsi il front end è un ALB interno, creato direttamente o da AWS Load Balancer Controller, e i nodi di un ALB prendono gli indirizzi dalle subnet a cui è collegato, quindi imposta `trusted_proxies` sui CIDR di quelle subnet. In questo modo ogni host in quelle subnet viene considerato un proxy attendibile. Evita che l'origine di ingresso dell'ALB, il tuo CIDR aziendale, si sovrapponga a esse, e non condividere le subnet con carichi di lavoro non attendibili che potrebbero falsificare gli IP dei client tramite `X-Forwarded-For`.

229 229 

230 L'attributo di conservazione del client port dell'ALB, `routing.http.xff_client_port.enabled`, può rimanere a entrambe le impostazioni: con esso attivato, l'ALB scrive il client come `203.0.113.7:54321` o `[2001:db8::1]:54321`, e il gateway legge entrambi con la porta eliminata.230 L'attributo di conservazione della porta del client dell'ALB, `routing.http.xff_client_port.enabled`, può restare su entrambe le impostazioni: se è attivo, l'ALB scrive il client come `203.0.113.7:54321` o `[2001:db8::1]:54321`, e il gateway legge entrambi i formati scartando la porta.

231 231 

232 ```yaml gateway.yaml theme={null}232 ```yaml gateway.yaml theme={null}

233 listen:233 listen:


241 client_id: 0oa1example2241 client_id: 0oa1example2

242 client_secret: ${OIDC_CLIENT_SECRET} # EKS: ${file:/secrets/oidc-client-secret}242 client_secret: ${OIDC_CLIENT_SECRET} # EKS: ${file:/secrets/oidc-client-secret}

243 allowed_email_domains: [example.com]243 allowed_email_domains: [example.com]

244 # Il server di autorizzazione dell'organizzazione Okta restituisce un id_token sottile che omette244 # Il server di autorizzazione dell'organizzazione Okta restituisce un id_token ridotto che omette

245 # email e gruppi; il gateway li riempie da /userinfo.245 # email e gruppi; il gateway li ricava da /userinfo.

246 userinfo_fallback: true246 userinfo_fallback: true

247 # Okta emette gruppi solo quando viene richiesto lo scope `groups` e il247 # Okta emette i gruppi solo quando viene richiesto lo scope `groups` e il

248 # filtro della rivendicazione dei gruppi dell'app lo consente.248 # filtro del claim dei gruppi dell'app li consente.

249 scopes: [openid, profile, email, offline_access, groups]249 scopes: [openid, profile, email, offline_access, groups]

250 250 

251 session:251 session:

252 jwt_secret: ${GATEWAY_JWT_SECRET} # EKS: ${file:/secrets/jwt-secret}252 jwt_secret: ${GATEWAY_JWT_SECRET} # EKS: ${file:/secrets/jwt-secret}

253 ttl_hours: 8 # limita la latenza di deprovisioning; abbassate253 ttl_hours: 8 # limita la latenza di deprovisioning; abbassa

254 # verso 1 per una revoca più stretta254 # verso 1 per una revoca più rapida

255 255 

256 store:256 store:

257 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}257 postgres_url: ${GATEWAY_POSTGRES_URL} # EKS: ${file:/secrets/postgres-url}

258 # readiness_grace_seconds: 300 # mantieni il passaggio del controllo di stato258 # readiness_grace_seconds: 300 # continua a superare il controllo di stato

259 # attraverso un failover RDS259 # durante un failover RDS

260 260 

261 upstreams:261 upstreams:

262 - provider: bedrock262 - provider: bedrock

263 region: <your-region> # corrispondere a $AWS_REGION in modo che gli ARN della politica IAM263 region: <your-region> # uguale a $AWS_REGION affinché gli ARN della

264 # lo coprano264 # policy IAM la coprano

265 auth: {} # catena di credenziali predefinita di AWS:265 auth: {} # catena di credenziali predefinita di AWS:

266 # ruolo di attività ECS, o IRSA su EKS266 # ruolo di attività ECS, o IRSA su EKS

267 ```267 ```

268 268 

269 <Note>269 <Note>

270 Solo il blocco `oidc` è specifico di Okta. Per utilizzare Microsoft Entra ID al posto, impostate `issuer` su `https://login.microsoftonline.com/<tenant-id>/v2.0`, eliminate `userinfo_fallback` e lo scope `groups`, e notate che Entra emette Object ID dei gruppi piuttosto che nomi, quindi [`managed.policies`](/docs/it/claude-apps-gateway-config#managed) deve corrispondere ai GUID, o su App Roles con `oidc.groups_claim: roles`. Consultate [Configurazione del provider di identità](/docs/it/claude-apps-gateway-deploy#identity-provider-setup).270 Solo il blocco `oidc` è specifico di Okta. Per utilizzare invece Microsoft Entra ID, imposta `issuer` su `https://login.microsoftonline.com/<tenant-id>/v2.0`, rimuovi `userinfo_fallback` e lo scope `groups`, e tieni presente che Entra emette gli Object ID dei gruppi anziché i nomi, quindi [`managed.policies`](/docs/it/claude-apps-gateway-config#managed) deve corrispondere ai GUID, oppure agli App Roles con `oidc.groups_claim: roles`. Consulta [Configurazione del provider di identità](/docs/it/claude-apps-gateway-deploy#identity-provider-setup).

271 </Note>271 </Note>

272 </Step>272 </Step>

273 273 

274 <Step title="Archiviare i segreti in AWS Secrets Manager">274 <Step title="Archiviare i segreti in AWS Secrets Manager">

275 Create tre segreti; il ruolo di esecuzione dal passaggio IAM può già leggerli:275 Crea tre segreti; il ruolo di esecuzione del passaggio IAM può già leggerli:

276 276 

277 ```bash theme={null}277 ```bash theme={null}

278 aws secretsmanager create-secret --name gateway-jwt-secret \278 aws secretsmanager create-secret --name gateway-jwt-secret \


283 --secret-string "$GATEWAY_POSTGRES_URL"283 --secret-string "$GATEWAY_POSTGRES_URL"

284 ```284 ```

285 285 

286 Notate l'ARN che ogni chiamata stampa; la definizione di attività ECS fa riferimento ai segreti per ARN.286 Annota l'ARN stampato da ogni chiamata; la definizione di attività ECS fa riferimento ai segreti tramite ARN.

287 287 

288 <Note>288 <Note>

289 Gli argomenti letterali `--secret-string` sono visibili nella tabella dei processi e nei log di audit/EDR mentre ogni comando viene eseguito. Su un host condiviso o monitorato, mettete il valore in un file `0600` e passate `--secret-string file://<path>` al posto. `setup.sh` del bundle mantiene i valori dei segreti fuori da argv del processo allo stesso modo, passando file temporanei `0600` a `--cli-input-json`.289 Gli argomenti letterali `--secret-string` sono visibili nella tabella dei processi e nei log di audit/EDR mentre ogni comando è in esecuzione. Su un host condiviso o monitorato, inserisci invece il valore in un file `0600` e passa `--secret-string file://<path>`. Il `setup.sh` del bundle tiene allo stesso modo i valori dei segreti fuori dagli argv dei processi, passando file temporanei `0600` a `--cli-input-json`.

290 </Note>290 </Note>

291 291 

292 A differenza dei segreti, `gateway.yaml` stesso non contiene valori segreti, perché ogni credenziale si risolve all'avvio tramite l'espansione [`${VAR}` o `${file:...}`](/docs/it/claude-apps-gateway-config#secret-expansion). Come tutto raggiunge il contenitore differisce per percorso:292 A differenza dei segreti, `gateway.yaml` non contiene valori segreti, perché ogni credenziale viene risolta all'avvio tramite l'[espansione `${VAR}` o `${file:...}`](/docs/it/claude-apps-gateway-config#secret-expansion). Il modo in cui tutto arriva al container varia in base al percorso:

293 293 

294 * Su ECS, il passaggio di compilazione successivo copia `gateway.yaml` nell'immagine a `/etc/claude/gateway.yaml`, e la definizione di attività inietta i tre segreti come variabili di ambiente tramite il suo campo `secrets`, quindi lo YAML fa riferimento a `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` e `${GATEWAY_POSTGRES_URL}`.294 * Su ECS, la build del passaggio successivo copia `gateway.yaml` nell'immagine in `/etc/claude/gateway.yaml`, e la definizione di attività inietta i tre segreti come variabili d'ambiente tramite il suo campo `secrets`, quindi lo YAML fa riferimento a `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` e `${GATEWAY_POSTGRES_URL}`.

295 * Su EKS, montate `gateway.yaml` da una ConfigMap e i segreti come file a `/secrets`, referenziati come `${file:/secrets/...}`. Originare i Kubernetes Secrets da Secrets Manager con External Secrets Operator o il provider AWS del driver CSI Secrets Store, o crearli direttamente con `kubectl`.295 * Su EKS, monta `gateway.yaml` da una ConfigMap e i segreti come file in `/secrets`, referenziati come `${file:/secrets/...}`. Ricava i Kubernetes Secrets da Secrets Manager con External Secrets Operator o con il provider AWS del driver CSI Secrets Store, oppure creali direttamente con `kubectl`.

296 </Step>296 </Step>

297 297 

298 <Step title="Compilare e spingere l'immagine ad Amazon ECR">298 <Step title="Eseguire la build e il push dell'immagine su Amazon ECR">

299 Compilate l'immagine secondo i [requisiti dell'immagine del contenitore](/docs/it/claude-apps-gateway-deploy#container-image), posizionando il binario glibc `linux-x64` a `./claude` nel contesto di compilazione. Scrivete il vostro Dockerfile secondo questi requisiti o iniziate dal [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) del bundle, che copia il `gateway.yaml` compilato dai passaggi precedenti nell'immagine a `/etc/claude/gateway.yaml`. Su ECS quella copia incorporata è come la configurazione raggiunge il contenitore, motivo per cui la compilazione viene dopo che il file è stato scritto. Il percorso EKS al posto monta `gateway.yaml` da una ConfigMap al momento della distribuzione, quindi la copia incorporata non viene utilizzata lì.299 Esegui la build dell'immagine secondo i [requisiti dell'immagine del container](/docs/it/claude-apps-gateway-deploy#container-image), posizionando il binario glibc `linux-x64` in `./claude` nel contesto di build. Scrivi il tuo Dockerfile secondo questi requisiti oppure parti dal [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) del bundle, che copia il `gateway.yaml` compilato nei passaggi precedenti nell'immagine in `/etc/claude/gateway.yaml`. Su ECS è questa copia incorporata a portare la configurazione nel container, ed è per questo che la build viene dopo la scrittura del file. Il percorso EKS monta invece `gateway.yaml` da una ConfigMap al momento del deploy, quindi lì la copia incorporata non viene utilizzata.

300 300 

301 L'immagine porta anche il bundle di certificati AWS RDS come ancora di fiducia per la stringa di connessione `sslmode=verify-full`, quindi scaricatelo nel contesto di compilazione per primo. AWS ruota il bundle (nuove CA regionali vengono aggiunte), quindi scaricatelo per compilazione piuttosto che fissare un checksum o impegnarlo:301 L'immagine contiene anche il bundle di certificati AWS RDS come ancora di fiducia per il `sslmode=verify-full` della stringa di connessione, quindi scaricalo prima nel contesto di build. AWS aggiorna periodicamente il bundle (vengono aggiunte nuove CA regionali), quindi scaricalo a ogni build anziché fissarne un checksum o eseguirne il commit:

302 302 

303 ```bash theme={null}303 ```bash theme={null}

304 curl -fL --proto '=https' -o rds-global-bundle.pem \304 curl -fL --proto '=https' -o rds-global-bundle.pem \

305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

306 ```306 ```

307 307 

308 I requisiti dell'immagine del contenitore non coprono il bundle, quindi se scrivete il vostro Dockerfile, aggiungete le due righe che lo copiano e lo affidano; il `Dockerfile` del bundle include già entrambi:308 I requisiti dell'immagine del container non coprono il bundle, quindi se scrivi il tuo Dockerfile, aggiungi le due righe che lo copiano e lo rendono attendibile; il `Dockerfile` del bundle le include già entrambe:

309 309 

310 ```dockerfile theme={null}310 ```dockerfile theme={null}

311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem

312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem

313 ```313 ```

314 314 

315 Create il repository ECR e accedete Docker ad esso. I tag immutabili significano che il tag `<version>` che il passaggio di distribuzione fissa non può essere successivamente reindirizzato silenziosamente a un'immagine diversa:315 Crea il repository ECR ed esegui l'accesso di Docker a esso. I tag immutabili fanno sì che il tag `<version>` fissato nel passaggio di deploy non possa essere in seguito reindirizzato silenziosamente a un'immagine diversa:

316 316 

317 ```bash theme={null}317 ```bash theme={null}

318 aws ecr create-repository --repository-name claude-gateway \318 aws ecr create-repository --repository-name claude-gateway \


323 "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"323 "${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"

324 ```324 ```

325 325 

326 Compilate e spingete l'immagine. La definizione di attività sottostante esegue `linux/amd64`, quindi la piattaforma deve corrispondere qui; per Fargate su ARM64 (Graviton), compilate `linux/arm64` con il binario `linux-arm64` e impostate `cpuArchitecture` su `ARM64` al posto:326 Esegui la build e il push dell'immagine. La definizione di attività più avanti esegue `linux/amd64`, quindi la piattaforma deve corrispondere qui; per Fargate su ARM64 (Graviton), esegui invece la build per `linux/arm64` con il binario `linux-arm64` e imposta `cpuArchitecture` su `ARM64`:

327 327 

328 ```bash theme={null}328 ```bash theme={null}

329 docker build --platform=linux/amd64 \329 docker build --platform=linux/amd64 \


332 ```332 ```

333 </Step>333 </Step>

334 334 

335 <Step title="Distribuire">335 <Step title="Eseguire il deploy">

336 <Tabs>336 <Tabs>

337 <Tab title="ECS Fargate">337 <Tab title="ECS Fargate">

338 Create il cluster e un gruppo di log per stderr del gateway, che porta sia i suoi eventi di audit che i log operazionali. La conservazione è una chiamata separata, e senza una CloudWatch mantiene i log per sempre; allineate i 90 giorni con la vostra politica di conservazione dell'audit:338 Crea il cluster e un gruppo di log per lo stderr del gateway, che contiene sia gli eventi di audit sia i log operativi. La conservazione richiede una chiamata separata, e senza di essa CloudWatch conserva i log per sempre; allinea i 90 giorni alla tua policy di conservazione dell'audit:

339 339 

340 ```bash theme={null}340 ```bash theme={null}

341 aws ecs create-cluster --cluster-name claude-gateway341 aws ecs create-cluster --cluster-name claude-gateway


344 --retention-in-days 90344 --retention-in-days 90

345 ```345 ```

346 346 

347 Scrivete la definizione di attività. Il ruolo di attività porta il permesso Bedrock e il ruolo di esecuzione inietta i segreti; utilizzate gli ARN dei segreti dal passaggio Secrets Manager:347 Scrivi la definizione di attività. Il ruolo di attività ha il permesso per Bedrock e il ruolo di esecuzione inietta i segreti; usa gli ARN dei segreti del passaggio Secrets Manager:

348 348 

349 ```json claude-gateway-task.json theme={null}349 ```json claude-gateway-task.json theme={null}

350 {350 {


379 }379 }

380 ```380 ```

381 381 

382 Registratela:382 Registrala:

383 383 

384 ```bash theme={null}384 ```bash theme={null}

385 aws ecs register-task-definition --cli-input-json file://claude-gateway-task.json385 aws ecs register-task-definition --cli-input-json file://claude-gateway-task.json

386 ```386 ```

387 387 

388 Mettete un ALB interno davanti con un gruppo di destinazione che verifica lo stato del gateway. `--ip-address-type ipv4` è importante: un ALB interno dual-stack pubblica record AAAA di intervallo pubblico, che il controllo della rete privata `/login` rifiuta:388 Metti davanti un ALB interno con un gruppo di destinazione che verifica lo stato del gateway. `--ip-address-type ipv4` è importante: un ALB interno dual-stack pubblica record AAAA di intervallo pubblico, che il controllo della rete privata di `/login` rifiuta:

389 389 

390 ```bash theme={null}390 ```bash theme={null}

391 ALB_ARN="$(aws elbv2 create-load-balancer --name claude-gateway \391 ALB_ARN="$(aws elbv2 create-load-balancer --name claude-gateway \


399 --query 'TargetGroups[0].TargetGroupArn' --output text)"399 --query 'TargetGroups[0].TargetGroupArn' --output text)"

400 ```400 ```

401 401 

402 Aggiungete il listener HTTPS. `--ssl-policy` fissa un limite TLS moderno, poiché ometterlo ricade nella politica predefinita legacy `ELBSecurityPolicy-2016-08`, che ancora accetta TLS 1.0/1.1.402 Aggiungi il listener HTTPS. `--ssl-policy` fissa un livello minimo di TLS moderno, poiché ometterlo fa ricadere sulla policy predefinita legacy `ELBSecurityPolicy-2016-08`, che accetta ancora TLS 1.0/1.1.

403 403 

404 L'ALB chiude una connessione dopo 60 secondi senza dati per impostazione predefinita. I ping di keepalive del gateway mantengono i flussi entro quel default, quindi aumentare il timeout aggiunge margine sopra la cadenza del ping; la riga [Troubleshooting](#troubleshooting) sui flussi interrotti copre il meccanismo e i gateway più vecchi. I comandi sottostanti aggiungono il listener e aumentano il timeout:404 Per impostazione predefinita, l'ALB chiude una connessione dopo 60 secondi senza dati. I ping di keepalive del gateway mantengono i flussi entro questo valore predefinito, quindi aumentare il timeout aggiunge margine rispetto alla cadenza dei ping; la riga di [Risoluzione dei problemi](#troubleshooting) sui flussi interrotti descrive il meccanismo e i gateway meno recenti. I comandi seguenti aggiungono il listener e aumentano il timeout:

405 405 

406 ```bash theme={null}406 ```bash theme={null}

407 aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \407 aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \


414 --attributes Key=idle_timeout.timeout_seconds,Value=3600414 --attributes Key=idle_timeout.timeout_seconds,Value=3600

415 ```415 ```

416 416 

417 Create il servizio. Il circuito di distribuzione del deployment fa rotolare una distribuzione le cui attività continuano a fallire, da un'immagine cattiva o una configurazione non avviabile, indietro allo stato stabile precedente al posto di rilanciare attività fallite per sempre:417 Crea il servizio. Il circuit breaker del deploy riporta all'ultimo stato stabile un deploy le cui attività continuano a fallire, a causa di un'immagine difettosa o di una configurazione che non si avvia, anziché rilanciare all'infinito attività che falliscono:

418 418 

419 ```bash theme={null}419 ```bash theme={null}

420 aws ecs create-service --cluster claude-gateway --service-name claude-gateway \420 aws ecs create-service --cluster claude-gateway --service-name claude-gateway \


425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"

426 ```426 ```

427 427 

428 Il periodo di grazia di 60 secondi dà a un'attività fredda il tempo di estrarre l'immagine, connettersi allo store e rispondere al suo primo controllo di stato prima che ECS inizi a contare i fallimenti rispetto alla distribuzione. Il controllo di stato del gruppo di destinazione su `GET /readyz` verifica che lo store sia raggiungibile, quindi un'attività che non può raggiungere Postgres non entra mai in rotazione. Per mantenere le attività che passano il controllo attraverso una breve interruzione del database come un failover RDS, impostate `store.readiness_grace_seconds` come descritto in [Comportamento di interruzione](/docs/it/claude-apps-gateway-deploy#outage-behavior), che copre anche l'alternativa `/healthz`.428 Il periodo di tolleranza di 60 secondi dà a un'attività avviata a freddo il tempo di scaricare l'immagine, connettersi allo store e rispondere al primo controllo di stato prima che ECS inizi a contare i fallimenti a carico del deploy.

429 429 

430 Le attività vengono eseguite in subnet private senza IP pubblico, quindi tutto l'egresso (verso Bedrock, il vostro IdP, Secrets Manager, ECR e CloudWatch Logs) passa attraverso il gateway NAT. Per mantenere il traffico Bedrock fuori dal percorso pubblico, create un endpoint VPC dell'interfaccia `bedrock-runtime` e puntate l'`base_url` dell'upstream ad esso, come mostrato nel [riferimento upstream Bedrock](/docs/it/claude-apps-gateway-config#amazon-bedrock); l'IdP ha ancora bisogno di uscita a Internet.430 Il controllo di stato del gruppo di destinazione su `GET /readyz` verifica che lo store sia raggiungibile, quindi un'attività che non riesce a raggiungere Postgres non entra mai in rotazione. Per far sì che le attività continuino a superare il controllo durante una breve interruzione del database, come un failover RDS, imposta `store.readiness_grace_seconds` come descritto in [Comportamento in caso di interruzione](/docs/it/claude-apps-gateway-deploy#outage-behavior), che tratta anche l'alternativa `/healthz`.

431 431 

432 Finite dando agli sviluppatori un nome host risolvibile privatamente: in una zona ospitata privata Route 53, alias il nome DNS interno del gateway all'ALB, e impostate `listen.public_url` a quel nome host. Il nome `*.elb.amazonaws.com` dell'ALB stesso si risolve in indirizzi privati su un ALB interno, ma non può portare il vostro certificato ACM, quindi utilizzate il vostro nome.432 Le attività vengono eseguite in subnet private senza IP pubblico, quindi tutto il traffico in uscita (verso Bedrock, il tuo IdP, Secrets Manager, ECR e CloudWatch Logs) passa attraverso il gateway NAT. Per tenere il traffico Bedrock fuori dal percorso pubblico, crea un endpoint VPC di interfaccia `bedrock-runtime` e punta il `base_url` dell'upstream a esso, come mostrato nel [riferimento upstream Bedrock](/docs/it/claude-apps-gateway-config#amazon-bedrock); l'IdP ha comunque bisogno di uscita verso Internet.

433 433 

434 Aggiornate l'URI di reindirizzamento autorizzato del client OAuth a `<public_url>/oauth/callback` prima del primo accesso. Dopo aver cambiato `public_url`, ricompilate e spingete l'immagine sotto un nuovo tag, registrate una nuova revisione della definizione di attività e ridistribuite. Su ECS l'impostazione vive nel `gateway.yaml` incorporato dell'immagine, e il gateway costruisce la sua origine pubblica solo da quell'impostazione, ignorando `X-Forwarded-Host` e `X-Forwarded-Proto`. `X-Forwarded-For` è onorato per gli IP dei client solo quando `listen.trusted_proxies` è impostato.434 Per finire, fornisci agli sviluppatori un nome host risolvibile privatamente: in una zona ospitata privata di Route 53, crea un alias dal nome DNS interno del gateway all'ALB e imposta `listen.public_url` su quel nome host. Il nome `*.elb.amazonaws.com` dell'ALB si risolve in indirizzi privati su un ALB interno, ma non può usare il tuo certificato ACM, quindi usa un nome tuo.

435 

436 Aggiorna l'URI di reindirizzamento autorizzato del client OAuth a `<public_url>/oauth/callback` prima del primo accesso. Dopo aver modificato `public_url`, esegui di nuovo la build e il push dell'immagine con un nuovo tag, registra una nuova revisione della definizione di attività ed esegui di nuovo il deploy. Su ECS l'impostazione si trova nel `gateway.yaml` incorporato nell'immagine, e il gateway costruisce la propria origine pubblica solo da quell'impostazione, ignorando `X-Forwarded-Host` e `X-Forwarded-Proto`. `X-Forwarded-For` viene considerato per gli IP dei client solo quando `listen.trusted_proxies` è impostato.

435 </Tab>437 </Tab>

436 438 

437 <Tab title="EKS">439 <Tab title="EKS">

438 Questo percorso ha bisogno di `kubectl` e `eksctl` installati localmente, e di un cluster EKS esistente con un provider OIDC IAM e AWS Load Balancer Controller installato. Il cluster deve essere su `$VPC_ID` in modo che i pod possano raggiungere l'endpoint privato RDS, e il gruppo di sicurezza `claude-gateway-db` deve ammettere il gruppo di sicurezza del pod o del nodo del cluster al posto di `$GW_SG`.440 Questo percorso richiede `kubectl` ed `eksctl` installati localmente e un cluster EKS esistente con un provider OIDC IAM e AWS Load Balancer Controller installato. Il cluster deve trovarsi su `$VPC_ID` affinché i pod possano raggiungere l'endpoint privato RDS, e il gruppo di sicurezza `claude-gateway-db` deve ammettere il gruppo di sicurezza dei pod o dei nodi del cluster al posto di `$GW_SG`.

439 441 

440 Su EKS il gateway ottiene le sue credenziali Bedrock tramite IRSA piuttosto che i ruoli ECS. La politica di fiducia `ecs-tasks.amazonaws.com` dal passaggio IAM non si applica qui; IRSA ha bisogno di un ruolo la cui politica di fiducia si federi sul provider OIDC del cluster, scoped a `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` crea quel ruolo, allega le politiche e annota l'account di servizio Kubernetes con l'ARN del ruolo in un passaggio. Trasformate i due documenti della politica dal passaggio IAM in politiche gestite che può allegare:442 Su EKS il gateway ottiene le credenziali Bedrock tramite IRSA anziché tramite i ruoli ECS. La policy di attendibilità `ecs-tasks.amazonaws.com` del passaggio IAM non si applica qui; IRSA ha bisogno di un ruolo la cui policy di attendibilità sia federata sul provider OIDC del cluster, limitata a `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` crea quel ruolo, collega le policy e annota l'account di servizio Kubernetes con l'ARN del ruolo in un unico passaggio. Trasforma i due documenti di policy del passaggio IAM in policy gestite che il comando può collegare:

441 443 

442 ```bash theme={null}444 ```bash theme={null}

443 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \445 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \


453 --approve455 --approve

454 ```456 ```

455 457 

456 La politica dei segreti è necessaria solo quando i pod leggono Secrets Manager stessi, come fa il provider AWS del driver CSI Secrets Store utilizzando l'account di servizio del pod di montaggio; eliminatela se create i Kubernetes Secrets in un altro modo. Il provider ha bisogno di entrambe le azioni della politica: chiama `DescribeSecret` quando riconcilia i segreti ruotati, quindi una concessione `GetSecretValue`-only monta sulla prima distribuzione ma smette di raccogliere rotazioni.458 La policy dei segreti è necessaria solo quando i pod leggono direttamente Secrets Manager, come fa il provider AWS del driver CSI Secrets Store usando l'account di servizio del pod che esegue il montaggio; rimuovila se crei i Kubernetes Secrets in un altro modo. Il provider ha bisogno di entrambe le azioni della policy: chiama `DescribeSecret` quando riconcilia i segreti ruotati, quindi una concessione limitata a `GetSecretValue` esegue il montaggio al primo deploy ma smette di recepire le rotazioni.

457 459 

458 Distribuite il gateway come Deployment standard più un Service e un Ingress, come descritto in [Distribuzione Kubernetes](/docs/it/claude-apps-gateway-deploy#kubernetes), con:460 Esegui il deploy del gateway come Deployment standard più un Service e un Ingress, come descritto in [Deploy su Kubernetes](/docs/it/claude-apps-gateway-deploy#kubernetes), con:

459 461 

460 * `serviceAccountName: gateway`462 * `serviceAccountName: gateway`

461 * `gateway.yaml` montato da una ConfigMap e i segreti montati a `/secrets`463 * `gateway.yaml` montato da una ConfigMap e i segreti montati in `/secrets`

462 * il probe di prontezza puntato a `GET /readyz`464 * il readiness probe puntato a `GET /readyz`

463 465 

464 Per il front end, un Ingress gestito da AWS Load Balancer Controller esegue il provisioning dell'ALB interno. Annotatelo con:466 Per il front end, un Ingress gestito da AWS Load Balancer Controller esegue il provisioning dell'ALB interno. Annotalo con:

465 467 

466 * `alb.ingress.kubernetes.io/scheme: internal` e `alb.ingress.kubernetes.io/target-type: ip`468 * `alb.ingress.kubernetes.io/scheme: internal` e `alb.ingress.kubernetes.io/target-type: ip`

467 * `alb.ingress.kubernetes.io/ip-address-type: ipv4`, in modo che nessun record AAAA di intervallo pubblico venga pubblicato per il controllo della rete privata `/login` [private-network check](/docs/it/claude-apps-gateway#prerequisites) da rifiutare469 * `alb.ingress.kubernetes.io/ip-address-type: ipv4`, in modo che non vengano pubblicati record AAAA di intervallo pubblico che il [controllo della rete privata](/docs/it/claude-apps-gateway#prerequisites) di `/login` rifiuterebbe

468 * `alb.ingress.kubernetes.io/inbound-cidrs: <your-corporate-cidr>`, in modo che il gruppo di sicurezza gestito dal controller ammetta solo la vostra rete aziendale al posto del suo default `0.0.0.0/0`470 * `alb.ingress.kubernetes.io/inbound-cidrs: <your-corporate-cidr>`, in modo che il gruppo di sicurezza frontend gestito dal controller ammetta solo la tua rete aziendale al posto del suo valore predefinito `0.0.0.0/0`

469 * `alb.ingress.kubernetes.io/certificate-arn` con il certificato ACM471 * `alb.ingress.kubernetes.io/certificate-arn` con il certificato ACM

470 * `alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS13-1-2-2021-06`, in modo che il listener non ricada nella politica predefinita legacy che accetta TLS 1.0 e 1.1472 * `alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS13-1-2-2021-06`, in modo che il listener non ricada sulla policy predefinita legacy che accetta TLS 1.0 e 1.1

471 * `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, un margine sopra il keepalive di streaming del gateway; consultate [Troubleshooting](#troubleshooting)473 * `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, un margine rispetto al keepalive di streaming del gateway; consulta [Risoluzione dei problemi](#troubleshooting)

472 474 

473 Con IRSA, l'AWS SDK legge un token dell'account di servizio proiettato e lo scambia con AWS STS, quindi il pod non ha mai bisogno del servizio di metadati dell'istanza EC2; una NetworkPolicy di egresso può bloccare `169.254.169.254` per i pod del gateway. Il problema del limite di hop del nodo in [Troubleshooting](#troubleshooting) sottostante si applica solo ai cluster che saltano IRSA e si affidano ai ruoli dell'istanza del nodo.475 Con IRSA, l'AWS SDK legge un token proiettato dell'account di servizio e lo scambia con AWS STS, quindi il pod non ha mai bisogno del servizio di metadati dell'istanza EC2; una NetworkPolicy in uscita può bloccare `169.254.169.254` per i pod del gateway. Il problema del limite di hop dei nodi descritto in [Risoluzione dei problemi](#troubleshooting) più avanti riguarda solo i cluster che non usano IRSA e si affidano ai ruoli delle istanze dei nodi.

474 </Tab>476 </Tab>

475 </Tabs>477 </Tabs>

476 </Step>478 </Step>

477 479 

478 <Step title="Spingere l'URL del gateway alle macchine degli sviluppatori">480 <Step title="Distribuire l'URL del gateway ai computer degli sviluppatori">

479 Il gateway è ora in esecuzione, ma gli sviluppatori non possono raggiungerlo da `/login` fino a quando l'URL del gateway non è sulle loro macchine. Impostate `forceLoginMethod` e `forceLoginGatewayUrl` nel [file delle impostazioni gestite](/docs/it/claude-apps-gateway#set-the-gateway-url) che distribuite a ogni dispositivo tramite MDM. Non c'è opzione di gateway nel selettore di accesso per uno sviluppatore da selezionare manualmente.481 Il gateway è ora in esecuzione, ma gli sviluppatori non possono raggiungerlo da `/login` finché l'URL del gateway non è presente sui loro computer. Imposta `forceLoginMethod` e `forceLoginGatewayUrl` nel [file delle impostazioni gestite](/docs/it/claude-apps-gateway#set-the-gateway-url) che distribuisci su ogni dispositivo tramite MDM. Nel selettore di accesso non esiste un'opzione gateway che uno sviluppatore possa selezionare manualmente.

480 </Step>482 </Step>

481</Steps>483</Steps>

482 484 

Details

442`claude --cloud` e `claude --teleport` richiedono l'accesso con un account claude.ai. Se ti autentichi con una chiave API, o i dettagli dell'account archiviati sono obsoleti, vedrai uno di questi:442`claude --cloud` e `claude --teleport` richiedono l'accesso con un account claude.ai. Se ti autentichi con una chiave API, o i dettagli dell'account archiviati sono obsoleti, vedrai uno di questi:

443 443 

444* `Unable to get organization UUID`444* `Unable to get organization UUID`

445* Un messaggio che indica che l'autenticazione con chiave API non è sufficiente445* ``Cloud sessions need a claude.ai sign-in. Run `claude auth login` (or /login in a local session), then try again.``

446* `Error loading Claude Code sessions` nel selettore di sessione, quando esegui `claude --teleport` senza un ID di sessione446* `Error loading Claude Code sessions` nel selettore di sessione, quando esegui `claude --teleport` senza un ID di sessione

447 447 

448Esegui `/login` per accedere con il tuo account claude.ai, quindi riprova il comando. Se invece l'errore nomina il tuo provider, vedi la [tabella degli errori](#errors-when-sending-to-a-cloud-session): le sessioni cloud non sono disponibili tramite provider di terze parti.448Esegui [`claude auth login`](/docs/it/cli-reference#cli-commands) nella tua shell per accedere con il tuo account claude.ai, quindi riprova il comando. All'interno di una sessione in esecuzione, `/login` fa la stessa cosa. Se invece l'errore nomina il tuo provider, vedi la [tabella degli errori](#errors-when-sending-to-a-cloud-session): le sessioni cloud non sono disponibili tramite provider di terze parti.

449 

450Dalla v2.1.274 alla v2.1.289, il messaggio di accesso era `Claude Code cloud sessions require authentication with a Claude.ai account. API key authentication is not sufficient. Please run /login to authenticate, or check your authentication status with /status.`

449 451 

450<h3 id="remote-control-session-expired-or-access-denied">452<h3 id="remote-control-session-expired-or-access-denied">

451 Sessione Remote Control scaduta o accesso negato453 Sessione Remote Control scaduta o accesso negato

Details

34 oneLiner: 'Project instructions Claude reads every session',34 oneLiner: 'Project instructions Claude reads every session',

35 when: 'Loaded into context at the start of every session',35 when: 'Loaded into context at the start of every session',

36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',

37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/docs/en/skills">skill</A> or a path-scoped <A href="/docs/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>, <>If your repo already has an <C>AGENTS.md</C> for other coding agents, Claude Code <A href="/docs/en/memory#agents-md">can read that</A> on its own or alongside CLAUDE.md</>],37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/docs/en/skills">skill</A> or a path-scoped <A href="/docs/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>, <>If your repo already has an <C>AGENTS.md</C> for other coding agents, Claude Code <A href="/docs/en/memory#agents-md">can read that</A> in place of a <C>CLAUDE.md</C></>],

38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',

39 example: `# Project conventions39 example: `# Project conventions

40 40 

Details

31| `claude attach <id\|name>` | Collegati a una [sessione in background](/docs/it/agent-view#manage-sessions-from-the-shell) in questo terminale. Passare parte del nome di una sessione in esecuzione al posto dell'ID richiede Claude Code v2.1.290 o successivo | `claude attach 7c5dcf5d` |31| `claude attach <id\|name>` | Collegati a una [sessione in background](/docs/it/agent-view#manage-sessions-from-the-shell) in questo terminale. Passare parte del nome di una sessione in esecuzione al posto dell'ID richiede Claude Code v2.1.290 o successivo | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | Stampa le regole del classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) integrate come JSON. Usa `claude auto-mode config` per visualizzare la tua configurazione effettiva con le impostazioni applicate. `--label <prefix>` stampa solo le regole la cui etichetta inizia con quel prefisso, con corrispondenza case-insensitive. Richiede Claude Code v2.1.208 o successivo | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | Stampa le regole del classificatore della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) integrate come JSON. Usa `claude auto-mode config` per visualizzare la tua configurazione effettiva con le impostazioni applicate. `--label <prefix>` stampa solo le regole la cui etichetta inizia con quel prefisso, con corrispondenza case-insensitive. Richiede Claude Code v2.1.208 o successivo | `claude auto-mode defaults --label 'Git Destructive'` |

33| `claude auto-mode reset` | Ripristina la configurazione predefinita della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) rimuovendo la sezione `autoMode` dal file di impostazioni dell'utente. Richiede conferma prima di scrivere; passa `-y`/`--yes` per saltare il prompt. Le regole dalle [impostazioni gestite](/docs/it/server-managed-settings) o dal flag `--settings` si applicano comunque. Richiede Claude Code v2.1.212 o successivo. Vedi [Ispeziona i valori predefiniti e la tua configurazione effettiva](/docs/it/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |33| `claude auto-mode reset` | Ripristina la configurazione predefinita della [modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) rimuovendo la sezione `autoMode` dal file di impostazioni dell'utente. Richiede conferma prima di scrivere; passa `-y`/`--yes` per saltare il prompt. Le regole dalle [impostazioni gestite](/docs/it/server-managed-settings) o dal flag `--settings` si applicano comunque. Richiede Claude Code v2.1.212 o successivo. Vedi [Ispeziona i valori predefiniti e la tua configurazione effettiva](/docs/it/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |

34| `claude daemon logs` | Segui il file di log del [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background, `~/.claude/daemon.log`, stampando le nuove righe man mano che arrivano finché non premi `Ctrl+C` | `claude daemon logs` |

35| `claude daemon run` | Esegui il [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background in primo piano in questo terminale, stampando il suo log | `claude daemon run` |

34| `claude daemon status` | Stampa lo stato del [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background, versione, directory socket e numero di worker per la diagnostica. Esce con 1 se il supervisore non è in esecuzione | `claude daemon status` |36| `claude daemon status` | Stampa lo stato del [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background, versione, directory socket e numero di worker per la diagnostica. Esce con 1 se il supervisore non è in esecuzione | `claude daemon status` |

35| `claude daemon stop --any` | Interrompi il [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background e le sessioni che ospita. Passa `--keep-workers` per lasciare le sessioni in background in esecuzione in modo che il supervisore successivo si riconnetta ad esse. `--any` conferma l'interruzione di un supervisore su richiesta, che è l'impostazione predefinita. Usa questo per recuperare da un [supervisore che non risponde](/docs/it/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |37| `claude daemon stop --any` | Interrompi il [supervisore](/docs/it/agent-view#the-supervisor-process) della sessione in background e le sessioni che ospita. Passa `--keep-workers` per lasciare le sessioni in background in esecuzione in modo che il supervisore successivo si riconnetta ad esse. `--any` conferma l'interruzione di un supervisore su richiesta, che è l'impostazione predefinita. Usa questo per recuperare da un [supervisore che non risponde](/docs/it/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |

36| `claude doctor` | Stampa diagnostica di installazione e impostazioni di sola lettura dal terminale senza avviare una sessione, inclusa la salute dell'installazione, errori di convalida del file di impostazioni e idoneità a Remote Control. Per il controllo di configurazione in-sessione che può anche applicare correzioni, esegui [`/doctor`](/docs/it/commands#all-commands) | `claude doctor` |38| `claude doctor` | Stampa diagnostica di installazione e impostazioni di sola lettura dal terminale senza avviare una sessione, inclusa la salute dell'installazione, errori di convalida del file di impostazioni e idoneità a Remote Control. Per il controllo di configurazione in-sessione che può anche applicare correzioni, esegui [`/doctor`](/docs/it/commands#all-commands) | `claude doctor` |

desktop.md +1 −1

Details

1092Per vedere quale versione dell'app desktop stai eseguendo:1092Per vedere quale versione dell'app desktop stai eseguendo:

1093 1093 

1094* **macOS**: fai clic su **Claude** nella barra dei menu, quindi **About Claude**1094* **macOS**: fai clic su **Claude** nella barra dei menu, quindi **About Claude**

1095* **Windows**: fai clic su **Help**, quindi **About**1095* **Windows**: fai clic su **Help**, quindi **About Claude**

1096 1096 

1097Fai clic sul numero di versione per copiarlo negli appunti.1097Fai clic sul numero di versione per copiarlo negli appunti.

1098 1098 

Details

92* Salvare uno screenshot con **Cmd+S** o una registrazione dello schermo con **Cmd+R**, utilizzando i pulsanti di acquisizione del riquadro o le scorciatoie da tastiera; i file vengono salvati sul tuo Desktop92* Salvare uno screenshot con **Cmd+S** o una registrazione dello schermo con **Cmd+R**, utilizzando i pulsanti di acquisizione del riquadro o le scorciatoie da tastiera; i file vengono salvati sul tuo Desktop

93* Interrompere lo streaming di un dispositivo senza spegnerlo facendo clic su **Detach simulator**, che riporta il riquadro allo stato **Attach simulator**93* Interrompere lo streaming di un dispositivo senza spegnerlo facendo clic su **Detach simulator**, che riporta il riquadro allo stato **Attach simulator**

94 94 

95Per regolare il flusso video dal simulatore, apri il menu **Display** del riquadro. Abbassa **Frame rate** o **Resolution** se il riquadro affatica il tuo Mac. Entrambe le impostazioni cambiano il modo in cui il riquadro visualizza il dispositivo, non il modo in cui l'app viene eseguita.95Se il riquadro mostra un menu **Display**, usalo per regolare il flusso video dal simulatore. Abbassa **Frame rate** o **Resolution** se il riquadro affatica il tuo Mac. Entrambe le impostazioni cambiano il modo in cui il riquadro visualizza il dispositivo, non il modo in cui l'app viene eseguita.

96 96 

97Tu e Claude controllate lo stesso dispositivo, quindi i tuoi tocchi cambiano lo stato dell'app che Claude vede. Per fare in modo che Claude verifichi uno schermo specifico, navigaci toccando, quindi chiedi. Mentre Claude controlla il dispositivo, il riquadro mostra un badge **Claude is using this device** sopra lo schermo; aspetta che il badge scompaia prima di toccare, in modo che il risultato rifletta l'app piuttosto che il tuo input.97Tu e Claude controllate lo stesso dispositivo, quindi i tuoi tocchi cambiano lo stato dell'app che Claude vede. Per fare in modo che Claude verifichi uno schermo specifico, navigaci toccando, quindi chiedi. Mentre Claude controlla il dispositivo, il riquadro mostra un badge **Claude is using this device** sopra lo schermo; aspetta che il badge scompaia prima di toccare, in modo che il risultato rifletta l'app piuttosto che il tuo input.

98 98 

env-vars.md +1 −0

Details

354| `CLAUDE_CODE_PERFORCE_MODE` | Imposta su `1` per abilitare la protezione in scrittura compatibile con Perforce. Quando è impostata, Edit, Write e NotebookEdit falliscono con un suggerimento `p4 edit <file>` se il file di destinazione non ha il bit di scrittura del proprietario, che Perforce rimuove dai file sincronizzati finché `p4 edit` non li apre. Questo impedisce a Claude Code di aggirare il tracciamento delle modifiche di Perforce |354| `CLAUDE_CODE_PERFORCE_MODE` | Imposta su `1` per abilitare la protezione in scrittura compatibile con Perforce. Quando è impostata, Edit, Write e NotebookEdit falliscono con un suggerimento `p4 edit <file>` se il file di destinazione non ha il bit di scrittura del proprietario, che Perforce rimuove dai file sincronizzati finché `p4 edit` non li apre. Questo impedisce a Claude Code di aggirare il tracciamento delle modifiche di Perforce |

355| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sovrascrive la directory radice dei plugin. Nonostante il nome, imposta la directory padre, non la cache stessa: i marketplace e la cache dei plugin si trovano in sottodirectory di questo percorso. Il valore predefinito è `~/.claude/plugins` |355| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sovrascrive la directory radice dei plugin. Nonostante il nome, imposta la directory padre, non la cache stessa: i marketplace e la cache dei plugin si trovano in sottodirectory di questo percorso. Il valore predefinito è `~/.claude/plugins` |

356| `CLAUDE_CODE_PLUGIN_DIRS` | Directory dei plugin da caricare per la sessione, ciascuna caricata come la caricherebbe un flag [`--plugin-dir`](/docs/it/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Separa più percorsi con `:` su Unix o `;` su Windows. Indica ogni percorso come percorso assoluto o fallo iniziare con `~`, perché Claude Code salta i percorsi relativi. Richiede Claude Code v2.1.280 o successiva. Consulta [Caricare un plugin per una sessione](/docs/it/plugins/create#load-a-directory-or-archive-for-one-session) |356| `CLAUDE_CODE_PLUGIN_DIRS` | Directory dei plugin da caricare per la sessione, ciascuna caricata come la caricherebbe un flag [`--plugin-dir`](/docs/it/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Separa più percorsi con `:` su Unix o `;` su Windows. Indica ogni percorso come percorso assoluto o fallo iniziare con `~`, perché Claude Code salta i percorsi relativi. Richiede Claude Code v2.1.280 o successiva. Consulta [Caricare un plugin per una sessione](/docs/it/plugins/create#load-a-directory-or-archive-for-one-session) |

357| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Controlla se Claude Code ricarica un [mod](/docs/it/plugins/mods/overview) quando i file del mod cambiano. Il ricaricamento si applica a un mod che carichi da una directory con `--plugin-dir` ed è attivo per impostazione predefinita nelle sessioni interattive. Imposta su `1` per attivarlo anche nelle sessioni non interattive, oppure su `0` per disattivarlo in ogni sessione. Richiede Claude Code v2.1.287 o successiva. Consulta [impostazioni e variabili d'ambiente dei mod](/docs/it/plugins/mods/reference#settings-and-environment-variables) |

357| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Timeout in millisecondi per la clonazione o l'aggiornamento di un marketplace di plugin (predefinito: 120000). Aumenta questo valore per repository di grandi dimensioni o connessioni di rete lente. Consulta [Git clone timed out](/docs/it/plugins/troubleshooting#git-clone-timed-out-after-120s) |358| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Timeout in millisecondi per la clonazione o l'aggiornamento di un marketplace di plugin (predefinito: 120000). Aumenta questo valore per repository di grandi dimensioni o connessioni di rete lente. Consulta [Git clone timed out](/docs/it/plugins/troubleshooting#git-clone-timed-out-after-120s) |

358| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Imposta su `1` per saltare il tentativo di nuova clonazione e continuare a usare il checkout esistente del marketplace quando un aggiornamento del marketplace non riesce a raggiungere il remoto o ad autenticarsi. Utile in ambienti offline o air-gapped in cui una nuova clonazione fallirebbe allo stesso modo. Consulta [Gli aggiornamenti del marketplace non riescono negli ambienti offline](/docs/it/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |359| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Imposta su `1` per saltare il tentativo di nuova clonazione e continuare a usare il checkout esistente del marketplace quando un aggiornamento del marketplace non riesce a raggiungere il remoto o ad autenticarsi. Utile in ambienti offline o air-gapped in cui una nuova clonazione fallirebbe allo stesso modo. Consulta [Gli aggiornamenti del marketplace non riescono negli ambienti offline](/docs/it/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |

359| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Imposta su `1` per clonare le sorgenti GitHub in forma abbreviata `owner/repo` tramite HTTPS invece che SSH. Si applica all'installazione e all'aggiornamento dei plugin, e a `/plugin marketplace add` e `update`. Utile nei runner CI, nei container o in qualsiasi ambiente senza una chiave SSH configurata per `github.com` |360| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Imposta su `1` per clonare le sorgenti GitHub in forma abbreviata `owner/repo` tramite HTTPS invece che SSH. Si applica all'installazione e all'aggiornamento dei plugin, e a `/plugin marketplace add` e `update`. Utile nei runner CI, nei container o in qualsiasi ambiente senza una chiave SSH configurata per `github.com` |

errors.md +2 −3

Details

197| `Cloud sessions cannot be created from a --restricted session` | [Errori della riga di comando](#cloud-sessions-cannot-be-created-from-a-restricted-session) |197| `Cloud sessions cannot be created from a --restricted session` | [Errori della riga di comando](#cloud-sessions-cannot-be-created-from-a-restricted-session) |

198| `Cloud sessions are disabled by your organization's policy` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |198| `Cloud sessions are disabled by your organization's policy` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |

199| `Couldn't verify your organization's policy for cloud sessions` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |199| `Couldn't verify your organization's policy for cloud sessions` | [Errori della riga di comando](#cloud-sessions-are-disabled-by-your-organizations-policy) |

200| `Cloud sessions need a claude.ai sign-in` | [Unable to get organization UUID](/docs/it/claude-code-on-the-web#unable-to-get-organization-uuid) |

200| `Error: --json-schema is not a valid JSON Schema` | [Errori della riga di comando](#the-json-schema-value-is-not-a-valid-json-schema) |201| `Error: --json-schema is not a valid JSON Schema` | [Errori della riga di comando](#the-json-schema-value-is-not-a-valid-json-schema) |

201| `Error: Invalid --agents configuration:` | [Errori della riga di comando](#invalid-agents-configuration) |202| `Error: Invalid --agents configuration:` | [Errori della riga di comando](#invalid-agents-configuration) |

202| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Errori della riga di comando](#invalid-agents-configuration) |203| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Errori della riga di comando](#invalid-agents-configuration) |


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

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

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

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

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

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

392* Una richiesta rifiutata perché l'input più `max_tokens` supera il limite di contesto. Inviarla nuovamente invariata fallirebbe allo stesso modo, quindi Claude Code ritenta con un `max_tokens` ridotto, e smette di ritentare e compatta invece in due casi:394* Una richiesta rifiutata perché l'input più `max_tokens` supera il limite di contesto. Inviarla nuovamente invariata fallirebbe allo stesso modo, quindi Claude Code ritenta con un `max_tokens` ridotto, e smette di ritentare e compatta invece in due casi:


405* Una [Amazon Bedrock streaming response with an unexpected content-type](#bedrock-streaming-response-has-an-unexpected-content-type), perché il gateway o il proxy che riscrive la risposta riscriverebbero il tentativo allo stesso modo. Richiede Claude Code v2.1.208 o successivo.407* Una [Amazon Bedrock streaming response with an unexpected content-type](#bedrock-streaming-response-has-an-unexpected-content-type), perché il gateway o il proxy che riscrive la risposta riscriverebbero il tentativo allo stesso modo. Richiede Claude Code v2.1.208 o successivo.

406* Un tentativo non in streaming di una richiesta in streaming non riuscita che ottiene uno stato di successo ma [no Claude API message in the body](#api-returned-an-empty-or-malformed-response). Claude Code termina il turno con quell'errore.408* Un tentativo non in streaming di una richiesta in streaming non riuscita che ottiene uno stato di successo ma [no Claude API message in the body](#api-returned-an-empty-or-malformed-response). Claude Code termina il turno con quell'errore.

407* Una richiesta che il controllo della politica della tua organizzazione ha negato, che emerge come una riga `API Error:` che porta il messaggio di negazione. Gli amministratori della tua organizzazione hanno configurato il controllo con [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks), una funzione Claude Enterprise, e il messaggio termina con le istruzioni che hanno configurato, o per impostazione predefinita ti dice di contattarli. Claude Code non invia nuovamente la richiesta negata allo stesso modello o a un [fallback model](/docs/it/model-config#fallback-model-chains), perché il diniego riguarda il contenuto della richiesta piuttosto che il modello. Prima della v2.1.239, Claude Code poteva inviare nuovamente una richiesta negata, senza streaming o su un fallback model configurato, prima di mostrarti il diniego.409* Una richiesta che il controllo della politica della tua organizzazione ha negato, che emerge come una riga `API Error:` che porta il messaggio di negazione. Gli amministratori della tua organizzazione hanno configurato il controllo con [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks), una funzione Claude Enterprise, e il messaggio termina con le istruzioni che hanno configurato, o per impostazione predefinita ti dice di contattarli. Claude Code non invia nuovamente la richiesta negata allo stesso modello o a un [fallback model](/docs/it/model-config#fallback-model-chains), perché il diniego riguarda il contenuto della richiesta piuttosto che il modello. Prima della v2.1.239, Claude Code poteva inviare nuovamente una richiesta negata, senza streaming o su un fallback model configurato, prima di mostrarti il diniego.

408* Una risposta bloccata dal filtro dei contenuti di output dell'API. Claude Code mostra subito [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) e non ritenta né invia nuovamente quella richiesta.

409 410 

410<h3 id="what-you-see-while-claude-code-retries-or-waits">411<h3 id="what-you-see-while-claude-code-retries-or-waits">

411 Cosa vedi mentre Claude Code ritenta o attende412 Cosa vedi mentre Claude Code ritenta o attende


2905API Error: Output blocked by content filtering policy2906API Error: Output blocked by content filtering policy

2906```2907```

2907 2908 

2908Claude Code mostra l'errore non appena arriva il blocco e termina lì la richiesta. Non riprova la richiesta, non la reinvia senza streaming e non passa a un [modello di fallback](/docs/it/model-config#fallback-model-chains). Prima della v2.1.285, Claude Code poteva reinviare e riprovare una richiesta bloccata, a volte per minuti, prima di mostrarti l'errore.

2909 

2910**Cosa fare:**2909**Cosa fare:**

2911 2910 

2912* Riformula il tuo ultimo messaggio o adotta un approccio diverso2911* Riformula il tuo ultimo messaggio o adotta un approccio diverso

Details

733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.

734```734```

735 735 

736Questo agente è denominato `my-plugin:security-reviewer`, e l'utente può [invocarlo esplicitamente](/docs/it/sub-agents#invoke-subagents-explicitly) con `@agent-my-plugin:security-reviewer`. La forma del nome è `<plugin>:<name>`, dove `<name>` viene dal frontmatter, o dal nome del file quando non c'è.736Questo agente è denominato `my-plugin:security-reviewer`, e l'utente può [invocarlo esplicitamente](/docs/it/sub-agents#invoke-subagents-explicitly) con `@agent-my-plugin:security-reviewer`. La forma del nome è `<plugin>:<name>`, dove `<name>` viene dal campo `name` del frontmatter, o dal nome del file quando quel campo manca.

737 737 

738La chiave manifest `agents` sostituisce la scansione `agents/`.738La chiave manifest `agents` sostituisce la scansione `agents/`.

739 739 

Details

428 428 

429| Elemento | Cosa disegna | Dove |429| Elemento | Cosa disegna | Dove |

430| :- | :- | :- |430| :- | :- | :- |

431| `Box` | Un contenitore flex. Accetta prop di layout come `flexDirection`, `columnGap`, `padding`, `borderStyle` e `width`. | Ovunque |431| `Box` | Un contenitore flex. Accetta prop di layout come `flexDirection`, `columnGap`, `padding`, [`borderStyle`](/docs/it/plugins/mods/reference#box-border-styles) e `width`. | Ovunque |

432| `Text` | Testo con stile. Accetta `color`, `bold`, `dimColor`, `italic` e `wrap`. Un `color` è una chiave del tema o un colore come `'red'`. Un `wrap` è `'wrap'`, `'truncate'`, `'truncate-start'`, `'truncate-middle'` o `'truncate-end'`. | Ovunque |432| `Text` | Testo con stile. Accetta `color`, `bold`, `dimColor`, `italic` e `wrap`. Un `color` è una chiave del tema o un colore come `'red'`. Un `wrap` è `'wrap'`, `'truncate'`, `'truncate-start'`, `'truncate-middle'` o `'truncate-end'`. | Ovunque |

433| `Button` | Un controllo che chiama `onPress` | Ovunque |433| `Button` | Un controllo che chiama `onPress` | Ovunque |

434| `Link`, `Code`, `Markdown` | Un link con `href` e un `label` facoltativo, un blocco di codice e testo formattato come le risposte di Claude. `Markdown` riceve il suo contenuto nella prop `text`, non in `children`, e richiede una `key` quando passi `onLinkPress`. | Ovunque |434| `Link`, `Code`, `Markdown` | Un link con `href` e un `label` facoltativo, un blocco di codice e testo formattato come le risposte di Claude. `Markdown` riceve il suo contenuto nella prop `text`, non in `children`, e richiede una `key` quando passi `onLinkPress`. | Ovunque |


563Molti pannelli sono un campo di testo con un elenco sotto. L'esempio in questa sezione è un pannello di note: digiti una nota e premi Invio per aggiungerla, e ogni nota ha un pulsante `x` che la elimina. Con due note aggiunte, il terminale disegna il pannello in questo modo:563Molti pannelli sono un campo di testo con un elenco sotto. L'esempio in questa sezione è un pannello di note: digiti una nota e premi Invio per aggiungerla, e ogni nota ha un pulsante `x` che la elimina. Con due note aggiunte, il terminale disegna il pannello in questo modo:

564 564 

565```text theme={null}565```text theme={null}

566╭──────────────────────────────────────────────────────────╮566╭────────────────────────────────────────────────────────✕─╮

567│ Note: Type a note and press Enter ⏎ add ✕ │567│ Note: Type a note and press Enter ⏎ add │

568│ x buy milk │568│ x buy milk │

569│ x call bob │569│ x call bob │

570╰──────────────────────────────────────────────────────────╯570╰──────────────────────────────────────────────────────────╯

571```571```

572 572 

573Il simbolo `✕` sul bordo superiore è il segno proprio di Claude Code per chiudere il pannello.

574 

573L'esempio usa queste tecniche:575L'esempio usa queste tecniche:

574 576 

575* **Ricevere input digitato**: un `Input` chiama `onSubmit(value)` con il testo del campo quando l'utente preme Invio, e `onInput(value)` a ogni modifica577* **Ricevere input digitato**: un `Input` chiama `onSubmit(value)` con il testo del campo quando l'utente preme Invio, e `onInput(value)` a ogni modifica

Details

242Per adattare un albero al suo punto, leggi queste prop nell'hook:242Per adattare un albero al suo punto, leggi queste prop nell'hook:

243 243 

244* **Larghezza di un `Pane` o della fascia**: disegna fino a `e.props.bodyColumns`244* **Larghezza di un `Pane` o della fascia**: disegna fino a `e.props.bodyColumns`

245* **Altezza di un `Pane` accanto alla trascrizione**: quando `e.props.placement` è `'dock'`, `e.props.scroll.bodyRows` è il numero di righe di cui dispone il pannello245* **Altezza di un `Pane` accanto alla trascrizione**: quando `e.props.placement` è `'dock'`, `e.props.scroll.bodyRows` è il numero di righe di cui dispone il pannello per il tuo albero

246* **Altezza di un `Pane` sopra il prompt**: quando `e.props.placement` è `'inline'`, il pannello cresce insieme al tuo albero fino a un limite, e `bodyRows` è quel limite. Il [campo `rows` di `$.ui.open`](/docs/it/plugins/mods/interface#open-a-pane-at-the-right-time) richiede un limite diverso.246* **Altezza di un `Pane` sopra il prompt**: quando `e.props.placement` è `'inline'`, il pannello cresce insieme al tuo albero fino a un limite, e `bodyRows` è quel limite. Il [campo `rows` di `$.ui.open`](/docs/it/plugins/mods/interface#open-a-pane-at-the-right-time) richiede un limite diverso.

247 247 

248Un albero più alto del pannello scorre nel suo insieme.248Un albero più alto del pannello scorre nel suo insieme.


255 255 

256| Elemento | Prop principali | Terminale | Desktop |256| Elemento | Prop principali | Terminale | Desktop |

257| :- | :- | :-: | :-: |257| :- | :- | :-: | :-: |

258| [`Box`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `key`, layout flex, `gap`, `padding`, `margin`, `width`, `height`, `borderStyle`, `backgroundColor`, `position`, `hover` | ✓ | ✓ |258| [`Box`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `key`, layout flex, `gap`, `padding`, `margin`, `width`, `height`, [`borderStyle`](#box-border-styles), `backgroundColor`, `position`, `hover` | ✓ | ✓ |

259| [`Text`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, `bold`, `italic`, `underline`, `dimColor`, `inverse`, `wrap` | ✓ | ✓ |259| [`Text`](/docs/it/plugins/mods/interface#build-a-tree-from-elements) | `color`, `backgroundColor`, `bold`, `italic`, `underline`, `dimColor`, `inverse`, `wrap` | ✓ | ✓ |

260| [`Button`](/docs/it/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action` | ✓ | ✓ |260| [`Button`](/docs/it/plugins/mods/interface#respond-to-presses-and-typing) | `key`, `label`, `onPress`, `hotkey`, `plain`, `dimColor`, `autoFocus`, `action` | ✓ | ✓ |

261| `Link` | `href`, `label` | ✓ | ✓ |261| `Link` | `href`, `label` | ✓ | ✓ |


270 270 

271Altre regole per `Button`: `action` indica una delle [scorciatoie da tastiera](/docs/it/keybindings) di Claude Code, e la combinazione assegnata dall'utente a quell'azione preme il pulsante quando si tratta di un accordo o di un tasto con modificatore. Un `hotkey` numerico su un pulsante nella banda si attiva anche quando l'utente digita solo quella cifra in un prompt vuoto e si ferma. Quando due pulsanti nello stesso disegno indicano lo stesso `hotkey`, lo ottiene quello successivo. `autoFocus` accetta solo `true` su qualsiasi controllo, quindi ometti la prop per lasciarlo disattivato.271Altre regole per `Button`: `action` indica una delle [scorciatoie da tastiera](/docs/it/keybindings) di Claude Code, e la combinazione assegnata dall'utente a quell'azione preme il pulsante quando si tratta di un accordo o di un tasto con modificatore. Un `hotkey` numerico su un pulsante nella banda si attiva anche quando l'utente digita solo quella cifra in un prompt vuoto e si ferma. Quando due pulsanti nello stesso disegno indicano lo stesso `hotkey`, lo ottiene quello successivo. `autoFocus` accetta solo `true` su qualsiasi controllo, quindi ometti la prop per lasciarlo disattivato.

272 272 

273<h3 id="box-border-styles">

274 Stili del bordo di `Box`

275</h3>

276 

277Per disegnare un bordo attorno a un `Box`, imposta la sua `borderStyle` su uno di questi nomi, come in `borderStyle: 'round'`. Ogni riga indica cosa disegna il terminale per quel nome e mostra il bordo superiore.

278 

279| `borderStyle` | Cosa disegna il terminale | Bordo superiore |

280| :- | :- | :- |

281| `'single'` | Linee sottili con angoli squadrati | `┌──┐` |

282| `'double'` | Linee doppie | `╔══╗` |

283| `'round'` | Linee sottili con angoli arrotondati | `╭──╮` |

284| `'bold'` | Linee spesse | `┏━━┓` |

285| `'singleDouble'` | Linee sottili in alto e in basso, linee doppie sui lati | `╓──╖` |

286| `'doubleSingle'` | Linee doppie in alto e in basso, linee sottili sui lati | `╒══╕` |

287| `'classic'` | I caratteri ASCII `+`, `-` e `\|` | `+--+` |

288| `'arrow'` | Frecce che puntano verso l'interno del `Box` | `↘↓↓↙` |

289| `'dashed'` | Linee tratteggiate con angoli vuoti | `╌╌` |

290| `'quote'` | Una barra, `▎`, lungo il lato sinistro e celle vuote sugli altri tre lati | Vuoto |

291 

292Un `Box` la cui `borderStyle` indica qualsiasi altro nome, come `'rounded'`, viene disegnato senza bordo.

293 

273<h2 id="limits">294<h2 id="limits">

274 Limiti295 Limiti

275</h2>296</h2>

Details

17 17 

18 * **Perché gli ambiti, la cache e la precedenza si comportano nel modo in cui lo fanno**: leggi [Plugin loading reference](/docs/it/plugins/loading)18 * **Perché gli ambiti, la cache e la precedenza si comportano nel modo in cui lo fanno**: leggi [Plugin loading reference](/docs/it/plugins/loading)

19 * **Ricerca di un flag, un campo o un comando**: utilizza il [plugin commands reference](/docs/it/plugins/cli-reference), il [manifest reference](/docs/it/plugins/manifest-reference) o il [marketplace reference](/docs/it/plugins/marketplace-reference)19 * **Ricerca di un flag, un campo o un comando**: utilizza il [plugin commands reference](/docs/it/plugins/cli-reference), il [manifest reference](/docs/it/plugins/manifest-reference) o il [marketplace reference](/docs/it/plugins/marketplace-reference)

20 * **Un messaggio `hooks module not loaded` o `hooks module did not load`**: il plugin è un [mod](/docs/it/plugins/mods/overview), quindi leggi [The mod doesn't load](/docs/it/plugins/mods/troubleshoot#the-mod-doesn’t-load)

20</Note>21</Note>

21 22 

22Cerca il messaggio esatto che hai visto. Ogni messaggio è elencato sotto la fase che lo produce, che non è sempre il comando che hai eseguito. Ad esempio, un'installazione può fallire perché manca un marketplace, quindi quel messaggio è sotto [Add a marketplace](#add-a-marketplace).23Cerca il messaggio esatto che hai visto. Ogni messaggio è elencato sotto la fase che lo produce, che non è sempre il comando che hai eseguito. Ad esempio, un'installazione può fallire perché manca un marketplace, quindi quel messaggio è sotto [Add a marketplace](#add-a-marketplace).

quickstart.md +5 −5

Details

33 <Tab title="Installazione nativa (consigliata)">33 <Tab title="Installazione nativa (consigliata)">

34 **macOS, Linux, WSL:**34 **macOS, Linux, WSL:**

35 35 

36 ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}36 ```bash theme={null}

37 curl -fsSL https://claude.ai/install.sh | bash37 curl -fsSL https://claude.ai/install.sh | bash

38 ```38 ```

39 39 

40 **Windows PowerShell:**40 **Windows PowerShell:**

41 41 

42 ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}42 ```powershell theme={null}

43 irm https://claude.ai/install.ps1 | iex43 irm https://claude.ai/install.ps1 | iex

44 ```44 ```

45 45 

46 **Windows CMD:**46 **Windows CMD:**

47 47 

48 ```batch theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}48 ```batch theme={null}

49 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd49 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

50 ```50 ```

51 51 


63 </Tab>63 </Tab>

64 64 

65 <Tab title="Homebrew">65 <Tab title="Homebrew">

66 ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}66 ```bash theme={null}

67 brew install --cask claude-code67 brew install --cask claude-code

68 ```68 ```

69 69 


75 </Tab>75 </Tab>

76 76 

77 <Tab title="WinGet">77 <Tab title="WinGet">

78 ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}78 ```powershell theme={null}

79 winget install Anthropic.ClaudeCode79 winget install Anthropic.ClaudeCode

80 ```80 ```

81 81 

Details

43 <Step title="Aprire la console di amministrazione">43 <Step title="Aprire la console di amministrazione">

44 Nella console claude.ai, vai a [**Organization settings > Claude Code > Managed settings**](https://claude.ai/admin-settings/claude-code).44 Nella console claude.ai, vai a [**Organization settings > Claude Code > Managed settings**](https://claude.ai/admin-settings/claude-code).

45 45 

46 Se il collegamento ti reindirizza a una pagina Organization settings diversa invece della pagina Claude Code, il tuo account non dispone del ruolo richiesto. I ruoli Admin e gli altri ruoli non-Owner non possono visualizzare o modificare le impostazioni gestite, quindi chiedi a un Owner o Primary Owner della tua organizzazione di apportare la modifica. Consulta [Controllo di accesso](#access-control).46 In un'organizzazione Team o Enterprise, se la pagina indica che non hai accesso, chiedi a un [Owner o Primary Owner](#access-control) di apportare la modifica.

47 </Step>47 </Step>

48 48 

49 <Step title="Definire le impostazioni">49 <Step title="Definire le impostazioni">

sessions.md +3 −3

Details

83* Terminale: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` quando il nome corrisponde a una sessione, senza `-p`. Claude Code ripristina la modalità di autorizzazione in cui era la sessione, tranne nei casi nella tabella. Passa `--permission-mode` o `--dangerously-skip-permissions` per ignorare la modalità ripristinata.83* Terminale: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` quando il nome corrisponde a una sessione, senza `-p`. Claude Code ripristina la modalità di autorizzazione in cui era la sessione, tranne nei casi nella tabella. Passa `--permission-mode` o `--dangerously-skip-permissions` per ignorare la modalità ripristinata.

84* Non interattivo: `claude -p --resume` o `claude -p --continue`. Claude Code avvia l'esecuzione nella modalità di autorizzazione in cui una nuova esecuzione `claude -p` si avvierebbe, tranne che una sessione che è terminata in modalità piano riprende in modalità piano secondo le [condizioni di seguito](#resume-in-plan-mode-with-p).84* Non interattivo: `claude -p --resume` o `claude -p --continue`. Claude Code avvia l'esecuzione nella modalità di autorizzazione in cui una nuova esecuzione `claude -p` si avvierebbe, tranne che una sessione che è terminata in modalità piano riprende in modalità piano secondo le [condizioni di seguito](#resume-in-plan-mode-with-p).

85* VS Code: il pannello di conversazione dell'estensione. La tabella copre solo una conversazione che è terminata in modalità piano; per il resto, vedi [riprendere conversazioni passate](/docs/it/vs-code#resume-past-conversations).85* VS Code: il pannello di conversazione dell'estensione. La tabella copre solo una conversazione che è terminata in modalità piano; per il resto, vedi [riprendere conversazioni passate](/docs/it/vs-code#resume-past-conversations).

86* Selezionatore di sessioni al lancio: una sessione che selezioni dal [selezionatore di sessioni](#use-the-session-picker), che tu l'abbia aperto con `claude --resume` da solo, `claude --from-pr` o un nome che corrisponde a più di una sessione. Claude Code non ripristina la modalità di autorizzazione archiviata. Avvia la sessione nella modalità di autorizzazione in cui avvierebbe una nuova sessione dalla stessa riga di comando.86* Selezionatore di sessioni al lancio: una sessione che selezioni dal [selezionatore di sessioni](#use-the-session-picker), che tu l'abbia aperto con `claude --resume` da solo, `claude --from-pr` o un nome che corrisponde a più di una sessione. Claude Code avvia la sessione nella modalità di permesso in cui avvierebbe una nuova sessione dalla stessa riga di comando, tranne che una sessione che è terminata in plan mode riprende in plan mode a meno che tu non passi `--permission-mode`, `--dangerously-skip-permissions` o `--fork-session`. Nessun'altra modalità di permesso archiviata viene ripristinata.

87* `/resume` dentro una sessione, con o senza argomento: Claude Code non ripristina la modalità di autorizzazione archiviata. La conversazione a cui passi continua nella modalità di autorizzazione in cui è la tua sessione corrente.87* `/resume` dentro una sessione, con o senza argomento: la conversazione a cui passi continua nella modalità di permesso in cui è la tua sessione corrente, tranne che una conversazione che è terminata in plan mode riprende in plan mode, anche se hai avviato Claude Code con `--permission-mode` o `--dangerously-skip-permissions`. Se quella conversazione era già stata aperta in precedenza in questa esecuzione di Claude Code, come la conversazione in cui hai iniziato o una che hai lasciato con `/clear` o `/resume`, continua invece nella tua modalità di permesso corrente.

88 88 

89Il ripristino della modalità piano sui percorsi non interattivi e VS Code richiede Claude Code v2.1.246 o successiva. Ogni riga nomina la modalità di autorizzazione in cui la sessione è terminata, quale dei percorsi terminale, non interattivo e VS Code la riprendi, e la modalità di autorizzazione in cui Claude Code avvia la sessione ripresa.89Il ripristino della modalità piano sui percorsi non interattivi e VS Code richiede Claude Code v2.1.246 o successiva. Ogni riga nomina la modalità di autorizzazione in cui la sessione è terminata, quale dei percorsi terminale, non interattivo e VS Code la riprendi, e la modalità di autorizzazione in cui Claude Code avvia la sessione ripresa.

90 90 

91| La sessione è terminata in | Come la riprendi | Modalità di autorizzazione dopo il ripristino |91| La sessione è terminata in | Come la riprendi | Modalità di autorizzazione dopo il ripristino |

92| :- | :- | :- |92| :- | :- | :- |

93| `bypassPermissions` | Terminale | La modalità di autorizzazione in cui una nuova sessione si avvierebbe. Per [ignorare le autorizzazioni](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) di nuovo, abilitala al lancio con uno dei suoi flag di lancio o `permissions.defaultMode: "bypassPermissions"` in [impostazioni utente, `--settings` o impostazioni gestite](/docs/it/settings-reference#permissions-defaultmode) |93| `bypassPermissions` | Terminale | La modalità di autorizzazione in cui una nuova sessione si avvierebbe. Per [ignorare le autorizzazioni](/docs/it/permission-modes#skip-all-checks-with-bypasspermissions-mode) di nuovo, abilitala al lancio con uno dei suoi flag di lancio o `permissions.defaultMode: "bypassPermissions"` in [impostazioni utente, `--settings` o impostazioni gestite](/docs/it/settings-reference#permissions-defaultmode) |

94| `plan` | Terminale | La modalità di autorizzazione in cui una nuova sessione si avvierebbe |94| `plan` | Terminale | Plan mode. Con `--fork-session`, la modalità di permesso in cui una nuova sessione si avvierebbe |

95| `auto` | Terminale | `auto`, solo quando il tuo account soddisfa ancora i [requisiti della modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) |95| `auto` | Terminale | `auto`, solo quando il tuo account soddisfa ancora i [requisiti della modalità auto](/docs/it/permission-modes#eliminate-prompts-with-auto-mode) |

96| Manuale | Terminale | Manuale quando una nuova sessione si avvierebbe in modalità auto dal [default integrato](/docs/it/permission-modes#which-mode-a-session-starts-in). Quando un `defaultMode` da un file di impostazioni [ha effetto](/docs/it/permission-modes#which-mode-a-session-starts-in), Claude Code avvia la sessione ripresa in quella modalità invece |96| Manuale | Terminale | Manuale quando una nuova sessione si avvierebbe in modalità auto dal [default integrato](/docs/it/permission-modes#which-mode-a-session-starts-in). Quando un `defaultMode` da un file di impostazioni [ha effetto](/docs/it/permission-modes#which-mode-a-session-starts-in), Claude Code avvia la sessione ripresa in quella modalità invece |

97| `plan` | Non interattivo, secondo le [condizioni di seguito](#resume-in-plan-mode-with-p) | Modalità piano |97| `plan` | Non interattivo, secondo le [condizioni di seguito](#resume-in-plan-mode-with-p) | Modalità piano |

sub-agents.md +2 −2

Details

310 310 

311| Field | Required | Description |311| Field | Required | Description |

312| :- | :- | :- |312| :- | :- | :- |

313| `name` | Yes | Identificatore univoco, come `code-reviewer` o `reviewer-v2`. [Hooks](/docs/it/hooks#subagentstart) ricevono questo valore come `agent_type`. Il nome del file non deve corrispondere. I nomi non possono contenere `:`, che è riservato per [identificatori con ambito plugin](/docs/it/plugins/overview) come `my-plugin:reviewer`. Claude Code non carica un file il cui nome contiene uno e registra un errore nel log di debug. Prima di v2.1.218, tali nomi erano accettati |313| `name` | Sì | Identificatore univoco di massimo 256 caratteri, come `code-reviewer` o `reviewer-v2`. Gli [hook](/docs/it/hooks#subagentstart) ricevono questo valore come `agent_type`. Non è necessario che il nome del file corrisponda. I nomi non possono contenere `:`, che è riservato agli [identificatori con ambito del plugin](/docs/it/plugins/overview) come `my-plugin:reviewer` |

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

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

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


348 348 

349* **No `name`**: Claude Code tratta il file come documentazione mantenuta accanto ai suoi agenti.349* **No `name`**: Claude Code tratta il file come documentazione mantenuta accanto ai suoi agenti.

350* **Un `---` di apertura che non è la prima riga del file**: Claude Code legge il file come non avente frontmatter e lo tratta come documentazione.350* **Un `---` di apertura che non è la prima riga del file**: Claude Code legge il file come non avente frontmatter e lo tratta come documentazione.

351* **Un `name` che inizia con `-` o contiene `:`**: Claude Code salta il file e scrive un errore nel log di debug. Consulti la riga `name` nella tabella sopra.351* **Un `name` che inizia con `-`, contiene `:` o supera i 256 caratteri**: Claude Code salta il file e scrive un errore nel log di debug.

352* **Un `name` ma nessuna `description`**: Claude Code salta il file e scrive il motivo nel log di debug.352* **Un `name` ma nessuna `description`**: Claude Code salta il file e scrive il motivo nel log di debug.

353* **YAML che non analizza**: Claude Code non legge alcun campo dal file, lo salta e scrive l'errore di analisi nel log di debug.353* **YAML che non analizza**: Claude Code non legge alcun campo dal file, lo salta e scrive l'errore di analisi nel log di debug.

354 354 

vs-code.md +1 −1

Details

606| `environmentVariables` | `[]` | Imposta le variabili d'ambiente per il processo Claude. Per la configurazione condivisa usa invece le impostazioni di Claude Code. Una voce [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars) si applica solo quando il suo valore è un percorso assoluto; l'estensione non espande `~` e ignora un valore relativo. |606| `environmentVariables` | `[]` | Imposta le variabili d'ambiente per il processo Claude. Per la configurazione condivisa usa invece le impostazioni di Claude Code. Una voce [`CLAUDE_CONFIG_DIR`](/docs/it/env-vars) si applica solo quando il suo valore è un percorso assoluto; l'estensione non espande `~` e ignora un valore relativo. |

607| `disableLoginPrompt` | `false` | Salta i prompt di autenticazione (per configurazioni di provider di terze parti) |607| `disableLoginPrompt` | `false` | Salta i prompt di autenticazione (per configurazioni di provider di terze parti) |

608| `allowDangerouslySkipPermissions` | `false` | Aggiunge Bypass permissions al selettore di modalità. Utilizzarlo solo in sandbox senza accesso a Internet. |608| `allowDangerouslySkipPermissions` | `false` | Aggiunge Bypass permissions al selettore di modalità. Utilizzarlo solo in sandbox senza accesso a Internet. |

609| `claudeProcessWrapper` | - | Eseguibile utilizzato per avviare il processo Claude. Il percorso binario in bundle viene passato come argomento quando presente. Impostarlo su un binario `claude` installato separatamente se la build dell'estensione non ne include uno per la vostra piattaforma. In una configurazione con wrapper, le conversazioni iniziano in modalità Manual a meno che non impostiate `initialPermissionMode` o non abbiate scelto Manual, Edit automatically o Auto in una conversazione precedente, perché l'estensione salta i passaggi delle impostazioni e del valore predefinito incorporato lì; vedere [Switch permission modes](/docs/it/permission-modes#switch-permission-modes). Un errore "Unsupported platform" all'attivazione significa che nessun binario è in bundle per la vostra piattaforma; vedere [which platforms have prebuilt binaries](/docs/it/troubleshoot-install#native-binary-not-found-after-npm-install). |609| `claudeProcessWrapper` | - | Eseguibile utilizzato per avviare il processo Claude. Il percorso del binario in bundle viene passato come argomento quando presente. Impostalo su un binario `claude` installato separatamente se la build dell'estensione non ne include uno per la tua piattaforma. |

610 610 

611<h2 id="use-a-screen-reader">611<h2 id="use-a-screen-reader">

612 Utilizzare un lettore di schermo612 Utilizzare un lettore di schermo

worktrees.md +3 −1

Details

6 6 

7> Isolare sessioni parallele di Claude Code in worktrees git separati in modo che i cambiamenti non si scontrino. Copre il flag `--worktree`, l'isolamento dei subagent, `.worktreeinclude`, la pulizia e gli hook VCS non-git.7> Isolare sessioni parallele di Claude Code in worktrees git separati in modo che i cambiamenti non si scontrino. Copre il flag `--worktree`, l'isolamento dei subagent, `.worktreeinclude`, la pulizia e gli hook VCS non-git.

8 8 

9Un [git worktree](https://git-scm.com/docs/git-worktree) è una directory di lavoro separata con i propri file e branch, che condivide la stessa cronologia del repository e il remote come il vostro checkout principale. Eseguire ogni sessione di Claude Code nel proprio worktree significa che le modifiche in una sessione non toccheranno mai i file in un'altra, quindi una sessione può costruire una funzionalità mentre una seconda corregge un bug.9Un [git worktree](https://git-scm.com/docs/git-worktree) è una directory di lavoro separata con i propri file e branch, che condivide la stessa cronologia del repository e lo stesso remote del tuo checkout principale. Eseguire ogni sessione di Claude Code nel proprio worktree le fornisce una copia separata dei file da modificare, quindi una sessione può sviluppare una funzionalità mentre una seconda corregge un bug.

10 10 

11<Note>11<Note>

12 I worktree richiedono un repository git; per altri sistemi di controllo versione, [configurate gli hook per sostituire la logica git](#non-git-version-control). Nell'[app desktop](/docs/it/desktop#work-in-parallel-with-sessions), selezionate l'opzione **worktree** quando avviate una sessione per darle il proprio worktree.12 I worktree richiedono un repository git; per altri sistemi di controllo versione, [configurate gli hook per sostituire la logica git](#non-git-version-control). Nell'[app desktop](/docs/it/desktop#work-in-parallel-with-sessions), selezionate l'opzione **worktree** quando avviate una sessione per darle il proprio worktree.


104* **Reindirizzamenti git**: Claude Code blocca un comando Bash o Monitor che reindirizza git nel checkout principale. Il reindirizzamento può provenire attraverso `git -C`, `--git-dir`, una variabile `GIT_DIR` o `GIT_WORK_TREE`, o un `cd` nel checkout principale prima di eseguire git.104* **Reindirizzamenti git**: Claude Code blocca un comando Bash o Monitor che reindirizza git nel checkout principale. Il reindirizzamento può provenire attraverso `git -C`, `--git-dir`, una variabile `GIT_DIR` o `GIT_WORK_TREE`, o un `cd` nel checkout principale prima di eseguire git.

105* **Forma del comando**: Claude Code blocca un comando Bash o Monitor quando non può verificare dal testo del comando che qualsiasi git che il comando esegue rimane all'interno del worktree. Questo accade, ad esempio, quando il nome del comando è calcolato a runtime, quando la sintassi non può essere analizzata, o quando un'espansione come `${!name}` o `${ command; }` potrebbe eseguire un comando che il testo non esplicita. Claude Code dice a Claude come riscrivere il comando rifiutato, come dividerlo in comandi semplici e separati. Non potete disattivare questo controllo.105* **Forma del comando**: Claude Code blocca un comando Bash o Monitor quando non può verificare dal testo del comando che qualsiasi git che il comando esegue rimane all'interno del worktree. Questo accade, ad esempio, quando il nome del comando è calcolato a runtime, quando la sintassi non può essere analizzata, o quando un'espansione come `${!name}` o `${ command; }` potrebbe eseguire un comando che il testo non esplicita. Claude Code dice a Claude come riscrivere il comando rifiutato, come dividerlo in comandi semplici e separati. Non potete disattivare questo controllo.

106 106 

107Questi controlli leggono il percorso a cui è destinata una modifica, la directory in cui viene eseguito un comando e il testo del comando. Nessuno di essi tiene traccia di quali file scrive un comando della shell, quindi un comando che scrive nel checkout principale senza eseguirvi git, come `cp` o un reindirizzamento della shell, non viene rifiutato da questi controlli. Claude Code tratta quel comando come qualsiasi altro comando della shell, quindi se viene eseguito o se ti chiede conferma dipende dalla tua [modalità di permesso](/docs/it/permission-modes) e dalle tue regole.

108 

107I controlli si applicano al repository da cui avete lanciato Claude Code. Coprono anche il checkout principale da cui un worktree collegato è collegato. Per i comandi PowerShell, Claude Code applica solo il controllo della directory di lavoro.109I controlli si applicano al repository da cui avete lanciato Claude Code. Coprono anche il checkout principale da cui un worktree collegato è collegato. Per i comandi PowerShell, Claude Code applica solo il controllo della directory di lavoro.

108 110 

109Claude vede ogni rifiuto come un errore di strumento che nomina il worktree e dice come procedere. Per un comando rifiutato, consultate [cosa significa il messaggio di rifiuto e come cancellarlo](/docs/it/errors#command-blocked-by-the-worktree-isolation-checks).111Claude vede ogni rifiuto come un errore di strumento che nomina il worktree e dice come procedere. Per un comando rifiutato, consultate [cosa significa il messaggio di rifiuto e come cancellarlo](/docs/it/errors#command-blocked-by-the-worktree-isolation-checks).