Skip to main content

Installazione

Installare il pacchetto in un ambiente virtuale. Su recenti installazioni di Debian, Ubuntu e Homebrew Python, l’esecuzione di pip install su Python di sistema fallisce con error: externally-managed-environment.
Per uv, Windows PowerShell e configurazione della chiave API, vedere Iniziare nella guida rapida di Agent SDK.

Scelta tra query() e ClaudeSDKClient

Python SDK fornisce due modi per interagire con Claude Code: Utilizzare ClaudeSDKClient per applicazioni interattive come interfacce chat, o quando l’azione successiva dipende dalla risposta di Claude.

Funzioni

I blocchi di firma e i frammenti async for / async with nudi in questa pagina sono illustrativi. Per eseguirli, avvolgi il corpo in async def main(): ... e chiama asyncio.run(main()).

query()

Crea una nuova sessione per ogni interazione con Claude Code per impostazione predefinita. Restituisce un iteratore asincrono che produce messaggi man mano che arrivano. Ogni chiamata a query() inizia da zero senza memoria di interazioni precedenti a meno che non passi continue_conversation=True o resume in ClaudeAgentOptions. Vedi Sessions.

Parametri

Restituisce

Restituisce un AsyncIterator[Message] che produce messaggi dalla conversazione.

Esempio - Con opzioni

tool()

Decoratore per definire strumenti MCP con sicurezza dei tipi.

Parametri

Opzioni dello schema di input

  1. Mappatura di tipo semplice (consigliato):
  2. Formato JSON Schema (per validazione complessa):
  3. Classe TypedDict: uno schema tipizzato le cui chiavi NotRequired vengono escluse da required.
    • Python 3.11 e successivi: importa TypedDict e NotRequired da typing.
    • Python 3.10: typing non ha NotRequired. Importa TypedDict e NotRequired da typing_extensions, che l’SDK installa su Python 3.10.
Nelle forme a mappatura semplice e TypedDict, racchiudi un tipo in Annotated[type, "description"] per impostare la descrizione del campo.

Restituisce

Una funzione decoratore che avvolge l’implementazione dello strumento e restituisce un’istanza SdkMcpTool.

Esempio

ToolAnnotations

Suggerimenti comportamentali per uno strumento, passati come argomento annotations di tool(). ToolAnnotations estende mcp.types.ToolAnnotations dell’SDK MCP con un campo maxResultSizeChars, e puoi scrivere ogni suggerimento in camelCase o snake_case: ToolAnnotations(readOnlyHint=True) e ToolAnnotations(read_only_hint=True) sono equivalenti. Per rileggere un suggerimento dall’oggetto, usa la grafia dichiarata dal pacchetto mcp installato: .readOnlyHint su mcp 1.x e .read_only_hint su 2.x, mentre .maxResultSizeChars funziona su entrambi. Puoi anche passare un semplice mcp.types.ToolAnnotations ovunque l’SDK accetti annotazioni. I nomi snake_case e il campo tipizzato maxResultSizeChars richiedono Python Agent SDK 0.2.140 o successivo. Le versioni da 0.1.31 a 0.2.139 riesportano mcp.types.ToolAnnotations senza modifiche. Nelle versioni da 0.1.55 a 0.2.139 puoi comunque passare maxResultSizeChars come argomento di parola chiave: la classe MCP accetta campi extra e l’SDK invia il valore a Claude Code. Tutti i campi sono opzionali. I client non dovrebbero fare affidamento sui suggerimenti per decisioni di sicurezza.

create_sdk_mcp_server()

Crea un server MCP in-process che viene eseguito all’interno della tua applicazione Python.

Parametri

Restituisce

Restituisce un oggetto McpSdkServerConfig che può essere passato a ClaudeAgentOptions.mcp_servers.

Esempio

list_sessions()

Elenca le sessioni passate con metadati. Filtra per directory di progetto o elenca le sessioni in tutti i progetti. Sincrono; restituisce immediatamente.

Parametri

Tipo di ritorno: SDKSessionInfo

Esempio

Stampa le 10 sessioni più recenti per un progetto. I risultati sono ordinati per last_modified decrescente, quindi il primo elemento è il più recente. Ometti directory per cercare in tutti i progetti.

get_session_messages()

Recupera i messaggi da una sessione passata. Sincrono; restituisce immediatamente.

Parametri

Tipo di ritorno: SessionMessage

Esempio

get_session_info()

Legge i metadati per una singola sessione per ID senza scansionare la directory del progetto completo. Sincrono; restituisce immediatamente.

Parametri

Restituisce SDKSessionInfo, o None se la sessione non viene trovata.

Esempio

Cerca i metadati di una singola sessione senza scansionare la directory del progetto. Utile quando hai già un ID di sessione da un’esecuzione precedente.

rename_session()

Rinomina una sessione aggiungendo una voce di titolo personalizzato. Le chiamate ripetute sono sicure; il titolo più recente vince. Sincrono.

Parametri

Genera ValueError se session_id non è un UUID valido o title è vuoto; FileNotFoundError se la sessione non può essere trovata.

Esempio

Rinomina la sessione più recente in modo che sia più facile da trovare in seguito. Il nuovo titolo appare in SDKSessionInfo.custom_title nelle letture successive.

tag_session()

Etichetta una sessione. Passa None per cancellare l’etichetta. Le chiamate ripetute sono sicure; l’etichetta più recente vince. Sincrono.

Parametri

Genera ValueError se session_id non è un UUID valido o tag è vuoto dopo la sanitizzazione; FileNotFoundError se la sessione non può essere trovata.

Esempio

Etichetta una sessione, quindi filtra per quell’etichetta in una lettura successiva. Passa None per cancellare un’etichetta esistente.

fork_session()

Copia la trascrizione di una sessione in una nuova sessione, così puoi portare la conversazione in un’altra direzione mentre l’originale resta invariata. Per creare un branch da un punto precedente della conversazione, passa up_to_message_id. Sincrono.

