Installazione
L’SDK raggruppa un binario nativo Claude Code per la tua piattaforma come dipendenza opzionale come
@anthropic-ai/claude-agent-sdk-darwin-arm64. Non è necessario installare Claude Code separatamente. Se il tuo gestore di pacchetti salta le dipendenze opzionali, l’SDK genera Native CLI binary for <platform> not found; imposta pathToClaudeCodeExecutable su un binario claude installato separatamente.Compilare in un singolo eseguibile
Quando compili la tua applicazione in un eseguibile a file singolo conbun build --compile, l’SDK non può risolvere il binario CLI raggruppato in fase di esecuzione. require.resolve non funziona all’interno del filesystem virtuale $bunfs dell’eseguibile compilato, quindi l’SDK genera Native CLI binary for <platform> not found.
Per aggirare questo problema, incorpora il binario della piattaforma come risorsa file, estrailo in un percorso reale all’avvio con extractFromBunfs() e passa quel percorso a pathToClaudeCodeExecutable.
L’helper extractFromBunfs() richiede @anthropic-ai/claude-agent-sdk v0.3.144 o successivo. L’esempio seguente compila per macOS su Apple Silicon:
extractFromBunfs() copia il binario incorporato dal filesystem virtuale dell’eseguibile compilato in una directory temporanea per utente e restituisce il percorso reale. Al di fuori di un eseguibile compilato restituisce il percorso di input invariato, quindi lo stesso codice viene eseguito in sviluppo senza modifiche.
Ogni eseguibile compilato incorpora il binario di una singola piattaforma. Fai corrispondere il pacchetto della piattaforma nell’importazione al tuo --target:
- Per la compilazione incrociata, installa il pacchetto della piattaforma non corrispondente, ad esempio
npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force. - Su Windows, il sottopercorso binario è
claude.exe, ad esempio@anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.
Funzioni
query()
La funzione principale per interagire con Claude Code. Crea un generatore asincrono che trasmette i messaggi man mano che arrivano.
Parametri
Restituisce
Restituisce un oggettoQuery che estende AsyncGenerator<SDKMessage, void> con metodi aggiuntivi.
startup()
Pre-riscalda il subprocess CLI generandolo e completando l’handshake di inizializzazione prima che un prompt sia disponibile. L’handle WarmQuery restituito accetta un prompt in seguito e lo scrive in un processo già pronto, quindi la prima chiamata query() si risolve senza pagare il costo di generazione e inizializzazione del subprocess inline.
Parametri
Restituisce
Restituisce unaPromise<WarmQuery> che si risolve una volta che il subprocess è stato generato e ha completato il suo handshake di inizializzazione.
Esempio
Chiamastartup() presto, ad esempio all’avvio dell’applicazione, quindi chiama .query() sull’handle restituito una volta che un prompt è pronto. Questo sposta la generazione del subprocess e l’inizializzazione fuori dal percorso critico.
tool()
Crea una definizione di tool MCP type-safe per l’uso con i server MCP dell’SDK.
Parametri
ToolAnnotations
Re-esportato da @modelcontextprotocol/sdk/types.js. Tutti i campi sono suggerimenti opzionali; i client non dovrebbero fare affidamento su di essi per decisioni di sicurezza.
createSdkMcpServer()
Crea un’istanza di server MCP che viene eseguita nello stesso processo della tua applicazione.
Parametri
listSessions()
Scopre ed elenca le sessioni passate con metadati leggeri. Filtra per directory di progetto o elenca le sessioni in tutti i progetti.
Parametri
Tipo di ritorno: SDKSessionInfo
Esempio
Stampa le 10 sessioni più recenti per un progetto. I risultati sono ordinati perlastModified decrescente, quindi il primo elemento è il più recente. Ometti dir per cercare in tutti i progetti.
getSessionMessages()
Legge i messaggi dell’utente e dell’assistente da una trascrizione di sessione passata.
Parametri
Tipo di ritorno: SessionMessage
Esempio
getSessionInfo()
Legge i metadati per una singola sessione per ID senza scansionare la directory del progetto completa.
Parametri
Restituisce
SDKSessionInfo, o undefined se la sessione non viene trovata.
renameSession()
Rinomina una sessione aggiungendo una voce di titolo personalizzato. Le chiamate ripetute sono sicure; il titolo più recente vince.
Parametri
tagSession()
Etichetta una sessione. Passa null per cancellare l’etichetta. Le chiamate ripetute sono sicure; l’etichetta più recente vince.
Parametri
resolveSettings()
Risolve le impostazioni effettive di Claude Code per una determinata directory utilizzando lo stesso motore di merge della CLI, senza generare la CLI Claude. Utilizzalo per ispezionare quale configurazione una chiamata query() vedrebbe prima di invocarne una.
Questa funzione è in fase alpha e la sua API potrebbe cambiare prima della stabilizzazione. Legge le fonti MDM, inclusi plist macOS e Windows HKLM/HKCU, per la parità con l’avvio della CLI, ma non esegue il subprocess
policyHelper configurato dall’amministratore. Il campo permissions.defaultMode viene restituito così com’è da tutti i livelli incluse le impostazioni del progetto. Il filtro di fiducia che la CLI applica prima di onorare i modi di autorizzazione crescenti non viene applicato.Parametri
resolveSettings() accetta un singolo oggetto di opzioni. Tutti i campi sono opzionali.
Tipo di ritorno: ResolvedSettings
resolveSettings() restituisce un oggetto che descrive le impostazioni unite e la fonte che ha contribuito a ogni chiave.
Esempio
L’esempio seguente risolve le impostazioni per una directory di progetto e stampa la fonte che controlla il periodo di pulizia.Tipi
Options
Oggetto di configurazione per la funzione query().
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 attraverso l’opzioneenv:
API_TIMEOUT_MS: timeout per richiesta sul client Anthropic, in millisecondi. Predefinito600000. Si applica al loop 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 wall case peggiore è approssimativamenteAPI_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)più backoff. Per esecuzioni incustodite che devono attendere attraverso interruzioni più lunghe, impostaCLAUDE_CODE_RETRY_WATCHDOG=1: ritenta gli errori di capacità indefinitamente, e a partire da Claude Code v2.1.199 aumenta il predefinito per altri errori transitori a300e rimuove il limite su questa variabile.CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog di blocco per i subagenti lanciati conrun_in_background. Predefinito600000. Si ripristina su ogni evento di stream; al blocco interrompe il subagente, contrassegna l’attività come fallita e presenta l’errore al genitore con qualsiasi risultato parziale. Non si applica ai subagenti sincroni.CLAUDE_ENABLE_STREAM_WATCHDOGconCLAUDE_STREAM_IDLE_TIMEOUT_MS: 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 a300000ed è limitato a quel minimo. La richiesta interrotta passa attraverso il percorso di tentativo normale.
Oggetto Query
Interfaccia restituita dalla funzione query().
Metodi
applyFlagSettings()
Cambia qualsiasi impostazione su una sessione in esecuzione senza riavviare la query. Usalo quando un’impostazione che non ha un setter dedicato deve cambiare a metà sessione, come irrigidire permissions dopo che l’agente legge input non attendibile. setModel() e setPermissionMode() sono setter dedicati per quelle due chiavi; applyFlagSettings() è la forma generale che accetta qualsiasi sottoinsieme delle chiavi di impostazioni, e passare model qui si comporta come setModel().
Solo alcune chiavi hanno effetto a metà sessione:
- Applicate al turno successivo:
model,effortLevel,ultracode,permissions,hooks,skillOverrides,fastMode,agent. Cambiareagentapplica anche l’override del modello di quell’agente, gli hook e il prompt di sistema al turno successivo. - Nessun effetto a metà sessione: le opzioni del prompt di sistema. Questi vengono risolti una volta all’avvio, quindi la sessione in esecuzione mantiene il valore originale anche se la chiamata ha successo. Per cambiarli, avvia una nuova sessione.
effortLevel accetta un nome di livello di sforzo. Accetta anche "ultracode", che esegue la sessione a sforzo xhigh e attiva ultracode. Il tipo Settings dichiara effortLevel senza quel valore, quindi passa l’equivalente { ultracode: true } in TypeScript. Il valore ultracode richiede Claude Code v2.1.203 o successivo ed è accettato solo da applyFlagSettings(), non dalla chiave effortLevel in un file di impostazioni.
I valori vengono scritti nel livello flag-settings, lo stesso livello che l’opzione settings inline di query() popola all’avvio. Le impostazioni flag si trovano vicino alla parte superiore dell’ordine di precedenza delle impostazioni: sovrascrivono le impostazioni utente, progetto e locali, e solo le impostazioni della politica gestita possono sovrascriverle. Questo è lo stesso livello che la sezione di precedenza in pagina chiama opzioni programmatiche.
Le chiamate successive eseguono un shallow-merge delle chiavi di livello superiore. Una seconda chiamata con { permissions: {...} } sostituisce l’intero oggetto permissions dalla chiamata precedente piuttosto che eseguire un deep-merge in esso. Per cancellare una chiave dal livello flag e ricadere in fonti di precedenza inferiore, passa null per quella chiave. Passare undefined non ha effetto perché la serializzazione JSON lo elimina.
Disponibile solo in modalità input streaming, lo stesso vincolo di setModel() e setPermissionMode().
L’esempio seguente cambia il modello attivo a metà sessione, quindi cancella l’override in modo che il modello ricada in qualsiasi cosa specifichino le impostazioni utente o progetto.
applyFlagSettings() è solo TypeScript. L’SDK Python non espone un metodo equivalente.WarmQuery
Handle restituito da startup(). Il subprocess è già generato e inizializzato, quindi chiamare query() su questo handle scrive il prompt direttamente in un processo pronto senza latenza di avvio.
Metodi
WarmQuery implementa AsyncDisposable, quindi può essere usato con await using per la pulizia automatica.
SDKControlInitializeResponse
Tipo di ritorno di initializationResult(). Contiene i dati di inizializzazione della sessione.
initialize a una sessione che è già in esecuzione, il wrapper di risposta di controllo porta anche un array pending_permission_requests opzionale. Il campo si trova sul wrapper di risposta stesso, non nel payload SDKControlInitializeResponse sopra. Ogni voce è un messaggio control_request completo con la stessa forma { type: "control_request", request_id, request } che la sessione trasmette per le richieste di permesso durante l’esecuzione.
Queste sono richieste che sono state emesse prima che il client si connettesse e sono ancora in attesa di una risposta. L’SDK legge l’array per te e invia ogni voce al tuo callback canUseTool, lo stesso reinvio che reinitialize() attiva dopo un gap di trasporto. Gestisci gli ID di richiesta ripetuti in modo idempotente, perché una voce può ripetere una richiesta che il callback ha già ricevuto prima che la connessione si interrompesse.
SDKControlInterruptResponse
La ricevuta di interruzione: il valore che interrupt() si risolve con su una CLI che pubblicizza la capacità interrupt_receipt_v1 in SDKSystemMessage.capabilities. Richiede Claude Code v2.1.205 o successivo. Le CLI precedenti rispondono all’interruzione con un payload di successo vuoto, quindi interrupt() si risolve a undefined.
still_queued elenca gli UUID dei messaggi utente che sopravvivono all’interruzione: messaggi ancora nella coda, più qualsiasi batch già rimosso dalla coda per il turno successivo ma non ancora raggiungibile dall’interruzione. Ognuno viene eseguito come il suo turno dopo l’interruzione a meno che non lo annulli per primo. Usa la ricevuta per decidere se rinviare qualcosa; rinviare un messaggio che è già elencato produce un turno duplicato.
Interpreta l’elenco con questi avvertimenti:
- Solo i messaggi che sono stati accodati con un UUID appaiono. Un array vuoto non significa che nient’altro verrà eseguito.
- Solo i messaggi del thread principale sono elencati. I messaggi indirizzati a un subagente sono fuori portata.
- L’elenco può includere UUID che il tuo client non ha mai inviato, come i trigger di attività pianificate. Ignora gli UUID che non riconosci invece di trattarli come un errore.
SDKResultMessage del turno interrotto. Leggi la ricevuta piuttosto che ispezionare la coda dopo quel risultato: il loop avvia il turno in coda successivo immediatamente, quindi la coda che ispezioni dopo il risultato è già cambiata.
AgentDefinition
Configurazione per un subagente definito programmaticamente.
AgentMcpServerSpec
Specifica i server MCP disponibili per un subagente. Può essere un nome di server (stringa che fa riferimento a un server dalla configurazione mcpServers del genitore) o una configurazione di server inline che mappa i nomi dei server alle configurazioni.
McpServerConfigForProcessTransport è McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.
SettingSource
Controlla quali fonti di configurazione basate su filesystem l’SDK carica le impostazioni da.
Comportamento predefinito
QuandosettingSources è omesso o undefined, query() carica le stesse impostazioni del filesystem del CLI 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 settingSources
Disabilita le impostazioni del filesystem:Precedenza delle impostazioni
Quando più fonti vengono caricate, le impostazioni vengono unite con questa precedenza (più alta a più bassa):- Impostazioni locali (
.claude/settings.local.json) - Impostazioni del progetto (
.claude/settings.json) - Impostazioni dell’utente (
~/.claude/settings.json)
agents, allowedTools e settings sovrascrivono le impostazioni del filesystem utente, progetto e locale. Le impostazioni della politica gestita hanno precedenza sulle opzioni programmatiche.
PermissionMode
CanUseTool
Tipo di funzione di permesso personalizzato per controllare l’uso dei tool.
La funzione è la sostituzione SDK per il prompt di permesso interattivo: viene invocata solo quando il flusso di valutazione del permesso si risolve in un prompt. Le chiamate di tool già approvate da una voce allowedTools, una regola di autorizzazione nelle impostazioni, o la modalità di permesso, come acceptEdits o bypassPermissions, non la invocano mai. Per controllare ogni chiamata di tool, usa un hook PreToolUse invece.
AskUserQuestion, tool MCP contrassegnati requiresUserInteraction, e tool connettore impostati dalla tua organizzazione su ask la raggiungono anche quando una regola di autorizzazione corrisponde. In modalità dontAsk queste chiamate vengono negate invece, senza invocarla.
Il callback normalmente risolve la richiesta restituendo un
PermissionResult, che l’SDK scrive di nuovo sul suo trasporto come control_response. Restituisci null solo quando la tua applicazione ha già inviato la control_response per questa richiesta sul suo canale, ripetendo requestId; l’SDK quindi salta la scrittura della risposta al suo trasporto. Restituire null in qualsiasi altro caso lascia la chiamata di tool bloccata indefinitamente, perché nessuna control_response viene mai inviata e i prompt di permesso non scadono.
L’opzione requestId e il valore di ritorno null richiedono Claude Code v2.1.199 o successivo.
PermissionResult
Risultato di un controllo di permesso.
ToolConfig
Configurazione per il comportamento dei tool incorporati.
McpServerConfig
Configurazione per i server MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
Configurazione per il caricamento dei plugin nell’SDK.
Esempio:
Tipi di messaggio
SDKMessage
Tipo di unione di tutti i possibili messaggi restituiti dalla query.
SDKAssistantMessage
Messaggio di risposta dell’assistente.
message è un BetaMessage dall’SDK Anthropic. Include campi come id, content, model, stop_reason e usage.
SDKAssistantMessageError è uno di: 'authentication_failed', 'oauth_org_not_allowed', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', o 'unknown'. 'model_not_found' significa che il modello selezionato non esiste o non è disponibile per il tuo account o deployment. 'overloaded' significa che l’API ha restituito un 529 perché il server è al massimo della capacità, a differenza di 'rate_limit', che è un 429 rispetto alla tua quota.
SDKUserMessage
Messaggio di input dell’utente.
shouldQuery a false per aggiungere il messaggio alla trascrizione senza attivare un turno dell’assistente. Il messaggio viene mantenuto e unito al prossimo messaggio utente che attiva un turno. Usa questo per iniettare contesto, come l’output di un comando che hai eseguito fuori banda, senza spendere una chiamata di modello su di esso.
Su un messaggio che contiene un blocco tool_result, tool_use_result è l’oggetto di output strutturato dello strumento piuttosto che il testo inviato al modello. La sua forma dipende dallo strumento denominato dal blocco tool_use corrispondente, quindi il campo è tipizzato unknown; le forme integrate sono elencate in Tipi di output dello strumento.
Per lo strumento Agent, tool_use_result è AgentOutput. Su un risultato completed, content contiene il rapporto del subagente senza l’ID agente e il trailer di utilizzo che Claude Code aggiunge al testo tool_result, quindi esegui il rendering da tool_use_result invece di analizzare quel testo.
SDKUserMessageReplay
Messaggio utente riprodotto con UUID obbligatorio.
origin è di tipo peer o channel, raggiunge il flusso come una riproduzione indipendentemente dal fatto che sia stato consegnato durante un turno attivo o abbia avviato un nuovo turno mentre la sessione era inattiva. Prima della v2.1.207, un turno iniettato consegnato mentre la sessione era inattiva non produceva alcun messaggio sul flusso e appariva solo quando rileggi la trascrizione.
SDKResultMessage
Messaggio di risultato finale.
subtype:
api_error_status: il codice di stato HTTP dell’errore API che ha terminato la conversazione. Assente onullquando il turno è terminato senza un errore API.ttft_ms: tempo al primo token in millisecondi, misurato quando arriva il primo messaggio dell’assistente completo. Presente solo sul ramo di successo.ttft_stream_ms: tempo in millisecondi fino al primo evento di flussomessage_start, quando il flusso di risposta si apre. Inferiore attft_ms; il divario tra i due è il tempo impiegato per lo streaming del primo messaggio. Presente solo sul ramo di successo.terminal_reason: il motivo per cui il ciclo è terminato. Uno di"completed","max_turns","tool_deferred","aborted_streaming","aborted_tools","hook_stopped","stop_hook_prevented","background_requested","blocking_limit","rapid_refill_breaker","prompt_too_long","image_error","model_error","api_error","malformed_tool_use_exhausted","budget_exhausted","structured_output_retry_exhausted","tool_deferred_unavailable", o"turn_setup_failed".fast_mode_state: uno di"on","off", o"cooldown".
origin inoltro l’SDKMessageOrigin del messaggio utente che ha attivato questo risultato. Quando un’attività in background finisce e l’SDK inietta un turno di follow-up sintetico, il SDKResultMessage risultante contiene origin: { kind: "task-notification" }. Controlla questo campo per distinguere i risultati che rispondono al tuo prompt dai risultati emessi per i follow-up di attività in background, in modo da poter instradare o sopprimere questi ultimi. Il campo è assente per i risultati emessi prima di qualsiasi turno utente, come gli errori di avvio.
Quando un hook PreToolUse restituisce permissionDecision: "defer", il risultato ha stop_reason: "tool_deferred" e deferred_tool_use contiene l’id, il name e l’input del tool in sospeso. Leggi questo campo per visualizzare la richiesta nella tua interfaccia utente, quindi riprendi con lo stesso session_id per continuare. Vedi Rinvia una chiamata di tool per dopo per il percorso completo.
SDKSystemMessage
Messaggio di inizializzazione del sistema.
capabilities nomina i comportamenti del protocollo che questa CLI implementa, in modo da poter rilevare le funzionalità invece di confrontare le stringhe claude_code_version. È un insieme aperto: ignora i valori che non riconosci e controlla la capacità specifica su cui fai affidamento. Il campo richiede Claude Code v2.1.205 o successivo ed è assente su CLI precedenti.
SDKPartialAssistantMessage
Messaggio parziale di streaming (solo quando includePartialMessages è true). Il campo parent_tool_use_id è sempre null: gli eventi di flusso vengono emessi solo per la sessione principale. Per l’attribuzione del subagente, utilizza messaggi completi, che contengono parent_tool_use_id, o abilita forwardSubagentText per ricevere il testo e il pensiero del subagente come messaggi completi.
SDKCompactBoundaryMessage
Messaggio che indica un limite di compattazione della conversazione.
SDKInformationalMessage
Banner di testo generico emesso dal ciclo. Contiene righe di stato non di errore, feedback di hook come il motivo del blocco di un hook UserPromptSubmit, e output di comando. Renderizza content come testo semplice al livello specificato.
SDKWorkerShuttingDownMessage
Emesso durante lo spegnimento elegante del worker in modo che i client remoti possano mostrare il motivo per cui il worker se n’è andato invece di aspettare il timeout del battito cardiaco. Il reason è una stringa breve in snake_case impostata dalla CLI host, come "host_exit" o "remote_control_disabled". Agisci su questo solo quando stai eseguendo lo streaming in diretta. Una sessione ripresa riproduce le istanze passate di questo messaggio, quindi ignorale in quel caso.
SDKPluginInstallMessage
Evento di progresso dell’installazione del plugin. Emesso quando CLAUDE_CODE_SYNC_PLUGIN_INSTALL è impostato, in modo che la tua applicazione Agent SDK possa tracciare l’installazione del plugin del marketplace prima del primo turno. Gli stati started e completed racchiudono l’installazione complessiva. Gli stati installed e failed segnalano i singoli marketplace e includono name.
SDKPermissionDeniedMessage
Evento di flusso emesso quando il sistema di autorizzazione nega automaticamente una chiamata di tool senza un prompt interattivo. Usalo per rendere il rifiuto nella tua interfaccia utente mentre accade, piuttosto che osservare solo il risultato del tool is_error che segue. Il percorso della richiesta interattiva raggiunge la tua applicazione separatamente tramite il callback canUseTool. I rifiuti emessi da un hook PreToolUse non vengono segnalati tramite questo evento.
Questo evento richiede Claude Code v2.1.136 o successivo.
SDKPermissionDenial
Informazioni su un uso di tool negato.
SDKMessageOrigin
Provenienza di un messaggio con ruolo utente. Questo appare come origin su SDKUserMessage e viene inoltrato al corrispondente SDKResultMessage in modo da poter dire cosa ha attivato un determinato turno.
Tipi di hook
Per una guida completa sull’uso degli hook con esempi e pattern comuni, vedi la guida Hooks.HookEvent
Eventi hook disponibili.
HookCallback
Tipo di funzione callback hook.
HookCallbackMatcher
Configurazione hook con matcher opzionale.
HookInput
Tipo di unione di tutti i tipi di input hook.
BaseHookInput
Interfaccia base che tutti i tipi di input hook estendono.
prompt_id è un UUID che identifica il prompt dell’utente attualmente in elaborazione. Corrisponde all’attributo prompt.id sugli eventi OpenTelemetry ed è assente fino al primo input dell’utente. Richiede Claude Code v2.1.196 o successivo.
PreToolUseHookInput
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
Si attiva una volta dopo che ogni chiamata di strumento in un batch è stata risolta, prima della prossima richiesta del modello. tool_response contiene il contenuto serializzato di tool_result che il modello vede; la forma differisce dall’oggetto strutturato Output di PostToolUseHookInput.
NotificationHookInput
UserPromptSubmitHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCompletedHookInput
ConfigChangeHookInput
WorktreeCreateHookInput
WorktreeRemoveHookInput
MessageDisplayHookInput
HookJSONOutput
Valore di ritorno hook.
AsyncHookJSONOutput
SyncHookJSONOutput
Tipi di input dei tool
Documentazione degli schemi di input per tutti i tool Claude Code incorporati. Questi tipi vengono esportati da@anthropic-ai/claude-agent-sdk e possono essere usati per le interazioni dei tool type-safe.
ToolInputSchemas
Unione di tutti i tipi di input dei tool, esportati da @anthropic-ai/claude-agent-sdk.
Agent
Nome del tool:Agent (precedentemente Task, che è ancora accettato come alias)
AskUserQuestion
Nome del tool:AskUserQuestion
Bash
Nome del tool:Bash
Monitor
Nome del tool:Monitor
command esegue uno script e emette un evento per riga stdout, e ws apre un WebSocket e emette un evento per frame di testo. Fornisci esattamente uno tra command o ws. La fonte ws richiede Claude Code v2.1.195 o successivo.
Imposta persistent: true per i watch di lunghezza della sessione come code tail. Quando Monitor esegue un comando, segue le stesse regole di permesso di Bash; un watch WebSocket richiede l’approvazione separatamente. Vedi il riferimento del tool Monitor per il comportamento e la disponibilità del provider.
TaskOutput
Nome del tool:TaskOutput
Edit
Nome del tool:Edit
Read
Nome del tool:Read
pages per gli intervalli di pagine PDF (ad esempio, "1-5").
Write
Nome del tool:Write
Glob
Nome del tool:Glob
Grep
Nome del tool:Grep
TaskStop
Nome del tool:TaskStop
task_id accetta anche un compagno di squadra agent-team o un agente di background denominato per ID agente o nome.
NotebookEdit
Nome del tool:NotebookEdit
WebFetch
Nome del tool:WebFetch
WebSearch
Nome del tool:WebSearch
Workflow
Nome del tool:Workflow
Workflow è disponibile in Agent SDK v0.3.149 e versioni successive. Almeno uno tra script, name o scriptPath è obbligatorio.
TodoWrite
Nome del tool:TodoWrite
A partire da TypeScript Agent SDK 0.3.142,
TodoWrite è disabilitato per impostazione predefinita. Usa TaskCreate, TaskGet, TaskUpdate e TaskList invece. Vedi Migra ai tool Task per aggiornare il tuo codice di monitoraggio, oppure imposta CLAUDE_CODE_ENABLE_TASKS=0 per ripristinare TodoWrite.TaskCreate
Nome del tool:TaskCreate
TaskUpdate
Nome del tool:TaskUpdate
status a "deleted" per rimuoverlo.
TaskGet
Nome del tool:TaskGet
null quando l’ID non viene trovato.
TaskList
Nome del tool:TaskList
ExitPlanMode
Nome del tool:ExitPlanMode
allowedPrompts è deprecato e ignorato; Claude Code lo accetta comunque in modo che i chiamanti e i transcript esistenti siano validi. Prima di v2.1.205, richiedeva permessi Bash basati su prompt per implementare il piano.
ListMcpResources
Nome del tool:ListMcpResourcesTool
ReadMcpResource
Nome del tool:ReadMcpResourceTool
EnterWorktree
Nome del tool:EnterWorktree
path per passare a un worktree esistente invece di crearne uno nuovo. Su primo ingresso il target deve essere un worktree registrato del repository corrente o, in uno spazio di lavoro multi-repo, di un repository annidato al suo interno; da una sessione worktree deve essere sotto .claude/worktrees/ del repository della sessione. name e path si escludono a vicenda.
Tipi di output dei tool
Documentazione degli schemi di output per tutti i tool Claude Code incorporati. Questi tipi vengono esportati da@anthropic-ai/claude-agent-sdk e rappresentano i dati di risposta effettivi restituiti da ogni tool.
ToolOutputSchemas
Unione di tutti i tipi di output dei tool.
Agent
Nome del tool:Agent (precedentemente Task, che è ancora accettato come alias)
status: "completed" per le attività finite, "async_launched" per le attività di background, e "remote_launched" per le attività che Claude Code ha inviato a una sessione cloud remota, dove sessionUrl si collega a quella sessione e taskId l’identifica.
Il campo resolvedModel sulle varianti completed e async_launched nomina il modello su cui il subagente ha effettivamente eseguito, 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 completed, worktreePath viene impostato quando il subagente è stato eseguito in un worktree git isolato, e worktreeBranch nomina il ramo di quel worktree quando Claude Code l’ha creato. usage.service_tier contiene la stringa del livello di servizio che l’API ha segnalato per le richieste del subagente.
Prima della v2.1.207, il tipo pubblicato era più ristretto. Ometteva worktreePath, worktreeBranch, citations, toolStats.frameCount, e i campi di utilizzo inference_geo, speed e iterations, e tipizzava service_tier come "standard" | "priority" | "batch". I campi che il tipo contrassegna come opzionali possono essere assenti nei risultati registrati da versioni precedenti.
AskUserQuestion
Nome del tool:AskUserQuestion
response viene impostato quando l’utente ha digitato una risposta in forma libera invece di rispondere alle domande strutturate; quando presente, Claude riceve “L’utente ha risposto: …” invece dell’elenco di risposte per domanda.
Bash
Nome del tool:Bash
backgroundTaskId.
Monitor
Nome del tool:Monitor
TaskStop per annullare il watch in anticipo.
Edit
Nome del tool:Edit
Read
Nome del tool:Read
type.
Write
Nome del tool:Write
Glob
Nome del tool:Glob
Grep
Nome del tool:Grep
mode: elenco di file, contenuto con corrispondenze o conteggi di corrispondenze.
TaskStop
Nome del tool:TaskStop
NotebookEdit
Nome del tool:NotebookEdit
WebFetch
Nome del tool:WebFetch
WebSearch
Nome del tool:WebSearch
Workflow
Nome del tool:Workflow
error prima di trattare l’esecuzione come avviata: uno script che non supera il controllo della sintassi restituisce status: "async_launched" con error impostato e non viene mai eseguito.
TodoWrite
Nome del tool:TodoWrite
A partire da TypeScript Agent SDK 0.3.142,
TodoWrite è disabilitato per impostazione predefinita. Usa invece TaskCreate, TaskGet, TaskUpdate e TaskList. Vedi Migrazione ai tool Task per aggiornare il tuo codice di monitoraggio, oppure imposta CLAUDE_CODE_ENABLE_TASKS=0 per ripristinare TodoWrite.TaskCreate
Nome del tool:TaskCreate
TaskUpdate
Nome del tool:TaskUpdate
TaskGet
Nome del tool:TaskGet
null quando l’ID non viene trovato.
TaskList
Nome del tool:TaskList
ExitPlanMode
Nome del tool:ExitPlanMode
ListMcpResources
Nome del tool:ListMcpResourcesTool
ReadMcpResource
Nome del tool:ReadMcpResourceTool
EnterWorktree
Nome del tool:EnterWorktree
Tipi di permesso
PermissionUpdate
Operazioni per l’aggiornamento dei permessi.
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
Altri tipi
ApiKeySource
SdkBeta
Funzioni beta disponibili che possono essere abilitate tramite l’opzione betas. Vedi Intestazioni beta per ulteriori informazioni.
SlashCommand
Informazioni su un comando slash disponibile.
ModelInfo
Informazioni su un modello disponibile.
AgentInfo
Informazioni su un subagente disponibile che può essere invocato tramite il tool Agent.
McpServerStatus
Stato di un server MCP connesso.
McpServerStatusConfig
La configurazione di un server MCP come segnalato da mcpServerStatus(). Questa è l’unione di tutti i tipi di trasporto del server MCP.
McpServerConfig per i dettagli su ogni tipo di trasporto.
AccountInfo
Informazioni sull’account per l’utente autenticato.
ModelUsage
Statistiche di utilizzo per modello restituite nei messaggi di risultato. Il valore costUSD è una stima lato client. Vedi Traccia costo e utilizzo per le avvertenze di fatturazione.
ConfigScope
NonNullableUsage
Una versione di Usage con tutti i campi nullable resi non-nullable.
Usage
Statistiche di utilizzo dei token. Questo è il tipo BetaUsage da @anthropic-ai/sdk.
BetaServerToolUsage e BetaIterationsUsage sono definiti in @anthropic-ai/sdk.
CallToolResult
Tipo di risultato del tool MCP (da @modelcontextprotocol/sdk/types.js). structuredContent è un oggetto JSON che può essere restituito insieme a content, inclusi blocchi di immagini. Vedi Restituisci dati strutturati.
ThinkingConfig
Controlla il comportamento di pensiero/ragionamento di Claude. Ha precedenza sul deprecato maxThinkingTokens.
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 nei blocchi thinking.
SpawnedProcess
Interfaccia per la generazione di processi personalizzati (usata con l’opzione spawnClaudeCodeProcess). ChildProcess soddisfa già questa interfaccia.
SpawnOptions
Opzioni passate alla funzione di generazione personalizzata.
Il campo
signal comunica alla tua funzione di generazione quando smontare il processo. Passalo come opzione signal al spawn() di Node, oppure passalo al tuo gestore di smontaggio della VM o del contenitore.Questo segnale non si attiva nell’istante in cui Options.abortController si interrompe. L’SDK prima chiude lo stdin del processo e attende circa due secondi affinché la CLI si arresti correttamente, quindi interrompe questo segnale. Per reagire nel momento in cui il chiamante si interrompe, ascolta il tuo Options.abortController.signal, che la tua funzione di generazione può referenziare dal suo ambito di chiusura.McpSetServersResult
Risultato di un’operazione setMcpServers().
RewindFilesResult
Risultato di un’operazione rewindFiles().
SDKStatusMessage
Messaggio di aggiornamento dello stato (ad esempio, compattazione).
SDKTaskNotificationMessage
Notifica quando un’attività di background si completa, fallisce o viene interrotta. Le attività di background includono i comandi Bash run_in_background, i watch Monitor e i subagenti di background.
SDKToolUseSummaryMessage
Riepilogo dell’uso dei tool in una conversazione.
SDKHookStartedMessage
Emesso quando un hook inizia l’esecuzione.
Claude Code fornisce questo messaggio, SDKHookProgressMessage, e SDKHookResponseMessage al flusso di messaggi immediatamente, incluso mentre un hook SessionStart o Setup è ancora in esecuzione durante l’avvio della sessione. Claude Code v2.1.169 attraverso v2.1.203 ha fornito questi messaggi in un batch dopo che un hook SessionStart o Setup era completato; v2.1.204 ha ripristinato la consegna dal vivo.
SDKHookProgressMessage
Emesso mentre un hook è in esecuzione, con output stdout/stderr.
SDKHookResponseMessage
Emesso quando un hook finisce l’esecuzione.
SDKToolProgressMessage
Emesso periodicamente mentre un tool è in esecuzione per indicare il progresso.
SDKAuthStatusMessage
Emesso durante i flussi di autenticazione.
SDKTaskStartedMessage
Emesso quando un’attività di background inizia. Il campo task_type è "local_bash" per i comandi Bash di background e i watch Monitor, "local_agent" per i subagenti, o "remote_agent".
SDKTaskProgressMessage
Emesso periodicamente mentre un subagente o un’attività di background è in esecuzione. Il campo summary è popolato solo quando agentProgressSummaries è abilitato.
SDKTaskUpdatedMessage
Emesso quando lo stato di un’attività di background cambia, ad esempio quando passa da running a completed. Unisci patch nella tua mappa attività locale con chiave task_id. Il campo end_time è un timestamp Unix epoch in millisecondi, confrontabile con Date.now().
SDKBackgroundTasksChangedMessage
Emesso ogni volta che l’insieme delle attività di background attive cambia: un’attività inizia, si completa, viene terminata, o un agente in primo piano viene messo in background. L’array tasks è l’insieme completo attivo. Sostituisci qualsiasi insieme memorizzato nella cache con ogni payload invece di abbinare gli eventi task_started e task_notification, in modo che il prossimo cambio di appartenenza corregga qualsiasi evento che hai perso.
L’ordine relativo a quegli eventi per attività è non specificato, quindi non correlare i due flussi.
Nulla viene emesso all’avvio. Reimposta a un insieme vuoto ogni volta che il processo CLI della sessione inizia o si riavvia e lascia che il prossimo cambio di appartenenza lo ripopoli.
Richiede Claude Code v2.1.203 o successivo.
SDKThinkingTokensMessage
Emesso mentre Claude sta producendo un blocco di pensiero, incluso uno redatto, con una stima in esecuzione dei token di pensiero generati finora. estimated_tokens è il totale in esecuzione per il blocco di pensiero corrente e estimated_tokens_delta è l’incremento portato da questo frame. Usalo per la visualizzazione del progresso. Il conteggio finale per il ciclo dell’agente di primo livello è il usage.output_tokens del messaggio di risultato, che non include i token dei subagenti; usa modelUsage per la contabilità dell’intero albero.
Richiede Claude Code v2.1.153 o successivo.
SDKFilesPersistedEvent
Emesso quando i checkpoint dei file vengono persistiti su disco.
SDKRateLimitEvent
Emesso quando la sessione incontra un limite di velocità.
errorCode è "credits_required", il rifiuto proviene da un abbonamento claude.ai il cui utilizzo incluso è esaurito, e la sessione non può continuare fino a quando l’utente non acquista crediti di utilizzo. canUserPurchaseCredits indica se l’utente autenticato può acquistare crediti per l’account, e hasChargeableSavedPaymentMethod indica se un metodo di pagamento salvato è registrato. Tutti e tre i campi sono assenti negli eventi di limite di velocità che non sono rifiuti con crediti richiesti. Richiede Claude Code v2.1.181 o successivo.
SDKLocalCommandOutputMessage
Output da un comando slash locale (ad esempio, /voice o /usage). Visualizzato come testo in stile assistente nella trascrizione.
SDKCommandsChangedMessage
Emesso quando l’insieme dei comandi disponibili cambia durante la sessione, ad esempio quando le skill vengono scoperte mentre l’agente entra in una sottodirectory. L’array commands è l’elenco completo aggiornato, quindi sostituisci qualsiasi elenco di comandi memorizzato nella cache con questo payload. Chiamare di nuovo supportedCommands() non è equivalente: quel metodo restituisce lo snapshot acquisito all’inizializzazione e non riflette i cambiamenti durante la sessione.
SDKPromptSuggestionMessage
Emesso dopo ogni turno quando promptSuggestions è abilitato. Contiene un prompt utente successivo previsto.
SDKConversationResetMessage
Emesso quando la conversazione della sessione viene sostituita senza terminare la sessione, ad esempio dopo /clear, all’uscita dalla modalità piano, o quando inizia una conversazione nuova. Monta una trascrizione vuota sotto new_conversation_id e scarta qualsiasi titolo di sessione memorizzato nella cache.
SDKConversationResetMessage in Claude Code v2.1.203 e successivo. Prima di v2.1.203, SDKMessage faceva riferimento al tipo senza dichiararlo, quindi il restringimento su type === "conversation_reset" non riusciva a typecheck quando skipLibCheck era disabilitato.
AbortError
Classe di errore personalizzata per le operazioni di interruzione.
Configurazione della sandbox
SandboxSettings
Configurazione per il comportamento della sandbox. Usa questo 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. Quando enabled è true e la sandbox non può avviarsi, query() segnala un messaggio result con subtype: "error_during_execution" e il motivo in errors. Per 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 eseguire senza sandbox, imposta failIfUnavailable: false.Esempio di utilizzo
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 permesso.
Il proxy sandbox integrato applica
allowedDomains 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.SandboxFilesystemConfig
Configurazione specifica del filesystem per la modalità sandbox.
Fallback dei permessi per i comandi senza sandbox
QuandoallowUnsandboxedCommands è abilitato, il modello può richiedere di eseguire comandi al di fuori della sandbox impostando dangerouslyDisableSandbox: true nell’input del tool. Queste richieste ricadono nel sistema di permessi esistente, il che significa che il tuo handler canUseTool viene invocato, permettendoti di implementare la logica di autorizzazione personalizzata. Nell’esempio seguente, isCommandAuthorized rappresenta un controllo di autorizzazione che definisci.
excludedCommands vs allowUnsandboxedCommands:excludedCommands: Un elenco statico di comandi che sempre bypassano la sandbox automaticamente (ad esempio,['docker']). Il modello non ha controllo su questo.allowUnsandboxedCommands: Consenti al modello di decidere in fase di esecuzione se richiedere l’esecuzione senza sandbox impostandodangerouslyDisableSandbox: truenell’input del tool.
- Controllare le richieste del modello: Registra quando il modello richiede l’esecuzione senza sandbox
- Implementare allowlist: Consenti solo comandi specifici di essere eseguiti senza sandbox
- Aggiungere flussi di lavoro di approvazione: Richiedi l’autorizzazione esplicita per le operazioni privilegiate
Vedi anche
- Panoramica dell’SDK - Concetti generali dell’SDK
- Riferimento Python SDK - Documentazione dell’SDK Python
- Riferimento CLI - Interfaccia della riga di comando
- Flussi di lavoro comuni - Guide passo dopo passo