Skip to main content

Installazione

L’SDK raggruppa un binario nativo Claude Code per la tua piattaforma come dipendenza opzionale come @anthropic-ai/claude-agent-sdk-darwin-arm64. La maggior parte delle installazioni non necessita di un’installazione separata di Claude Code. La versione dell’SDK traccia la versione del Claude Code raggruppato. SDK v0.3.191 raggruppa Claude Code v2.1.191, quindi una funzione su questa pagina che richiede una versione di Claude Code necessita della versione SDK con lo stesso numero di patch o successivo. Se il tuo gestore di pacchetti salta le dipendenze opzionali, l’SDK genera Native CLI binary for <platform>-<arch> not found; imposta pathToClaudeCodeExecutable su un binario claude installato separatamente.Se il tuo gestore di pacchetti non applica il campo libc di npm, come non fa Yarn 1.x, ottieni sia i pacchetti della piattaforma glibc che musl su Linux, raddoppiando approssimativamente la dimensione dell’installazione. Su Agent SDK v0.2.141 o successivo, l’SDK avvia comunque la variante corretta. Per recuperare lo spazio in un’immagine contenitore, elimina il pacchetto della piattaforma che non corrisponde al libc dove viene eseguita la tua app; per un runtime glibc su x64, è rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl. Su una macchina di sviluppo l’eliminazione è temporanea, poiché Yarn reinstalla il pacchetto al prossimo cambio di dipendenza.

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>-<arch> 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.
Lo snapshot differisce da quello che una sessione query() live applica:
  • policyHelper: resolveSettings() legge le fonti MDM, inclusi plist macOS e Windows HKLM/HKCU, ma non esegue il subprocess policyHelper configurato dall’amministratore.
  • Impostazioni gestite dal server: resolveSettings() non recupera impostazioni gestite dal server. Passale come options.serverManagedSettings per includerle.
  • defaultMode: lo snapshot restituisce permissions.defaultMode così com’è da ogni livello, quindi può includere i valori 'auto' e 'bypassPermissions' dalle impostazioni di progetto e locali, che una sessione live ignora.

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. Su una macchina dove nessun file di impostazioni imposta cleanupPeriodDays, entrambe le righe stampate mostrano undefined per il valore, che è l’output previsto piuttosto che un errore.

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à transitori indefinitamente e, su Claude Code v2.1.199 o successivo, 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. Mentre il watchdog di stream è attivo, il predefinito è CLAUDE_STREAM_IDLE_TIMEOUT_MS più 5 minuti, che arriva a 600000 a meno che non aumenti quella variabile. Con il watchdog di stream spento, il predefinito è 600000. Prima di v2.1.257, il predefinito era sempre 600000. Il timer si ripristina su ogni evento di stream. Al blocco, Claude Code interrompe il subagente e segnala il blocco al genitore. Per un subagente in background, contrassegna anche l’attività come fallita e allega qualsiasi risultato parziale.
  • CLAUDE_ENABLE_STREAM_WATCHDOG con CLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog di stream 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; imposta CLAUDE_ENABLE_STREAM_WATCHDOG=0 per disabilitarlo. CLAUDE_STREAM_IDLE_TIMEOUT_MS predefinito a 300000 ed è limitato 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 dietro ANTHROPIC_BASE_URL tiene aperta con ping keep-alive, un host che imposta includePartialMessages continua a ricevere eventi di ping stream, quindi leggi questi 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 stream reale.

Oggetto Query

Interfaccia restituita dalla funzione query().

Metodi

applyFlagSettings()

Cambia impostazioni 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: effortLevel, ultracode, permissions, hooks, skillOverrides, fastMode, agent. Cambiare agent applica anche l’override del modello di quell’agente e gli hook al turno successivo. Il suo prompt di sistema si applica al turno successivo, o, in una sessione che riutilizza un prompt di sistema registrato, una volta che la sessione è compattata.
  • Applicate durante il turno corrente: model. Se cambi model mentre Claude sta lavorando su un turno, la risposta che Claude sta già generando finisce sul vecchio modello, e il resto del turno, a partire dalla prossima chiamata che Claude Code fa al modello, usa quello nuovo. I subagenti mantengono il loro modello. Prima di v2.1.212, un cambio a metà turno attendeva il 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 richiede sforzo xhigh con ultracode attivo. applyFlagSettings() 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. 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.
hooks_applied segnala se Claude Code ha registrato gli hooks che la richiesta initialize ha trasportato. L’SDK invia quella richiesta una volta quando la sessione inizia e di nuovo su ogni chiamata reinitialize(). Il campo richiede Agent SDK v0.3.238 o successivo. Claude Code omette il campo quando la richiesta non ha trasportato hook. Quando la richiesta ha trasportato hook, il valore dipende dal fatto che sia la prima inizializzazione della sessione e, per una ripetuta, da come ha raggiunto la sessione:
  • true: Claude Code ha registrato gli hook. Una prima inizializzazione della sessione restituisce questo valore. Un’inizializzazione ripetuta inviata sullo stdin della CLI restituisce anche true. In quel caso gli hook nella nuova richiesta sostituiscono gli hook registrati in precedenza.
  • false: Claude Code ha ignorato gli hook. Un’inizializzazione ripetuta inviata a una sessione remota restituisce questo valore, quindi un secondo client che si unisce a una sessione non può sostituire gli hook che il primo client ha registrato.
Prima di Agent SDK v0.3.238, la risposta non ha mai trasportato il campo, e Claude Code ha ignorato hooks su ogni inizializzazione ripetuta. La risposta sempre segnala fast_mode_state, e quando qualcosa blocca fast mode, fast_mode_disabled_reason trasporta il codice di motivo insieme ad esso, in modo che tu possa spiegare lo stato bloccato invece di ri-derivare la disponibilità. Entrambi i comportamenti richiedono Claude Code v2.1.219 o successivo. Prima di v2.1.219, la risposta ometteva fast_mode_state quando fast mode non era disponibile e non trasportava mai un motivo. Per i codici di motivo e i loro significati, vedi fast_mode_disabled_reason sul messaggio di risultato. Il wrapper di risposta di controllo per un initialize riuscito trasporta anche un array pending_permission_requests. 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. L’array elenca le richieste di permesso che questo processo Claude Code ha emesso e non ancora risolto. 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. L’array è sempre presente su una risposta initialize riuscita ed è vuoto quando questo processo non ha alcuna richiesta di permesso non risolta. Richiede Claude Code v2.1.268 o successivo. Le versioni precedenti potrebbero omettere il campo, quindi se analizzi il protocollo wire tu stesso, tratta un campo mancante come una CLI più vecchia piuttosto che come prova che nulla è in sospeso.

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 erano in sospeso quando l’interruzione è arrivata: messaggi ancora nella coda, più qualsiasi messaggio Claude Code aveva già tolto dalla coda per il turno successivo. Una volta che il primo turno della sessione ha iniziato, Claude Code elabora i messaggi elencati dopo l’interruzione a meno che non li annulli per primo, e può unire diversi in un turno. Se interrompi prima che il primo turno inizi, Claude Code interrompe quel turno non appena inizia, e i messaggi elencati in quel turno non ricevono risposta. Usa la ricevuta per decidere se rinviare qualcosa. Un messaggio elencato che non annulli entra nella conversazione indipendentemente dal fatto che riceva una risposta, quindi rinviarlo lo consegna a Claude due volte. 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.
Un client che guida il protocollo di controllo della CLI direttamente, piuttosto che tramite interrupt(), può impostare cancel_queued: true sulla richiesta di controllo interrupt. Claude Code v2.1.219 e successivo pubblicizza il supporto con la capacità interrupt_cancel_queued_v1 in SDKSystemMessage.capabilities; le CLI più vecchie ignorano il campo e lasciano i messaggi in coda per funzionare come al solito. Un tale interruzione cancella anche ogni messaggio che altrimenti sarebbe elencato sotto still_queued: la ricevuta li elenca sotto cancelled invece, still_queued è vuoto, e nessuno di loro viene eseguito. L’elenco cancelled trasporta gli stessi avvertimenti di still_queued. Il metodo interrupt() non invia mai cancel_queued, quindi le ricevute che si risolve non trasportano cancelled. 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.

SDKControlGetContextUsageResponse