Parametri

Restituisce un ForkSessionResult il cui session_id è l’UUID della nuova sessione. Passalo come resume per continuare il fork. Il fork non include i checkpoint dei file della sessione originale, quindi non puoi riportarlo a un checkpoint acquisito prima del fork. fork_session() genera:
  • ValueError: session_id o up_to_message_id non è un UUID valido
  • ValueError: la sessione non ha messaggi, oppure up_to_message_id non corrisponde a nessun messaggio nella trascrizione
  • FileNotFoundError: la sessione non può essere trovata

Esempio

Crea un fork della sessione più recente con un nuovo titolo, quindi riprendi il fork. La sessione originale mantiene la propria cronologia.

Classi

ClaudeSDKClient

Mantiene una sessione di conversazione in più scambi. Questo è l’equivalente Python di come la funzione query() di TypeScript SDK funziona internamente - crea un oggetto client che può continuare le conversazioni. Vedi il confronto con query().

Metodi

Supporto Context Manager

Il client può essere utilizzato come context manager asincrono per la gestione automatica della connessione:
Importante: Quando iteri sui messaggi, evita di usare break per uscire anticipatamente poiché questo può causare problemi di pulizia asyncio. Invece, lascia che l’iterazione si completi naturalmente o usa flag per tracciare quando hai trovato quello che cerchi.

Esempio - Continuare una conversazione

Esempio - Input streaming con ClaudeSDKClient

query() accetta anche un iterabile asincrono di dict di messaggi utente, quindi puoi assemblare il prompt al momento dell’invio o includere blocchi di contenuto come immagini. Claude Code inizia a rispondere al primo messaggio generato non appena arriva, senza aspettare che l’iterabile finisca, e receive_response() si ferma al ResultMessage che termina quella risposta. Metti tutto ciò che Claude dovrebbe leggere prima di rispondere in un messaggio, come fa questo generatore, e abbina ogni chiamata query() al suo proprio ciclo receive_response().

Esempio - Utilizzo di interruzioni

Comportamento del buffer dopo l’interruzione: interrupt() invia un segnale di arresto ma non cancella il buffer dei messaggi. I messaggi già prodotti dall’attività interrotta, incluso il suo ResultMessage, rimangono nel flusso. Devi drenare con receive_response() prima di leggere la risposta a una nuova query. Se invii una nuova query immediatamente dopo interrupt() e chiami receive_response() una sola volta, riceverai i messaggi dell’attività interrotta, non la risposta della nuova query.

Esempio - Controllo avanzato delle autorizzazioni

Tipi

@dataclass vs TypedDict: Questo SDK utilizza due tipi di tipi. Le classi decorate con @dataclass (come ResultMessage, AgentDefinition, TextBlock) sono istanze di oggetti in fase di esecuzione e supportano l’accesso agli attributi: msg.result. Le classi definite con TypedDict (come ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput) sono dict semplici in fase di esecuzione e richiedono l’accesso alle chiavi: config["budget_tokens"], non config.budget_tokens. La sintassi di chiamata ClassName(field=value) funziona per entrambi, ma solo le dataclass producono oggetti con attributi.

SdkMcpTool

Definizione per uno strumento SDK MCP creato con il decoratore @tool.

Transport

Classe base astratta per implementazioni di trasporto personalizzate. Usala per comunicare con il processo Claude su un canale personalizzato (ad esempio, una connessione remota invece di un subprocess locale).
Questa è un’API interna di basso livello. L’interfaccia potrebbe cambiare nelle versioni future. Le implementazioni personalizzate devono essere aggiornate per corrispondere a eventuali modifiche dell’interfaccia.
Importazione: from claude_agent_sdk import Transport

ClaudeAgentOptions

Dataclass di configurazione per le query Claude Code.

Gestisci risposte API lente o bloccate

Il subprocess CLI legge diverse variabili d’ambiente che controllano i timeout dell’API e il rilevamento dei blocchi. Passale attraverso ClaudeAgentOptions.env:
  • API_TIMEOUT_MS: timeout per richiesta sul client Anthropic, in millisecondi. Predefinito 600000. Si applica al ciclo principale e a tutti i subagent.
  • CLAUDE_CODE_MAX_RETRIES: numero massimo di nuovi tentativi API. Predefinito 10, limitato a 15. Ogni nuovo tentativo ottiene la propria finestra API_TIMEOUT_MS. Per esecuzioni incustodite che devono attendere interruzioni più lunghe, imposta CLAUDE_CODE_RETRY_WATCHDOG=1: riprova indefinitamente in caso di errori di capacità transitori e, a partire da Claude Code v2.1.199, aumenta il valore predefinito per altri errori transitori a 300 e rimuove il limite su questa variabile.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog di blocco per i subagent. Mentre il watchdog del flusso è attivo, il predefinito è CLAUDE_STREAM_IDLE_TIMEOUT_MS più 5 minuti, che ammonta a 600000 a meno che non aumenti quella variabile. Con il watchdog del flusso disattivato, il predefinito è 600000. Prima di v2.1.257, il predefinito era sempre 600000. Il timer si azzera a ogni evento del flusso. In caso di blocco, Claude Code interrompe il subagent e segnala il blocco al genitore. Per un subagent in background, contrassegna anche l’attività come non riuscita e allega qualsiasi risultato parziale.
  • CLAUDE_ENABLE_STREAM_WATCHDOG con CLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog del flusso che interrompe la richiesta quando le intestazioni sono arrivate ma il corpo della risposta smette di essere trasmesso in streaming. Il watchdog è attivo per impostazione predefinita per tutti i provider; imposta CLAUDE_ENABLE_STREAM_WATCHDOG=0 per disabilitarlo. CLAUDE_STREAM_IDLE_TIMEOUT_MS ha come predefinito 300000 e non può scendere sotto quel minimo. Dopo l’interruzione, Nuovi tentativi automatici descrive cosa fa Claude Code, in base a quanto la risposta era avanzata. Mentre il watchdog attende una risposta che un gateway dietro ANTHROPIC_BASE_URL tiene aperta con ping keep-alive, un host che imposta include_partial_messages continua a ricevere messaggi StreamEvent di ping. Interpreta quei frame come segnali di attività invece di far scadere la sessione per inattività. Prima di v2.1.257, i frame si fermavano 5 minuti dopo l’ultimo evento di flusso reale.

