Vai al contenuto principale

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 con bun 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 oggetto Query 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 una Promise<WarmQuery> che si risolve una volta che il subprocess è stato generato e ha completato il suo handshake di inizializzazione.

Esempio

Chiama startup() 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 per lastModified 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’opzione env:
  • API_TIMEOUT_MS: timeout per richiesta sul client Anthropic, in millisecondi. Predefinito 600000. Si applica al loop principale e a tutti i subagenti.
  • CLAUDE_CODE_MAX_RETRIES: numero massimo di tentativi API. Predefinito 10, limitato a 15. Ogni tentativo ottiene la propria finestra API_TIMEOUT_MS, quindi il tempo wall case peggiore è approssimativamente API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) più backoff. Per esecuzioni incustodite che devono attendere attraverso interruzioni più lunghe, imposta CLAUDE_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 a 300 e rimuove il limite su questa variabile.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog di blocco per i subagenti lanciati con run_in_background. Predefinito 600000. 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_WATCHDOG con CLAUDE_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; imposta CLAUDE_ENABLE_STREAM_WATCHDOG=0 per disabilitarlo. CLAUDE_STREAM_IDLE_TIMEOUT_MS predefinito a 300000 ed è 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. Cambiare agent applica 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.
Quando un client invia 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.
La ricevuta è uno snapshot scattato nel momento in cui l’interruzione viene elaborata, e su un’interruzione pulita arriva prima del 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.
Dove McpServerConfigForProcessTransport è McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.

SettingSource

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

Comportamento predefinito

Quando settingSources è 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:
Carica tutte le impostazioni del filesystem esplicitamente:
Carica solo fonti di impostazioni specifiche:
Ambienti di test e CI:
Applicazioni solo SDK:
Caricamento delle istruzioni del progetto CLAUDE.md:

Precedenza delle impostazioni

Quando più fonti vengono caricate, le impostazioni vengono unite con questa precedenza (più alta a più bassa):
  1. Impostazioni locali (.claude/settings.local.json)
  2. Impostazioni del progetto (.claude/settings.json)
  3. Impostazioni dell’utente (~/.claude/settings.json)
Le opzioni programmatiche come 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:
Per informazioni complete sulla creazione e l’uso dei plugin, vedi Plugins.

Tipi di messaggio

SDKMessage

Tipo di unione di tutti i possibili messaggi restituiti dalla query.

SDKAssistantMessage

Messaggio di risposta dell’assistente.
Il campo 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.
Imposta 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.
Un turno utente iniettato dall’esterno della sessione, uno il cui 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.
Diversi campi sul risultato contengono dettagli diagnostici oltre a subtype:
  • api_error_status: il codice di stato HTTP dell’errore API che ha terminato la conversazione. Assente o null quando 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 flusso message_start, quando il flusso di risposta si apre. Inferiore a ttft_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".
Il campo 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.
L’array 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.
Il campo 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)
Avvia un nuovo agente per gestire compiti complessi e multi-step in modo autonomo.

AskUserQuestion

Nome del tool: AskUserQuestion
Pone domande di chiarimento all’utente durante l’esecuzione. Vedi Gestisci approvazioni e input dell’utente per i dettagli di utilizzo.

Bash

Nome del tool: Bash
Esegue comandi bash in una sessione shell persistente con timeout opzionale ed esecuzione in background.

Monitor

Nome del tool: Monitor
Esegue una fonte di background e consegna 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 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
Recupera l’output da un’attività di background in esecuzione o completata.

Edit

Nome del tool: Edit
Esegue sostituzioni di stringhe esatte nei file.

Read

Nome del tool: Read
Legge i file dal filesystem locale, inclusi testo, immagini, PDF e notebook Jupyter. Usa pages per gli intervalli di pagine PDF (ad esempio, "1-5").

Write

Nome del tool: Write
Scrive un file nel filesystem locale, sovrascrivendo se esiste.

Glob

Nome del tool: Glob
Corrispondenza di pattern di file veloce che funziona con qualsiasi dimensione di codebase.

Grep

Nome del tool: Grep
Potente tool di ricerca costruito su ripgrep con supporto regex.

TaskStop

Nome del tool: TaskStop
Interrompe un’attività di background o shell in esecuzione per ID. A partire da v2.1.198, 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
Modifica le celle nei file dei notebook Jupyter.

WebFetch

Nome del tool: WebFetch
Recupera il contenuto da un URL e lo elabora con un modello AI.

WebSearch

Nome del tool: WebSearch
Cerca il web e restituisce risultati formattati.

Workflow

Nome del tool: Workflow
Esegue un workflow dinamico: uno script che orchestra molti subagenti in background e restituisce un risultato consolidato. Il tool Workflow è disponibile in Agent SDK v0.3.149 e versioni successive. Almeno uno tra script, name o scriptPath è obbligatorio.

TodoWrite

Nome del tool: TodoWrite
Crea e gestisce un elenco di attività strutturato per il tracciamento del progresso.
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
Crea un singolo compito e restituisce il suo ID assegnato.