Tipo di ritorno di getContextUsage(). Con il detail predefinito, questo è lo stesso payload che Claude Code renderizza per il comando /context in una sessione interattiva, quindi insieme ai conteggi di token trasporta campi di visualizzazione come color e gridRows che Claude Code usa per disegnare la griglia di utilizzo /context. L’argomento detail opzionale del metodo sceglie come Claude Code conta ogni categoria. Con il predefinito, 'full', Claude Code conta ogni categoria con richieste API di conteggio dei token. Passa { detail: 'summary' } per ottenere una risposta dall’utilizzo dell’ultima risposta e dalle stime locali. Nessuna richiesta di conteggio dei token esce, e i numeri per categoria sono approssimativi. L’argomento detail richiede Agent SDK v0.3.257 o successivo. Quando invii /context come prompt invece di chiamare il metodo, Claude Code allega un payload SDKContextUsage al campo context_usage del messaggio dell’assistente che consegna il risultato. Quel campo richiede Agent SDK v0.3.232 o successivo.
Leggi l’attribuzione dei token dalle raccolte di campi:
  • categories contiene i totali per categoria.
  • mcpTools e agents attribuiscono i token ai singoli tool MCP e subagenti.
  • memoryFiles elenca ogni file di memoria caricato con il suo costo.
  • skills.skillFrontmatter attribuisce i token della lista di skill a ogni skill inclusa. I conteggi per skill misurano ogni voce di lista di skill come Claude Code effettivamente la invia, che può essere più breve del frontmatter completo della skill. Confronta skills.totalSkills con skills.includedSkills per vedere se ogni skill scoperta ha fatto nella lista.
totalTokens è l’utilizzo di contesto corrente della sessione, e maxTokens è la finestra rispetto alla quale l’utilizzo viene misurato. Quella finestra è la finestra di contesto del modello, o la finestra di auto-compattazione inferiore quando una si applica. rawMaxTokens trasporta lo stesso valore di maxTokens, e percentage è totalTokens come percentuale arrotondata di quella finestra. Claude Code lascia i diagnostici opzionali deferredBuiltinTools, systemTools, e systemPromptSections non impostati, quindi aspettati che siano assenti anche se il tipo li dichiara.

SDKControlReadFileResponse

Tipo di ritorno di readFile().
contents contiene il testo del file, o dati base64 quando hai richiesto encoding: 'base64'; il campo encoding della risposta è impostato a 'base64' in quel caso. absPath è il percorso assoluto risolto. truncated è impostato quando il file era più lungo del limite maxBytes e i contenuti sono stati tagliati a quel limite.

Cosa readFile() può leggere

readFile() serve un insieme più ristretto di file rispetto allo strumento Read:
  • Un file regolare all’interno di una delle directory di lavoro della sessione, come cwd e additionalDirectories
  • Alcuni dei file di Claude Code stesso per la sessione, come i risultati dei tool
Le regole di negazione e richiesta di Read bloccano comunque un percorso corrispondente, e una regola di autorizzazione Read ampia non apre il resto del filesystem a readFile(). Per qualsiasi altra cosa la chiamata si risolve con null.

SDKControlReloadSkillsResponse