OutputFormat

Configurazione per la validazione dell’output strutturato. Passa questo come dict al campo output_format su ClaudeAgentOptions:

SystemPromptPreset

Configurazione per l’utilizzo del prompt di sistema preset di Claude Code con aggiunte opzionali.

SystemPromptCustom

Un prompt di sistema personalizzato in forma di oggetto, equivalente a passare una stringa come system_prompt, che può anche impostare snapshot. Richiede claude-agent-sdk v0.2.153 o successivo.

SystemPromptFile

Configurazione per il caricamento di un prompt di sistema personalizzato da un file invece di passarlo come stringa. L’SDK mappa questo al flag CLI --system-prompt-file. Usa la forma file quando il prompt è grande: l’SDK passa una stringa system_prompt sull’argv del subprocess CLI, che è soggetto ai limiti di lunghezza della riga di comando del sistema operativo prima che l’SDK invii qualsiasi richiesta API. Su Linux un singolo argomento più lungo di circa 128 KB fallisce all’avvio del processo con Argument list too long. Su Windows l’intera riga di comando è limitata a circa 32 KB, quindi la forma stringa fallisce a una soglia inferiore.

SettingSource

Controlla da quali fonti di configurazione basate su filesystem l’SDK carica le impostazioni.

Comportamento predefinito

Quando setting_sources è omesso o None e skills non è impostato, query() carica le stesse impostazioni del filesystem della CLI di Claude Code: utente, progetto e locale. Con skills impostato, la riga setting_sources descrive il valore predefinito corrente. La politica gestita dall’endpoint viene caricata in tutti i casi; le impostazioni gestite dal server vengono recuperate quando la sessione si autentica con una credenziale dell’organizzazione su una configurazione idonea. Per ulteriori informazioni, vedi Cosa settingSources non controlla.

Perché usare setting_sources

Disabilita le impostazioni del filesystem:
In Python SDK 0.1.59 e versioni precedenti, un elenco vuoto era trattato come l’omissione dell’opzione, quindi setting_sources=[] non disabilitava le impostazioni del filesystem. Aggiorna a una versione più recente se hai bisogno che un elenco vuoto abbia effetto. TypeScript SDK non è interessato.
Carica solo fonti di impostazioni specifiche:
Applicazioni solo SDK:
Per caricare le istruzioni del progetto CLAUDE.md, includi "project" in setting_sources. Vedi Modifica i prompt di sistema per come il caricamento di CLAUDE.md interagisce con le opzioni del prompt di sistema.

Precedenza delle impostazioni

Quando più fonti vengono caricate, le impostazioni vengono unite con questa precedenza (da più alta a più bassa):
  1. Impostazioni locali (.claude/settings.local.json)
  2. Impostazioni di progetto (.claude/settings.json)
  3. Impostazioni utente (~/.claude/settings.json)
Le opzioni programmatiche come agents, allowed_tools e settings sovrascrivono le impostazioni del filesystem utente, progetto e locale. Le impostazioni della politica gestita hanno la precedenza sulle opzioni programmatiche.

AgentDefinition

Configurazione per un subagent definito programmaticamente.
I nomi dei campi di AgentDefinition usano camelCase, come disallowedTools, permissionMode e maxTurns. Questi nomi si mappano direttamente al formato wire condiviso con TypeScript SDK. Questo differisce da ClaudeAgentOptions, che usa lo snake_case di Python per i campi di livello superiore equivalenti come disallowed_tools e permission_mode. Poiché AgentDefinition è una dataclass, passare una parola chiave snake_case genera un TypeError al momento della costruzione.

PermissionMode

Modalità di permesso per controllare l’esecuzione degli strumenti.

EffortLevel

Livelli di sforzo per guidare la profondità del ragionamento.

CanUseTool

Alias di tipo per le funzioni di callback dei permessi degli strumenti.
Il callback riceve:
  • tool_name: Nome dello strumento che viene chiamato
  • input_data: I parametri di input dello strumento
  • context: Un ToolPermissionContext con informazioni aggiuntive
Restituisce un PermissionResult (PermissionResultAllow oppure PermissionResultDeny). Il callback è il sostituto SDK della richiesta di permesso interattiva: viene invocato solo quando il flusso di valutazione dei permessi si risolve in una richiesta di permesso. Le chiamate agli strumenti già approvate da una voce allowed_tools, da una regola di consenso nelle impostazioni, o dalla modalità di permesso, come acceptEdits o bypassPermissions, non lo invocano mai. Per controllare ogni chiamata a uno strumento, usa invece un hook PreToolUse. Una regola di consenso non pre-approva le azioni che nessuna modalità approva automaticamente; vedi Come vengono valutati i permessi per sapere quali di esse raggiungono il callback e cosa accade in modalità dontAsk e auto.

ToolPermissionContext

Informazioni di contesto passate ai callback dei permessi degli strumenti.

PermissionResult

Tipo di unione per i risultati del callback dei permessi.

PermissionResultAllow

Risultato che indica che la chiamata allo strumento deve essere consentita.

PermissionResultDeny

Risultato che indica che la chiamata allo strumento deve essere negata.

PermissionUpdate

Configurazione per l’aggiornamento dei permessi a livello di programmazione.

PermissionRuleValue

Una regola da aggiungere, sostituire o rimuovere in un aggiornamento dei permessi.

ToolsPreset

Configurazione degli strumenti preset per l’utilizzo del set di strumenti predefinito di Claude Code.

