4 4
5# Hosting dell'Agent SDK5# Hosting dell'Agent SDK
6 6
7> Distribuisci l'Agent SDK in produzione: architettura subprocess, persistenza della sessione, scaling, osservabilità e isolamento multi-tenant per Docker, Kubernetes e provider sandbox.7> Distribuisci l'Agent SDK in produzione: architettura subprocess, persistenza della sessione, scalabilità, osservabilità e isolamento multi-tenant per Docker, Kubernetes e provider sandbox.
8 8
9L'Agent SDK genera e supervisiona un subprocess `claude` CLI che possiede una shell, una directory di lavoro e file di sessione su disco. Ospitarlo non è come ospitare un wrapper API senza stato. Ogni agente in esecuzione è un processo di lunga durata legato allo stato locale, il che influenza il modo in cui allochi risorse, persisti sessioni e scala tra tenant.9L'Agent SDK genera e supervisiona un subprocess `claude` CLI che possiede una shell, una directory di lavoro e file di sessione su disco. Ospitarlo non è come ospitare un wrapper API senza stato. Ogni agente in esecuzione è un processo di lunga durata legato allo stato locale, il che influenza il modo in cui allochi risorse, persisti sessioni e scala tra tenant.
10 10
11Questa pagina copre l'auto-hosting sulla tua infrastruttura: comprendi [il modello subprocess](#the-subprocess-model), [scegli un pattern di sessione](#choose-a-session-pattern), [provisiona il container](#provision-the-container) e [gestisci le preoccupazioni di produzione](#handle-production-concerns) come persistenza, osservabilità, autenticazione e isolamento multi-tenant. Per Dockerfile distribuibili e manifest Kubernetes, vedi il [hosting cookbook](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).11Questa pagina copre l'auto-hosting sulla tua infrastruttura. Per Dockerfile distribuibili e manifesti Kubernetes, consulta il [hosting cookbook](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).
12 12
13Se non hai bisogno di controllo dell'infrastruttura, isolamento personalizzato o il tuo piano dati, considera invece [Managed Agents](https://platform.claude.com/docs/it/managed-agents/overview): un'API REST ospitata dove Anthropic esegue l'agente e la sandbox, quindi la tua applicazione invia eventi e riceve risultati in streaming senza infrastruttura di hosting da gestire.13Se non hai bisogno di controllo dell'infrastruttura, isolamento personalizzato o del tuo piano dati, considera invece gli [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview): un'API REST ospitata dove Anthropic esegue l'agente e la sandbox, quindi la tua applicazione invia eventi e riceve i risultati in streaming senza infrastruttura di hosting da gestire.
14
15<Info>
16 Per l'indurimento della sicurezza oltre il sandboxing di base, inclusi i controlli di rete, la gestione delle credenziali e le opzioni di isolamento, vedi [Secure Deployment](/it/agent-sdk/secure-deployment).
17</Info>
18 14
19<h2 id="the-subprocess-model">15<h2 id="the-subprocess-model">
20 Il modello subprocess16 Il modello subprocess
21</h2>17</h2>
22 18
23Ogni decisione di hosting su questa pagina deriva da come l'SDK esegue l'agente. Quando il vostro codice chiama `query()`, l'SDK genera un processo CLI `claude` separato e comunica con esso tramite stdio. Quel subprocess possiede la shell, la directory di lavoro e i transcript della sessione JSONL su disco locale.19Ogni decisione di hosting su questa pagina deriva da come l'SDK esegue l'agente. Quando il vostro codice chiama `query()`, l'SDK genera un processo `claude` CLI separato e comunica con esso tramite stdio. Quel subprocess possiede la shell, la directory di lavoro e i transcript della sessione JSONL su disco locale.
20
21<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" className="dark:hidden" alt="Flusso di richiesta: dal client alla vostra app, che genera un subprocess CLI claude su stdio all'interno del container; il subprocess scrive su disco locale e chiama api.anthropic.com su HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />
24 22
25<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" alt="Flusso di richiesta: dal client alla vostra app, che genera un subprocess CLI claude su stdio all'interno del container; il subprocess scrive su disco locale e chiama api.anthropic.com su HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/hosting-subprocess-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=3fdeff3d7f44b2b67762668acfbb25f5" className="hidden dark:block" alt="Flusso di richiesta: dal client alla vostra app, che genera un subprocess CLI claude su stdio all'interno del container; il subprocess scrive su disco locale e chiama api.anthropic.com su HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess-dark.svg" />
26 24
27Una sessione agente corrisponde a un subprocess. L'esecuzione di N sessioni concorrenti significa N subprocess, ognuno con il proprio albero di processi e file di transcript. Per impostazione predefinita ereditano tutti la directory di lavoro della vostra applicazione, quindi passate `cwd` su ogni chiamata `query()` quando le sessioni necessitano di filesystem separati:25Una sessione agente corrisponde a un subprocess. L'esecuzione di N sessioni concorrenti significa N subprocess, ognuno con il proprio albero di processi e file di transcript. Per impostazione predefinita, ereditano tutti la directory di lavoro della vostra applicazione. Quando le sessioni necessitano di filesystem separati, passate un `cwd` distinto nelle opzioni della chiamata `query()` di ogni sessione:
28 26
29<CodeGroup>27<CodeGroup>
30 ```typescript TypeScript theme={null}28 ```typescript TypeScript theme={null}
31 query({ prompt, options: { cwd: "/work/session-a" } })29 import { query } from "@anthropic-ai/claude-agent-sdk";
30
31 for await (const message of query({
32 prompt: "Summarize the files in this directory",
33 options: { cwd: "/work/session-a" },
34 })) {
35 console.log(message);
36 }
32 ```37 ```
33 38
34 ```python Python theme={null}39 ```python Python theme={null}
35 query(prompt=prompt, options=ClaudeAgentOptions(cwd="/work/session-a"))40 import asyncio
41
42 from claude_agent_sdk import ClaudeAgentOptions, query
43
44
45 async def main():
46 async for message in query(
47 prompt="Summarize the files in this directory",
48 options=ClaudeAgentOptions(cwd="/work/session-a"),
49 ):
50 print(message)
51
52
53 asyncio.run(main())
36 ```54 ```
37</CodeGroup>55</CodeGroup>
38 56
57Gli esempi TypeScript su questa pagina utilizzano `await` di livello superiore, quindi salvateli come file `.mts` o impostate `"type": "module"` in `package.json`.
58
39<h3 id="state-that-lives-on-local-disk">59<h3 id="state-that-lives-on-local-disk">
40 Stato che risiede su disco locale60 Stato che risiede su disco locale
41</h3>61</h3>
42 62
43Tre tipi di stato agente risiedono sul filesystem del container per impostazione predefinita. Nessuno di essi sopravvive a un riavvio del container, a una riduzione della scala o a uno spostamento su un nodo diverso.63Tre tipi di stato agente risiedono nel filesystem del container per impostazione predefinita. Nessuno di essi sopravvive a un riavvio del container, a una riduzione della scala o a uno spostamento su un nodo diverso.
44 64
45| Stato | Posizione predefinita |65| Stato | Posizione predefinita |
46| ----------------------------------- | ----------------------------------------------------------------------------------------------------------- |66| ----------------------------------- | ----------------------------------------------------------------------------------------------------------- |
48| File di memoria `CLAUDE.md` | `~/.claude/CLAUDE.md` per il livello utente e la directory di lavoro della sessione per il livello progetto |68| File di memoria `CLAUDE.md` | `~/.claude/CLAUDE.md` per il livello utente e la directory di lavoro della sessione per il livello progetto |
49| Artefatti della directory di lavoro | La directory di lavoro della sessione |69| Artefatti della directory di lavoro | La directory di lavoro della sessione |
50 70
51Per persistere i transcript tra host, configurate un adattatore [`SessionStore`](/it/agent-sdk/session-storage). I file di memoria e altri artefatti della directory di lavoro necessitano della loro propria strategia di archiviazione, come un volume montato o una sincronizzazione di object-store.71Per persistere i transcript tra host, configurate un adattatore [`SessionStore`](/docs/it/agent-sdk/session-storage). I file di memoria e altri artefatti della directory di lavoro necessitano della loro propria strategia di archiviazione, come un volume montato o una sincronizzazione di object-store.
52 72
53Per come le sessioni, la ripresa e il forking funzionano a livello di API, vedere [Sessions](/it/agent-sdk/sessions).73Per informazioni su come sessioni, ripresa e fork funzionano a livello API, consultate [Sessions](/docs/it/agent-sdk/sessions).
54 74
55<h2 id="choose-a-session-pattern">75<h2 id="choose-a-session-pattern">
56 Scegliere un modello di sessione76 Scegliere un modello di sessione
57</h2>77</h2>
58 78
59Questi quattro modelli coprono il ciclo di vita della sessione: quanto a lungo un container vive rispetto alle sessioni che serve. Per dove il container viene eseguito, il [hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb) ha [codice distribuibile](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) per Docker locale, Modal e Kubernetes. Scegliere un modello di sessione qui e un target di distribuzione dal cookbook.79Questi quattro modelli coprono il ciclo di vita della sessione: quanto tempo vive un container rispetto alle sessioni che serve. Per dove il container viene eseguito, il [manuale di hosting](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb) contiene [codice distribuibile](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) per Docker locale, Modal e Kubernetes. Scegliere un modello di sessione qui e una destinazione di distribuzione dal manuale.
60 80
61<h3 id="ephemeral-sessions">81<h3 id="ephemeral-sessions">
62 Sessioni effimere82 Sessioni effimere
63</h3>83</h3>
64 84
65Creare un container per ogni attività dell'utente e distruggerlo quando l'attività si completa. Migliore per attività una tantum. L'utente può ancora interagire con l'IA mentre l'attività si sta completando, ma una volta completata il container viene distrutto.85Creare un container per ogni attività dell'utente e distruggerlo quando l'attività si completa. Ideale per attività una tantum. L'utente può ancora interagire con l'IA mentre l'attività si sta completando, ma una volta completata il container viene distrutto.
66 86
67I carichi di lavoro di esempio includono l'investigazione e la correzione di bug, l'estrazione di fatture e ricevute, la traduzione di documenti e la trasformazione di media.87I carichi di lavoro di esempio includono l'indagine e la correzione di bug, l'estrazione di fatture e ricevute, la traduzione di documenti e la trasformazione di media.
68 88
69Il container esegue un entrypoint one-shot che chiama l'SDK ed esce. L'esempio seguente mostra una versione TypeScript minima. Salvarla come `entrypoint.mts` o impostare `"type": "module"` in `package.json` in modo che `await` di livello superiore sia disponibile.89Il container esegue un punto di ingresso una tantum che legge l'attività dalla variabile di ambiente `TASK_PROMPT`, chiama l'SDK ed esce.
70 90
71```typescript theme={null}91<CodeGroup>
72import { query } from "@anthropic-ai/claude-agent-sdk";92 ```typescript TypeScript theme={null}
93 import { query } from "@anthropic-ai/claude-agent-sdk";
73 94
74const prompt = process.env.TASK_PROMPT!;95 const prompt = process.env.TASK_PROMPT!;
75for await (const message of query({ prompt, options: { maxTurns: 20 } })) {96 for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
76 console.log(message);97 console.log(message);
77}98 }
78```99 ```
100
101 ```python Python theme={null}
102 import asyncio
103 import os
104
105 from claude_agent_sdk import ClaudeAgentOptions, query
106
107
108 async def main():
109 async for message in query(
110 prompt=os.environ["TASK_PROMPT"],
111 options=ClaudeAgentOptions(max_turns=20),
112 ):
113 print(message)
114
115
116 asyncio.run(main())
117 ```
118</CodeGroup>
119
120Lo script stampa ogni messaggio man mano che arriva, incluso un messaggio di risultato il cui `subtype` è `success` quando l'attività si completa entro il limite di turni. Se l'attività raggiunge il limite di 20 turni, il `subtype` del messaggio di risultato è `error_max_turns` e la chiamata `query()` genera un errore dopo averlo restituito, quindi avvolgere il ciclo in un blocco try se il container deve uscire correttamente. Vedere [Gestire il risultato](/docs/it/agent-sdk/agent-loop#handle-the-result) per i sottotipi di errore.
79 121
80<h3 id="long-running-sessions">122<h3 id="long-running-sessions">
81 Sessioni a lunga esecuzione123 Sessioni a lunga durata
82</h3>124</h3>
83 125
84Eseguire istanze di container persistenti, spesso ospitando più processi SDK per container, per servire il lavoro in corso. Migliore per agenti che intraprendono azioni autonome, servono contenuti o gestiscono flussi di messaggi ad alto volume.126Eseguire istanze di container persistenti, spesso ospitando più processi SDK per container, per servire il lavoro in corso. Ideale per agenti che intraprendono azioni autonome, servono contenuti o gestiscono flussi di messaggi ad alto volume.
85 127
86I carichi di lavoro di esempio includono un agente di posta elettronica che triage e risponde alla posta in arrivo, un generatore di siti che ospita un sito modificabile per utente attraverso le porte del container e un chatbot che gestisce il traffico continuo da una piattaforma come Slack.128I carichi di lavoro di esempio includono un agente di posta che triage e risponde alla posta in arrivo, un generatore di siti che ospita un sito modificabile per utente attraverso le porte del container e un chatbot che gestisce il traffico continuo da una piattaforma come Slack.
87 129
88Il container espone un endpoint HTTP o WebSocket e mappa ogni sessione attiva a una query a lunga durata e al sottoprocesso dietro di essa. In TypeScript, utilizzare [`streamInput()`](/it/agent-sdk/typescript#query-object) per aggiungere turni a una sessione attiva e [`startup()`](/it/agent-sdk/typescript#startup) per pre-riscaldare i sottoprocessi prima del traffico in arrivo. In Python, utilizzare [`ClaudeSDKClient`](/it/agent-sdk/python#claudesdkclient) per mantenere una sessione aperta tra i turni. Dimensionare il container in modo che possa contenere il numero massimo di sessioni simultanee in memoria.130Il container espone un endpoint HTTP o WebSocket e mappa ogni sessione attiva a una query di lunga durata e al sottoprocesso dietro di essa. In TypeScript, utilizzare [`streamInput()`](/docs/it/agent-sdk/typescript#query-object) per aggiungere turni a una sessione attiva e [`startup()`](/docs/it/agent-sdk/typescript#startup) per pre-riscaldare i sottoprocessi prima del traffico in arrivo. In Python, utilizzare [`ClaudeSDKClient`](/docs/it/agent-sdk/python#claudesdkclient) per mantenere una sessione aperta tra i turni. Dimensionare il container in modo che possa contenere il numero massimo di sessioni simultanee in memoria.
89 131
90<h3 id="hybrid-sessions">132<h3 id="hybrid-sessions">
91 Sessioni ibride133 Sessioni ibride
92</h3>134</h3>
93 135
94Container effimeri che si idratano da un [`SessionStore`](/it/agent-sdk/session-storage) all'avvio e persistono gli aggiornamenti indietro. Migliore per sessioni che si estendono su molte interazioni ma rimangono inattive tra di esse. Il container si spegne durante i periodi di inattività e si riaccende quando l'utente ritorna.136Container effimeri che si idratano da un [`SessionStore`](/docs/it/agent-sdk/session-storage) all'avvio e persistono gli aggiornamenti indietro. Ideale per sessioni che si estendono su molte interazioni ma rimangono inattive tra di esse. Il container si spegne durante i periodi di inattività e si riaccende quando l'utente ritorna.
95 137
96I carichi di lavoro di esempio includono un project manager personale con check-in intermittenti, ricerca approfondita che si interrompe e riprende nel corso di ore e un agente di supporto clienti che carica la cronologia dei ticket tra le interazioni.138I carichi di lavoro di esempio includono un gestore di progetti personali con check-in intermittenti, ricerca approfondita che si interrompe e riprende nel corso di ore e un agente di supporto clienti che carica la cronologia dei ticket tra le interazioni.
97 139
98Regolare il timeout di inattività del provider in base alla frequenza con cui ci si aspetta che gli utenti ritornino. Spegnere un container senza un `SessionStore` configurato perde la trascrizione con esso, quindi lo store è richiesto per questo modello, non opzionale.140Regolare il timeout di inattività del provider in base alla frequenza con cui ci si aspetta che gli utenti ritornino. Lo spegnimento di un container senza un `SessionStore` configurato perde la trascrizione con esso, quindi lo store è richiesto per questo modello, non facoltativo.
99 141
100Il modello si basa sulla ripresa di una sessione per ID con uno store condiviso allegato:142Il modello si basa sulla ripresa di una sessione per ID con uno store condiviso allegato:
101 143
116 ```158 ```
117 159
118 ```python Python theme={null}160 ```python Python theme={null}
119 from claude_agent_sdk import query, ClaudeAgentOptions161 from claude_agent_sdk import query, ClaudeAgentOptions, SessionStore
162 import asyncio
163
164 user_input: str = ...
165 session_id: str = ... # looked up from your database by user
166 session_store: SessionStore = ... # S3, Redis, Postgres, or your own adapter
120 167
168
169 async def main():
121 async for message in query(170 async for message in query(
122 prompt=user_input,171 prompt=user_input,
123 options=ClaudeAgentOptions(172 options=ClaudeAgentOptions(
124 resume=session_id, # looked up from your database by user173 resume=session_id,
125 session_store=session_store, # S3, Redis, Postgres, or your own adapter174 session_store=session_store,
126 ),175 ),
127 ):176 ):
128 ...177 ...
178
179
180 asyncio.run(main())
129 ```181 ```
130</CodeGroup>182</CodeGroup>
131 183
132Vedere [Session storage](/it/agent-sdk/session-storage) per l'interfaccia `SessionStore` completa e gli adapter di riferimento.
133
134<h3 id="multi-agent-container">184<h3 id="multi-agent-container">
135 Container multi-agente185 Container multi-agente
136</h3>186</h3>
137 187
138Eseguire più sottoprocessi SDK all'interno di un container. Migliore per agenti che devono collaborare strettamente, ad esempio simulazioni multi-agente in cui gli agenti interagiscono tra loro in un ambiente condiviso.188Eseguire più sottoprocessi SDK all'interno di un container. Ideale per agenti che devono collaborare strettamente, ad esempio simulazioni multi-agente in cui gli agenti interagiscono tra loro in un ambiente condiviso.
139 189
140Dare a ogni agente la propria directory di lavoro in modo che non sovrascrivano i file l'uno dell'altro e isolare il caricamento delle impostazioni in modo che i file `CLAUDE.md` per agente non si diffondano tra gli agenti. Vedere [Multi-tenant isolation](#multi-tenant-isolation) per le opzioni specifiche.190Assegnare a ogni agente la propria directory di lavoro in modo che non sovrascrivano i file l'uno dell'altro e isolare il caricamento delle impostazioni in modo che i file `CLAUDE.md` per agente non si diffondano tra gli agenti. Vedere [Isolamento multi-tenant](#multi-tenant-isolation) per le opzioni specifiche.
141 191
142<h2 id="provision-the-container">192<h2 id="provision-the-container">
143 Provisioning del container193 Provisioning del container
147 Sandboxing basato su container197 Sandboxing basato su container
148</h3>198</h3>
149 199
150Esegui l'SDK all'interno di un container sandbox per l'isolamento dei processi, i limiti delle risorse, il controllo della rete e un filesystem effimero. Diversi provider si specializzano in ambienti container sandbox che si adattano al modello dell'Agent SDK.200Esegui l'SDK all'interno di un container sandbox per l'isolamento dei processi, i limiti delle risorse, il controllo della rete e un filesystem effimero.
151 201
152Domande a cui rispondere quando si sceglie un provider:202Domande a cui rispondere quando si sceglie un provider:
153 203
154* **Chi gestisce la sandbox**: un provider sandbox-as-a-service gestisce l'infrastruttura per te, mentre le opzioni self-hosted ti forniscono il software da eseguire sulla tua infrastruttura.204* **Chi gestisce la sandbox**: un provider sandbox-as-a-service gestisce l'infrastruttura per te, mentre le opzioni self-hosted ti forniscono il software da eseguire sulla tua infrastruttura.
155* **Latenza di cold-start**: quanto tempo passa da "crea una sandbox" a "pronto ad accettare la prima richiesta". I pattern effimeri necessitano di avvii sub-secondo. I pattern a lunga durata tollerano di più.205* **Latenza di cold-start**: quanto tempo passa da "crea una sandbox" a "pronto ad accettare la prima richiesta". I modelli effimeri necessitano di avvii inferiori al secondo. I modelli a lunga durata tollerano di più.
156* **Archiviazione persistente**: se il provider offre volumi durevoli o solo disco effimero. Il pattern ibrido necessita di archiviazione durevole da qualche parte, sia nella sandbox che accanto ad essa.206* **Archiviazione persistente**: se il provider offre volumi durevoli o solo disco effimero. Il modello ibrido necessita di archiviazione durevole da qualche parte, sia nella sandbox che accanto ad essa.
157* **Modello di prezzo**: fatturazione per secondo, per richiesta o oraria fissa. La tariffazione per secondo si adatta ai carichi di lavoro effimeri bursty. La tariffazione oraria si adatta alle sessioni a lunga durata.207* **Modello di prezzo**: fatturazione al secondo, per richiesta o a tariffa oraria fissa. La tariffazione al secondo si adatta bene ai carichi di lavoro effimeri bursty. La tariffa oraria si adatta bene alle sessioni a lunga durata.
158* **Networking**: supporto per regole di egress personalizzate, proxy in uscita e peering VPC privato per ambienti regolamentati.208* **Networking**: supporto per regole di egress personalizzate, proxy in uscita e peering VPC privato per ambienti regolamentati.
159 209
160Provider da valutare:210Per le opzioni self-hosted come Docker, gVisor e Firecracker, e la configurazione dettagliata dell'isolamento, vedi [Isolation Technologies](/docs/it/agent-sdk/secure-deployment#isolation-technologies).
161
162* [Modal Sandbox](https://modal.com/docs/guide/sandbox), con un'[implementazione demo](https://modal.com/docs/examples/claude-slack-gif-creator)
163* [Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)
164* [Daytona](https://www.daytona.io/)
165* [E2B](https://e2b.dev/)
166* [Fly Machines](https://fly.io/docs/machines/)
167* [Vercel Sandbox](https://vercel.com/docs/functions/sandbox)
168
169Per opzioni self-hosted come Docker, gVisor e Firecracker, e configurazione dettagliata dell'isolamento, vedi [Isolation Technologies](/it/agent-sdk/secure-deployment#isolation-technologies).
170 211
171<h3 id="runtime-dependencies">212<h3 id="runtime-dependencies">
172 Dipendenze di runtime213 Dipendenze di runtime
173</h3>214</h3>
174 215
175Il container ha bisogno solo del runtime del linguaggio dell'SDK:216Il container necessita del runtime del linguaggio del tuo SDK:
176 217
177* Python 3.10+ per l'SDK Python, o Node.js 18+ per l'SDK TypeScript218* Python 3.10+ per l'SDK Python, o Node.js 18+ per l'SDK TypeScript
178* Entrambi i pacchetti SDK includono un binario Claude Code nativo per la piattaforma host, quindi non è necessaria un'installazione separata di Claude Code o Node.js per la CLI generata219* Sia gli SDK TypeScript che Python includono un binario Claude Code nativo per la maggior parte delle installazioni, e la CLI generata non necessita di un'installazione separata di Node.js. Vedi la [nota di installazione della guida rapida](/docs/it/agent-sdk/quickstart) per le installazioni che necessitano di un'installazione separata di Claude Code nativo.
179 220
180Il binario incluso è bloccato alla versione del pacchetto SDK, quindi aggiornare l'SDK è il modo in cui aggiorni la CLI. L'SDK segue semver: accetta continuamente i rilasci patch e rivedi il changelog di [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) o [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) prima di accettare una versione minore.221Il binario incluso è bloccato alla versione del pacchetto SDK, quindi aggiornare l'SDK è il modo per aggiornare la CLI. L'SDK segue semver: accetta continuamente le versioni patch e rivedi il changelog [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) o [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) prima di accettare una versione minore.
181 222
182<h3 id="resources">223<h3 id="resources">
183 Risorse224 Risorse
184</h3>225</h3>
185 226
1861 GiB di RAM, 5 GiB di disco e 1 CPU per agente è un punto di partenza ragionevole per un'istanza appena avviata. L'utilizzo della memoria cresce con la durata della sessione e l'attività degli strumenti, quindi dimensiona per le lunghezze di sessione e la concorrenza di cui hai effettivamente bisogno piuttosto che per la baseline inattiva. Vedi [Scaling and concurrency](#scaling-and-concurrency) per come calcolare gli agenti per host.2271 GiB di RAM, 5 GiB di disco e 1 CPU per agente è un punto di partenza ragionevole per un'istanza appena avviata. L'utilizzo della memoria cresce con la durata della sessione e l'attività degli strumenti, quindi dimensiona in base alle lunghezze di sessione e alla concorrenza di cui hai effettivamente bisogno piuttosto che alla baseline inattiva. Vedi [Scaling and concurrency](#scaling-and-concurrency) per scoprire come calcolare gli agenti per host.
187 228
188<h3 id="network">229<h3 id="network">
189 Rete230 Rete
190</h3>231</h3>
191 232
192L'SDK necessita di HTTPS in uscita verso `api.anthropic.com`, o verso l'endpoint regionale del tuo provider quando eseguito su Amazon Bedrock o Google Cloud's Agent Platform. Se i tuoi agenti utilizzano [server MCP](/it/agent-sdk/mcp) o strumenti esterni, necessitano anche di accesso in uscita a quegli endpoint. Per la produzione, instrada il traffico in uscita attraverso un proxy di egress che applica allowlist di domini, inietta credenziali e registra le richieste. Vedi [Secure Deployment](/it/agent-sdk/secure-deployment) per il pattern completo.233L'SDK necessita di HTTPS in uscita verso `api.anthropic.com`, o verso l'endpoint regionale del tuo provider quando eseguito su Amazon Bedrock o sulla piattaforma agente di Google Cloud. Se i tuoi agenti utilizzano [MCP servers](/docs/it/agent-sdk/mcp) o strumenti esterni, necessitano anche di accesso in uscita a quegli endpoint. Per la produzione, instrada il traffico in uscita attraverso un proxy di egress che applica allowlist di domini, inietta credenziali e registra le richieste. Vedi [Secure Deployment](/docs/it/agent-sdk/secure-deployment) per il modello completo.
193 234
194Per il traffico in ingresso, esponi una porta HTTP o WebSocket sul container. La tua applicazione gestisce le richieste dei client su quella porta e chiama l'SDK internamente; il sottoprocesso stesso non ascolta sulla rete.235Per il traffico in ingresso, esponi una porta HTTP o WebSocket sul container. La tua applicazione gestisce le richieste dei client su quella porta e chiama l'SDK internamente; il sottoprocesso stesso non ascolta sulla rete.
195 236
196<h2 id="handle-production-concerns">237<h2 id="handle-production-concerns">
197 Gestire le preoccupazioni di produzione238 Gestire i problemi di produzione
198</h2>239</h2>
199 240
200Affrontate queste decisioni prima di distribuire un agente self-hosted.241Affrontate queste decisioni prima di distribuire un agente self-hosted.
203 Persistenza della sessione e dello stato244 Persistenza della sessione e dello stato
204</h3>245</h3>
205 246
206Il disco locale predefinito viene perso al riavvio, al ridimensionamento verso il basso o al trasferimento a un nodo diverso. Per qualsiasi sessione che un utente si aspetta di riprendere, eseguire il mirroring della trascrizione su un archivio durevole con un adattatore [`SessionStore`](/it/agent-sdk/session-storage). Vedere [Implementazioni di riferimento](/it/agent-sdk/session-storage#reference-implementations) per gli adattatori S3, Redis e Postgres e una suite di conformità per il vostro.247Il disco locale predefinito viene perso al riavvio, al ridimensionamento o al trasferimento a un nodo diverso. Per qualsiasi sessione che un utente si aspetta di riprendere, eseguire il mirroring della trascrizione su un archivio durevole con un adattatore [`SessionStore`](/docs/it/agent-sdk/session-storage). Vedere [Reference implementations](/docs/it/agent-sdk/session-storage#reference-implementations) per gli adattatori S3, Redis e Postgres e una suite di conformità per il vostro.
207 248
208Tre cose da sapere su come si comporta `SessionStore`:249Tre cose da sapere su come si comporta `SessionStore`:
209 250
210* **Solo trascrizioni**: `SessionStore` esegue il mirroring delle trascrizioni, non dei file di memoria `CLAUDE.md` o di altri artefatti della directory di lavoro. Montate un volume condiviso o sincronizzate quelli separatamente.251* **Solo trascrizioni**: `SessionStore` esegue il mirroring delle trascrizioni, non dei file di memoria `CLAUDE.md` o di altri artefatti della directory di lavoro. Montate un volume condiviso o sincronizzate quelli separatamente.
211* **Mirroring, non sostituzione**: il sottoprocesso scrive su disco locale per primo, e l'archivio riceve una copia di ogni batch. Le scritture locali rimangono autorevoli.252* **Mirroring, non sostituzione**: il subprocess scrive prima su disco locale e l'SDK invia una copia di ogni batch all'archivio. La trascrizione locale di una sessione nuova sopravvive all'esecuzione; un'esecuzione ripresa dall'archivio elimina la sua copia locale alla fine, quindi l'archivio contiene l'unica copia durevole. Vedere [Dual-write architecture](/docs/it/agent-sdk/session-storage#dual-write-architecture).
212* **Messaggi `mirror_error`**: un batch che l'archivio rifiuta viene inviato fino a tre volte in totale, con un breve backoff prima di ogni nuovo tentativo; una chiamata scaduta non viene ritentata. Se il batch continua a fallire, l'SDK lo scarta, emette un messaggio `{ type: "system", subtype: "mirror_error" }` e continua la query. Avvertite su questi se la durabilità dell'archivio è importante.253* **Messaggi `mirror_error`**: quando l'SDK non riesce a consegnare un batch all'archivio, scarta il batch, emette un messaggio `{ type: "system", subtype: "mirror_error" }` e continua la query. Avvertite su questi se la durabilità dell'archivio è importante. Vedere [Mirror writes are best-effort](/docs/it/agent-sdk/session-storage#mirror-writes-are-best-effort) per il comportamento di retry e timeout.
213 254
214<h3 id="observability">255<h3 id="observability">
215 Osservabilità256 Osservabilità
216</h3>257</h3>
217 258
218Gli agenti SDK dell'Agent SDK sono processi a lunga durata che generano chiamate di strumenti su molti round-trip API. Senza telemetria non potete vedere quali strumenti sono stati eseguiti, quanto tempo hanno impiegato o dove una sessione si è bloccata.259Gli agenti Agent SDK sono processi di lunga durata che generano chiamate di strumenti su molti round-trip API. Senza telemetria non potete vedere quali strumenti sono stati eseguiti, quanto tempo hanno impiegato o dove una sessione si è bloccata.
219 260
220L'SDK eredita la configurazione di OpenTelemetry dall'ambiente. Impostate le variabili di ambiente OTEL a livello di container o orchestrator in modo che ogni chiamata `query()` esporti span, metriche ed eventi di log al vostro collector. L'esempio seguente abilita l'esportazione OTLP per tutti e tre i segnali. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` è richiesto solo per le tracce; omettetelo se esportate solo metriche e log.261L'SDK eredita la configurazione OpenTelemetry dall'ambiente. Impostate le variabili di ambiente OTEL a livello di container o orchestrator in modo che ogni chiamata `query()` esporti span, metriche ed eventi di log al vostro collector. L'esempio seguente abilita l'esportazione OTLP per tutti e tre i segnali. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` è richiesto solo per le tracce; omettetelo se esportate solo metriche e log.
221 262
222```bash title=".env' theme={null}263```bash title=".env" theme={null}
223CLAUDE_CODE_ENABLE_TELEMETRY=1264CLAUDE_CODE_ENABLE_TELEMETRY=1
224CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1265CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
225OTEL_TRACES_EXPORTER=otlp266OTEL_TRACES_EXPORTER=otlp
229OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318270OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
230```271```
231 272
232Il testo del prompt e gli input degli strumenti non sono inclusi nelle esportazioni per impostazione predefinita. Vedere [Controllare i dati sensibili nelle esportazioni](/it/agent-sdk/observability#control-sensitive-data-in-exports) per i flag di opt-in e [Osservabilità](/it/agent-sdk/observability) per il catalogo completo dei segnali.273Il testo del prompt e gli input degli strumenti non sono inclusi nelle esportazioni per impostazione predefinita. Vedere [Control sensitive data in exports](/docs/it/agent-sdk/observability#control-sensitive-data-in-exports) per i flag opt-in e [Observability](/docs/it/agent-sdk/observability) per il catalogo completo dei segnali.
233 274
234<h3 id="auth-and-secrets">275<h3 id="auth-and-secrets">
235 Autenticazione e segreti276 Autenticazione e segreti
236</h3>277</h3>
237 278
238Tre preoccupazioni di autenticazione sono importanti al momento dell'hosting:279Tre problemi di autenticazione sono importanti al momento dell'hosting:
239 280
240* **API Anthropic**: il sottoprocesso legge `ANTHROPIC_API_KEY` dal suo ambiente. Forniscilo dal vostro gestore di segreti, oppure imposta `ANTHROPIC_BASE_URL` per instradare le chiamate del modello attraverso un proxy che inietta la chiave al di fuori del container. Vedere [Gestione delle credenziali](/it/agent-sdk/secure-deployment#credential-management) per il pattern del proxy e la [Panoramica dell'SDK](/it/agent-sdk/overview#get-started) per i metodi di autenticazione supportati.281* **Anthropic API**: il subprocess legge `ANTHROPIC_API_KEY` dal suo ambiente. Forniscilo dal vostro gestore di segreti, oppure imposta `ANTHROPIC_BASE_URL` per instradare le chiamate del modello attraverso un proxy che inietta la chiave al di fuori del container. Vedere [Credential management](/docs/it/agent-sdk/secure-deployment#credential-management) per il modello proxy e [Setup in the SDK quickstart](/docs/it/agent-sdk/quickstart#setup) per i metodi di autenticazione supportati.
241* **In entrata**: mettete l'autenticazione a un gateway davanti al container dell'agente. L'agente dovrebbe ricevere richieste pre-autenticate e non dovrebbe essere il componente che convalida i token dell'utente.282* **In entrata**: mettete l'autenticazione a un gateway davanti al container dell'agente. L'agente dovrebbe ricevere richieste pre-autenticate e non dovrebbe essere il componente che convalida i token dell'utente.
242* **Strumenti in uscita**: mantenete le credenziali degli strumenti fuori dall'ambiente dell'agente. Instradare le chiamate in uscita attraverso un proxy che inietta le chiavi API dopo che la richiesta esce dal container. L'agente effettua la chiamata; il proxy aggiunge la credenziale.283* **Strumenti in uscita**: mantenete le credenziali degli strumenti fuori dall'ambiente dell'agente. Instradare le chiamate in uscita attraverso un proxy che inietta le chiavi API dopo che la richiesta esce dal container. L'agente effettua la chiamata; il proxy aggiunge la credenziale.
243 284
244<h3 id="scaling-and-concurrency">285<h3 id="scaling-and-concurrency">
245 Scalabilità e concorrenza286 Scaling e concorrenza
246</h3>287</h3>
247 288
248Ogni sessione viene eseguita nel suo sottoprocesso, quindi la concorrenza su un host è limitata da quanti sottoprocessi la sua RAM può contenere.289Ogni sessione viene eseguita nel suo proprio subprocess, quindi la concorrenza su un host è limitata da quanti subprocess la sua RAM può contenere.
249 290
250Dimensionate ogni host con questa formula:291Dimensionate ogni host con questa formula:
251 292
252```text theme={null}293```text theme={null}
253agenti per host = (RAM host - overhead) / (limite massimo RAM per sessione)294agents per host = (host RAM - overhead) / (per-session RAM ceiling)
254```295```
255 296
256Misurate il limite massimo per sessione eseguendo una sessione rappresentativa fino alla vostra lunghezza target sotto il carico di strumenti previsto e registrando il picco RSS. Il punto di partenza di 1 GiB in [Risorse](#resources) è un minimo, non il limite massimo.297Misurate il ceiling per sessione eseguendo una sessione rappresentativa fino alla vostra lunghezza target sotto il carico di strumenti previsto e registrando il picco RSS. Il punto di partenza di 1 GiB in [Resources](#resources) è un floor, non il ceiling.
257 298
258L'instradamento con scalabilità orizzontale dipende dal vostro pattern. Per sessioni a lunga esecuzione, dove i container contengono molte sessioni, eseguite un pool di container dietro un load balancer e fissate ogni sessione a un container utilizzando l'hashing coerente su `sessionId`. Una sessione fissata continua a colpire lo stesso container, e quindi lo stesso sottoprocesso in esecuzione, fino a quando non viene rimossa o il container non si riavvia.299Il routing con scaling orizzontale dipende dal vostro modello. Per le sessioni di lunga durata, dove i container contengono molte sessioni, eseguite un pool di container dietro un load balancer e fissate ogni sessione a un container utilizzando l'hashing coerente su `sessionId`. Una sessione fissata continua a colpire lo stesso container, e quindi lo stesso subprocess in esecuzione, fino a quando non viene rimossa o il container non si riavvia.
259
260I grandi fanout di [subagenti](/it/agent-sdk/subagents) concorrenti da una singola sessione possono raggiungere i limiti di velocità dell'API. Suddividete il lavoro in batch più piccoli piuttosto che emettere un dispatch ampio.
261 300
262<h3 id="cost">301<h3 id="cost">
263 Costo302 Costo
264</h3>303</h3>
265 304
266Il costo dei token di Anthropic in genere domina il costo dell'infrastruttura del container di un ordine di grandezza o più. Un container minimamente provisioning funziona approssimativamente a \$0,05 all'ora, mentre una singola sessione di agente lungo può spendere dollari in token. Vedere [Tracciamento dei costi](/it/agent-sdk/cost-tracking) per la contabilità dei token per sessione.305Il costo dei token Anthropic in genere domina il costo dell'infrastruttura del container di un ordine di grandezza o più. Un container minimamente provisioning funziona approssimativamente a \$0.05 all'ora, mentre una singola sessione di agente lungo può spendere dollari in token. Vedere [Cost tracking](/docs/it/agent-sdk/cost-tracking) per la contabilità dei token per sessione.
267 306
268<h3 id="multi-tenant-isolation">307<h3 id="multi-tenant-isolation">
269 Isolamento multi-tenant308 Isolamento multi-tenant
273 312
274Per isolare i tenant all'interno di un container condiviso:313Per isolare i tenant all'interno di un container condiviso:
275 314
276* Passate `settingSources: []` in TypeScript o `setting_sources=[]` in Python in modo che nessuna impostazione del filesystem venga caricata.315* Passate `settingSources: []` in TypeScript o `setting_sources=[]` in Python per saltare le impostazioni utente, progetto e locali.
277* Impostate `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` in `env`. La [memoria automatica](/it/memory#auto-memory) in `~/.claude/projects/<project>/memory/` viene caricata nel prompt di sistema indipendentemente da `settingSources`. Vedere [Cosa settingSources non controlla](/it/agent-sdk/claude-code-features#what-settingsources-does-not-control) per gli altri input che vengono caricati incondizionatamente.316* Impostate `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` in `env`. [Auto memory](/docs/it/memory#auto-memory) a `~/.claude/projects/<project>/memory/` si carica nel prompt di sistema indipendentemente da `settingSources`. Vedere [What settingSources does not control](/docs/it/agent-sdk/claude-code-features#what-settingsources-does-not-control) per gli altri input che si caricano incondizionatamente.
278* Puntate `CLAUDE_CONFIG_DIR` a una directory per tenant in modo che i tenant non condividano la configurazione globale `~/.claude.json`.317* Puntate `CLAUDE_CONFIG_DIR` a una directory per tenant in modo che i tenant non condividano la configurazione globale `~/.claude.json`. Quando ogni directory di configurazione serve una directory di lavoro e non condividete un [`SessionStore`](/docs/it/agent-sdk/session-storage) tra i tenant, potete anche impostare [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/it/sessions#name-the-project-directory-yourself) in `env` per mantenere i percorsi delle trascrizioni sotto di esso brevi. Richiede Agent SDK TypeScript v0.3.234 o successivo, oppure Agent SDK Python v0.2.140 o successivo.
279* Utilizzate una directory di lavoro per tenant. Passate `cwd` esplicitamente su ogni chiamata `query()`.318* Utilizzate una directory di lavoro per tenant. Passate `cwd` esplicitamente su ogni chiamata `query()`.
280* Applicate regole di uscita per tenant al vostro proxy, come IP in uscita distinti, credenziali o elenchi di domini consentiti, in modo che un tenant compromesso non possa esfiltare dati tramite la politica in uscita di un altro tenant.319* Applicate regole di egress per tenant al vostro proxy, come IP in uscita distinti, credenziali o allowlist di domini, in modo che un tenant compromesso non possa esfiltare dati tramite la politica in uscita di un altro tenant.
281 320
282L'esempio seguente applica insieme le quattro opzioni a livello di SDK. Costruite `tenantDir` e `configDir` in modo che ogni tenant ottenga un percorso che nessun altro tenant possa leggere. In TypeScript, `env` sostituisce l'ambiente del sottoprocesso, quindi diffondete `...process.env` per mantenere le variabili ereditate come `PATH` e `ANTHROPIC_API_KEY`. In Python, `env` viene unito sopra l'ambiente ereditato.321L'esempio seguente applica le opzioni di impostazioni, memoria automatica, directory di configurazione e directory di lavoro insieme. Costruite `tenantDir` e `configDir` in modo che ogni tenant ottenga un percorso che nessun altro tenant possa leggere. In TypeScript, `env` sostituisce l'ambiente del subprocess, quindi diffondete `...process.env` per mantenere le variabili ereditate come `PATH` e `ANTHROPIC_API_KEY`. In Python, `env` viene unito sopra l'ambiente ereditato.
283 322
284<CodeGroup>323<CodeGroup>
285 ```typescript TypeScript theme={null}324 ```typescript TypeScript theme={null}
307 346
308 ```python Python theme={null}347 ```python Python theme={null}
309 from claude_agent_sdk import query, ClaudeAgentOptions348 from claude_agent_sdk import query, ClaudeAgentOptions
349 import asyncio
350
351 prompt: str = ...
352 tenant_dir: str = ...
353 config_dir: str = ...
354
310 355
356 async def main():
311 async for message in query(357 async for message in query(
312 prompt=prompt,358 prompt=prompt,
313 options=ClaudeAgentOptions(359 options=ClaudeAgentOptions(
320 ),366 ),
321 ):367 ):
322 ...368 ...
369
370
371 asyncio.run(main())
323 ```372 ```
324</CodeGroup>373</CodeGroup>
325 374
326Per i controlli di rete per tenant, vedere [Distribuzione Sicura](/it/agent-sdk/secure-deployment).
327
328<h2 id="known-limitations">375<h2 id="known-limitations">
329 Limitazioni note376 Limitazioni note
330</h2>377</h2>
331 378
332Pianifica intorno a queste nella progettazione della tua distribuzione.379Pianificate questi aspetti nella progettazione della vostra distribuzione.
333 380
334| Limitazione | Cosa fare |381| Limitazione | Cosa fare |
335| ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |382| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
336| Nessun timeout di sessione di primo livello | Una sessione non scade da sola. Imposta `maxTurns` in `Options` per limitare quanti round trip di utilizzo di strumenti l'agente esegue prima di fermarsi. |383| Nessun timeout di sessione di primo livello | Una sessione non scade automaticamente. Impostare `maxTurns` in TypeScript o `max_turns` in Python per limitare quanti round trip di utilizzo di strumenti l'agente esegue prima di fermarsi. |
337| Crescita della memoria durante sessioni lunghe | Limita la lunghezza della sessione o ricicla i sottoprocessi periodicamente. Vedi [Scaling and concurrency](#scaling-and-concurrency). |384| Crescita della memoria durante sessioni lunghe | Limitare la lunghezza della sessione o riciclare i sottoprocessi periodicamente. Vedere [Scaling and concurrency](#scaling-and-concurrency). |
338| I grandi fanout di subagent paralleli possono raggiungere i limiti di velocità | Suddividi il lavoro in batch più piccoli piuttosto che emettere un'unica distribuzione ampia. |385| I grandi fanout di subagent paralleli possono raggiungere i limiti di velocità | Suddividere il lavoro in batch più piccoli anziché emettere un'unica distribuzione ampia. |
339| Nessuna scadenza wall-clock per subagent | Limita ogni [subagent](/it/agent-sdk/subagents) con `maxTurns` nella sua `AgentDefinition`. Solo per subagent in background, `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` imposta un watchdog di stallo che si attiva quando un subagent `run_in_background` smette di produrre output; non è una scadenza di runtime totale. |386| Nessuna scadenza wall-clock per subagent | Limitare ogni [subagent](/docs/it/agent-sdk/subagents) con `maxTurns` nella sua `AgentDefinition`. `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` imposta un watchdog di stallo che si attiva quando un subagent smette di produrre output; non è una scadenza di runtime totale. |
387
388<h2 id="troubleshoot-deployment-failures">
389 Risolvere i problemi di distribuzione
390</h2>
391
392Utilizza questa sezione quando un agente che funziona sulla tua macchina non riesce in un servizio distribuito. Ogni elemento sottostante nomina un errore e collega la voce che lo copre:
393
394* **CLI non trovata all'avvio del servizio**: in Python, un contenitore o un gestore di servizi esegue la tua applicazione con un `PATH` diverso dalla tua shell, quindi un'installazione che funziona localmente non è visibile al processo. In TypeScript, la compilazione dell'immagine ha saltato le dipendenze opzionali dell'SDK, oppure `pathToClaudeCodeExecutable` punta a un file che non esiste nell'immagine. Vedi [Claude Code non trovato](/docs/it/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found).
395* **CLI presente nell'immagine ma non si avvia**: Claude Code non può avviarsi da un binario che non corrisponde all'architettura del contenitore o a libc, oppure da un file che ha perso il permesso di esecuzione nella compilazione dell'immagine. Vedi [Impossibile avviare Claude Code](/docs/it/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code).
396* **Il processo Claude Code esce durante l'esecuzione**: l'errore che la tua applicazione riceve dipende dal linguaggio dell'SDK e dal fatto che la CLI abbia segnalato un risultato di errore per primo. Le voci sotto [Uscita del processo CLI](/docs/it/agent-sdk/troubleshooting#cli-process-exit) coprono ogni messaggio.
340 397
341<h2 id="next-steps">398<h2 id="next-steps">
342 Passaggi successivi399 Passaggi successivi
343</h2>400</h2>
344 401
345* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): procedura dettagliata del notebook con [codice distribuibile](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) per Docker, Modal e Kubernetes.402* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): procedura dettagliata del notebook con [codice distribuibile](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) per Docker, Modal e Kubernetes.
346* [Session storage](/it/agent-sdk/session-storage): mantieni i transcript tra gli host con un adattatore `SessionStore`.403* [Session storage](/docs/it/agent-sdk/session-storage): mantieni i transcript tra gli host con un adattatore `SessionStore`.
347* [Observability](/it/agent-sdk/observability): esporta tracce OTEL, metriche e log al tuo collector.404* [Observability](/docs/it/agent-sdk/observability): esporta tracce OTEL, metriche e log al tuo collector.
348* [Secure deployment](/it/agent-sdk/secure-deployment): controlli di rete, gestione delle credenziali e indurimento dell'isolamento.405* [Secure deployment](/docs/it/agent-sdk/secure-deployment): controlli di rete, gestione delle credenziali e indurimento dell'isolamento.
349* [Cost tracking](/it/agent-sdk/cost-tracking): contabilità dei token e dei costi per sessione.406* [Cost tracking](/docs/it/agent-sdk/cost-tracking): contabilità dei token e dei costi per sessione.