TaskUpdate

Nome del tool: TaskUpdate
Applica patch a un compito per ID. Imposta status a "deleted" per rimuoverlo.

TaskGet

Nome del tool: TaskGet
Restituisce i dettagli completi per un compito, o null quando l’ID non viene trovato.

TaskList

Nome del tool: TaskList
Restituisce uno snapshot di tutti i compiti nell’elenco corrente.

ExitPlanMode

Nome del tool: ExitPlanMode
Esce dalla modalità di pianificazione. Il campo 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
Elenca le risorse MCP disponibili dai server connessi.

ReadMcpResource

Nome del tool: ReadMcpResourceTool
Legge una risorsa MCP specifica da un server.

EnterWorktree

Nome del tool: EnterWorktree
Crea e entra in un worktree git temporaneo per il lavoro isolato. Passa 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)
Restituisce il risultato dal subagente. Discriminato sul campo 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
Restituisce le domande poste e le risposte dell’utente. 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
Restituisce l’output del comando con stdout/stderr divisi. I comandi di background includono un backgroundTaskId.

Monitor

Nome del tool: Monitor
Restituisce l’ID dell’attività di background per il monitor in esecuzione. Usa questo ID con TaskStop per annullare il watch in anticipo.

Edit

Nome del tool: Edit
Restituisce il diff strutturato dell’operazione di modifica.

Read

Nome del tool: Read
Restituisce il contenuto del file in un formato appropriato al tipo di file. Discriminato sul campo type.

Write

Nome del tool: Write
Restituisce il risultato della scrittura con informazioni sul diff strutturato.

Glob

Nome del tool: Glob
Restituisce i percorsi dei file che corrispondono al pattern glob, ordinati per tempo di modifica.

Grep

Nome del tool: Grep
Restituisce i risultati della ricerca. La forma varia in base a mode: elenco di file, contenuto con corrispondenze o conteggi di corrispondenze.

TaskStop

Nome del tool: TaskStop
Restituisce la conferma dopo l’interruzione dell’attività di background.

NotebookEdit

Nome del tool: NotebookEdit
Restituisce il risultato della modifica del notebook con i contenuti del file originale e aggiornato.

WebFetch

Nome del tool: WebFetch
Restituisce il contenuto recuperato con lo stato HTTP e i metadati.

WebSearch

Nome del tool: WebSearch
Restituisce i risultati della ricerca dal web.

Workflow

Nome del tool: Workflow
Restituisce immediatamente dopo che il tool accetta l’invocazione. Il risultato finale arriva successivamente come completamento di un’attività. Controlla 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
Restituisce gli elenchi di attività precedenti e aggiornati.
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
Restituisce l’attività creata con il suo ID assegnato.

TaskUpdate

Nome del tool: TaskUpdate
Restituisce il risultato dell’aggiornamento, inclusi i campi che sono stati modificati.

TaskGet

Nome del tool: TaskGet
Restituisce il record completo dell’attività, o null quando l’ID non viene trovato.

TaskList

Nome del tool: TaskList
Restituisce uno snapshot di tutte le attività nell’elenco corrente.

ExitPlanMode

Nome del tool: ExitPlanMode
Restituisce lo stato del piano dopo l’uscita dalla modalità di pianificazione.

ListMcpResources

Nome del tool: ListMcpResourcesTool
Restituisce un array di risorse MCP disponibili.

ReadMcpResource

Nome del tool: ReadMcpResourceTool
Restituisce i contenuti della risorsa MCP richiesta.

EnterWorktree

Nome del tool: EnterWorktree
Restituisce le informazioni sul worktree git.

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.
La beta context-1m-2025-08-07 è ritirata a partire dal 30 aprile 2026. Passare questo valore con Claude Sonnet 4.5 o Sonnet 4 non ha effetto, e le richieste che superano la finestra di contesto standard di 200k token restituiscono un errore. Per usare una finestra di contesto di 1M token, esegui la migrazione a Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Opus 4.7, o Claude Opus 4.8, che includono 1M di contesto ai prezzi standard senza intestazione beta richiesta.

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.
Vedi 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.
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 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à.
Quando 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.
I tipi pubblicati dall’SDK dichiarano 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

Sicurezza del socket Unix: L’opzione allowUnixSockets può concedere l’accesso a potenti servizi di sistema. 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 ciascuno.

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

Quando allowUnsandboxedCommands è 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 impostando dangerouslyDisableSandbox: true nell’input del tool.
Questo pattern ti consente di:
  • 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
I comandi in esecuzione con dangerouslyDisableSandbox: true hanno accesso completo al sistema. Assicurati che il tuo handler canUseTool convalidi queste richieste attentamente.Se permissionMode è impostato su bypassPermissions e allowUnsandboxedCommands è abilitato, il modello può autonomamente eseguire comandi al di fuori della sandbox senza alcun prompt di approvazione (una regola ask esplicita ne forza comunque una). Questa combinazione consente effettivamente al modello di sfuggire all’isolamento della sandbox silenziosamente.

Vedi anche