ThinkingConfig

Controlla il comportamento del ragionamento esteso. Un’unione di tre configurazioni:
Il campo opzionale display controlla se il testo del ragionamento viene restituito "summarized" o "omitted". Su Claude Opus 4.7 e versioni successive, l’impostazione predefinita dell’API è "omitted", quindi imposta "summarized" per ricevere il contenuto del ragionamento negli output ThinkingBlock. Claude Code non passa il tuo valore display ad alcuni provider, come Amazon Bedrock e l’Agent Platform di Google Cloud. Su quei provider, Opus 4.7 e versioni successive restituiscono output ThinkingBlock vuoti anche quando imposti display a "summarized". Poiché queste sono classi TypedDict, sono dict semplici in fase di esecuzione. Costruiscile come letterali dict o chiama la classe come un costruttore; entrambi producono un dict. Accedi ai campi con config["budget_tokens"], non config.budget_tokens:

TaskBudget

Budget di attività lato API in token, utilizzato con il campo task_budget in ClaudeAgentOptions.
Poiché questo è un TypedDict, passalo come dict semplice, come ClaudeAgentOptions(task_budget={"total": 50000}).

SdkBeta

Tipo letterale per le funzionalità beta dell’SDK.
Usa con il campo betas in ClaudeAgentOptions per abilitare le funzionalità beta.
Sulla Claude API, la beta context-1m-2025-08-07 è ritirata per Claude Sonnet 4.5 e Claude Sonnet 4. Se la passi ancora con uno dei due modelli, le richieste che superano la finestra di contesto standard di 200K token restituiscono un errore, quindi rimuovila da betas. Per eseguire una sessione con una finestra di contesto di 1M token, imposta model su un modello che usa la finestra da 1M per impostazione predefinita, come claude-sonnet-5-5 o claude-opus-5-5. Per un modello che raggiunge 1M solo tramite la sua variante [1m], aggiungi il suffisso all’ID del modello, come in claude-opus-4-6[1m].

McpSdkServerConfig

Configurazione per i server MCP dell’SDK creati con create_sdk_mcp_server().

McpServerConfig

Tipo di unione per le configurazioni del server MCP.

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

La configurazione di un server MCP come riportata da get_mcp_status(). Questa è l’unione di tutte le varianti di trasporto di McpServerConfig più una variante di solo output claudeai-proxy per i server instradati tramite proxy attraverso claude.ai.
McpSdkServerConfigStatus è la forma serializzabile di McpSdkServerConfig con solo i campi type ("sdk") e name (str); l’instance in-process viene omessa. McpClaudeAIProxyServerConfig ha i campi type ("claudeai-proxy"), url (str), e id (str).

McpStatusResponse

Risposta da ClaudeSDKClient.get_mcp_status(). Racchiude l’elenco degli stati dei server sotto la chiave mcpServers.

McpServerStatus

Stato di un server MCP connesso, contenuto in McpStatusResponse.

ContextUsageResponse

Risposta da ClaudeSDKClient.get_context_usage(). Questo è lo stesso payload che Claude Code visualizza per il comando /context in una sessione interattiva, quindi insieme ai conteggi dei token contiene campi di visualizzazione come color e gridRows che Claude Code utilizza per disegnare la griglia di utilizzo di /context. Claude Code costruisce questo payload inviando diverse richieste all’API di token-counting. Queste richieste non appaiono nel flusso di messaggi, quindi il tracciamento dei costi che legge il flusso non le vedrà. Sull’API Anthropic, il conteggio dei token non viene fatturato.
Ogni voce ContextUsageCategory contiene name, tokens, color e un flag opzionale isDeferred. totalTokens è l’utilizzo del contesto corrente della sessione, e maxTokens è la finestra rispetto alla quale viene misurato l’utilizzo. Quella finestra è la finestra di contesto del modello, o la finestra di compattazione automatica inferiore quando se ne applica una, e rawMaxTokens contiene lo stesso valore di maxTokens. apiUsage contiene l’utilizzo dalla risposta API più recente, non un totale progressivo per la sessione. Claude Code lascia non impostate le chiavi opzionali deferredBuiltinTools, systemTools e systemPromptSections, quindi aspettati che siano assenti anche se il tipo le dichiara.

SdkPluginConfig

Configurazione per il caricamento dei plugin nell’SDK.
Esempio:
Per informazioni complete sulla creazione e l’utilizzo dei plugin, vedi Plugin.

Tipi di messaggio

Message

Tipo di unione di tutti i possibili messaggi.

UserMessage

Messaggio di input dell’utente.
L’SDK passa tool_use_result attraverso dalla CLI senza modifiche. Per uno strumento su un server MCP esterno il cui risultato contiene blocchi resource_link, il dict ha una chiave resourceLinks che contiene un elenco di dict con le chiavi del tipo TypeScript SDKMcpResourceLink. Claude riceve ogni link come una riga di testo nel risultato dello strumento. Per renderizzare i file restituiti dal server, leggi resourceLinks invece di analizzare quel testo. La chiave resourceLinks richiede Python Agent SDK 0.2.150 o successivo e Claude Code v2.1.257 o successivo; la CLI fornita con quella versione dell’SDK soddisfa il requisito di Claude Code. La CLI omette la chiave quando il risultato non ha link e sui risultati dei subagent. La CLI mantiene al massimo 50 link per risultato e smette di aggiungere link una volta che l’elenco raggiunge 64 KiB di JSON serializzato. Uno strumento che definisci in-process con tool() non produce mai la chiave, perché l’SDK appiattisce i suoi blocchi resource_link a testo prima che la CLI veda il risultato.

AssistantMessage

Messaggio di risposta dell’assistente con blocchi di contenuto.

AssistantMessageError