Tipo di ritorno di reloadSkills().
skills elenca le skill disponibili dopo il ricaricamento, nella stessa forma SlashCommand che supportedCommands() restituisce.

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. 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 solo fonti di impostazioni specifiche:
Per caricare le istruzioni del progetto CLAUDE.md, includi "project" in settingSources. 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 (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. Una regola di autorizzazione non pre-approva le azioni che nessuna modalità auto-approva; vedi Come i permessi vengono valutati per quali di loro raggiungono il callback e cosa succede in modalità dontAsk e auto.
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', 'account_on_hold', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', 'cloud_credential_error', o 'unknown'. Quattro di questi valori significano più di quanto i loro nomi dicono:
  • 'model_not_found': il modello selezionato non esiste o non è disponibile per il tuo account o deployment
  • 'overloaded': 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
  • 'account_on_hold': il tuo account è in sospeso
  • 'cloud_credential_error': Claude Code non ha potuto ottenere credenziali AWS o Google Cloud utilizzabili sulla macchina su cui viene eseguito, quindi nessuna richiesta ha raggiunto il provider cloud. La causa solita è un accesso al cloud scaduto o mai completato su quella macchina, anche se un servizio di credenziali brevemente irraggiungibile segnala lo stesso valore. Vedi Impossibile caricare le credenziali AWS o Google Cloud. Richiede TypeScript Agent SDK v0.3.267 o successivo, che raggruppa Claude Code v2.1.267
aborted è true quando un’interruzione o un’interruzione ha troncato il messaggio dell’assistente prima del completamento del flusso: il messaggio non ha stop_reason e il contenuto può terminare a metà parola. Il campo è assente sui messaggi completati normalmente. Richiede Agent SDK v0.3.214 o successivo. Claude Code imposta user_message_uuid e user_message_uuids sul primo messaggio dell’assistente del turno, secondo le condizioni in user_message_uuid. timestamp è l’ora ISO 8601 quando il contenuto del messaggio ha finito di generarsi sul processo che lo ha prodotto. Il valore proviene dall’orologio di quella macchina, quindi usalo solo per la visualizzazione e non ordinare i messaggi per esso. Un turno API può produrre diversi messaggi dell’assistente che condividono un message.id, ciascuno con il proprio timestamp. Quando il campo è assente, ricadi al momento in cui hai ricevuto il messaggio. context_usage è una copia strutturata del rapporto /context, tipizzata come SDKContextUsage, e richiede Agent SDK v0.3.232 o successivo. Quando invii /context come prompt, Claude Code consegna il rapporto come messaggio dell’assistente il cui message.content contiene la tabella markdown, e allega context_usage a quello stesso messaggio. Claude Code non imposta il campo su nessun altro messaggio dell’assistente, e le versioni precedenti consegnano la tabella /context senza di esso, quindi leggi la suddivisione dal campo quando è presente e ricadi al testo markdown quando non lo è.

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. Per uno strumento MCP il cui risultato contiene blocchi resource_link, tool_use_result è un oggetto con un array resourceLinks di voci SDKMcpResourceLink. Claude riceve ogni link come una riga di testo nel blocco tool_result, quindi leggi resourceLinks per rendere i file che il server ha restituito invece di analizzare quel testo. Claude Code omette resourceLinks quando il risultato non ha link e sui risultati dei subagenti, mantiene al massimo 50 link per risultato, e smette di aggiungere link una volta che l’array raggiunge 64 KiB di JSON serializzato. resourceLinks richiede Agent SDK v0.3.257 o successivo.

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.
  • user_message_uuid: l’uuid del messaggio che hai inviato a cui questo turno ha risposto. Vedi user_message_uuid per quali risultati lo contengono.
  • user_message_uuids: gli uuid di ogni messaggio che hai inviato a cui Claude Code ha risposto in questo turno. Vedi user_message_uuids.
  • request_sent_wall_ms: millisecondi di epoca in cui Claude Code ha inviato la richiesta API, per join rispetto ai timestamp lato server. Presente solo insieme a user_message_uuid, su un risultato di successo con is_error false il cui turno ha inviato una richiesta API.
  • first_content_frame_ms: tempo in millisecondi fino al primo evento di flusso content_block_start o content_block_delta, contando i blocchi di pensiero come contenuto. Presente sul ramo di successo solo, quando is_error è false. Richiede Agent SDK v0.3.260 o successivo.
  • first_stream_post_ms, first_stream_post_ack_ms, first_stream_post_wall_ms: tempi per il caricamento del primo evento di flusso del turno. Claude Code li registra solo nelle sessioni che trasmette a claude.ai, come sessioni cloud, e i risultati che query() produce non li contengono. Richiede Agent SDK v0.3.260 o successivo.
  • usage: solo ciclo agente principale. Esclude le chiamate di subagente e modello ausiliario, ed è per turno nelle sessioni di input in streaming. Preferisci modelUsage per la contabilità di token/costo.
  • modelUsage: totali per modello per ogni chiamata di modello effettuata attraverso la pipeline di query durante questa chiamata query(), incluso 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 autorizzazione e le richieste di conteggio dei token, sono escluse. Nelle sessioni di input in streaming i totali sono cumulativi tra i turni, quindi leggi il risultato più recente piuttosto che sommare tra i risultati. Vedi Traccia i costi in modalità input in streaming per i reset e Recupera i totali dopo un arresto anomalo della sessione per i risultati azzerati.
  • total_cost_usd: costo stimato cumulativo in USD per questa chiamata query(), coprendo le stesse chiamate di modelUsage e reset negli stessi punti. È una stima, non un estratto conto di fatturazione. Vedi Traccia costo e utilizzo per le avvertenze di accuratezza.
  • queued_turn_count: il numero di messaggi che hai inviato con origin: { kind: "human" } che sono ancora in attesa quando Claude Code ha prodotto il risultato. Vedi queued_turn_count per cosa significano 0 e un campo assente.
  • 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".
  • fast_mode_disabled_reason: il motivo per cui fast mode non è disponibile in questo momento. Assente quando nulla blocca fast mode, anche se una richiesta potrebbe comunque essere eseguita a velocità standard. Durante il cooldown dopo un limite di velocità fast mode, Claude Code segnala fast_mode_state: "cooldown" senza codice di motivo e riabilita fast mode quando il cooldown scade. Richiede Claude Code v2.1.219 o successivo.
Usa il codice di motivo per spiegare perché fast mode è disattivato nella tua interfaccia utente invece di derivare nuovamente la disponibilità. Ogni codice nomina il controllo che ha bloccato fast mode: La stessa coppia di campi appare su SDKSystemMessage e su SDKControlInitializeResponse, quindi puoi leggere lo stato fast mode prima del primo turno. Il campo origin inoltro l’SDKMessageOrigin del messaggio utente che ha attivato questo risultato. Quando l’SDK inietta un turno di follow-up sintetico, come per un’attività finita in background, il SDKResultMessage risultante contiene origin: { kind: "task-notification" }. Le routine il cui trigger si è attivato e i messaggi verificati dal server dalle tue altre sessioni arrivano con questo tipo anche, ciascuno con il subkind descritto in Subkind di notifica attività. Controlla kind per distinguere i risultati che rispondono al tuo prompt dai follow-up iniettati prima di 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.

user_message_uuid

L’uuid del SDKUserMessage a cui il turno sta rispondendo, ripetuto in modo da poter abbinare la risposta di Claude Code al messaggio che hai inviato. Claude Code ripete un uuid solo se ne hai impostato uno sul messaggio. Il campo è facoltativo su SDKUserMessage, e un prompt di stringa passato a query() non ne contiene nessuno. Quale dei tuoi messaggi un turno risponde dipende da come il turno è iniziato:
  • Un messaggio regolare che hai inviato, cioè uno senza isSynthetic: true: il turno risponde a quel messaggio per tutta la sua esecuzione. Quando invii diversi messaggi uno dopo l’altro, Claude Code può unirli in un turno, e il campo contiene solo l’uuid dell’ultimo messaggio. Per abbinare la risposta a uno qualsiasi dei messaggi uniti, usa user_message_uuids.
  • Un messaggio che hai inviato con isSynthetic: true: il turno risponde a quel messaggio all’inizio. Se Claude Code raccoglie un messaggio regolare tuo tra le chiamate di tool, il turno risponde al messaggio raccolto da allora in poi. L’eco di un uuid di messaggio sintetico richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non ecolano nulla sui turni sintetici.
  • Un prompt che Claude Code ha generato da solo, come il turno che continua il lavoro interrotto dopo il riavvio di una sessione: il turno non risponde a nessun messaggio tuo all’inizio e i suoi frame non contengono alcun eco. Se Claude Code raccoglie un messaggio regolare tuo tra le chiamate di tool, il turno risponde a quel messaggio da allora in poi. L’eco di raccolta richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non ecolano nulla su questi turni.
Claude Code ripete l’uuid del messaggio a cui ha risposto su tre tipi di frame:
  • Il risultato: ogni risultato di un turno che ha risposto a un messaggio che hai inviato. Ogni tale risultato lo contiene su Agent SDK v0.3.265 o successivo. Prima della v0.3.265, il risultato di successo di un turno che un messaggio regolare ha avviato non lo conteneva quando il turno non ha inviato alcuna richiesta API o è terminato con una chiamata di tool differita. Prima della v0.3.246, anche i risultati di errore non lo contenevano, e prima della v0.3.216 ogni risultato non lo conteneva.
  • La prima risposta del turno: il primo messaggio dell’assistente, o con includePartialMessages il primo evento di flusso il cui event.type non è ping, in modo da poter associare la risposta prima che il risultato arrivi. Quando un turno non trasmette nulla, Claude Code lo imposta sul primo messaggio dell’assistente. L’eco della prima risposta richiede Agent SDK v0.3.246 o successivo. Quando il messaggio a cui il turno sta rispondendo cambia a metà turno, la prima risposta dopo il cambio contiene il campo anche, su Agent SDK v0.3.265 o successivo; le versioni precedenti lo impostano su un frame di risposta per turno.
  • Ogni frame thinking_tokens del turno: in modo da poter attribuire il progresso del pensiero al messaggio che hai inviato senza aspettare la prima risposta del turno. Richiede Agent SDK v0.3.260 o successivo.
Claude Code omette il campo in questi casi:
  • Frame di risposta diversi da quelle prime risposte
  • Frame di subagente
  • Turni che non rispondono a nessun messaggio con un uuid: il turno ha risposto a un messaggio che hai inviato senza uno, o Claude Code ha avviato il turno stesso e non ha raccolto nessun messaggio regolare che ne ha uno
  • Risultati che non rispondono a nessun messaggio che hai inviato, come il risultato azzerato dopo un arresto anomalo del processo worker

user_message_uuids

Gli uuid di ogni messaggio che hai inviato a cui Claude Code ha risposto in questo turno. Quando invii diversi messaggi uno dopo l’altro, Claude Code può unirli in un turno, e user_message_uuid nomina solo l’ultimo di essi. Per abbinare la risposta a uno qualsiasi dei messaggi uniti, cerca l’uuid di quel messaggio ovunque in questo elenco. Richiede Agent SDK v0.3.259 o successivo. Claude Code imposta l’elenco insieme a user_message_uuid su ogni frame di risposta che contiene quel campo e sul risultato. Per l’insieme completo di frame che contengono user_message_uuid, e la versione che ciascuno richiede, vedi user_message_uuid. L’elenco contiene sempre user_message_uuid e contiene al massimo 64 voci. Quando Claude Code raccoglie un messaggio regolare che hai inviato mentre un turno era in esecuzione, aggiunge l’uuid di quel messaggio all’elenco del risultato. Quando una prima risposta o un risultato contiene user_message_uuid senza l’elenco, proviene da una versione precedente di Claude Code, quindi ricadi al campo singolo.

queued_turn_count

Il numero di messaggi che hai inviato con origin: { kind: "human" } che sono ancora in attesa nella coda di comando quando Claude Code ha prodotto il risultato. Richiede Agent SDK v0.3.242 o successivo. Cosa significano 0 e un campo assente:
  • 0: Claude Code non conta i messaggi che hai inviato senza quel origin, e non conta le notifiche di attività, quindi un turno può comunque seguire.
  • Assente: il risultato finale che Claude Code emette dopo un arresto anomalo o un errore di avvio fatale omette il campo, e può contenere totali azzerati.

SDKSystemMessage

Messaggio di inizializzazione del sistema.
fast_mode_state segnala lo stato fast mode della sessione. Quando qualcosa blocca fast mode, fast_mode_disabled_reason nomina il controllo che lo ha bloccato; il campo richiede Claude Code v2.1.219 o successivo. Per i codici di motivo e i loro significati, vedi fast_mode_disabled_reason sul messaggio di risultato. terminal_slash_commands nomina le voci in slash_commands la cui interfaccia è associata al terminale locale, come exit. Puoi inviarle come qualsiasi altra voce in slash_commands; il campo esiste in modo che un client remoto o mobile possa nasconderle dai suoi menu di comando. Il campo è presente solo quando non vuoto, e richiede Agent SDK v0.3.229 o successivo.
  • effort: il livello di sforzo che Claude Code invia sulla prossima richiesta della sessione, o null quando non ne invia nessuno. Claude Code imposta il campo solo sul messaggio di init che invia ai client Remote Control, e lo omette dal messaggio di init che la tua applicazione legge. Richiede Agent SDK v0.3.234 o successivo.
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.
Claude Code imposta user_message_uuid e user_message_uuids sul primo evento di flusso non-ping del turno, e di nuovo quando il messaggio a cui il turno sta rispondendo cambia, secondo le condizioni in user_message_uuid.

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. Su Claude Code v2.1.227 o successivo, il systemMessage di un hook può arrivare come questo messaggio, con ogni riga prefissata dal nome dell’hook, come PostToolUse:Bash says:. Se il systemMessage di un hook arriva come questo messaggio dipende dall’evento. Ogni sezione dell’evento sulla pagina dei hook dice come l’output viene visualizzato. 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 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. Quali rifiuti segnala dipende da come l’esecuzione gestisce i prompt di autorizzazione:
  • Con un callback canUseTool e il permissionPrompts: 'host' predefinito: i prompt di autorizzazione vanno al tuo callback, e questo evento segnala i rifiuti che Claude Code decide da solo senza chiamarlo.
  • Con nessuno dei due: un’esecuzione -p nuda, o query() che non imposta né canUseToolpermissionPromptToolName, nega qualsiasi chiamata di tool che avrebbe richiesto un prompt, e questo evento segnala anche quei rifiuti oltre a quelli che Claude Code decide da solo. Prima della v2.1.223, Claude Code non emetteva questo evento nelle esecuzioni senza un callback.
  • Con uno strumento di prompt MCP, impostato con permissionPromptToolName o il flag --permission-prompt-tool, e il permissionPrompts: 'host' predefinito: Claude Code non emette questo evento affatto, nemmeno per i rifiuti di regola che decide da solo.
  • Con permissionPrompts: 'none': Claude Code nega le chiamate che avrebbero richiesto un prompt, anche quando canUseTool o uno strumento di prompt MCP è anche impostato, e questo evento segnala anche quei rifiuti oltre a quelli che Claude Code decide da solo. Richiede Claude Code v2.1.259 o successivo.
In ogni configurazione, questo evento salta qualsiasi rifiuto deciso sul percorso dell’hook PreToolUse, indipendentemente dal fatto che l’hook abbia negato la chiamata stessa o una regola di negazione abbia sovrascritto la decisione di consentire o chiedere dell’hook. L’evento è anche best-effort: occasionalmente Claude Code registra un rifiuto senza emettere questo evento, quindi permission_denials sul messaggio di risultato è il record autorevole.

SDKPermissionDenial

Informazioni su un uso di tool negato.

SDKContextUsage

Forma strutturata del rapporto /context, portata come context_usage sul SDKAssistantMessage che consegna un risultato /context. Agent SDK v0.3.232 e successivo esportano il tipo. A differenza di SDKControlGetContextUsageResponse, contiene solo i dati necessari per rendere la suddivisione dell’utilizzo, senza campi di visualizzazione come color e gridRows.
La tabella elenca cosa Claude Code mette in ogni campo. I campi da model a over_limit descrivono la sessione nel suo insieme, e i campi di raccolta attribuiscono i token a elementi individuali. over_limit.kind registra come Claude Code ha risolto la finestra, non se l’API accetta la prossima richiesta:
  • hard_limit: la finestra è quella che Claude Code crede sia il limite proprio del modello, oltre il quale l’API rifiuta le richieste
  • compaction_window: la finestra è una finestra di politica di compattazione, che può o non può coincidere con il limite del modello
Claude Code evolve il tipo in modo additivo, aggiungendo nuovi dati come campi facoltativi piuttosto che rimodellando quelli esistenti. Leggi i campi che conosci e ignora quelli che non riconosci.

SDKContextUsageCategory

Una riga della suddivisione dell’utilizzo /context per categoria.
La tabella elenca cosa Claude Code mette in ogni campo di una riga. Ogni valore kind dice cosa sono i token della riga:
  • used: contenuto che occupa la finestra di contesto
  • free: la finestra rimanente
  • buffer: la riserva di compattazione
  • deferred: schemi di tool che Claude Code tiene fuori dalla finestra ed esclude dal calcolo dell’utilizzo, elencati per consapevolezza

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.

Task-notification subkinds

Quando Claude Code consegna una notifica di attività in una sessione, imposta subkind sull’origin della notifica solo se i server Anthropic hanno verificato da dove proveniva quella notifica. subkind richiede Claude Code v2.1.213 o successivo, e assume uno di due valori:
  • scheduled-trigger: la notifica è il prompt memorizzato di una routine, consegnato perché uno dei trigger della routine si è attivato: il suo programma, il suo trigger API, il suo trigger GitHub, o Esegui ora. Claude Code inquadra questi al modello come l’attività assegnata della sessione, con un avviso diverso dall’avviso che altre notifiche di attività contengono.
  • peer-send-message: la notifica è un messaggio che un’altra delle tue sessioni ha inviato con lo strumento send_message lato server che le sessioni Claude Code sul web usano per messaggiarsi l’una con l’altra, non lo strumento SendMessage tra sessioni, e i server Anthropic hanno verificato che entrambe le sessioni appartengono allo stesso gruppo privato di sessioni. Richiede Claude Code v2.1.224 o successivo. Una consegna send_message che i server non hanno verificato in quel modo non ha subkind.
Ogni altra notifica di attività non ha subkind. Questo include attività programmate che si attivano sulla tua stessa macchina, attività PR consegnate in una sessione, e eventi in background come un’attività finita. I messaggi dallo strumento SendMessage tra sessioni non sono notifiche di attività affatto: che provengano da una sessione sulla stessa macchina o attraverso i server Anthropic da un’altra macchina, Claude Code dà loro kind: "peer" e i campi di origine peer.

Peer origin fields

Un’origine peer identifica quale agente ha inviato il messaggio: un collega in-process che invia a main con SendMessage, o un peer tra sessioni, un’altra delle tue sessioni Claude Code. I peer tra sessioni richiedono Claude Code v2.1.224 o successivo su macOS e Linux; vedi disponibilità di messaggistica tra sessioni per il requisito di Windows nativo. Un peer tra sessioni può essere eseguito sulla stessa macchina, o su un’altra delle tue macchine o Claude Code sul web quando il suo messaggio arriva attraverso Remote Control. I due tipi di mittente riempiono i campi diversamente:
  • from: il nome del collega, o l’indirizzo del mittente per un peer tra sessioni. Per un messaggio tra macchine unidirezionale, il mittente non ha indirizzo di risposta e from è "unknown". Il valore è creato dal mittente; verifiedPeerPid è l’identità verificata.
  • fromMode: la classe di autorizzazione della sessione di invio, bypass o prompting, dichiarata da un host che inoltro un messaggio peer tra le tue sessioni, come l’app desktop. Claude Code lo legge nella sessione ricevente quando applica i controlli in entrata. Richiede Agent SDK v0.3.234 o successivo.
  • senderTaskId: l’ID attività del collega. Assente per un peer tra sessioni.
  • name: il nome di visualizzazione del mittente, normalizzato da Claude Code: rimuove i punti di codice di controllo, formato, surrogato e separatore di riga o paragrafo Unicode, quindi taglia il risultato e lo limita a 64 punti di codice con un’ellissi. Richiede Claude Code v2.1.205 o successivo.
  • body: il corpo del messaggio decodificato con l’involucro peer rimosso, byte-esatto con quello che il modello vede. Sempre presente per un messaggio di collega; per un peer tra sessioni, presente solo quando il turno è esattamente un involucro peer formato da Claude Code. Renderizza name e body invece di ri-analizzare il testo del messaggio. Richiede Claude Code v2.1.205 o successivo.
  • fromSession: l’ID sessione del mittente apribile dall’host, impostato dall’host del mittente in modo che la tua interfaccia utente possa collegarsi di nuovo alla sessione di invio. Come from, è asserito dal mittente: usalo solo come destinazione di navigazione, e non trattarlo come prova dell’identità del mittente. Richiede Claude Code v2.1.216 o successivo.
  • verifiedPeerPid: l’ID del processo del processo che si è connesso al socket di messaggistica tra sessioni di questa sessione, verificato dal kernel e letto dalla connessione stessa, mai dal payload. Usalo, non from, per identificare il mittente: from è falsificabile da qualsiasi processo dello stesso utente. Il campo è assente quando Claude Code non può verificarlo, come su Windows o ingresso non-socket, quindi un valore assente significa che il mittente non è verificato. Per il traffico inoltrato identifica l’inoltro piuttosto che l’autore del messaggio, e gli ID di processo sono riciclabili, quindi trattalo come provenienza piuttosto che come token di autenticazione. Richiede Claude Code v2.1.216 o successivo.

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.

PermissionDeniedHookInput

NotificationHookInput

UserPromptSubmitHookInput

UserPromptExpansionHookInput

SessionStartHookInput

SessionEndHookInput

StopHookInput

StopFailureHookInput

SubagentStartHookInput

SubagentStopHookInput

PreCompactHookInput

PostCompactHookInput

PreModelSwitchHookInput

Si attiva prima che un cambio di modello richiesto abbia effetto. context_tokens e i campi dopo di esso stimano il costo di reinviare la conversazione al nuovo modello. Per le descrizioni complete dei campi e la semantica di blocco, vedi PreModelSwitch.

PostModelSwitchHookInput

Si attiva dopo che il modello della sessione cambia. Contiene gli stessi campi di PreModelSwitchHookInput, con due valori source aggiuntivi. Vedi PostModelSwitch.

PermissionRequestHookInput

SetupHookInput

TeammateIdleHookInput

TaskCreatedHookInput

TaskCompletedHookInput

ElicitationHookInput

ElicitationResultHookInput

ConfigChangeHookInput

InstructionsLoadedHookInput

DirectoryAddedHookInput

directory è il percorso assoluto della directory che è stata aggiunta. source è "slash_command" quando /add-dir l’ha aggiunta e "register_repo_root" quando la richiesta di controllo SDK l’ha fatto.

WorktreeCreateHookInput

WorktreeRemoveHookInput

CwdChangedHookInput

FileChangedHookInput

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 tipi di input dei tool esportati da @anthropic-ai/claude-agent-sdk; i membri includono:

Agent

Nome del tool: Agent. Il nome precedente Task è ancora accettato come alias, e l’array tools nel messaggio di inizializzazione SDKSystemMessage attualmente elenca questo tool come Task per compatibilità all’indietro.
Il campo mode è deprecato e ignorato su Claude Code v2.1.212 o successivo. Un subagente viene eseguito in modalità di permesso della sessione padre o della sua definizione permissionMode, e le regole di ereditarietà del subagente decidono quale.
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 con timeout opzionale ed esecuzione in background. La directory di lavoro persiste tra i comandi, inclusi i comandi eseguiti in turni successivi di una sessione multi-turno; lo stato della shell come le variabili di ambiente esportate non persiste. Per i limiti su quali cambiamenti di directory si mantengono, vedi Cosa persiste tra i comandi.

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. Il tipo esportato contrassegna timeout_ms e persistent come obbligatori perché lo schema riempie i loro valori predefiniti, 300000 e false; una chiamata che li omette convalida.

TaskOutput

Nome del tool: TaskOutput
TaskOutput è deprecato; preferisci Read sul percorso del file di output dell’attività. Gli schemi sottostanti rimangono validi per gli hook e i gestori di permessi che incontrano il tool.
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"). Per un PDF, Claude riceve il contenuto del file all’interno del tool_result della chiamata Read. Una lettura che restituisce l’output pdf output contiene un blocco text di riepilogo seguito da un blocco document. Una che restituisce l’output parts contiene il blocco text di riepilogo seguito da un blocco per ogni pagina estratta: un blocco image, o un blocco text che nomina la pagina quando Claude Code non poteva renderla come immagine. Prima di Agent SDK v0.3.242, Claude Code consegnava il contenuto del file come messaggio user separato dopo il risultato del tool.

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.
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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Wherever the tools are available, Claude Code provides the four Task tools, or 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 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.

ExitWorktree

Nome del tool: ExitWorktree
Esce dal worktree git corrente e ritorna alla directory di lavoro originale. L’azione keep lascia il worktree e il ramo su disco, mentre remove elimina entrambi. discard_changes deve essere true quando si rimuove un worktree che ha file non committati o commit non uniti.

EnterPlanMode

Nome del tool: EnterPlanMode
Entra in modalità di pianificazione, dove Claude ricerca e presenta un piano prima di apportare modifiche.

CronCreate

Nome del tool: CronCreate
Pianifica un prompt da eseguire su una pianificazione cron a 5 campi nell’ora locale. Imposta recurring a false per attivare una volta al prossimo match. I job sono scoped alla sessione per impostazione predefinita: avviare una conversazione fresca li cancella, e riprendere con --resume o --continue ripristina i job che non sono scaduti. Vedi Attività pianificate. Impostare durable a true richiede la persistenza a .claude/scheduled_tasks.json in modo che il job sopravviva ai riavvii. La pianificazione duratura non è disponibile in ogni sessione: quando non lo è, Claude Code accetta durable: true ma crea il job solo per la sessione. Leggi il campo durable dell’output per vedere se il job è persistito.

CronDelete

Nome del tool: CronDelete
Elimina un job cron pianificato per l’ID restituito da CronCreate.

CronList

Nome del tool: CronList
Elenca i job cron pianificati: job durevoli da .claude/scheduled_tasks.json e job solo per la sessione dalla sessione corrente.

ScheduleWakeup

Nome del tool: ScheduleWakeup
Pianifica un wake-up una tantum che attiva il prompt dato dopo un ritardo. Questo tool supporta il comando /loop auto-paced. Il runtime limita delaySeconds tra 60 e 3600 secondi. I campi delaySeconds, reason, prompt e noop sono obbligatori a meno che stop non sia true. noop: true segnala un wake-up dove nulla è cambiato. Impostare stop: true annulla il wakeup in sospeso e termina il /loop auto-paced. Il campo stop richiede Claude Code v2.1.202 o successivo. Vedi la riga ScheduleWakeup nel riferimento dei tool.

RemoteTrigger

Nome del tool: RemoteTrigger
Gestisce Routine, le esecuzioni Claude Code pianificate e attivate ospitate nel cloud. Questo tool supporta il comando /schedule. trigger_id è obbligatorio per le azioni get, update, run e list_runs. body è obbligatorio per create, update e create_webhook_trigger, e facoltativo per run. create_webhook_trigger allega una fonte di evento a una routine esistente, come un evento GitHub che lo attiva. Il body nomina la fonte, gli eventi e la routine da attivare. Richiede Claude Code v2.1.225 o successivo. list_runs elenca le esecuzioni recenti di una routine, e get_run_log legge il log di un’esecuzione. session_id nomina l’esecuzione da leggere, da un risultato list_runs, e cursor pagina attraverso i risultati di entrambe le azioni. Entrambe le azioni richiedono Claude Code v2.1.227 o successivo. Questo tool è disponibile solo quando la sessione è autenticata con un account claude.ai su un piano con Routine abilitate, ed è assente quando la politica della tua organizzazione disabilita Claude Code sul web. Su Claude Code v2.1.227 o successivo, il tool è anche assente quando un Proprietario ha disattivato le routine per l’organizzazione. Prima di v2.1.227, una sessione con solo il toggle delle routine disattivato mostrava comunque il tool, e il server negava le sue chiamate.

PushNotification

Nome del tool: PushNotification
Invia una notifica push proattiva all’utente. Mantieni message sotto 200 caratteri perché i sistemi operativi mobili troncano il testo più lungo. Vedi la riga PushNotification nel riferimento dei tool per la disponibilità del provider; la consegna push viene eseguita attraverso l’infrastruttura ospitata da Anthropic che non è accessibile da Amazon Bedrock, Claude Platform su AWS, Agent Platform di Google Cloud, o Microsoft Foundry.

REPL

Nome del tool: REPL
Esegue il codice JavaScript in un REPL persistente. Lo stato persiste tra le chiamate e top-level await è supportato. timeout è in millisecondi, con un valore predefinito di 30000 e un massimo di 600000. I tipi vengono esportati, ma il tool è disattivato nelle sessioni SDK a meno che non imposti CLAUDE_CODE_REPL=1 nell’opzione env. Richiede anche l’eseguibile claude basato su Bun che il programma di installazione nativo fornisce.

ReportFindings

Nome del tool: ReportFindings
Segnala i risultati della revisione del codice come un elenco strutturato in modo che Claude Code possa renderli invece di stamparli come testo. level è il livello di sforzo con cui è stata eseguita la revisione. I risultati sono ordinati dal più grave al meno grave, con al massimo 32 per chiamata, e l’array è vuoto quando nessuno è sopravvissuto. Richiede Claude Code v2.1.196 o successivo. Ogni risultato contiene questi campi:
  • file: percorso relativo al repository in cui si trova il risultato. L’opzionale line è la riga 1-indicizzata a cui si ancora.
  • summary: dichiarazione di una frase del difetto. failure_scenario descrive gli input concreti e lo stato che portano all’output errato o al crash.
  • short_summary: etichetta compressa opzionale di al massimo 60 caratteri per la visualizzazione compatta. Richiede Claude Code v2.1.212 o successivo.
  • category: slug opzionale in kebab-case breve del tipo di risultato, come correctness o test-coverage. Richiede Claude Code v2.1.199 o successivo.
  • verdict: impostato quando è stata eseguita una pass di verifica; assente nelle revisioni solo inline.
  • outcome: impostato solo quando si segnala di nuovo dopo aver applicato le correzioni.

Artifact

Nome del tool: Artifact
Pubblica un file .html o .md locale come pagina di artifact ospitata, o elenca gli artifact pubblicati dell’utente. Ometti action o passa "publish" per pubblicare file_path, che è obbligatorio per l’azione di pubblicazione insieme a favicon, uno o due emoji che contrassegnano l’artifact nella galleria dell’utente. title nomina la pagina pubblicata nella scheda del browser e nella galleria quando il file HTML non ha un tag <title>. url indirizza un artifact esistente da aggiornare sul posto invece di crearne uno nuovo. force è un’ultima risorsa di sovrascrittura che scarta una versione più recente che un’altra sessione ha pubblicato. In caso di conflitto, la pubblicazione non riuscita restituisce il contenuto più recente; Claude unisce le sue modifiche a quel contenuto, o rilegge l’artifact, e pubblica di nuovo. Passa force solo quando l’utente chiede esplicitamente di scartare quella versione. Passa "list" per enumerare gli artifact pubblicati dell’utente; solo limit e scope possono accompagnarlo. scope predefinito a "mine", che elenca gli artifact che l’utente possiede; "shared" elenca gli artifact che altre persone hanno condiviso con l’utente, e "all" elenca entrambi.
  • capabilities: le capacità di runtime che la pagina pubblicata utilizza, codificate per nome di capacità, come i connettori che la pagina può chiamare. Il servizio di artifact convalida la dichiarazione e rifiuta una pubblicazione che nomina una capacità che l’account non può utilizzare o ne fornisce una con una configurazione non valida. Passa {} per cancellare una dichiarazione memorizzata, e ometti il campo su una ridistribuzione per mantenerla. Richiede Agent SDK v0.3.235 o successivo.
  • contract: la versione di runtime su cui viene eseguita la pagina pubblicata. Omettilo per mantenere la versione corrente dell’artifact, passa "latest" per aggiornare, o passa una versione specifica per fissare o eseguire il rollback. Richiede Agent SDK v0.3.235 o successivo.
I tipi vengono esportati, ma il tool è disattivato per impostazione predefinita nelle sessioni Agent SDK. La pubblicazione richiede anche ogni condizione nella tabella di disponibilità degli artifact, che le sessioni autenticate con una chiave API non soddisfano.

Projects

Nome del tool: Projects
Legge e scrive il Progetto claude.ai allegato alla sessione. Invia a method:
  • project_info: restituisce i metadati del progetto e l’elenco dei documenti.
  • project_read: legge un documento per path.
  • project_search: interroga la base di conoscenza del progetto con query. n limita i risultati e predefinito a 5.
  • project_write: crea o sostituisce un documento in path da esattamente uno tra content, che contiene testo inline, o local_path, che nomina un file all’interno della directory di lavoro. present_to_user: true contrassegna il documento scritto come il deliverable che l’utente deve vedere.
  • project_delete: elimina un documento per path.

ReadMcpResourceDir

Nome del tool: ReadMcpResourceDirTool
Elenca i figli diretti di una risorsa di directory su un server MCP. Utilizzabile solo su un server che ha dichiarato il supporto per l’elenco delle directory; l’elenco non è ricorsivo. L’elenco delle directory non è abilitato in ogni sessione: quando è disattivato, la chiamata restituisce un elenco resources vuoto e il campo error segnala che l’elenco delle directory non è abilitato.

RefreshMcpTools

Nome del tool: RefreshMcpTools
Riesamina l’elenco dei tool dei server MCP connessi e applica eventuali modifiche. I tipi vengono esportati, ma Claude Code registra il tool solo quando imposti CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 nell’opzione env, e solo nelle sessioni con almeno un server MCP. Richiede Claude Code v2.1.211 o successivo.

ShowOnboardingRolePicker

Nome del tool: ShowOnboardingRolePicker
Renderizza una riga di chip selettore di ruolo cliccabile durante l’onboarding di Cowork in modo che l’utente possa scegliere il suo ruolo e ottenere un plugin corrispondente installato. Non accetta argomenti; l’elenco dei ruoli è definito dal client. La chiamata si blocca fino a quando l’utente non risponde.

McpInput

Nome del tool: nomi di tool MCP dinamici della forma mcp__<server>__<tool>
Gli argomenti dei tool MCP sono un oggetto aperto: ogni server definisce i suoi propri parametri, quindi il tipo non pone vincoli sui nomi dei campi o sui valori. Consulta lo schema dei tool del server per i campi che uno strumento specifico accetta.

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 tipi di output dei tool esportati da @anthropic-ai/claude-agent-sdk; i membri includono:

Agent

Nome del tool: Agent. Il nome precedente Task è ancora accettato come alias, e l’array tools nel messaggio di inizializzazione SDKSystemMessage attualmente elenca questo tool come Task per compatibilità con le versioni precedenti.
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. 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. Su async_launched, nomina il modello in uso quando l’attività è passata allo sfondo. modelsUsed elenca i modelli utilizzati dal subagente, in ordine. Il campo è presente solo quando si è verificato uno scambio a metà esecuzione, e un modello appare di nuovo quando l’esecuzione è tornata a esso. Su async_launched, l’elenco copre i modelli utilizzati prima di passare allo sfondo. Sia modelsUsed che il comportamento di passaggio allo sfondo di resolvedModel richiedono Claude Code v2.1.212 o successivo. Se Claude Code ha mantenuto il worktree isolato del subagente, worktreePath sul risultato completed è dove trovarlo. worktreeBranch è il suo ramo, presente quando Claude Code ha creato il worktree con git. Claude Code riempie usage e totalTokens dalla richiesta API finale del subagente, non dall’intera esecuzione, quindi usage.service_tier è la stringa del livello di servizio che l’API ha segnalato su quella richiesta. Quando presente, usage.output_tokens_details.thinking_tokens è il numero di token di output di quella richiesta che erano token di thinking. Il campo output_tokens_details richiede TypeScript SDK v0.3.228 o successivo, che raggruppa Claude Code v2.1.228. usage.output_tokens_details corrisponde a Usage.output_tokens_details nel significato, limitato a quella richiesta finale, ma ogni livello di esso è opzionale qui. Proteggi sia l’oggetto che il campo, ad esempio usage.output_tokens_details?.thinking_tokens ?? 0, piuttosto che leggerlo direttamente. 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
I campi stdout, stderr e backgroundTaskId contengono: timedOutAfterMs è il timeout in millisecondi, impostato quando il comando ha raggiunto il suo timeout e si è spostato allo sfondo piuttosto che iniziare lì esplicitamente. backgroundCwdHint viene impostato quando il comando in background conteneva un builtin di cambio directory come cd, pushd, popd o chdir, e nota che la directory di lavoro della sessione non è cambiata. Entrambi i campi richiedono Claude Code v2.1.210 o successivo. Quando un subagente in esecuzione in primo piano possiede un comando in background, Claude Code termina il comando quando quel subagente fornisce la sua risposta finale. Claude Code imposta backgroundEndsWithFinalResponse su true su tali comandi, e omette il campo quando il comando sopravvive al turno, come i comandi avviati dalla conversazione principale o dai subagenti di background. Il campo richiede Claude Code v2.1.227 o successivo. Claude Code imposta gitOperation.commit.branch al ramo denominato nella riga di riepilogo del commit di git, e lo omette per un commit effettuato su un HEAD staccato. Il campo richiede Agent SDK v0.3.227 o successivo. Claude Code segnala un comando gh pr reopen come l’azione PR reopened, che richiede Agent SDK v0.3.234 o successivo.

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. Ciò che originalFile e structuredPatch contengono dipende dalla scrittura:
  • Per un file appena creato, originalFile è null e structuredPatch è vuoto
  • Su una sovrascrittura, originalFile contiene il contenuto precedente, tranne quando quel contenuto è più grande di circa 10 MB: Claude Code quindi salta il diff e restituisce originalFile null e structuredPatch vuoto
  • structuredPatch è anche vuoto quando la scrittura non ha cambiato nulla o il diff è scaduto

Glob

Nome del tool: Glob
Restituisce i percorsi dei file che corrispondono al pattern glob, ordinati per tempo di modifica. totalMatches e countIsComplete richiedono Claude Code v2.1.191 o successivo. totalMatches segnala il numero di file corrispondenti prima del troncamento. Quando countIsComplete è false, totalMatches è un limite inferiore perché la ricerca sottostante ha troncato il suo stesso output.

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. In modalità count, numFiles e numMatches sono totali sull’intero set di risultati, non sulla sezione impaginata. Prima della v2.1.208, un head_limit o offset che troncava le voci elencate troncava anche questi totali. totalFiles richiede Claude Code v2.1.208 o successivo e segnala il numero totale di risultati prima della paginazione head_limit e offset in modalità files_with_matches. totalLines richiede Claude Code v2.1.210 o successivo e segnala il numero totale di righe prima della paginazione in modalità content.

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. artifactRead è il record proprio di Claude Code di una lettura di artifact, presente solo quando Claude ha recuperato un artifact che la sessione può pubblicare. Claude Code lo legge di nuovo quando una sessione riprende in modo che una successiva pubblicazione si basi sulla versione giusta; il tuo codice non ha bisogno di agire su di esso. slug nomina l’artifact, ver è la versione che la lettura ha messo in record ed è assente quando non ne ha registrata nessuna, e seeded: false contrassegna una lettura il cui codice sorgente completo non ha raggiunto Claude. Il campo seeded richiede Agent SDK v0.3.239 o successivo.

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.
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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Wherever the tools are available, Claude Code provides the four Task tools, or 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 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.

ExitWorktree

Nome del tool: ExitWorktree
Restituisce l’azione intrapresa e i dettagli sul worktree che è stato abbandonato.

EnterPlanMode

Nome del tool: EnterPlanMode
Restituisce una conferma che la modalità di pianificazione è stata attivata.

CronCreate

Nome del tool: CronCreate
Restituisce l’ID del lavoro e una descrizione leggibile della pianificazione.

CronDelete

Nome del tool: CronDelete
Restituisce l’ID del lavoro eliminato.

CronList

Nome del tool: CronList
Restituisce i lavori cron pianificati: lavori durevoli da .claude/scheduled_tasks.json e lavori solo sessione dalla sessione corrente. Un lavoro solo sessione porta durable: false; i lavori letti dal disco omettono il campo.

ScheduleWakeup

Nome del tool: ScheduleWakeup
Restituisce quando il risveglio si attiverà come timestamp di epoca in millisecondi, il ritardo effettivamente utilizzato, e se il ritardo richiesto è stato limitato. Il campo stopped è true quando la chiamata ha terminato il loop con stop: true. Richiede Claude Code v2.1.202 o successivo. Il campo cancelledWakeups conta quanti risvegli in sospeso una chiamata stop: true ha annullato. Un valore di 0 significa che nulla era in sospeso, e un cron /loop ricorrente non viene annullato da stop: true. Richiede Claude Code v2.1.206 o successivo.

RemoteTrigger

Nome del tool: RemoteTrigger
Restituisce lo stato della risposta API e il corpo per l’operazione di attivazione.

PushNotification

Nome del tool: PushNotification
Restituisce i dettagli di consegna, incluso se una notifica push o locale è stata inviata e perché la consegna è stata saltata.

REPL

Nome del tool: REPL
Restituisce il risultato dell’esecuzione, l’output della console acquisito, e qualsiasi immagine o documento esposto da chiamate Read interne.

ReportFindings

Nome del tool: ReportFindings
Restituisce il numero di risultati segnalati, il livello di sforzo con cui la revisione è stata eseguita, e i risultati ripetuti per il corpo del risultato. Richiede Claude Code v2.1.196 o successivo. Il campo short_summary ripetuto richiede Claude Code v2.1.212 o successivo.

Artifact

Nome del tool: Artifact
Restituisce l’url della pagina pubblicata e il path locale che è stato pubblicato per l’azione di pubblicazione, con updated impostato su true quando la pubblicazione ha ridistribuito un artifact esistente, e warnings che contiene eventuali avvisi al momento della pubblicazione. L’azione di elenco restituisce invece le righe artifacts, con truncated impostato quando esistono più artifact del limite richiesto. Negli elenchi il cui ambito non è "mine", ogni riga contiene rel che contrassegna se l’utente possiede l’artifact o se è stato condiviso con loro, e l’scope dell’output registra quale ambito non predefinito ha prodotto l’elenco; entrambi sono assenti negli elenchi predefiniti.

Projects

Nome del tool: Projects
Discriminato sul campo method, rispecchiando l’input. project_read restituisce piccoli documenti di testo inline in content e scrive documenti più grandi in un percorso local_file invece; project_search restituisce hits RAG con rag: true quando l’indice del progetto è disponibile e ricade su un elenco di percorsi docs altrimenti.

ReadMcpResourceDir

Nome del tool: ReadMcpResourceDirTool
Restituisce i figli diretti della risorsa directory. Le sottodirectory appaiono con mimeType "inode/directory"; error contiene un messaggio leggibile quando il server non poteva elencare la directory.

RefreshMcpTools

Nome del tool: RefreshMcpTools
Restituisce una voce per server: refreshed significa che l’elenco degli strumenti ri-interrogato è stato applicato, error significa che la ri-interrogazione non è riuscita e il set di strumenti precedente è stato mantenuto, e not_connected significa che il server non ha una connessione live per interrogare.

ShowOnboardingRolePicker

Nome del tool: ShowOnboardingRolePicker
Restituisce la selezione dell’utente: role quando ha scelto un chip di ruolo o ne ha digitato uno, e dismissed: true quando ha chiuso il selettore. Un oggetto vuoto significa che l’utente ha approvato la chiamata senza scegliere un ruolo.

McpOutput

Nome del tool: nomi di tool MCP dinamici della forma mcp__<server>__<tool>
I risultati degli strumenti MCP vengono restituiti come stringa o come array di blocchi di contenuto, a seconda del server. Il ramo di oggetto semplice finale nel tipo esportato è un artefatto della generazione dello schema: l’SDK non restituisce un oggetto nudo, perché l’output strutturato di un server viene serializzato in una stringa JSON prima di essere restituito. Al runtime il valore può anche essere undefined, sebbene il tipo esportato non modelli questo.

Tipi di permesso

PermissionUpdate

Operazioni per l’aggiornamento dei permessi.

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

Altri tipi

ApiKeySource

Da dove proviene la chiave API per le richieste della sessione, segnalata come apiKeySource nel messaggio di inizializzazione SDKSystemMessage.
Claude Code segnala uno di quattro valori: Agent SDK v0.3.234 e versioni successive elencano questi quattro valori nel tipo. Il tipo mantiene anche user, project, org, temporary e oauth affinché il codice più vecchio continui a compilarsi, e Claude Code non li segnala.

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 Opus 5, 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 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.
thinkingTokens conta i token di pensiero che questo modello ha generato. outputTokens li include già, quindi non sommare i due insieme. Il campo è assente fino a quando un turno non viene eseguito su una versione di Claude Code che lo registra, quindi una sessione ripresa che è iniziata su una versione precedente segnala un conteggio parziale. thinkingTokens richiede Agent SDK v0.3.257 o successivo. I campi canonicalModel e provider richiedono Claude Code v2.1.218 o successivo. canonicalModel è l’ID del modello canonico che la ricerca dei prezzi utilizza; può differire dalla stringa del modello grezzo che chiave la voce, ad esempio quando quella stringa è un ID specifico del provider o un alias. provider nomina il backend API che ha servito il modello, come firstParty, bedrock, vertex, foundry, anthropicAws, mantle, o gateway. costBasis nomina la tabella dei prezzi che ha prezzato la richiesta più recente del modello: list per il prezzo di listino, managed per una tabella modelPricing, o unknown quando nessuno dei due ha corrisposto all’ID del modello. Il campo richiede Claude Code v2.1.246 o successivo.

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, BetaIterationsUsage e BetaOutputTokensDetails sono definiti in @anthropic-ai/sdk. output_tokens_details suddivide l’output fatturato per categoria. Attualmente contiene un campo, thinking_tokens: number, che conta i token di output che il modello ha generato come ragionamento interno, inclusi i delimitatori del blocco di pensiero. Il campo output_tokens_details richiede TypeScript SDK v0.3.228 o successivo, che raggruppa Claude Code v2.1.228.
  • Fatturazione: leggi la suddivisione per l’osservabilità, non per la fatturazione. output_tokens rimane il totale autorevole, e output_tokens - thinking_tokens approssima l’output non di ragionamento.
  • Cosa conta il conteggio: il ragionamento grezzo che il modello ha prodotto, che può essere più lungo del testo di pensiero restituito nel corpo della risposta. L’API lo calcola ritokenizzando quel testo grezzo, quindi può differire dal conteggio esatto della generazione del modello di alcuni token.
  • Streaming: sui messaggi dell’assistente trasmessi questa suddivisione, come output_tokens, è un placeholder message_start e non contiene un conteggio reale, quindi leggilo dal messaggio di risultato usage come Leggi i token di output dal messaggio di risultato descrive. Nel messaggio di risultato, thinking_tokens legge 0 quando il modello o il provider non segnala alcuna suddivisione.
  • Casi null: output_tokens_details stesso è null sui messaggi dell’assistente che Claude Code sintetizza, come i messaggi di errore API.

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.
Un file che un tool MCP ha restituito per riferimento. Claude Code costruisce ogni voce da un blocco resource_link nel risultato del tool e fornisce l’elenco come resourceLinks su SDKUserMessage.tool_use_result, o come resource_links su SDKTaskNotificationMessage quando la chiamata è terminata in background. Richiede Agent SDK v0.3.257 o successivo.
Claude Code scarta un blocco il cui uri o name non è una stringa, e omette un campo opzionale il cui valore non è del tipo elencato.

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. Claude Code non invia display ad Amazon Bedrock o alla piattaforma Agent di Google Cloud, quindi su quei provider Opus 4.7 e versioni successive restituiscono blocchi thinking vuoti anche quando imposti display su "summarized".

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().
Quando chiami setMcpServers(), Claude Code applica queste regole:
  • Server che la chiamata non nomina: Claude Code mantiene i server forniti dai plugin in esecuzione. Richiede Agent SDK v0.3.210 o successivo.
  • Server che la chiamata nomina: ad eccezione dei server integrati che la CLI ha avviato all’avvio, Claude Code sostituisce un server in esecuzione solo quando la sua configurazione differisce da quella che hai passato.
  • Server integrati che la CLI ha avviato all’avvio: se la chiamata ne nomina uno, Claude Code scarta quella voce e la segnala in errors.
La promessa si risolve dopo che i server stdio, HTTP e SSE appena aggiunti si connettono o falliscono, quindi i tool dai server che si sono connessi sono disponibili al turno successivo. added elenca i server che Claude Code ha aggiunto o sostituito, indipendentemente dal fatto che si siano connessi. Un server che non si è connesso appare sia in added che in errors, con il testo di errore sotto errors e una riga failed in mcpServerStatus(). Prima di Claude Code v2.1.257, un server il cui tentativo di connessione ha lanciato un’eccezione era segnalato solo sotto errors.

RewindFilesResult

Risultato di un’operazione rewindFiles().
skippedLinks conta i percorsi tracciati che il rewind ha rifiutato di ripristinare o eliminare per la sicurezza dei link: un symlink, hard link, o altro file non regolare nel percorso tracciato, una directory padre che non si risolve più a dove puntava quando il checkpoint è stato preso, o un backup che non poteva essere letto in sicurezza. Il campo richiede Claude Code v2.1.216 o successivo. Una chiamata di anteprima con rewindFiles(userMessageId, { dryRun: true }) non lo imposta mai.

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. Per il campo ambient, vedi SDKTaskStartedMessage, che lo definisce e il suo requisito di versione.
Quando Claude Code sposta una lunga chiamata al tool MCP in background, il blocco tool_result per quella chiamata contiene solo un placeholder e il risultato reale della chiamata arriva in questa notifica. Abbina la notifica alla chiamata con tool_use_id. Su una notifica completed, resource_links elenca i file che il tool ha restituito per riferimento come voci SDKMcpResourceLink, con gli stessi limiti di 50 link e 64 KiB di tool_use_result.resourceLinks. Claude Code omette resource_links quando il risultato non aveva link e sulle notifiche per attività che non sono chiamate al tool MCP. resource_links richiede Agent SDK v0.3.257 o successivo. Claude Code antepone un avviso a ogni notifica di attività che invia al modello, ad eccezione delle consegne contrassegnate con il sottotipo scheduled-trigger, che portano invece un inquadramento di attività assegnata. L’avviso afferma che non si è verificato alcun input umano, quindi il modello non tratta la notifica come un’istruzione o un’approvazione dell’utente. Per rilevare un turno di notifica di attività, controlla origin.kind === "task-notification" su SDKUserMessage o SDKResultMessage piuttosto che abbinare il testo dell’avviso. Leggi subkind dallo stesso campo se hai bisogno di sapere cosa l’ha sollevato. Prima di v2.1.205, Claude Code ometteva l’avviso dalle notifiche che arrivavano mentre la sessione era inattiva.

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.
Mentre una chiamata al tool viene eseguita nella conversazione principale, Claude Code emette un messaggio tool_progress ogni 30 secondi con heartbeat: true. Ogni heartbeat contiene il nome del tool e i secondi trascorsi, quindi puoi distinguere una chiamata di lunga durata da una sessione bloccata. Claude Code non emette heartbeat per le chiamate al tool all’interno di un subagente. Il campo heartbeat richiede Agent SDK v0.3.214 o successivo. Prima di v2.1.257, Claude Code non emetteva heartbeat nemmeno per una chiamata al tool Agent in primo piano. Sui messaggi tool_progress per il tool Agent diversi dagli heartbeat, subagent_type nomina il tipo di subagente in esecuzione, come general-purpose. subagent_retry è presente mentre quel subagente attende un backoff di errore API, come un limite di velocità o un sovraccarico, con un messaggio per tentativo di ripetizione. Entrambi i campi richiedono Agent SDK v0.3.214 o successivo. Per rendere un indicatore di ripetizione da subagent_retry:
  • Traccia l’indicatore per parent_tool_use_id, che è univoco per subagente. tool_use_id è condiviso da subagenti paralleli da un turno dell’assistente, quindi tracciare per esso lascerebbe che l’aggiornamento di un subagente cancelli l’indicatore di un altro.
  • Cancella l’indicatore quando un successivo tool_progress per lo stesso parent_tool_use_id arriva senza subagent_retryheartbeat: true, o quando arriva il messaggio di risultato del tool. I frame con heartbeat: true segnalano solo vivacità, quindi mantieni l’indicatore quando uno arriva. attempt può superare max_retries sotto ripetizione persistente, quindi non derivare la cancellazione dai contatori.
  • Tratta error_category come un token per scegliere il tuo testo di messaggio, non come testo di visualizzazione. I valori sono rate_limit, overloaded, authentication_failed, server_error, cloud_credential_error e unknown. Gestisci un valore che non riconosci come gestisci unknown, perché le versioni successive possono aggiungere valori.

SDKAuthStatusMessage

Emesso durante i flussi di autenticazione.

SDKTaskStartedMessage

Emesso quando un’attività inizia. Il campo task_type è "local_bash" per i comandi Bash e i watch Monitor, "local_agent" per i subagenti, o "remote_agent".
ambient è true per le attività che non fanno parte del lavoro della sessione, come le attività che Claude Code esegue per la sua stessa operazione. I watcher di aggiornamento dal vivo sono anche ambient, inclusi i watcher che l’utente ha chiesto. Escludi le attività ambient dagli indicatori di attività. Il campo richiede Agent SDK v0.3.247 o successivo. ambient appare anche su SDKTaskNotificationMessage e su voci SDKBackgroundTasksChangedMessage. is_backgrounded e spawn_depth descrivono come Claude Code ha avviato l’attività. Entrambi i campi richiedono Agent SDK v0.3.238 o successivo.
  • is_backgrounded: Claude Code lo imposta su attività "local_agent" e "local_bash". true significa che l’attività viene eseguita in background. false significa che l’attività viene eseguita in primo piano, e la chiamata al tool che l’ha avviata rimane bloccata fino a quando l’attività non finisce o si sposta in background.
  • spawn_depth: Claude Code lo imposta solo su attività "local_agent". Un subagente che il thread principale ha generato ha profondità 1. Un subagente che un subagente di profondità 1 ha generato ha profondità 2, e così via.
Un subagente ripreso segnala sempre is_backgrounded: true, perché Claude Code esegue ogni subagente ripreso in background. Quando un’attività in primo piano si sposta in background in seguito, Claude Code segnala il nuovo valore is_backgrounded in un messaggio task_updated piuttosto che inviare un secondo task_started.

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, un agente in primo piano viene messo in background, o il campo description o ambient di un’attività cambia. 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. Quando invii una richiesta di controllo initialize ripetuta a una sessione in esecuzione, ad esempio con reinitialize() dopo un gap di trasporto, Claude Code segue la risposta con uno snapshot dell’insieme attivo corrente, anche quando è vuoto. Un host che si ricollega quindi apprende cosa è in esecuzione senza aspettare il prossimo cambio di appartenenza. Prima di Agent SDK v0.3.239, Claude Code non inviava snapshot dopo un initialize ripetuto. Richiede Claude Code v2.1.203 o successivo.

SDKThinkingTokensMessage

Emesso mentre Claude sta producendo un blocco di pensiero, incluso uno redatto. estimated_tokens è una stima in esecuzione dei token di pensiero generati finora nel blocco corrente, e estimated_tokens_delta è l’incremento portato da questo frame. Usa queste stime per la visualizzazione del progresso. Quando il modello o il provider segnala una suddivisione, il conteggio finale per il ciclo dell’agente di primo livello è il usage.output_tokens_details.thinking_tokens del messaggio di risultato, che non include i token dei subagenti. 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

Claude Code non emette questo tipo di messaggio. Quando invii un comando come /context o /usage come prompt, il suo output arriva come SDKAssistantMessage.

SDKCommandsChangedMessage

Emesso quando l’insieme dei comandi disponibili cambia durante la sessione, ad esempio quando Claude Code scopre skill 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 supportedCommands() dopo questo messaggio restituisce lo stesso elenco aggiornato, perché il metodo traccia l’ultimo push; questo richiede Agent SDK v0.3.216 o successivo. Nelle versioni SDK precedenti, supportedCommands() restituisce lo snapshot acquisito all’inizializzazione e non riflette mai i cambiamenti durante la sessione.

SDKPromptSuggestionMessage

Emesso dopo un turno quando promptSuggestions è abilitato e Claude Code ha generato un suggerimento per quel turno. Contiene il prompt utente successivo previsto. Per i turni che non ne ricevono, vedi Quando Claude Code salta i suggerimenti.

SDKConversationResetMessage

Emesso quando la conversazione della sessione viene sostituita senza terminare la sessione. In una chiamata query(), solo /clear e i suoi alias producono questo messaggio. 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.
AbortError è l’unica classe di errore nell’API tipizzata dell’SDK. Altri errori, come il processo Claude Code che esce o non riesce ad avviarsi, rifiutano l’iterazione del messaggio con errori che non portano alcuna classe SDK su cui abbinare. Troubleshooting chiave quegli errori per messaggio, con la causa e la correzione per ciascuno.

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 servizi di sistema che raggiungono al di fuori della sandbox. Ad esempio, consentire /var/run/docker.sock concede effettivamente l’accesso completo al sistema host tramite l’API Docker, bypassando l’isolamento della sandbox. Consenti solo i socket Unix strettamente necessari e comprendi le implicazioni di sicurezza di 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. I comandi elencati in excludedCommands invece bypassano la sandbox automaticamente, senza coinvolgimento del modello; vedi SandboxSettings. Nell’esempio seguente, isCommandAuthorized rappresenta un controllo di autorizzazione che definisci.
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 prompt di approvazione, a parte le azioni che nessuna modalità auto-approva. Questa combinazione consente effettivamente al modello di sfuggire all’isolamento della sandbox silenziosamente.

Vedi anche