Installazione
Installare il pacchetto in un ambiente virtuale. Su recenti installazioni di Debian, Ubuntu e Homebrew Python, l’esecuzione dipip install su Python di sistema fallisce con error: externally-managed-environment.
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, avvolgete il corpo in async def main(): ... e chiamate 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 passiate continue_conversation=True o resume in ClaudeAgentOptions. Vedi Sessions.
Parametri
Restituisce
Restituisce unAsyncIterator[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
-
Mappatura di tipo semplice (consigliato):
-
Formato JSON Schema (per validazione complessa):
Restituisce
Una funzione decoratore che avvolge l’implementazione dello strumento e restituisce un’istanzaSdkMcpTool.
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 potete scrivere ogni suggerimento in camelCase o snake_case: ToolAnnotations(readOnlyHint=True) e ToolAnnotations(read_only_hint=True) sono equivalenti. Potete 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 potete 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 oggettoMcpSdkServerConfig 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 perlast_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 inSDKSessionInfo.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. PassaNone per cancellare un’etichetta esistente.
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
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 dicts 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).
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 di ambiente che controllano i timeout dell’API e il rilevamento dei blocchi. Passale attraversoClaudeAgentOptions.env:
-
API_TIMEOUT_MS: timeout per richiesta sul client Anthropic, in millisecondi. Predefinito600000. Si applica al ciclo principale e a tutti i subagenti. -
CLAUDE_CODE_MAX_RETRIES: numero massimo di tentativi API. Predefinito10, limitato a15. Ogni tentativo ottiene la propria finestraAPI_TIMEOUT_MS, quindi il tempo di parete nel caso peggiore è approssimativamenteAPI_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)più backoff. Per esecuzioni incustodite che devono attendere interruzioni più lunghe, impostaCLAUDE_CODE_RETRY_WATCHDOG=1: ritenta gli errori di capacità transitori indefinitamente e, a partire da Claude Code v2.1.199, aumenta il valore predefinito per altri errori transitori a300e rimuove il limite su questa variabile. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog di blocco per i subagenti. Mentre il watchdog del flusso è attivo, il predefinito èCLAUDE_STREAM_IDLE_TIMEOUT_MSpiù 5 minuti, che ammonta a600000a meno che non aumenti quella variabile. Con il watchdog del flusso disattivato, il predefinito è600000. Prima di v2.1.257, il predefinito era sempre600000. Il timer si ripristina su ogni evento di flusso. In caso di blocco, Claude Code interrompe il subagente e segnala il blocco al genitore. Per un subagente in background, contrassegna anche l’attività come non riuscita e allega qualsiasi risultato parziale. -
CLAUDE_ENABLE_STREAM_WATCHDOGconCLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog del flusso che interrompe la richiesta quando le intestazioni sono arrivate ma il corpo della risposta smette di trasmettere. Il watchdog è attivo per impostazione predefinita per tutti i provider; impostaCLAUDE_ENABLE_STREAM_WATCHDOG=0per disabilitarlo.CLAUDE_STREAM_IDLE_TIMEOUT_MSpredefinito a300000e viene bloccato a quel minimo. Dopo l’interruzione, Tentativi automatici copre cosa Claude Code fa, in base a quanto la risposta aveva progredito. Mentre il watchdog attende una risposta che un gateway dietroANTHROPIC_BASE_URLtiene aperta con ping keep-alive, un host che impostainclude_partial_messagescontinua a ricevere messaggiStreamEventdiping. Leggi quei frame come vivacità piuttosto che cronometrare la sessione su silenzio. 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.
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 il modulo 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 al spawn del processo con Argument list too long. Su Windows l’intera riga di comando è limitata a circa 32 KB, quindi il modulo stringa fallisce a una soglia inferiore.
SettingSource
Controlla quali fonti di configurazione basate su filesystem l’SDK carica le impostazioni da.
Comportamento predefinito
Quandosetting_sources è omesso o None, query() carica le stesse impostazioni del filesystem della CLI di Claude Code: utente, progetto e locale. Le impostazioni della politica gestita vengono caricate in tutti i casi; le impostazioni gestite dal server vengono recuperate quando la sessione si autentica con una credenziale organizzativa su una configurazione idonea. Vedi Cosa settingSources non controlla per gli input che vengono letti indipendentemente da questa opzione, e come disabilitarli.
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."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):- Impostazioni locali (
.claude/settings.local.json) - Impostazioni di progetto (
.claude/settings.json) - Impostazioni utente (
~/.claude/settings.json)
agents e allowed_tools sovrascrivono le impostazioni del filesystem utente, progetto e locale. Le impostazioni della politica gestita hanno la precedenza sulle opzioni programmatiche.
AgentDefinition
Configurazione per un subagente definito programmaticamente.
I nomi dei campi
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 Python snake_case 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 autorizzazione per controllare l’esecuzione dello strumento.
EffortLevel
Livelli di sforzo per guidare la profondità del pensiero.
CanUseTool
Alias di tipo per le funzioni di callback di autorizzazione dello strumento.
tool_name: Nome dello strumento che viene chiamatoinput_data: I parametri di input dello strumentocontext: UnToolPermissionContextcon informazioni aggiuntive
PermissionResult (sia PermissionResultAllow che PermissionResultDeny).
Il callback è il sostituto SDK per il prompt di autorizzazione interattivo: viene invocato solo quando il flusso di valutazione delle autorizzazioni si risolve in un prompt. Le chiamate dello strumento già approvate da una voce allowed_tools, una regola di autorizzazione nelle impostazioni, o la modalità di autorizzazione, come acceptEdits o bypassPermissions, non lo invocano mai. Per controllare ogni chiamata dello strumento, usa un hook PreToolUse invece.
Una regola di autorizzazione non pre-approva le azioni che nessuna modalità auto-approva; vedi Come vengono valutate le autorizzazioni per quali di esse raggiungono il callback e cosa accade in modalità dontAsk e auto.
ToolPermissionContext
Informazioni di contesto passate ai callback di autorizzazione dello strumento.
PermissionResult
Tipo di unione per i risultati del callback di autorizzazione.
PermissionResultAllow
Risultato che indica che la chiamata dello strumento deve essere consentita.
PermissionResultDeny
Risultato che indica che la chiamata dello strumento deve essere negata.
PermissionUpdate
Configurazione per l’aggiornamento delle autorizzazioni a livello di programmazione.
PermissionRuleValue
Una regola da aggiungere, sostituire o rimuovere in un aggiornamento delle autorizzazioni.
ToolsPreset
Configurazione degli strumenti preset per l’utilizzo del set di strumenti predefinito di Claude Code.
ThinkingConfig
Controlla il comportamento del pensiero esteso. Un’unione di tre configurazioni:
Il campo opzionale
display controlla se il testo di pensiero 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 di pensiero negli output ThinkingBlock. Claude Code non invia display ad Amazon Bedrock o alla piattaforma agente di Google Cloud, quindi 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 dicts semplici in fase di esecuzione. Costruiscile come letterali dict o chiama la classe come 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.
betas in ClaudeAgentOptions per abilitare le funzionalità beta.
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 riportato da get_mcp_status(). Questa è l’unione di tutte le varianti di trasporto McpServerConfig più una variante di output-only claudeai-proxy per i server proxy attraverso claude.ai.
McpSdkServerConfigStatus è la forma serializzabile di McpSdkServerConfig con solo i campi type ("sdk") e name (str); l’instance in-process viene omesso. McpClaudeAIProxyServerConfig ha i campi type ("claudeai-proxy"), url (str), e id (str).
McpStatusResponse
Risposta da ClaudeSDKClient.get_mcp_status(). Avvolge l’elenco degli stati del server sotto la chiave mcpServers.
McpServerStatus
Stato di un server MCP connesso, contenuto in McpStatusResponse.
SdkPluginConfig
Configurazione per il caricamento dei plugin nell’SDK.
Esempio:
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 subagenti. 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.
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.
ResultMessage
Messaggio di risultato finale con informazioni su costo e utilizzo.
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:Truequando la conversazione è terminata in uno stato di errore. SempreTruesui subtypeerror_*. Susubtype="success"èTruequando 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.Nonequando il turno è terminato senza uno. Popolato solo susubtype="success".result: testo del messaggio dell’assistente finale susubtype="success", oNonesui subtypeerror_*. Quandosubtype="success"eis_error=True, questo contiene la stringa di errore API se disponibile ma può essere vuoto, quindi controllaapi_error_statuse il contenuto diAssistantMessageprecedente per i dettagli.errors: stringhe di errore a livello di ciclo come il messaggio max-turns. Popolato solo sui subtypeerror_*.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 sonointerrupt()e un callback di permesso che restituiscePermissionResultDenyconinterrupt=True.Nonesu versioni CLI che precedono il campo, su risultati da comandi locali come/voiceo/usage, che bypassano il ciclo di query, o su risultati di errore sintetizzati emessi quando la sessione fallisce fatalmente. Rispecchia ilSDKResultMessage.terminal_reasondell’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, doveoriginèNoneo{"kind": "human"}, dal risultato di un turno iniettato come una notifica di attività in background. Richiede Python Agent SDK 0.2.137 o successivo.
usage copre solo il ciclo dell’agente principale ed esclude i subagenti 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 subagenti 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. 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 limite di velocità 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 limite di velocità 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 subagente generato tramite lo strumento Agent, o un agente remoto. Il campo task_type ti dice quale. Questo nome non è correlato al rinomina dello strumento Task-to-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 subagenti in background.
Quando la CLI sposta una lunga chiamata di 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 di strumento 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 vostro codice cattura. Per le voci associate ai messaggi di errore che questi tipi generano, con la causa e la correzione per ciascuno, consultate Troubleshooting.ClaudeSDKError
Classe di eccezione base per tutti gli errori dell’SDK.
query() termina con un risultato di errore, ad esempio un errore di limite di turni, l’SDK genera un ResultError dopo aver restituito il messaggio di risultato finale. Le versioni di Python Agent SDK precedenti alla 0.2.140 generavano una semplice Exception che non era una sottoclasse di ClaudeSDKError.
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 dopo il ResultMessage finale quando il processo Claude Code esce perché l’esecuzione è terminata con un 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 potete distinguere il motivo del fallimento dell’esecuzione senza analizzare il testo del messaggio. Richiede Python Agent SDK 0.2.140 o successivo.
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 avete 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 hooks 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.
input: Input hook fortemente tipizzato con unioni discriminate basate suhook_event_name(vediHookInput)tool_use_id: Identificatore di utilizzo dello strumento opzionale (per hook correlati allo strumento)context: Contesto hook con informazioni aggiuntive
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 autorizzazione 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 hooks.
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 comerm -rf /, e un altro che registra tutto l’utilizzo dello strumento per il controllo. L’hook di sicurezza viene eseguito solo sui comandi Bash (tramite il matcher), mentre l’hook di registrazione viene eseguito su tutti gli strumenti.
Tipi di input/output dello strumento
Documentazione degli schemi di input/output per tutti gli strumenti Claude Code integrati. Mentre Python SDK non esporta questi come tipi, rappresentano la struttura degli input e output dello strumento nei messaggi.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:
"completed"):
"async_launched"):
"remote_launched"):
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 remota, dove sessionUrl si collega a quella sessione e taskId l’identifica. Se Claude Code ha mantenuto il worktree isolato del subagente, worktreePath sulla variante completed è dove trovarlo, e worktreeBranch è il suo ramo quando Claude Code ha creato il worktree con git.
Sulla variante completed, resolvedModel nomina il modello su cui il subagente 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 subagente, 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 thinking. La chiave output_tokens_details richiede Python SDK v0.2.136 o successivo, che raggruppa Claude Code v2.1.228.
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:
Bash
Nome dello strumento:Bash
Input:
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. Fornire esattamente uno tra command o ws.
Quando Monitor esegue un comando, segue le stesse regole di autorizzazione 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:
Edit
Nome dello strumento:Edit
Input:
Read
Nome dello strumento:Read
Input:
Write
Nome dello strumento:Write
Input:
Glob
Nome dello strumento:Glob
Input:
Grep
Nome dello strumento:Grep
Input:
NotebookEdit
Nome dello strumento:NotebookEdit
Input:
WebFetch
Nome dello strumento:WebFetch
Input:
WebSearch
Nome dello strumento:WebSearch
Input:
TodoWrite
Nome dello strumento:TodoWrite
The following tools are available by default only on Claude 3.x models, Opus 4 through 4.7, Sonnet 4 through 4.6, and Haiku 4.5. On every other model, including model IDs Claude Code doesn’t recognize, they aren’t available unless you opt in:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite instead when you set CLAUDE_CODE_ENABLE_TASKS=0.This default set applies in Claude Code v2.1.268 and later, which the TypeScript Agent SDK bundles from v0.3.268.Vedi Disponibilità del modello per aderire.TaskCreate
Nome dello strumento:TaskCreate
Input:
TaskUpdate
Nome dello strumento:TaskUpdate
Input:
TaskGet
Nome dello strumento:TaskGet
Input:
TaskList
Nome dello strumento:TaskList
Input:
TaskOutput
Nome dello strumento:TaskOutput. Il nome precedente BashOutput è ancora accettato come alias.
TaskOutput è deprecato; preferisci Read sul percorso del file di output del compito. Gli schemi sottostanti rimangono validi per hook e gestori di autorizzazione che incontrano lo strumento.TaskStop
Nome dello strumento:TaskStop. I nomi precedenti KillShell e KillBash sono ancora accettati come alias.
Input:
ExitPlanMode
Nome dello strumento:ExitPlanMode
Input:
ListMcpResources
Nome dello strumento:ListMcpResourcesTool
Input:
ReadMcpResource
Nome dello strumento:ReadMcpResourceTool
Input:
Costruire un’interfaccia di conversazione continua
L’esempio seguente mantiene unClaudeSDKClient 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 chiamataquery() 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. La chiave non è ancora dichiarata su SandboxSettings, ma l’SDK la inoltra a Claude Code, che la rispetta. 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.Utilizzo di esempio
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
QuandoallowUnsandboxedCommands è 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. I comandi elencati in excludedCommands invece bypassano la sandbox automaticamente, senza coinvolgimento del modello; vedi SandboxSettings.
L’esempio seguente registra ogni richiesta senza sandbox e la nega a meno che la tua logica di autorizzazione non la consenta:
Vedi anche
- Panoramica dell’SDK - Concetti generali dell’SDK
- Riferimento TypeScript SDK - Documentazione TypeScript SDK
- Strumenti personalizzati - Definisci strumenti MCP in-process per Claude da chiamare
- Riferimento CLI - Interfaccia della riga di comando
- Flussi di lavoro comuni - Guide passo dopo passo