Possibili tipi di errore per i messaggi dell’assistente.
Il processo CLI sottostante può emettere tipi di errore che questo Literal non elenca, come max_output_tokens. L’SDK passa il valore attraverso senza modifiche, quindi tratta le stringhe al di fuori di questo elenco come tratteresti unknown. Il tipo TypeScript SDKAssistantMessageError elenca l’insieme completo di valori che la CLI può emettere.

SystemMessage

Messaggio di sistema con metadati.
I subtype che non hanno una propria dataclass arrivano come SystemMessage. Per seguire la sessione tra un turno e l’altro, imposta CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1 e leggi message.data["state"] su ogni messaggio il cui subtype è session_state_changed. SDKSessionStateChangedMessage elenca gli stati che può contenere. Itera con receive_messages() per leggerli: receive_response() si ferma al ResultMessage, e un messaggio session_state_changed può seguire quel risultato.

ResultMessage

Messaggio di risultato finale con informazioni su costo e utilizzo.
Il campo subtype determina quali altri campi sono popolati. È uno di "success", "error_during_execution", "error_max_turns", "error_max_budget_usd", o "error_max_structured_output_retries". La dataclass Python appiattisce tutte le varianti in una forma, quindi i campi che non si applicano al subtype restituito sono None. Diversi campi portano dettagli diagnostici su come la conversazione è terminata:
  • is_error: True quando la conversazione è terminata in uno stato di errore. Sempre True sui subtype error_*. Su subtype="success" è True quando la richiesta del modello finale ha fallito, il che significa che il ciclo dell’agente è stato completato ma l’ultima chiamata API ha restituito un errore.
  • api_error_status: il codice di stato HTTP dell’errore API terminale. None quando il turno è terminato senza uno. Popolato solo su subtype="success".
  • result: testo del messaggio dell’assistente finale su subtype="success", o None sui subtype error_*. Quando subtype="success" e is_error=True, questo contiene la stringa di errore API se disponibile ma può essere vuoto, quindi controlla api_error_status e il contenuto di AssistantMessage precedente per i dettagli.
  • errors: stringhe di errore a livello di ciclo come il messaggio max-turns. Popolato solo sui subtype error_*.
  • terminal_reason: perché il ciclo di query è terminato, come "completed", "max_turns", "api_error", "aborted_streaming", o "aborted_tools". Un valore di "aborted_streaming" o "aborted_tools" significa che il turno è stato interrotto prima del completamento. Le cause comuni sono interrupt() e un callback di permesso che restituisce PermissionResultDeny con interrupt=True. None su versioni CLI che precedono il campo, su risultati da comandi locali come /voice o /usage, che bypassano il ciclo di query, o su risultati di errore sintetizzati emessi quando la sessione fallisce fatalmente. Rispecchia il SDKResultMessage.terminal_reason dell’SDK TypeScript, che elenca l’insieme completo di valori.
  • origin: origine del messaggio utente che ha attivato questo turno. In modalità input streaming, controlla questo per distinguere il risultato del tuo prompt, dove origin è None o {"kind": "human"}, dal risultato di un turno iniettato come una notifica di attività in background. Richiede Python Agent SDK 0.2.137 o successivo.
Quando diverse attività in background terminano a breve distanza l’una dall’altra, Claude Code può rispondere alle loro notifiche in un unico turno anziché con un turno per ciascuna. Ricevi comunque un ResultMessage per ogni notifica, in ordine, ciascuno con un origin il cui kind è "task-notification". Tutti tranne l’ultimo hanno num_turns impostato a 0 e un result vuoto, e l’ultimo contiene il turno che risponde a tutte. Il dict usage copre solo il ciclo dell’agente principale ed esclude i subagent e altre chiamate di modello nidificate o ausiliarie. In modalità input streaming, i valori sono per turno. Preferisci model_usage per la contabilità dei token e dei costi. Il dict usage contiene le seguenti chiavi quando presenti: Il dict model_usage mappa i nomi dei modelli all’utilizzo per modello. Copre ogni chiamata di modello effettuata attraverso la pipeline di query: il ciclo principale, i subagent e le chiamate interne come la compattazione e gli agenti Workflow. Le chiamate helper al di fuori di quella pipeline, come il classificatore di permessi e le richieste di conteggio dei token, sono escluse da model_usage. Tratta model_usage come una stima, non come un estratto conto di fatturazione. In modalità input streaming, model_usage e total_cost_usd sono cumulativi tra i turni, quindi leggi il risultato più recente piuttosto che sommare tra i risultati. Una chiamata che riprende una sessione conta anche i totali ripristinati dalle chiamate precedenti della sessione. Vedi Traccia i costi in modalità input streaming per i ripristini e Recupera i totali dopo un crash della sessione per i risultati azzerati. Ogni valore in model_usage è un TypedDict ModelUsage, importato tramite from claude_agent_sdk.types import ModelUsage. Le sue chiavi usano camelCase perché l’SDK passa il valore attraverso senza modifiche dal processo CLI sottostante, corrispondendo al tipo TypeScript ModelUsage:

StreamEvent

Evento di flusso per aggiornamenti di messaggi parziali durante lo streaming. Ricevuto solo quando include_partial_messages=True in ClaudeAgentOptions. Importa tramite from claude_agent_sdk.types import StreamEvent.

RateLimitEvent

Emesso quando lo stato del rate limit cambia (ad esempio, da "allowed" a "allowed_warning"). Usalo per avvertire gli utenti prima che raggiungano un limite rigido, o per fare backoff quando lo stato è "rejected".

RateLimitInfo

Stato del rate limit trasportato da RateLimitEvent.

ConversationResetMessage

Emesso quando la conversazione viene sostituita senza terminare la connessione, come dopo /clear. Vedi Traccia i costi in modalità input streaming per come un ripristino influisce sui totali in esecuzione su oggetti ResultMessage successivi. Richiede Python Agent SDK 0.2.137 o successivo.

TaskStartedMessage

Emesso quando un’attività in background inizia. Un’attività in background è qualsiasi cosa tracciata al di fuori del turno principale: un comando Bash in background, un watch Monitor, un subagent generato tramite lo strumento Agent, o un agente remoto. Il campo task_type ti dice quale. Questo nome non è correlato alla rinomina dello strumento da Task ad Agent.

TaskUsage

Dati di token e timing per un’attività in background.

TaskProgressMessage

Emesso periodicamente con aggiornamenti di progresso per un’attività in background in esecuzione.

TaskNotificationMessage

Emesso quando un’attività in background si completa, fallisce o viene interrotta. Le attività in background includono comandi Bash run_in_background, watch Monitor e subagent in background.
Quando la CLI sposta una lunga chiamata a uno strumento MCP in background, il risultato dello strumento per quella chiamata contiene solo un placeholder e il risultato reale della chiamata arriva in questo messaggio. Su una notifica "completed" per tale chiamata, la CLI aggiunge una chiave resource_links che elenca i file restituiti dallo strumento per riferimento, con le stesse voci e limiti della chiave resourceLinks su UserMessage.tool_use_result. La chiave resource_links richiede Python Agent SDK 0.2.150 o successivo e Claude Code v2.1.257 o successivo; la CLI fornita con quella versione dell’SDK soddisfa il requisito di Claude Code. La dataclass non ha un campo per resource_links. Leggilo dal dict data che il messaggio eredita da SystemMessage: message.data.get("resource_links"). Abbina la notifica alla chiamata con tool_use_id. La CLI omette la chiave quando il risultato non aveva link e su notifiche per attività che non sono chiamate a strumenti MCP.

Tipi di blocco di contenuto

ContentBlock

Tipo di unione di tutti i blocchi di contenuto.

TextBlock

Blocco di contenuto di testo.

ThinkingBlock

Blocco di contenuto di pensiero (per modelli con capacità di pensiero).

ToolUseBlock

Blocco di richiesta di utilizzo dello strumento.

ToolResultBlock

Blocco di risultato dell’esecuzione dello strumento.

Tipi di errore

I tipi di seguito definiscono cosa il tuo codice cattura. Per le voci associate ai messaggi di errore che questi tipi generano, con la causa e la correzione per ciascuno, consulta Risoluzione dei problemi.

ClaudeSDKError

Classe di eccezione base per tutti gli errori dell’SDK.
Quando una singola query() termina con un risultato di errore, ad esempio un errore di limite di turni, l’SDK genera un ResultError.

CLINotFoundError

Generato quando Claude Code CLI non è installato o non viene trovato.

CLIConnectionError

Generato quando la connessione a Claude Code fallisce.

ProcessError

Generato quando il processo Claude Code fallisce.

ResultError

Generato quando il processo Claude Code esce perché l’esecuzione è terminata con un messaggio di risultato di errore, come un errore di limite di turni o un errore API. ResultError è una sottoclasse di ProcessError, quindi un gestore except ProcessError esistente lo cattura anche. I suoi attributi contengono i campi di quel messaggio di risultato, quindi puoi distinguere il motivo del fallimento dell’esecuzione senza analizzare il testo del messaggio. Richiede Python Agent SDK 0.2.140 o successivo.
Per distinguere i fallimenti, controlla terminal_reason prima di subtype. Quando la richiesta finale fallisce, ad esempio su un errore API, Claude Code segnala subtype "success" con la causa in terminal_reason, ad esempio "api_error"; quando un limite che hai impostato termina l’esecuzione, come max_turns o max_budget_usd, segnala un subtype di tipo error_*.

CLIJSONDecodeError

Generato quando l’analisi JSON fallisce.

Tipi di Hook

Per una guida completa sull’utilizzo degli hook con esempi e modelli comuni, vedi la guida Hooks.

HookEvent

Tipi di evento hook supportati.
TypeScript SDK supporta eventi hook aggiuntivi non ancora disponibili in Python. Vedi la tabella di disponibilità degli hook per il supporto per SDK.

HookCallback

Definizione di tipo per le funzioni di callback hook.
Parametri:
  • input: Input hook fortemente tipizzato con unioni discriminate basate su hook_event_name (vedi HookInput)
  • tool_use_id: Identificatore di utilizzo dello strumento opzionale (per hook correlati allo strumento)
  • context: Contesto hook con informazioni aggiuntive
Restituisce un HookJSONOutput.

HookContext

Informazioni di contesto passate ai callback hook.

HookMatcher

Configurazione per l’abbinamento degli hook a eventi o strumenti specifici.

HookInput

Tipo di unione di tutti i tipi di input hook. Il tipo effettivo dipende dal campo hook_event_name.

BaseHookInput

Campi di base presenti in tutti i tipi di input hook.

PreToolUseHookInput

Dati di input per gli eventi hook PreToolUse.

PostToolUseHookInput

Dati di input per gli eventi hook PostToolUse.

PostToolUseFailureHookInput

Dati di input per gli eventi hook PostToolUseFailure. Chiamato quando l’esecuzione di uno strumento fallisce.

UserPromptSubmitHookInput

Dati di input per gli eventi hook UserPromptSubmit.

StopHookInput

Dati di input per gli eventi hook Stop.

SubagentStopHookInput

Dati di input per gli eventi hook SubagentStop.

PreCompactHookInput

Dati di input per gli eventi hook PreCompact.

NotificationHookInput

Dati di input per gli eventi hook Notification.

SubagentStartHookInput

Dati di input per gli eventi hook SubagentStart.

PermissionRequestHookInput

Dati di input per gli eventi hook PermissionRequest. Consente agli hook di gestire le decisioni di permesso a livello di programmazione.

HookJSONOutput

Tipo di unione per i valori di ritorno del callback hook.

SyncHookJSONOutput

Output hook sincrono con campi di controllo e decisione.
Usa continue_ (con underscore) nel codice Python. Viene automaticamente convertito a continue quando inviato alla CLI.

HookSpecificOutput

Un’unione discriminata di tipi di output specifici dell’evento TypedDict. Il campo hookEventName determina quali campi sono validi. Per i dettagli completi sui campi disponibili per evento hook, vedi Controlla l’esecuzione con gli hook.

AsyncHookJSONOutput

Output hook asincrono che rinvia l’esecuzione dell’hook.
Usa async_ (con underscore) nel codice Python. Viene automaticamente convertito a async quando inviato alla CLI.

Esempio di utilizzo di Hook

Questo esempio registra due hook: uno che blocca i comandi Bash pericolosi come rm -rf /, e un altro che registra nei log tutto l’utilizzo degli strumenti per il controllo. L’hook di sicurezza viene eseguito solo sui comandi Bash (tramite il matcher), mentre l’hook di logging viene eseguito su tutti gli strumenti.

Tipi di input/output dello strumento

Documentazione degli schemi di input/output per gli strumenti Claude Code integrati. Mentre Python SDK non esporta questi come tipi, rappresentano la struttura degli input e output dello strumento nei messaggi. Ogni output mostrato è il valore che leggi da UserMessage.tool_use_result per quello strumento. I nomi delle chiavi appaiono esattamente come Claude Code li emette. Una chiave annotata | None con un commento “presente quando” o “opzionale” viene omessa quando non si applica.

Agent

Nome dello strumento: Agent. Il nome precedente Task è ancora accettato come alias, e l’elenco tools nel SystemMessage di init riporta questo strumento come Task per compatibilità all’indietro. Input:
Avvia un nuovo agente per gestire compiti complessi e multi-step in modo autonomo. Output (status: "completed"):
Output (status: "async_launched"):
Output (status: "remote_launched"):
Restituisce il risultato dal subagent. L’output è discriminato sul campo status: "completed" per compiti terminati, "async_launched" per compiti in background, e "remote_launched" per compiti che Claude Code ha inviato a una sessione cloud, dove sessionUrl si collega a quella sessione e taskId l’identifica. Se Claude Code ha mantenuto il worktree isolato del subagent, worktreePath sulla variante completed è dove trovarlo, e worktreeBranch è il suo branch quando Claude Code ha creato il worktree con git. Sulla variante completed, resolvedModel nomina il modello su cui il subagent ha iniziato, che può differire dal model input richiesto quando availableModels o un altro override si applica. Questo campo richiede Claude Code v2.1.174 o successivo. Sulla variante async_launched, resolvedModel nomina il modello in uso quando l’agente si è spostato in background, quindi uno scambio che è accaduto prima del backgrounding si riflette lì. Il campo modelsUsed su entrambe le varianti elenca i modelli utilizzati in ordine, con ripetizioni consecutive compresse; è impostato solo quando il modello è stato scambiato durante l’esecuzione. modelsUsed e il comportamento di resolvedModel al momento del backgrounding richiedono Claude Code v2.1.212 o successivo. Claude Code riempie usage e totalTokens dalla richiesta API finale del subagent, non dall’intera esecuzione. Quando presente, thinking_tokens sotto output_tokens_details in usage è il numero di token di output di quella richiesta che erano token di ragionamento. La chiave output_tokens_details richiede Python SDK v0.2.136 o successivo, che raggruppa Claude Code v2.1.228. La chiave fallback_credit richiede Python SDK v0.2.162 o successivo, che raggruppa Claude Code v2.1.285.

AskUserQuestion

Nome dello strumento: AskUserQuestion Chiede all’utente domande di chiarimento durante l’esecuzione. Vedi Gestisci approvazioni e input dell’utente per i dettagli di utilizzo. Input:
Output:

Bash

Nome dello strumento: Bash Per ciò che imposta il limite massimo in primo piano, vedi Timeout e limiti di output. Per il limite di tempo in background, vedi Limite di tempo per i comandi in background. Input:
Output:

Monitor

Nome dello strumento: Monitor Esegue una sorgente in background e fornisce ogni evento a Claude in modo che possa reagire senza polling: command esegue uno script e emette un evento per riga stdout, e ws apre un WebSocket ed emette un evento per frame di testo. Fornisci esattamente uno tra command o ws. Quando Monitor esegue un comando, segue le stesse regole di permesso di Bash; un monitoraggio WebSocket richiede l’approvazione separatamente. L’origine ws richiede Claude Code v2.1.195 o successivo. Vedi il riferimento dello strumento Monitor per il comportamento e la disponibilità del provider. Input:
Output:

Edit

Nome dello strumento: Edit Input:
Output:

Read

Nome dello strumento: Read Input:
L’output assume una delle seguenti forme a seconda di ciò che Claude ha letto. Controlla la chiave type per distinguerle. Output (type: "text"):
Output (type: "image"):
Output (type: "notebook"):
Output (type: "pdf"):
Output (type: "parts"):
Output (type: "file_unchanged"):

Write

Nome dello strumento: Write Input:
Output:

Glob

Nome dello strumento: Glob Input:
Output:
totalMatches e countIsComplete richiedono Claude Code v2.1.191 o successivo.

Grep

Nome dello strumento: Grep Input:
Output:
Grep restituisce questa forma di dict in ogni modalità di output. Quali chiavi opzionali sono presenti dipende da output_mode. totalFiles richiede Claude Code v2.1.208 o successivo. totalLines richiede Claude Code v2.1.210 o successivo.

NotebookEdit

Nome dello strumento: NotebookEdit Input:
Output:

WebFetch

Nome dello strumento: WebFetch Input:
Output:

WebSearch

Nome dello strumento: WebSearch Input:
Output:

TodoWrite

Nome dello strumento: TodoWrite
I seguenti strumenti sono disponibili per impostazione predefinita solo su Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 e sui modelli precedenti. Su tutti gli altri modelli, inclusi gli ID modello che Claude Code non riconosce, non sono disponibili a meno che tu non li abiliti esplicitamente:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Ovunque gli strumenti siano disponibili, Claude Code fornisce i quattro strumenti Task, oppure TodoWrite quando impostate CLAUDE_CODE_ENABLE_TASKS=0.Questo set predefinito si applica in Claude Code v2.1.268 e versioni successive, che l’Agent SDK TypeScript raggruppa dalla v0.3.268.Vedi Disponibilità del modello per aderire.
Input:
Output:

TaskCreate

Nome dello strumento: TaskCreate Input:
Output:

TaskUpdate

Nome dello strumento: TaskUpdate Input:
Output:

TaskGet

Nome dello strumento: TaskGet Input:
Output:

TaskList

Nome dello strumento: TaskList Input:
Output:

TaskOutput

Rimosso in Claude Code v2.1.277. In precedenza recuperava l’output da un’attività in background in esecuzione o completata, con BashOutput accettato come alias; Claude legge invece il file di output di un’attività in background con Read. Una voce disallowed_tools o una regola di negazione che ancora nomina uno dei due nomi viene ignorata senza un avviso.

TaskStop

Nome dello strumento: TaskStop. I nomi precedenti KillShell e KillBash sono ancora accettati come alias. Input:
Output:

ExitPlanMode

Nome dello strumento: ExitPlanMode Input:
Output:

ListMcpResources

Nome dello strumento: ListMcpResourcesTool Input:
Il risultato è un elenco piuttosto che un dict, quindi tool_use_result contiene un list per questo strumento. Output:

ReadMcpResource

Nome dello strumento: ReadMcpResourceTool Input:
Output:

Costruire un’interfaccia di conversazione continua

L’esempio seguente mantiene un ClaudeSDKClient connesso tra i turni, in modo che Claude ricordi i messaggi precedenti. Digita new per disconnetterti e riconnetterti per una sessione nuova, oppure exit per terminare la conversazione.

Gestione degli errori

L’esempio seguente racchiude una chiamata query() in gestori per quattro dei tipi di errore che l’SDK genera. Questo esempio cattura ResultError, che richiede Python Agent SDK 0.2.140 o versioni successive.

Configurazione della Sandbox

SandboxSettings

Configurazione per il comportamento della sandbox. Usala per abilitare il sandboxing dei comandi e configurare le restrizioni di rete a livello di programmazione.
La sandbox dipende dal supporto della piattaforma e, su Linux, da strumenti come bubblewrap e socat. Per impostazione predefinita, quando enabled è True ma la sandbox non può avviarsi, i comandi vengono eseguiti senza sandbox con un avviso su stderr. Questo comportamento predefinito differisce dall’SDK TypeScript, dove failIfUnavailable è predefinito su true.Imposta "failIfUnavailable": True nelle impostazioni della sandbox per interrompere invece. L’SDK inoltra failIfUnavailable a Claude Code insieme ai campi dichiarati di SandboxSettings. query() quindi segnala un ResultMessage con subtype="error_during_execution" e il motivo in errors. Poiché si tratta di una singola chiamata query(), l’SDK genera un’eccezione dopo aver ceduto quel risultato di errore, quindi racchiudi il ciclo in un blocco try per continuare oltre. Vedi Gestire il risultato per il contratto di errore.
Per impedire ai comandi in sandbox di scrivere su un file, elenca il suo percorso assoluto in denyWrite nelle impostazioni della sandbox, ad esempio "filesystem": {"denyWrite": ["/home/user/project/.env"]}. L’SDK inoltra filesystem a Claude Code insieme ai campi dichiarati di SandboxSettings. Una volta avviata, la sandbox blocca le scritture su ciascun percorso assoluto elencato.

Utilizzo di esempio

Sicurezza del socket Unix: L’opzione allowUnixSockets può concedere l’accesso a servizi di sistema che raggiungono al di fuori della sandbox. Ad esempio, consentire /var/run/docker.sock concede effettivamente l’accesso completo al sistema host tramite l’API Docker, bypassando l’isolamento della sandbox. Consenti solo i socket Unix strettamente necessari e comprendi le implicazioni di sicurezza di ognuno.

SandboxNetworkConfig

Configurazione specifica della rete per la modalità sandbox. Queste impostazioni si applicano ai comandi Bash in sandbox quando enabled è True nella SandboxSettings padre. Non limitano lo strumento WebFetch, che utilizza invece regole di autorizzazione.
Il proxy sandbox integrato applica l’allowlist di rete in base al nome host richiesto e non termina o ispeziona il traffico TLS, quindi tecniche come il domain fronting possono potenzialmente bypassarlo. Vedi Limitazioni di sicurezza del sandboxing per i dettagli e Distribuzione sicura per configurare un proxy che termina TLS.

SandboxIgnoreViolations

Configurazione per ignorare violazioni specifiche della sandbox.

Fallback delle autorizzazioni per i comandi senza sandbox

Quando allowUnsandboxedCommands è abilitato, il modello può richiedere di eseguire comandi al di fuori della sandbox impostando dangerouslyDisableSandbox: True nell’input dello strumento. Queste richieste ricadono nel sistema di autorizzazioni esistente, il che significa che il tuo handler can_use_tool verrà invocato, permettendoti di implementare una logica di autorizzazione personalizzata. Le tue voci excludedCommands invece bypassano la sandbox senza coinvolgimento del modello; sandbox.excludedCommands copre quando una voce si applica. L’esempio seguente registra ogni richiesta senza sandbox e la nega a meno che la tua logica di autorizzazione non la consenta:
I comandi in esecuzione con dangerouslyDisableSandbox: True hanno accesso completo al sistema. Assicurati che il tuo handler can_use_tool validi queste richieste attentamente.Se permission_mode è impostato su bypassPermissions e allowUnsandboxedCommands è abilitato, il modello può autonomamente eseguire comandi al di fuori della sandbox senza prompt di approvazione, a parte le azioni che nessuna modalità approva automaticamente. Questa combinazione consente effettivamente al modello di sfuggire all’isolamento della sandbox silenziosamente.

Vedi anche