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.

Importa l’entry /core quando raggruppi l’Agent SDK

Se la tua applicazione raggruppa l’Agent SDK insieme alle sue dipendenze, importa da @anthropic-ai/claude-agent-sdk/core invece che dalla radice del pacchetto. L’entry /core richiede Agent SDK TypeScript v0.3.282 o successivo, e i suoi tipi richiedono TypeScript 5.0 o successivo. L’entry /core esporta lo stesso query(), startup(), tool(), createSdkMcpServer() e resolveSettings() come l’entry radice, insieme alle funzioni che rinominano, taggano ed eliminano le sessioni, AbortError, le costanti di runtime e ogni tipo. Non aggiunge nomi propri. Per mantenere piccolo il codice che la tua applicazione carica, /core omette alcune esportazioni radice, inclusi prewarm(), la classe InMemorySessionStore e gli helper che elencano, leggono, biforcano, importano e riassumono le sessioni. Se ne hai bisogno di uno, usa l’entry radice. L’entry radice incorpora le sue proprie copie di zod e @modelcontextprotocol/sdk. L’entry /core le importa dal tuo node_modules negli intervalli che le peerDependencies dell’Agent SDK dichiarano, quindi un bundle che le include già non porta una seconda copia. Importa da una o dall’altra dell’entry radice o /core in un dato processo, non entrambe: sono bundle separati, e caricare entrambe ti dà due copie delle classi e dello stato dell’Agent SDK.

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. Se non conosci ancora la directory di lavoro della sessione, utilizza prewarm() invece.

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.

prewarm()

Alpha. Avvia un processo Claude Code come riserva prima di sapere quale sessione servirà, così potrai associarlo a una sessione in seguito con claim(). Utilizzalo in un’applicazione che si avvia prima che l’utente scelga una cartella. Richiede TypeScript Agent SDK v0.3.282 o successivo. prewarm() completa lo stesso handshake di inizializzazione di startup(), con il processo in attesa in options.cwd quando lo imposti e altrimenti in una directory temporanea privata sotto la tua directory di configurazione di Claude Code. La directory di lavoro della sessione, i suoi hook SessionStart, i suoi server MCP stdio, e il suo contesto CLAUDE.md e git attendono il claim. Una riserva mantiene approssimativamente da 230 a 260 MB di memoria mentre attende. Se il tuo spawnClaudeCodeProcess esegue Claude Code su un’altra macchina o in un contenitore, imposta options.cwd a una directory che esiste lì affinché la riserva attenda.
options e initializeTimeoutMs significano lo stesso che per startup(), tranne che options.cwd imposta solo la directory in cui la riserva attende. La promessa si risolve con un SpareProcess una volta che il processo ha completato il suo handshake di inizializzazione. prewarm() genera un’eccezione se options imposta resume, continue, o forkSession, perché una riserva non ha ancora una sessione. Tutto ciò che un claim non può impostare, come mcpServers, hooks, canUseTool, settingSources, systemPrompt, e plugins, è fisso per la vita della riserva, quindi mantieni una riserva per ogni set distinto di quelle opzioni e prewarm di nuovo quando cambiano.

Esempio

Prewarm all’avvio dell’applicazione, quindi claim la riserva quando l’utente avvia una sessione:

tool()

Crea una definizione di strumento MCP type-safe per l’uso con i server MCP dell’SDK.

Parametri

ToolAnnotations

Definito in @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 ha la precedenza.

Parametri

tagSession()

Etichetta una sessione. Passa null per cancellare l’etichetta. Le chiamate ripetute sono sicure; l’etichetta più recente ha la precedenza.

Parametri

forkSession()

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

Parametri

Restituisce { sessionId }, l’UUID della nuova sessione. Passalo come resume per continuare il fork. Il fork non include i checkpoint dei file della sessione originale, quindi non puoi riportarlo a un checkpoint acquisito prima del fork. forkSession() genera un’eccezione quando:
  • sessionId non è un UUID
  • la sessione non viene trovata, o non contiene messaggi
  • upToMessageId non corrisponde a nessun messaggio nella trascrizione

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 risultanti dal merge 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().

Gestire risposte API lente o bloccate

Il sottoprocesso della CLI legge diverse variabili d’ambiente che controllano i timeout delle API e il rilevamento dei blocchi. Passale tramite l’opzione env:
  • API_TIMEOUT_MS: timeout per richiesta sul client Anthropic, in millisecondi. Valore predefinito 600000. Si applica al ciclo principale e a tutti i subagent.
  • CLAUDE_CODE_MAX_RETRIES: numero massimo di nuovi tentativi API. Valore predefinito 10, con un limite di 15. Ogni nuovo tentativo ha la propria finestra API_TIMEOUT_MS. Per le esecuzioni non presidiate che devono attendere durante interruzioni più lunghe, imposta CLAUDE_CODE_RETRY_WATCHDOG=1: riprova indefinitamente in caso di errori di capacità transitori e, su Claude Code v2.1.199 o successive, alza il valore predefinito per gli altri errori transitori a 300 e rimuove il limite su questa variabile.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog dei blocchi per i subagent. Mentre il watchdog dello stream è attivo, il valore predefinito è CLAUDE_STREAM_IDLE_TIMEOUT_MS più 5 minuti, ovvero 600000 a meno che tu non aumenti quella variabile. Con il watchdog dello stream disattivato, il valore predefinito è 600000. Prima della v2.1.257, il valore predefinito era sempre 600000. Il timer si azzera a ogni evento dello stream. In caso di blocco, Claude Code interrompe il subagent e segnala il blocco al padre. Per un subagent in background, contrassegna anche l’attività come non riuscita e allega l’eventuale risultato parziale.
  • CLAUDE_ENABLE_STREAM_WATCHDOG con CLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog dello stream che interrompe la richiesta quando gli header sono arrivati ma il corpo della risposta smette di essere trasmesso. Il watchdog è attivo per impostazione predefinita per tutti i provider; imposta CLAUDE_ENABLE_STREAM_WATCHDOG=0 per disabilitarlo. CLAUDE_STREAM_IDLE_TIMEOUT_MS ha come valore predefinito 300000 e non può scendere sotto tale minimo. Dopo l’interruzione, Nuovi tentativi automatici descrive cosa fa Claude Code, in base a quanto era avanzata la risposta. Mentre il watchdog attende una risposta che un gateway dietro ANTHROPIC_BASE_URL mantiene aperta con ping keep-alive, un host che imposta includePartialMessages continua a ricevere eventi dello stream ping, quindi interpreta quei frame come segnali di attività invece di far scadere la sessione per il silenzio. Prima della v2.1.257, i frame si interrompevano 5 minuti dopo l’ultimo evento reale dello stream.

Oggetto Query

Interfaccia restituita dalla funzione query().

Metodi

applyFlagSettings()

Modifica le impostazioni di una sessione in esecuzione senza riavviare la query. Usalo quando un’impostazione priva di un setter dedicato deve cambiare a metà sessione, ad esempio per restringere permissions dopo che l’agente ha letto input non attendibile. setModel() e setPermissionMode() sono setter dedicati per quelle due chiavi; applyFlagSettings() è la forma generale che accetta qualsiasi sottoinsieme delle chiavi delle impostazioni, e passare model qui si comporta allo stesso modo di setModel(). Solo alcune chiavi hanno effetto a metà sessione:
  • Applicate al turno successivo: effortLevel, ultracode, permissions, hooks, skillOverrides, fastMode, agent. Cambiare agent applica al turno successivo anche l’override del modello e gli hook di quell’agente. Il suo prompt di sistema si applica al turno successivo oppure, in una sessione che riutilizza un prompt di sistema registrato, una volta che la sessione viene compattata.
  • Applicate durante il turno corrente: model. Se cambi model mentre Claude sta lavorando a un turno, la risposta che Claude sta già generando termina con il vecchio modello, e il resto del turno, a partire dalla chiamata successiva che Claude Code fa al modello, usa quello nuovo. I subagent mantengono il proprio modello. Prima della v2.1.212, un cambio a metà turno attendeva il turno successivo.
  • Nessun effetto a metà sessione: le opzioni del prompt di sistema. Vengono risolte una sola volta all’avvio, quindi la sessione in esecuzione mantiene il valore originale anche se la chiamata riesce. Per cambiarle, avvia una nuova sessione.
effortLevel accetta il nome di un livello di sforzo. Accetta anche "ultracode", che richiede lo sforzo xhigh con ultracode attivo. applyFlagSettings() dichiara effortLevel senza quel valore, quindi in TypeScript passa { ultracode: true, effortLevel: "xhigh" } per ottenere lo stesso risultato, oppure la sola chiave ultracode per attivare ultracode al livello di sforzo corrente della sessione. 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. Prima della v2.1.284, la sola chiave ultracode impostava anche il livello su xhigh. I valori vengono scritti nel livello delle impostazioni da flag, sottoposti a merge sopra quanto impostato all’avvio dall’opzione settings inline di query(). Si tratta dello stesso livello che la sezione sulla precedenza in questa pagina chiama opzioni programmatiche. Le chiamate successive eseguono un merge superficiale delle chiavi di primo livello. Una seconda chiamata con { permissions: {...} } sostituisce l’intero oggetto permissions della chiamata precedente invece di eseguirne un merge profondo. Per rimuovere una chiave impostata con applyFlagSettings(), passa null per quella chiave. La maggior parte delle chiavi ripiega quindi prima su un valore impostato all’avvio dall’opzione settings di query(), poi sulle fonti con precedenza inferiore. Un model rimosso torna al modello predefinito di Claude Code, anche quando un file di impostazioni imposta model. Passare undefined non ha alcun effetto perché la serializzazione JSON lo scarta. Oltre a model, tre chiavi reimpostano lo stato della sessione invece di ripiegare su un altro valore:
  • effortLevel: null riporta la sessione al livello di sforzo predefinito del modello, non all’opzione effort di query() né a un effortLevel di un file di impostazioni.
  • agent: null esegue il thread principale senza agente, a partire dal turno successivo, invece di ripristinare l’opzione agent di query() o un agent di un file di impostazioni. Se l’agente rimosso aveva applicato il proprio modello, la sessione torna al modello risolto all’avvio.
  • ultracode: null disattiva ultracode, come fa false, invece di ripristinare un valore ultracode di un file di impostazioni. La sessione mantiene il livello di sforzo corrente, quindi passa effortLevel nella stessa chiamata per cambiarlo.
Disponibile solo in modalità di input in streaming, lo stesso vincolo di setModel() e setPermissionMode(). L’esempio seguente cambia il modello attivo a metà sessione, poi rimuove l’override così che il modello torni al modello predefinito di Claude Code.
applyFlagSettings() è disponibile solo in TypeScript. L’SDK Python non espone un metodo equivalente.

updateSettings()

Scrive una chiave consentita in un file di impostazioni su disco, così che il valore persista per le sessioni successive che caricano quella fonte. Ogni fonte accetta una sola chiave, con un valore stringa:
  • "localSettings": accetta outputStyle e ne esegue il merge nel file di impostazioni locali del progetto, .claude/settings.local.json. Il nuovo stile ha effetto alla richiesta successiva della sessione.
  • "userSettings": accetta effortLevel e lo salva come livello di sforzo predefinito per il modello corrente della sessione, sotto modelSettings nel tuo file di impostazioni utente. Passare max non scrive nulla, perché max vale solo per la sessione. In ogni caso la sessione in esecuzione mantiene il livello di sforzo corrente, quindi chiama applyFlagSettings() quando vuoi cambiare anche quello. Questa fonte richiede TypeScript SDK v0.3.277 o successivo, che include Claude Code v2.1.277.
La chiamata viene rifiutata quando la richiesta contiene qualsiasi altra chiave, quando la sessione viene eseguita su un trasporto remoto e quando le settingSources della sessione escludono la fonte indicata. L’eliminazione di una chiave non è supportata.

toggleMcpServer()

Disabilitare un server lo disconnette e ne rimuove gli strumenti dalla sessione. Per i server aggiunti a metà sessione e per i server in-process, questo dipende dalla tua versione di Claude Code:
  • Un server stdio, SSE o HTTP aggiunto a metà sessione con setMcpServers(): la rimozione dei suoi strumenti richiede Claude Code v2.1.285 o successivo.
  • Un server in-process creato con createSdkMcpServer(), che tu lo abbia passato in mcpServers o con setMcpServers(): la sua disconnessione e la rimozione dei suoi strumenti richiedono Claude Code v2.1.286 o successivo. Disabilitarne uno fa inoltre fallire le sue chiamate agli strumenti ancora in esecuzione, così Claude riceve immediatamente un risultato di errore per ciascuna di esse, senza attendere che il tuo handler restituisca un valore.

WarmQuery

Handle restituito da startup(). Il sottoprocesso è già avviato 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.

SpareProcess

Alpha. Handle restituito da prewarm(): un processo Claude Code avviato che non è ancora associato a una sessione e può essere rivendicato una sola volta. Richiede TypeScript Agent SDK v0.3.282 o successivo.

Membri

options.cwd è obbligatorio. Una rivendicazione può anche impostare additionalDirectories, model, permissionMode, maxThinkingTokens, una sovrapposizione di impostazioni da flag in settings, appendSystemPrompt, title, agents e token per sessione in env. Claude Code può rifiutare una rivendicazione, ad esempio per una cartella che non esiste o per una cartella le cui impostazioni di progetto impostano env, agent o model. Dopo un rifiuto, un prompt già inviato da claim() riceve un risultato di errore il cui testo inizia con not_claimed, e la query restituita genera quindi un’eccezione. Racchiudi il ciclo della query in un blocco try per proseguire oltre l’eccezione. Quando claimed viene rifiutata con un messaggio che inizia con option_not_applied, la sessione è in esecuzione senza il model o il maxThinkingTokens che hai richiesto. Dopo qualsiasi altro rifiuto il tuo prompt non è stato eseguito, quindi avvia invece la sessione con query().

SDKControlInitializeResponse

Tipo restituito da initializationResult(). Contiene i dati di inizializzazione della sessione.
hooks_applied indica se Claude Code ha registrato gli hooks contenuti nella richiesta initialize. L’SDK invia quella richiesta una volta all’avvio della sessione e di nuovo a ogni chiamata a reinitialize(). Il campo richiede Agent SDK v0.3.238 o successivo. Claude Code omette il campo quando la richiesta non conteneva hook. Quando la richiesta conteneva hook, il valore dipende dal fatto che la richiesta sia il primo initialize della sessione e, per uno ripetuto, da come ha raggiunto la sessione:
  • true: Claude Code ha registrato gli hook. Il primo initialize di una sessione restituisce questo valore. Anche un initialize ripetuto inviato tramite lo stdin della CLI restituisce true. In quel caso gli hook della nuova richiesta sostituiscono quelli registrati in precedenza.
  • false: Claude Code ha ignorato gli hook. Un initialize ripetuto inviato a una sessione remota restituisce questo valore, così un secondo client che si unisce a una sessione non può sostituire gli hook registrati dal primo client.
Prima di Agent SDK v0.3.238, la risposta non conteneva mai il campo e Claude Code ignorava hooks a ogni initialize ripetuto. Il campo sdkMcpServerManifests della richiesta e il campo sdk_mcp_manifests_parked della risposta riguardano i server MCP SDK in-process creati con createSdkMcpServer(). La tua applicazione non imposta né legge nessuno dei due campi. claude_code_version è la versione di Claude Code del processo che esegue i turni della sessione. È lo stesso valore contenuto nel messaggio init SDKSystemMessage, quindi puoi leggere la versione della CLI prima del primo turno.
  • Il campo richiede Agent SDK v0.3.296 o successiva, che include Claude Code v2.1.296.
  • Se il campo è undefined e hai impostato pathToClaudeCodeExecutable, puntalo a Claude Code v2.1.296 o successiva.
La risposta riporta sempre fast_mode_state e, quando qualcosa blocca la modalità veloce, fast_mode_disabled_reason contiene accanto ad esso il codice del motivo, così puoi spiegare lo stato bloccato invece di ricavare di nuovo la disponibilità. Entrambi i comportamenti richiedono Claude Code v2.1.219 o successivo. Prima della v2.1.219, la risposta ometteva fast_mode_state quando la modalità veloce non era disponibile e non conteneva mai un motivo. Per i codici dei motivi e il loro significato, consulta fast_mode_disabled_reason nel messaggio di risultato. Il wrapper della risposta di controllo per un initialize riuscito contiene anche un array pending_permission_requests. Il campo si trova sul wrapper della risposta stesso, non nel payload SDKControlInitializeResponse riportato sopra. Ogni voce è un messaggio control_request completo, con la stessa forma { type: "control_request", request_id, request } che la sessione trasmette in streaming per le richieste di permesso durante l’esecuzione. L’array elenca le richieste di permesso che questo processo Claude Code ha emesso e non ha ancora risolto. L’SDK legge l’array al posto tuo e inoltra ogni voce alla tua callback canUseTool, lo stesso nuovo recapito che reinitialize() attiva dopo un’interruzione del trasporto. Gestisci gli ID di richiesta ripetuti in modo idempotente, perché una voce può ripetere una richiesta che la callback ha già ricevuto prima che la connessione cadesse. L’array è sempre presente in una risposta initialize riuscita ed è vuoto quando questo processo non ha richieste di permesso irrisolte. Richiede Claude Code v2.1.268 o successivo. Le versioni precedenti potevano omettere il campo, quindi se analizzi tu stesso il protocollo wire, considera un campo mancante come segno di una CLI meno recente e non come prova che non ci sia nulla in sospeso.

SDKControlInterruptResponse

La ricevuta dell’interruzione: il valore con cui interrupt() si risolve su una CLI che dichiara 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 con undefined.
still_queued elenca gli UUID dei messaggi utente in sospeso al momento dell’arrivo dell’interruzione: i messaggi ancora in coda, più quelli che Claude Code aveva già prelevato dalla coda per il turno successivo. Una volta avviato il primo turno della sessione, Claude Code elabora i messaggi elencati dopo l’interruzione, a meno che tu non li annulli prima, e può accorparne diversi in un unico turno. Se interrompi prima dell’avvio del primo turno, Claude Code interrompe quel turno non appena inizia, e i messaggi elencati in quel turno non ricevono risposta. Usa la ricevuta per decidere se inviare di nuovo qualcosa. Un messaggio elencato che non annulli entra nella conversazione indipendentemente dal fatto che riceva una risposta, quindi inviarlo di nuovo lo recapita a Claude due volte. Interpreta l’elenco tenendo conto di queste avvertenze:
  • Compaiono solo i messaggi accodati con un UUID. Un array vuoto non significa che non verrà eseguito nient’altro.
  • Vengono elencati solo i messaggi del thread principale. I messaggi indirizzati a un subagent non sono inclusi.
  • L’elenco può includere UUID che il tuo client non ha mai inviato, come i trigger delle attività pianificate. Ignora gli UUID che non riconosci invece di trattarli come un errore.
Un client che gestisce direttamente il protocollo di controllo della CLI, invece di passare da interrupt(), può impostare cancel_queued: true nella richiesta di controllo interrupt. Claude Code v2.1.219 e successivi dichiarano il supporto con la capacità interrupt_cancel_queued_v1 in SDKSystemMessage.capabilities; le CLI meno recenti ignorano il campo e lasciano che i messaggi in coda vengano eseguiti normalmente. Un’interruzione di questo tipo annulla anche ogni messaggio che altrimenti verrebbe elencato in still_queued: la ricevuta li elenca invece in cancelled, still_queued è vuoto e nessuno di essi viene eseguito. L’elenco cancelled ha le stesse avvertenze di still_queued. Il metodo interrupt() non invia mai cancel_queued, quindi le ricevute con cui si risolve non contengono cancelled. La ricevuta è un’istantanea acquisita nel momento in cui l’interruzione viene elaborata e, in caso di interruzione pulita, arriva prima del SDKResultMessage del turno interrotto. Leggi la ricevuta invece di ispezionare la coda dopo quel risultato: il ciclo avvia immediatamente il turno successivo in coda, quindi la coda che ispezioni dopo il risultato è già cambiata.

SDKControlGetContextUsageResponse

Tipo restituito da getContextUsage(). Con il detail predefinito, è lo stesso payload che Claude Code mostra per il comando /context in una sessione interattiva, quindi oltre ai conteggi dei token contiene campi di visualizzazione come color e gridRows che Claude Code usa per disegnare la griglia di utilizzo di /context. L’argomento facoltativo detail del metodo sceglie come Claude Code conta ogni categoria. L’argomento detail richiede Agent SDK v0.3.257 o successivo.
  • 'full': il valore predefinito. Claude Code conta ogni categoria con richieste API di conteggio dei token. Queste richieste non compaiono nel flusso dei messaggi, quindi un tracciamento dei costi basato sul flusso non le vede. Sull’API Anthropic, il conteggio dei token non viene addebitato.
  • 'summary': passa { detail: 'summary' } per ottenere invece una risposta basata sull’utilizzo dell’ultima risposta e su stime locali. Non viene inviata alcuna richiesta di conteggio dei token, e i numeri per categoria sono approssimativi.
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 restituisce il risultato. Quel campo richiede Agent SDK v0.3.232 o successivo.
Leggi l’attribuzione dei token dai campi di tipo collezione:
  • categories contiene i totali per categoria. Il campo kind di ogni voce classifica la riga con gli stessi valori di SDKContextUsageCategory. Classifica le righe in base a questo campo anziché al name visualizzato. Il campo richiede Agent SDK v0.3.268 o successivo.
  • mcpTools e agents attribuiscono i token ai singoli strumenti MCP e ai subagent.
  • memoryFiles elenca ogni file di memoria caricato con il relativo costo.
  • skills.skillFrontmatter attribuisce i token dell’elenco delle skill a ciascuna skill inclusa. I conteggi per skill misurano la voce di elenco di ciascuna skill così come Claude Code la invia effettivamente, che può essere più breve del frontmatter completo della skill. Confronta skills.totalSkills con skills.includedSkills per verificare se ogni skill rilevata è stata inclusa nell’elenco.
totalTokens è l’utilizzo corrente del contesto della sessione, e maxTokens è la finestra rispetto alla quale viene misurato tale utilizzo. Quella finestra è la finestra di contesto del modello, oppure la finestra inferiore di compattazione automatica quando applicabile. rawMaxTokens contiene lo stesso valore di maxTokens, e percentage è totalTokens espresso come percentuale arrotondata di quella finestra. apiUsage contiene l’utilizzo dell’ultima risposta API, non un totale progressivo della sessione. Claude Code lascia non impostate le diagnostiche facoltative deferredBuiltinTools, systemTools e systemPromptSections, quindi aspettati che siano assenti anche se il tipo le dichiara.

SDKControlReadFileResponse

Tipo restituito da readFile().
contents contiene il testo del file, oppure dati base64 quando hai richiesto encoding: 'base64'; in quel caso il campo encoding della risposta è impostato su 'base64'. absPath è il percorso assoluto risolto. truncated è impostato quando il file era più lungo del limite maxBytes e il contenuto è stato troncato a quel limite.

Cosa può leggere readFile()

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

SDKControlReloadPluginsResponse

Tipo restituito da reloadPlugins().
I campi di tipo collezione descrivono la sessione dopo la chiamata:
  • commands, agents e mcpServers: i comandi, i subagent e lo stato dei server MCP della sessione, nelle stesse forme restituite da supportedCommands(), supportedAgents() e mcpServerStatus(). supportedAgents() continua a restituire l’elenco acquisito all’inizializzazione, quindi leggi agents qui per ottenere l’insieme dopo un ricaricamento
  • plugins: ogni plugin caricato con il suo name e il path di installazione. version ripete quanto dichiarato nel manifest del plugin ed è controllato dall’autore del plugin, quindi convalidalo prima di considerarlo attendibile. Viene omesso quando il manifest non ne dichiara alcuno
  • error_count: il numero di errori durante il caricamento dei plugin
Passa { holdOnCacheImpact: true } a reloadPlugins() per trattenere, invece di applicarlo, un ricaricamento che invaliderebbe la cache dei prompt della conversazione. Claude Code esegue lo stesso controllo che il comando interattivo /reload-plugins effettua prima di avvisare del costo per la cache. L’opzione richiede Agent SDK v0.3.268 o successivo. Un eseguibile di Claude Code precedente alla v2.1.268, come uno a cui punti con pathToClaudeCodeExecutable, ignora l’opzione e applica il ricaricamento. Quando passi l’opzione, leggi held per sapere cosa è successo:
  • true: il ricaricamento non è stato applicato, e i campi di tipo collezione descrivono la sessione così com’è ancora. cache_impact indica cosa cambierebbe applicandolo. Per applicarlo comunque, chiama di nuovo reloadPlugins() senza l’opzione.
  • false: il controllo non ha rilevato alcun impatto sulla cache, e il ricaricamento è stato applicato.
  • Assente: non hai passato l’opzione, oppure l’eseguibile di Claude Code è precedente alla v2.1.268 e ha applicato il ricaricamento.
cache_impact è presente solo insieme a held: true. mcp_servers_added e mcp_servers_removed indicano i server MCP dei plugin che il ricaricamento registrerebbe o eliminerebbe, con nomi con ambito plugin:<plugin>:<server>. I nomi sono definiti dagli autori dei plugin, quindi convalidali prima di mostrarli. lsp_tool_change indica se l’applicazione aggiungerebbe o rimuoverebbe lo strumento LSP, oppure null quando non farebbe nessuna delle due cose. Le forme may- indicano che il controllo non è riuscito a vedere completamente l’insieme dei plugin in sospeso.

SDKControlReloadSkillsResponse

Tipo restituito da reloadSkills().
skills elenca le skill disponibili dopo il ricaricamento, nella stessa forma SlashCommand restituita da supportedCommands().

SDKControlReloadOutputStylesResponse

Tipo restituito da reloadOutputStyles().
available_output_styles elenca i nomi degli stili di output integrati e personalizzati disponibili dopo il ricaricamento.

SDKControlMcpReadResourceResponse

Tipo restituito da readMcpResource(), che contiene il risultato resources/read del server MCP. Richiede TypeScript Agent SDK v0.3.280 o successivo.
Passa a readMcpResource() il nome del server così come lo riporta mcpServerStatus() e un URI ui://, ad esempio il ui.resourceUri che uno strumento dichiara nel suo _meta. La chiamata viene rifiutata per qualsiasi altro schema di URI, per un server MCP SDK ospitato dalla tua applicazione stessa e per un server non connesso. È disponibile quando le capabilities del messaggio di init includono mcp_read_resource_v1. Ogni voce di contents è un elemento di contenuto così come il server lo ha inviato, meno qualsiasi chiave _meta con il prefisso com.anthropic/, riservato a Claude Code. blob contiene dati base64 per un elemento binario, e _meta è il _meta dell’elemento stesso, dove un server MCP Apps inserisce ui.csp e ui.permissions della risorsa. I contenuti sono HTML di terze parti non attendibile, quindi visualizzali in una sandbox.

AgentDefinition

Configurazione per un subagent definito a livello di codice.

AgentMcpServerSpec

Specifica i server MCP disponibili per un subagent. Può essere il nome di un server (stringa che fa riferimento a un server della configurazione mcpServers del genitore) oppure un record di configurazione inline dei server che associa i nomi dei server alle relative configurazioni.
Dove McpServerConfigForProcessTransport è McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.

SettingSource

Controlla da quali origini di configurazione basate sul filesystem l’SDK carica le impostazioni.

Comportamento predefinito

Quando settingSources è omesso o undefined, query() carica le stesse impostazioni del filesystem della CLI di Claude Code: utente, progetto e locali. Consulta Cosa settingSources non controlla per gli input che vengono letti indipendentemente da questa opzione e per sapere come disabilitarli.

Perché usare settingSources

Disabilitare le impostazioni del filesystem:
Caricare solo origini di impostazioni specifiche:
Per caricare le istruzioni di progetto di CLAUDE.md, includi "project" in settingSources. Consulta Modificare i prompt di sistema per capire come il caricamento di CLAUDE.md interagisce con le opzioni del prompt di sistema.

Precedenza delle impostazioni

Quando vengono caricate più origini, le impostazioni vengono unite con questa precedenza (dalla più alta alla più bassa):
  1. Impostazioni locali (.claude/settings.local.json)
  2. Impostazioni di progetto (.claude/settings.json)
  3. Impostazioni utente (~/.claude/settings.json)
Le opzioni programmatiche come agents, allowedTools e settings hanno la precedenza sulle impostazioni del filesystem utente, di progetto e locali. Le impostazioni delle policy gestite hanno la precedenza sulle opzioni programmatiche.

PermissionMode

CanUseTool

Tipo di funzione di permesso personalizzata per controllare l’uso degli strumenti. La funzione è il sostituto nell’SDK della richiesta di permesso interattiva: viene invocata solo quando il flusso di valutazione dei permessi si risolve in una richiesta di conferma. Le chiamate agli strumenti già approvate da una voce di allowedTools, da una regola allow nelle impostazioni o dalla modalità di permesso, come acceptEdits o bypassPermissions, non la invocano mai. Per controllare ogni chiamata a uno strumento, usa invece un hook PreToolUse. Una regola allow non pre-approva le azioni che nessuna modalità approva automaticamente; consulta Come vengono valutati i permessi per sapere quali di esse raggiungono la callback e cosa succede in modalità dontAsk e auto.
La callback normalmente risolve la richiesta restituendo un PermissionResult, che l’SDK riscrive sul proprio trasporto come control_response. Restituisci null solo quando la tua applicazione ha già inviato la control_response per questa richiesta tramite il proprio canale, riportando requestId; l’SDK salta quindi la scrittura della risposta sul proprio trasporto. Restituire null in qualsiasi altro caso lascia la chiamata allo strumento bloccata indefinitamente, perché nessuna control_response viene mai inviata e le richieste di permesso non vanno in timeout. L’opzione requestId e il valore di ritorno null richiedono Claude Code v2.1.199 o successiva.

PermissionResult

Risultato di un controllo dei permessi.

ToolConfig

Configurazione del comportamento degli strumenti integrati.

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 sull’uso dei plugin, consulta Plugin.

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 dicano i loro nomi:
  • 'model_not_found': il modello selezionato non esiste o non è disponibile per il tuo account o deploy
  • '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 è riuscito a ottenere credenziali AWS o Google Cloud utilizzabili sulla macchina su cui viene eseguito, quindi nessuna richiesta ha raggiunto il provider cloud. La causa abituale è un accesso al cloud scaduto o mai completato su quella macchina, anche se un servizio di credenziali brevemente irraggiungibile segnala lo stesso valore. Consulta Impossibile caricare le credenziali AWS o Google Cloud. Richiede TypeScript Agent SDK v0.3.267 o successivo, che include Claude Code v2.1.267
aborted è true quando un’interruzione o un annullamento 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. agent_id identifica il subagent che ha prodotto il messaggio ed è assente nei messaggi del thread principale. Il valore è uguale al task_id nel task_started di quel subagent e negli altri eventi di attività, e non cambia quando il subagent viene ripreso. Il campo richiede Agent SDK v0.3.292 o successiva. Associa i messaggi di un subagent ai suoi eventi di attività tramite agent_id, anziché abbinare il parent_tool_use_id di un messaggio con il tool_use_id di un evento di attività. Quando una chiamata a uno strumento riprende il subagent, gli eventi di attività riportano il tool_use_id di quella chiamata, mentre i messaggi mantengono il parent_tool_use_id della chiamata allo strumento che ha avviato per primo il subagent, quindi i due non corrispondono più. Claude Code imposta user_message_uuid e user_message_uuids sul primo messaggio dell’assistente del turno, alle condizioni descritte in user_message_uuid. Quando il turno continua un turno che un riavvio ha interrotto, i messaggi dell’assistente che portano questi campi portano anche resume_reason. timestamp è l’ora ISO 8601 in cui il contenuto del messaggio ha finito di essere generato 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 in base a esso. Un turno API può produrre diversi messaggi dell’assistente che condividono un message.id, ciascuno con il proprio timestamp. Quando il campo è assente, usa come ripiego il 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 usa come ripiego il testo markdown quando non lo è. usage_report è una copia strutturata del report di /usage, con tipo SDKUsageReport, e richiede l’Agent SDK v0.3.273 o successiva. Quando invii /usage come prompt, Claude Code consegna il report come messaggio dell’assistente il cui message.content contiene il testo. Allega usage_report a quello stesso messaggio solo quando la sessione soddisfa tutte queste condizioni:
  • La sessione si autentica con una credenziale claude.ai
  • La credenziale mostra un tipo di piano noto o include lo scope user:profile
  • L’account non usa la fatturazione basata sull’utilizzo
Un token di claude setup-token passato come CLAUDE_CODE_OAUTH_TOKEN non è idoneo per impostazione predefinita, perché include solo lo scope user:inference. Le altre sessioni, come quelle con chiave API, consegnano il testo senza il campo, così come le versioni precedenti. Leggi il report dal campo quando è presente e ricorri al testo quando non lo è.

SDKUserMessage

Messaggio di input dell’utente.
Imposta pasted_content per inviare contenuto che l’utente ha incollato nella tua interfaccia del prompt anziché digitarlo, una voce per ogni incolla, ciascuna una stringa o un array di blocchi di contenuto. Claude Code aggiunge il testo di ogni voce dopo il testo digitato, in ordine, e può racchiudere ogni incolla in tag <pasted_content>. I blocchi diversi dal testo vengono ignorati, quindi invia immagini e documenti in message.content. Richiede Agent SDK v0.3.277 o successivo. Imposta inline_pastes per indicare a Claude Code quali parti di message.content l’utente ha incollato anziché digitato, una stringa per ogni incolla. Il testo del prompt resta dove l’utente lo ha inserito. Claude Code può racchiudere ogni incolla elencata in tag <pasted_content> nella sua posizione, così Claude può distinguere il materiale incollato dalle parole dell’utente. Vengono racchiuse solo le incolla nell’ultimo blocco di testo del prompt. Richiede TypeScript Agent SDK v0.3.280 o successiva. Ogni campo per i contenuti incollati ha un limite di dimensione:
  • pasted_content: se le voci più i blocchi di contenuto al loro interno sono più di 1.000, Claude Code ignora l’intero campo.
  • inline_pastes: Claude Code usa le prime 100 voci non vuote e ignora le restanti.
Imposta shouldQuery, client_composed o priority per cambiare il modo in cui Claude Code gestisce un messaggio che invii:
  • shouldQuery: impostalo a false per aggiungere il messaggio alla trascrizione senza attivare un turno dell’assistente. Il messaggio viene trattenuto e unito al successivo messaggio utente che attiva un turno. Usalo per iniettare contesto, come l’output di un comando che hai eseguito fuori banda, senza spendere una chiamata al modello.
  • client_composed: impostalo a true per fare in modo che Claude Code consegni il testo del messaggio così come è scritto. Claude Code allora non espande le menzioni @path o @server:resource, e non esegue come comando il testo che inizia con /. Mentre l’opzione verbatimPrompts è attiva, l’SDK imposta il campo su ogni messaggio. Richiede TypeScript Agent SDK v0.3.280 o successivo e Claude Code v2.1.248 o successivo.
  • priority: controlla quando un messaggio che invii durante un turno in esecuzione raggiunge Claude:
    • 'next', o nessun campo priority: Claude legge il messaggio nello stesso turno, non appena terminano le chiamate agli strumenti in esecuzione. Se il turno termina prima, il messaggio avvia il turno successivo.
    • 'later': Claude Code trattiene il messaggio fino alla fine del turno e lo invia come nuovo turno.
    • 'now' con origin: { kind: "human" }: su Claude Code v2.1.286 o successiva, il lavoro che può proseguire in background viene spostato lì e Claude legge il messaggio nello stesso turno. Il lavoro che può essere spostato include comandi shell, subagent e chiamate agli strumenti MCP. Su v2.1.287 o successiva include anche le chiamate a WebFetch e WebSearch. Quando Claude sta solo scrivendo una risposta, o il lavoro in esecuzione non può essere spostato, Claude Code interrompe invece il turno e Claude legge il messaggio subito dopo.
    • 'now' senza quell’origine: Claude Code interrompe il turno e Claude legge il messaggio subito dopo.
Questo messaggio, inviato mentre un turno è in esecuzione, chiede a Claude di cambiare direzione senza perdere un comando shell ancora in esecuzione:
Un messaggio dell’utente prodotto da un subagent, come il tool_result di una delle sue chiamate a strumenti, riporta agent_id. Consulta SDKAssistantMessage, che definisce il campo e il relativo requisito di versione. In un messaggio che contiene un blocco tool_result, tool_use_result è l’oggetto di output strutturato dello strumento anziché il testo inviato al modello. La sua forma dipende dallo strumento indicato dal blocco tool_use corrispondente, quindi il campo è di tipo unknown; le forme integrate sono elencate in Tipi di output degli strumenti. Questi risultati richiedono una gestione che va oltre la forma elencata:
  • Lo strumento Agent: tool_use_result è AgentOutput. Esegui il rendering a partire da esso anziché analizzare il testo di tool_result. Il content di un risultato completed contiene il report del subagent oppure, per un subagent il cui report passa attraverso una chiamata allo strumento SubagentHandback, una breve nota su quella restituzione al posto del report. In modalità auto su Claude Code v2.1.271 o successiva, ogni subagent che produce un risultato completed riporta in quel modo a meno che non sia un fork, e Claude riceve il report come messaggio separato dal subagent.
  • Una chiamata a WebFetch o WebSearch che Claude Code ha spostato in background per consegnare un messaggio 'now': il messaggio dell’utente che contiene il tool_result di quella chiamata ha tool_use_result impostato su { detachedToolCall: true }. La chiamata è ancora in esecuzione e Claude ne riceve il risultato al termine. Non segue un secondo tool_result per quel tool_use_id, quindi se la tua applicazione disegna una riga per ogni chiamata a uno strumento, contrassegna questa riga come spostata in background quando arriva questo messaggio. Richiede Claude Code v2.1.287 o successiva.
  • 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 eseguire il rendering dei file restituiti dal server invece di analizzare quel testo. Claude Code omette resourceLinks quando il risultato non contiene link e nei risultati dei subagent, mantiene al massimo 50 link per risultato e smette di aggiungere link quando l’array raggiunge 64 KiB di JSON serializzato. resourceLinks richiede Agent SDK v0.3.257 o successiva.
  • Uno strumento MCP che restituisce structuredContent: tool_use_result è un oggetto il cui membro structuredContent contiene ciò che il server ha inviato e il cui membro content contiene il valore McpOutput. I risultati dei subagent non contengono structuredContent.
  • Uno strumento MCP il cui structuredContent serializzato supera 1.048.576 caratteri di JSON: Claude Code omette structuredContent da tool_use_result e imposta al suo posto structuredContentOmitted: true, così la tua applicazione può distinguere un oggetto scartato da uno strumento che non ne ha inviato alcuno. Gli altri membri, come content e resourceLinks, rimangono, e ciò che Claude riceve non cambia. Claude Code v2.1.287 o successiva applica questo limite. Due tipi di strumento fanno eccezione:
    • Gli strumenti dei server SDK in-process sono esenti e consegnano l’oggetto per intero.
    • Uno strumento la cui voce tools/list dichiara una risorsa MCP Apps ui:// ha un limite di 8.388.608 caratteri su Claude Code v2.1.295 o successiva, mentre le versioni precedenti alla v2.1.295 lo esentano.

SDKUserMessageReplay

Messaggio utente riprodotto con UUID obbligatorio.
Un turno utente iniettato dall’esterno della sessione, cioè uno il cui origin è di tipo peer o channel, raggiunge il flusso come riproduzione sia che sia stato consegnato durante un turno attivo sia che 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 compariva solo quando rileggevi la trascrizione.

SDKResultMessage

Messaggio di risultato finale.
Diversi campi del 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 completo dell’assistente. Presente solo sul ramo di successo.
  • ttft_stream_ms: tempo in millisecondi fino al primo evento di flusso message_start, quando si apre il flusso di risposta. Inferiore a ttft_ms; la differenza 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. Consulta user_message_uuid per sapere quali risultati lo contengono.
  • user_message_uuids: gli uuid di ogni messaggio che hai inviato a cui Claude Code ha risposto in questo turno. Consulta user_message_uuids.
  • resume_reason: perché questo turno continua un turno che un riavvio ha interrotto. Presente in entrambi i rami. Vedi resume_reason.
  • local_command: il nome del comando che il turno ha inviato, sul risultato di successo di un turno che un comando ha completato senza entrare nel ciclo dell’agente, come /compact. Il nome viene ridotto a lettere minuscole e trattini bassi, quindi /reload-plugins riporta reload_plugins. Un comando fornito da un server MCP, e il /mcp integrato, riportano mcp. Un comando che hai definito tu riporta custom. Gli argomenti non sono mai inclusi. Assente su ogni turno che è entrato nel ciclo dell’agente e sugli invii che non hanno eseguito alcun comando. Richiede Agent SDK v0.3.268 o successivo.
  • request_sent_wall_ms: millisecondi epoch in cui Claude Code ha inviato la richiesta API, per le join con i 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 ragionamento come contenuto. Presente solo sul ramo di successo, 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 di caricamento del primo evento di flusso del turno. Claude Code li registra solo nelle sessioni che trasmette in streaming a claude.ai, come le sessioni cloud, e i risultati prodotti da query() non li contengono. Richiede Agent SDK v0.3.260 o successivo.
  • usage: solo ciclo principale dell’agente. Esclude le chiamate dei subagent e dei modelli ausiliari, ed è per turno nelle sessioni con input in streaming. Preferisci modelUsage per il conteggio di token e costi.
  • modelUsage: totali per modello di ogni chiamata al modello effettuata attraverso la pipeline di query durante questa chiamata query(), inclusi il ciclo principale, i subagent e le chiamate interne come la compattazione e gli agenti Workflow. Le chiamate di supporto al di fuori di quella pipeline, come il classificatore dei permessi e le richieste di conteggio dei token, sono escluse. Una chiamata che riprende una sessione conta anche i totali per modello ripristinati dalle chiamate precedenti della sessione. Nelle sessioni con input in streaming i totali sono cumulativi tra i turni, quindi leggi il risultato più recente anziché sommare i risultati. Consulta Tracciare i costi in modalità input in streaming per gli azzeramenti e Recuperare i totali dopo un arresto anomalo della sessione per i risultati azzerati.
  • total_cost_usd: costo stimato cumulativo in USD, che copre le stesse chiamate di modelUsage e viene azzerato negli stessi punti. Una chiamata che riprende una sessione conta anche i totali ripristinati dalle chiamate precedenti della sessione. È una stima, non un documento di fatturazione. Consulta Tracciare costi e utilizzo per le avvertenze sull’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. Consulta queued_turn_count per sapere cosa indicano 0 e un campo assente.
  • result_index: la posizione di questo risultato nell’ordine di consegna dell’esecuzione, contando da 0 su tutti i risultati che il processo scrive. Presente su entrambi i rami. Un risultato la cui scrittura fallisce consuma comunque il suo numero, quindi un salto nella sequenza significa che un risultato è andato perso. Richiede Agent SDK v0.3.268 o successivo.
  • startup_failure_reason: il motivo per cui Claude Code si è rifiutato di avviarsi, sul risultato error_during_execution che scrive prima di uscire in caso di un errore di avvio noto. Consulta startup_failure_reason per i valori e per sapere quali errori lo contengono. Richiede Agent SDK v0.3.274 o successivo.
  • 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 la modalità veloce non è disponibile in questo momento. Assente quando nulla blocca la modalità veloce, anche se una richiesta potrebbe comunque essere eseguita a velocità standard. Durante il cooldown dopo un rate limit della modalità veloce, Claude Code riporta fast_mode_state: "cooldown" senza codice di motivo e riattiva la modalità veloce alla scadenza del cooldown. Richiede Claude Code v2.1.219 o successivo.
Usa il codice di motivo per spiegare nella tua interfaccia perché la modalità veloce è disattivata, invece di ricalcolarne la disponibilità. Ogni codice indica il controllo che ha bloccato la modalità veloce: La stessa coppia di campi compare su SDKSystemMessage e su SDKControlInitializeResponse, quindi puoi leggere lo stato della modalità veloce prima del primo turno. Il campo origin inoltra l’SDKMessageOrigin del messaggio utente che ha attivato questo risultato. Quando l’SDK inietta un turno di follow-up sintetico, ad esempio per un’attività in background terminata, l’SDKResultMessage risultante contiene origin: { kind: "task-notification" }. Anche le routine il cui trigger è scattato e i messaggi verificati dal server provenienti dalle tue altre sessioni arrivano con questo kind, ciascuno con il subkind descritto in Subkind delle notifiche di attività. Controlla kind per distinguere i risultati che rispondono al tuo prompt dai follow-up iniettati prima di instradarli o sopprimerli. Se la tua applicazione dichiara esecuzioni pianificate, anche i loro risultati contengono kind: "task-notification", quindi non sopprimere in base al solo kind. Quando più completamenti di attività in background sono in coda insieme, Claude Code può rispondere a tutti in un unico turno anziché con un turno ciascuno. Ogni completamento produce comunque il proprio risultato con questa origine. Tutti i completamenti a cui Claude Code risponde insieme tranne l’ultimo producono risultati vuoti con num_turns: 0, in ordine, e il risultato dell’ultimo contiene il turno che risponde a tutti. 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 dello strumento in sospeso. Leggi questo campo per mostrare la richiesta nella tua interfaccia, quindi riprendi con lo stesso session_id per continuare. Consulta Rinviare una chiamata a uno strumento per il percorso completo.

user_message_uuid

L’uuid dell’SDKUserMessage a cui il turno sta rispondendo, restituito in modo che tu possa abbinare la risposta di Claude Code al messaggio che hai inviato. Claude Code restituisce un uuid solo se ne hai impostato uno sul messaggio. Il campo è facoltativo su SDKUserMessage, e un prompt di tipo stringa passato a query() non ne contiene nessuno. A quale dei tuoi messaggi risponde un turno dipende da come il turno è iniziato:
  • Un messaggio normale che hai inviato, cioè uno senza isSynthetic: true: il turno risponde a quel messaggio per tutta la sua esecuzione. Quando invii più messaggi a breve distanza, Claude Code può unirli in un unico turno, e il campo contiene allora 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 inizialmente a quel messaggio. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l’altra, da quel momento il turno risponde al messaggio raccolto. La restituzione dell’uuid di un messaggio sintetico richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non restituiscono nulla sui turni sintetici.
  • Il prompt che Claude Code genera per continuare un turno interrotto con CLAUDE_CODE_RESUME_INTERRUPTED_TURN: quando l’ultimo prompt del turno interrotto è un messaggio normale che hai inviato, sia che abbia aperto il turno sia che Claude Code lo abbia raccolto durante il turno, il turno continuato risponde inizialmente a quel messaggio. resume_reason distingue i frame del turno continuato da quelli del tentativo interrotto. Quando l’ultimo prompt non è un tuo messaggio normale, il turno continuato inizialmente non risponde a nessun tuo messaggio. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l’altra, da quel momento il turno risponde al messaggio raccolto. Riportare il prompt del turno interrotto richiede Agent SDK v0.3.268 o successiva.
  • Qualsiasi altro prompt generato da Claude Code stesso: il turno inizialmente non risponde ad alcun tuo messaggio e i suoi frame non contengono alcuna restituzione. Se Claude Code raccoglie un tuo messaggio normale tra una chiamata a uno strumento e l’altra, da quel momento il turno risponde a quel messaggio. La restituzione in caso di raccolta richiede Agent SDK v0.3.265 o successivo; le versioni precedenti non restituiscono nulla su questi turni.
Claude Code restituisce 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 risultato di questo tipo lo contiene su Agent SDK v0.3.265 o successivo. Prima della v0.3.265, il risultato di successo di un turno avviato da un messaggio normale non lo conteneva quando il turno non inviava alcuna richiesta API o terminava con una chiamata a uno strumento rinviata. Prima della v0.3.246 non lo contenevano nemmeno i risultati di errore, e prima della v0.3.216 non lo conteneva alcun risultato.
  • La prima risposta del turno: il primo messaggio dell’assistente e, con includePartialMessages, anche il primo evento di flusso il cui event.type non è ping, in modo che tu possa associare la risposta prima che arrivi il risultato. La restituzione sulla prima risposta richiede Agent SDK v0.3.246 o successivo. Prima della v0.3.269, con includePartialMessages, Claude Code lo impostava solo su quel primo evento di flusso, oppure sul primo messaggio dell’assistente quando il turno non trasmetteva nulla in streaming. Quando il messaggio a cui il turno sta rispondendo cambia a metà turno, anche la prima risposta dopo il cambio contiene il campo, su Agent SDK v0.3.265 o successivo; le versioni precedenti lo impostano su un solo frame di risposta per turno.
  • Ogni frame thinking_tokens del turno: in modo che tu possa attribuire l’avanzamento del ragionamento al messaggio che hai inviato senza attendere 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 dei subagent
  • Turni che non rispondono ad alcun tuo messaggio, o che rispondono a un messaggio che hai inviato senza uuid
  • Risultati che non rispondono ad alcun messaggio che hai inviato, come il risultato azzerato dopo l’arresto anomalo di un processo worker

user_message_uuids

Gli uuid di ogni messaggio che hai inviato a cui Claude Code ha risposto in questo turno. Quando invii più messaggi a breve distanza, Claude Code può unirli in un unico turno, e user_message_uuid indica allora solo l’ultimo di essi. Per abbinare la risposta a uno qualsiasi dei messaggi uniti, cerca l’uuid di quel messaggio in qualsiasi punto di 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 dei frame del turno che restituiscono l’uuid del messaggio a cui si è risposto, e la versione richiesta da ciascuno, consulta user_message_uuid. L’elenco contiene sempre user_message_uuid e ha al massimo 64 voci. Quando Claude Code raccoglie un messaggio normale 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 usa come ripiego il campo singolo.

resume_reason

Perché questo turno continua un turno che un riavvio ha interrotto. Claude Code imposta questo campo su un turno che continua un turno interrotto con CLAUDE_CODE_RESUME_INTERRUPTED_TURN, così puoi distinguere la risposta e il risultato del turno continuato da quelli del tentativo interrotto. Richiede Agent SDK v0.3.268 o successiva. Claude Code imposta il campo su due tipi di frame:
  • Il risultato del turno continuato: sia nel ramo di successo sia in quello di errore, indipendentemente dal fatto che il risultato porti user_message_uuid.
  • I frame di risposta del turno continuato: quelli che portano user_message_uuid.
Il valore è un breve token in minuscolo, come interrupted_turn.

queued_turn_count

Il numero di messaggi che hai inviato con origin: { kind: "human" } che sono ancora in attesa nella coda dei comandi quando Claude Code ha prodotto il risultato. Richiede Agent SDK v0.3.242 o successivo. Cosa indicano 0 e un campo assente:
  • 0: Claude Code non conta i messaggi che hai inviato senza quell’origin e non conta le notifiche di attività, quindi potrebbe comunque seguire un turno.
  • 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.

startup_failure_reason

Il motivo per cui Claude Code si è rifiutato di avviarsi, in modo che la tua applicazione possa proporre la correzione invece di un nuovo tentativo. Claude Code lo imposta sul risultato error_during_execution che scrive prima di uscire in caso di un errore di avvio noto. Quel risultato contiene totali azzerati, e il suo array errors contiene lo stesso testo di stderr. Il campo è assente su ogni altro risultato. Richiede Agent SDK v0.3.274 o successivo. Imposta CLAUDE_CODE_STARTUP_FAILURE_RESULTS a 1 in env per ricevere questo risultato per ogni valore di SDKStartupFailureReason. Senza quella variabile, Claude Code scrive il risultato solo per questi errori, mentre gli altri terminano con output su stderr, un codice di uscita diverso da zero e nessun messaggio di risultato:
  • Una ripresa che Claude Code interrompe perché non riesce a riportare la sessione nel suo worktree, con worktree_unverified o worktree_resume_refused. Quella sezione indica quale errore contiene quale valore.
  • Un continue rifiutato di una conversazione trattenuta da una sessione in background, con session_held_by_background. Per un resume rifiutato di una conversazione di questo tipo, Claude Code scrive il risultato solo quando la variabile è impostata.
Ogni valore indica un rifiuto:

SDKSystemMessage

Messaggio di inizializzazione del sistema.
fast_mode_state riporta lo stato della modalità veloce della sessione. Quando qualcosa blocca la modalità veloce, fast_mode_disabled_reason indica il controllo che l’ha bloccata; il campo richiede Claude Code v2.1.219 o successivo. Per i codici di motivo e il loro significato, consulta fast_mode_disabled_reason nel messaggio di risultato. terminal_slash_commands indica le voci di slash_commands la cui interfaccia è legata al terminale locale, come exit. Puoi inviarle come qualsiasi altra voce di slash_commands; il campo esiste affinché un client remoto o mobile possa nasconderle dai propri menu dei comandi. Il campo è presente solo quando non è vuoto, e richiede Agent SDK v0.3.229 o successivo.
  • source su ogni voce di mcp_servers: la provenienza della definizione del server, con gli stessi valori del campo source di McpServerStatus. Richiede Agent SDK v0.3.274 o successivo.
  • effort: il livello di sforzo che Claude Code invia con la prossima richiesta della sessione, oppure null quando non ne invia alcuno. Claude Code imposta il campo solo sul messaggio di init che invia ai client Remote Control, e lo omette dal messaggio di init letto dalla tua applicazione. Richiede Agent SDK v0.3.234 o successivo.
L’array capabilities indica i comportamenti del protocollo implementati da questa CLI, in modo che tu possa rilevare le funzionalità invece di confrontare le stringhe claude_code_version. È un insieme aperto: ignora i valori che non riconosci e verifica la presenza della specifica capacità sul cui comportamento fai affidamento. Il campo richiede Claude Code v2.1.205 o successivo ed è assente nelle CLI precedenti. L’array plugin_errors elenca gli errori di caricamento dei plugin. Una voce descrive un plugin che non è stato caricato ed è assente da plugins, oppure un plugin che è stato caricato senza una delle sue parti, come il suo file degli hook. La chiave viene omessa quando non si è verificato alcun errore. SDKSystemMessage dichiara plugin_errors in Agent SDK v0.3.283 o successivo. Quando una directory o un archivio indicato nella tua opzione plugins non riesce a essere caricato, il campo plugin della voce contiene un tag posizionale come inline[0] invece del nome di un plugin. Questo accade, ad esempio, quando il percorso non esiste o il manifest non è valido. Abbina una voce di questo tipo alla tua opzione tramite il suo campo path. La tabella seguente elenca i campi di ogni voce di plugin_errors.

SDKPartialAssistantMessage

Messaggio parziale in streaming (solo quando includePartialMessages è true). Il campo parent_tool_use_id è sempre null: gli eventi di stream vengono emessi solo per la sessione principale. Per l’attribuzione ai subagent, usa i messaggi completi, che riportano agent_id e parent_tool_use_id, oppure abilita forwardSubagentText per ricevere il testo e il ragionamento dei subagent come messaggi completi.
Claude Code imposta user_message_uuid e user_message_uuids sul primo evento di stream non ping del turno, e di nuovo quando cambia il messaggio a cui il turno sta rispondendo, alle condizioni descritte in user_message_uuid. Quando il turno continua un turno che un riavvio ha interrotto, gli eventi di stream che portano quei campi portano anche resume_reason.

SDKCompactBoundaryMessage

Messaggio che indica un limite di compattazione della conversazione.

SDKInformationalMessage

Banner di testo generico emesso dal ciclo. Contiene avvisi, notifiche e altre righe di stato non di errore generate da Claude Code, oltre al feedback degli hook, come il motivo del blocco di un hook UserPromptSubmit. Su Claude Code v2.1.227 o successivo, il systemMessage di un hook può arrivare come questo messaggio, con ogni riga preceduta dal nome dell’hook, ad esempio PostToolUse:Bash says:. La sezione di ogni evento nella pagina degli hook indica come viene mostrato l’output. Visualizza content come testo semplice al level indicato.

SDKWorkerShuttingDownMessage

Emesso durante l’arresto ordinato del worker, in modo che i client remoti possano mostrare perché il worker è terminato invece di attendere il timeout dell’heartbeat. reason è una breve stringa in snake_case impostata dalla CLI host, come "host_exit" o "remote_control_disabled". Agisci in base a questo messaggio solo durante lo streaming in diretta. Una sessione ripresa riproduce le istanze passate di questo messaggio, quindi in quel caso ignorale.

SDKPluginInstallMessage

Evento di avanzamento dell’installazione dei plugin. Viene emesso quando CLAUDE_CODE_SYNC_PLUGIN_INSTALL è impostato, in modo che la tua applicazione Agent SDK possa monitorare l’installazione dei plugin dal marketplace prima del primo turno. Gli stati started e completed delimitano l’installazione complessiva. Gli stati installed e failed riportano i singoli marketplace e includono name.

SDKPermissionDeniedMessage

Evento di flusso emesso quando il sistema dei permessi nega una chiamata a uno strumento senza una richiesta di permesso interattiva. Usalo per mostrare il rifiuto nella tua interfaccia nel momento in cui avviene, invece di osservare solo il risultato is_error dello strumento che segue. Quali rifiuti segnala dipende da come l’esecuzione gestisce le richieste di permesso:
  • Con un callback canUseTool e il valore predefinito permissionPrompts: 'host': le richieste di permesso vanno al tuo callback, e questo evento segnala i rifiuti che Claude Code decide autonomamente senza chiamarlo.
  • Senza nessuno dei due: un’esecuzione -p semplice, o una query() che non imposta né canUseTool né permissionPromptToolName, nega qualsiasi chiamata a uno strumento che avrebbe richiesto un permesso, a meno che un hook PermissionRequest non la consenta, e questo evento riporta quei rifiuti oltre a quelli che Claude Code decide autonomamente. Prima di v2.1.223, Claude Code non emetteva questo evento nelle esecuzioni senza callback.
  • Con uno strumento di prompt MCP, impostato con permissionPromptToolName o con il flag --permission-prompt-tool, e il valore predefinito permissionPrompts: 'host': Claude Code non emette affatto questo evento, nemmeno per i rifiuti basati su regole che decide autonomamente.
  • Con permissionPrompts: 'none': Claude Code nega le chiamate che avrebbero richiesto il permesso, anche quando è impostato anche canUseTool o uno strumento di prompt MCP, e questo evento segnala quei rifiuti oltre a quelli che Claude Code decide autonomamente. Richiede Claude Code v2.1.259 o successivo.
In ogni configurazione, questo evento salta qualsiasi rifiuto deciso nel percorso dell’hook PreToolUse, sia che l’hook abbia negato direttamente la chiamata, sia che una regola di negazione abbia prevalso sulla decisione di consentire o chiedere dell’hook. L’evento è inoltre best-effort: occasionalmente Claude Code registra un rifiuto senza emettere questo evento, quindi permission_denials nel messaggio di risultato è il registro autorevole.

SDKPermissionDenial

Informazioni sull’uso negato di uno strumento.

SDKContextUsage

Forma strutturata del rapporto /context, trasportata come context_usage sull’SDKAssistantMessage che consegna un risultato /context. Agent SDK v0.3.232 e successivi esportano il tipo. A differenza di SDKControlGetContextUsageResponse, contiene solo i dati necessari per visualizzare la suddivisione dell’utilizzo, senza campi di visualizzazione come color e gridRows. Claude Code calcola il rapporto con richieste API di conteggio dei token che non compaiono nel flusso dei messaggi; consulta come vengono gestite queste richieste.
La tabella elenca cosa Claude Code inserisce in ogni campo. I campi da model a over_limit descrivono la sessione nel suo complesso, mentre i campi di tipo raccolta attribuiscono i token ai singoli elementi. over_limit.kind registra come Claude Code ha determinato la finestra, non se l’API accetta la richiesta successiva:
  • hard_limit: la finestra è quello che Claude Code ritiene sia il limite proprio del modello, oltre il quale l’API rifiuta le richieste
  • compaction_window: la finestra è una finestra definita dai criteri di compattazione, che può coincidere o meno con il limite del modello
Claude Code fa evolvere il tipo in modo additivo, aggiungendo nuovi dati come campi facoltativi anziché modificare quelli esistenti. Leggi i campi che conosci e ignora quelli che non riconosci.

SDKContextUsageCategory

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

SDKUsageReport

Forma strutturata del report di /usage, riportata come usage_report nell’SDKAssistantMessage che consegna un risultato di /usage. L’Agent SDK v0.3.273 e successive esportano il tipo. Il tipo è sperimentale: la sua forma potrebbe cambiare.
I campi di primo livello sono session e rate_limits:
  • session: i totali correnti di costo e utilizzo di Claude Code, letti dallo stesso registro di total_cost_usd e modelUsage in SDKResultMessage. Ogni voce di model_usage è un ModelUsage.
  • rate_limits: le righe di utilizzo del piano in limits e la spesa in crediti di utilizzo in extra_usage. È null quando Claude Code non è riuscito a ottenere l’utilizzo del piano, ad esempio quando al token OAuth della sessione manca lo scope user:profile.
Claude Code calcola session.total_cost_usd localmente dai conteggi dei token, quindi è una stima e non ciò che il tuo piano fattura. La spesa in crediti di utilizzo riportata dal server è il blocco separato extra_usage. Consulta Tracciare costi e utilizzo per le avvertenze sull’accuratezza. limits contiene le righe di utilizzo del server così come il server le ha inviate: quali contatori si applicano, il loro ambito, le etichette, la gravità e l’ordine sono quelli del server, quindi esegui il rendering delle righe così come sono.
  • Un array vuoto significa che il server non ha riportato alcun contatore.
  • null significa che Claude Code non ha righe da riportare.
Ogni riga di limits descrive un contatore di utilizzo: Prima dell’Agent SDK v0.3.277, il tipo dichiarava severity e is_active come facoltativi e nullable, e una riga poteva arrivare senza di essi. extra_usage è la spesa e il tetto dei crediti di utilizzo per il periodo di fatturazione così come li riporta il server, presente quando il piano dispone di crediti di utilizzo. Gli importi sono in unità minori di currency, centesimi per USD.
  • monthly_limit è null quando questo account non ha un proprio tetto di spesa. Sui piani Team ed Enterprise, non visualizzare null come illimitato.
  • is_enabled è false finché i crediti di utilizzo non possono pagare le richieste.

SDKMessageOrigin

Provenienza di un messaggio con ruolo utente. Compare come origin su SDKUserMessage e viene inoltrato al corrispondente SDKResultMessage, in modo che tu possa sapere cosa ha attivato un determinato turno.

Subkind delle notifiche di attività

Quando Claude Code consegna una notifica di attività in una sessione, imposta subkind sull’origin della notifica se i server Anthropic hanno verificato da dove proviene quella notifica. Imposta subkind anche quando è la tua applicazione stessa a dichiarare il messaggio come esecuzione pianificata, il che richiede TypeScript Agent SDK v0.3.280 o successivo. 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é è scattato uno dei trigger della routine: la sua pianificazione, il suo trigger API, il suo trigger GitHub oppure Esegui ora. Anche un prompt che la tua applicazione dichiara come esecuzione pianificata ha questo valore. Claude Code presenta questi prompt al modello come l’attività assegnata alla sessione, con un avviso diverso dall’avviso presente nelle altre notifiche di attività.
  • 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 cloud usano per scambiarsi messaggi, non con 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 questo modo non riceve alcun subkind.
Tutte le altre notifiche di attività non hanno subkind. Ciò include l’attività delle PR consegnata in una sessione e gli eventi in background come un’attività terminata. I messaggi dello strumento SendMessage tra sessioni non sono affatto notifiche di attività: sia che provengano da una sessione sulla stessa macchina, sia che arrivino da un’altra macchina attraverso i server Anthropic, Claude Code assegna loro kind: "peer" e i campi di origine peer. fireReason indica perché è scattata una notifica scheduled-trigger, come breve token in minuscolo quale scheduled, manual, retry, catch_up o api. I server Anthropic lo impostano sulle consegne di una routine, e la tua applicazione lo imposta quando dichiara un’esecuzione pianificata. È assente quando nessuno dei due ne ha inviato uno. Richiede TypeScript Agent SDK v0.3.280 o successivo. Un’attività in background può essere eseguita più di una volta con lo stesso task_id, ad esempio quando Claude riprende un subagent. Ogni esecuzione ha il proprio run_id. Quando la notifica di un’esecuzione raggiunge la tua sessione come messaggio utente, runId sull’origine task-notification di quel messaggio contiene lo stesso valore. Una notifica può arrivare dopo che l’esecuzione successiva dell’attività è iniziata, e riporta comunque l’ID dell’esecuzione precedente. Per capire a quale esecuzione appartiene un turno, confronta runId, non task_id. Richiede TypeScript Agent SDK v0.3.292 o versioni successive.

Dichiarare un’esecuzione pianificata

Se la tua applicazione esegue prompt secondo una propria pianificazione, dichiara ogni esecuzione in modo che Claude Code presenti il turno al modello come un’attività pianificata anziché come input in diretta dell’utente. Avvia la sessione con CLAUDE_CODE_HOST_SCHEDULED_RUN impostato a 1 in env, quindi invia l’SDKUserMessage dell’esecuzione con origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } e senza isSynthetic. Claude Code ignora la dichiarazione in un processo avviato senza quella variabile. La ignora anche in un processo il cui ambiente contiene CLAUDECODE o CLAUDE_CODE_CHILD_SESSION. Claude Code mantiene fireReason solo quando il valore è composto da 1 a 32 lettere minuscole o trattini bassi. Richiede TypeScript Agent SDK v0.3.280 o successivo.

Campi di origine peer

Un’origine peer identifica quale agente ha inviato il messaggio: un collega in-process che invia a main con SendMessage, oppure un peer tra sessioni, cioè un’altra delle tue sessioni Claude Code. I peer tra sessioni richiedono Claude Code v2.1.224 o successivo su macOS e Linux; consulta disponibilità della messaggistica tra sessioni per il requisito su Windows nativo. Un peer tra sessioni può essere eseguito sulla stessa macchina, oppure su un’altra delle tue macchine o nel cloud quando il suo messaggio arriva tramite Remote Control. I due tipi di mittente compilano i campi in modo diverso:
  • from: il nome del collega, oppure l’indirizzo del mittente per un peer tra sessioni. Per un messaggio unidirezionale tra macchine, il mittente non ha un indirizzo di risposta e from è "unknown". Il valore è scritto dal mittente; verifiedPeerPid è l’identità verificata.
  • fromMode: la classe di permesso della sessione mittente, bypass o prompting, dichiarata da un host che inoltra 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 visualizzato del mittente, normalizzato da Claude Code: rimuove i code point Unicode di controllo, di formato, surrogati e separatori di riga o paragrafo, quindi elimina gli spazi iniziali e finali e lo tronca a 64 code point con un’ellissi. Richiede Claude Code v2.1.205 o successivo.
  • body: il corpo del messaggio decodificato, privato dell’involucro peer, identico byte per byte a ciò che vede il modello. Presente per un singolo messaggio di un teammate, assente quando più messaggi vengono uniti; per un peer cross-session, presente solo quando il turno è esattamente un involucro peer formato da Claude Code. Visualizza name e body invece di analizzare di nuovo il testo del messaggio. Prima della v2.1.299, i messaggi uniti mantenevano il body del primo messaggio. Richiede Claude Code v2.1.205 o successiva.
  • fromSession: l’ID di sessione del mittente apribile dall’host, impostato dall’host del mittente in modo che la tua interfaccia possa rimandare alla sessione mittente. Come from, è dichiarato dal mittente: usalo solo come destinazione di navigazione e non considerarlo una prova dell’identità del mittente. Richiede Claude Code v2.1.216 o successivo.
  • verifiedPeerPid: l’ID 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. Usa questo campo, non from, per identificare il mittente: from può essere falsificato da qualsiasi processo dello stesso utente. Il campo è assente quando Claude Code non riesce a verificarlo, ad esempio su Windows o con un ingresso diverso dal socket, quindi un valore assente significa che il mittente non è verificato. Per il traffico inoltrato identifica il relay anziché l’autore del messaggio, e gli ID di processo possono essere riutilizzati, quindi consideralo un’indicazione di provenienza anziché un 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

mcp_server è presente quando lo strumento proviene da un server MCP; vedi McpServerProvenance. Gli input PostToolUse, PostToolUseFailure, PermissionRequest e PermissionDenied portano lo stesso campo. Il campo richiede Agent SDK v0.3.274 o successivo.

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 i tool Claude Code incorporati. Questi tipi vengono esportati da @anthropic-ai/claude-agent-sdk/sdk-tools 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/sdk-tools; 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 subagent viene eseguito nella modalità di permesso della sessione padre o nel permissionMode della sua definizione, e le regole di ereditarietà del subagent 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 d’ambiente esportate non persiste. Per i limiti su quali cambiamenti di directory si mantengono, vedi Cosa persiste tra i comandi. Per ciò che imposta il limite di foreground, vedi Timeout e limiti di output. Per il limite di tempo in background, vedi Limite di tempo per i comandi in background.

Monitor

Nome del tool: Monitor
Esegue una fonte in 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. timeout_ms è la scadenza del watch in millisecondi. Predefinito a 300000 e accetta valori fino a 3600000. La scadenza effettiva è al massimo 1800000, che è 30 minuti, quindi un valore accettato più grande viene accorciato a quello. Alla scadenza il watch termina e Claude riceve un avviso in modo che possa avviare un nuovo watch se ne ha ancora bisogno. Il tipo esportato contrassegna timeout_ms come obbligatorio perché lo schema riempie il valore predefinito; una chiamata che lo omette convalida. Quando Monitor esegue un comando, segue le stesse regole di permesso di Bash; un watch WebSocket richiede l’approvazione separatamente. Vedi il riferimento del tool Monitor per il comportamento e la disponibilità del provider.

TaskOutput

Rimosso in Claude Code v2.1.277, insieme al suo tipo TaskOutputInput. In precedenza recuperava l’output da un’attività in background in esecuzione o completata; Claude legge il file di output di un’attività in background con Read invece. Una voce disallowedTools o una regola di negazione che ancora nomina TaskOutput viene ignorata senza un avviso.

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").
  • allow_large consente a Claude di leggere un file di testo oltre i normali limiti di dimensione quando la finestra di contesto della sessione ha spazio. Richiede Agent SDK v0.3.296 o successivo, che include Claude Code v2.1.296.
Per un PDF, Claude riceve il contenuto del file all’interno del tool_result della chiamata Read. Una lettura che restituisce l’output pdf 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
Strumento di ricerca basato su ripgrep con supporto regex.

TaskStop

Nome del tool: TaskStop
Interrompe un’attività in background o una shell in esecuzione per ID. A partire da v2.1.198, task_id accetta anche un membro di un team di agenti o un agente in 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. offset è il numero di caratteri da saltare dall’inizio della pagina. Claude lo imposta per continuare a leggere una pagina lunga. Il campo richiede Agent SDK v0.3.290 o successivo.

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

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 dal plan mode. Il campo allowedPrompts è deprecato e ignorato; Claude Code lo accetta comunque in modo che i chiamanti e le trascrizioni 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. Al primo ingresso il target deve essere un worktree registrato del repository corrente o, in un workspace 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 branch su disco, mentre remove elimina entrambi. discard_changes deve essere true quando si rimuove un worktree che ha file non committati o commit senza merge.

EnterPlanMode

Nome del tool: EnterPlanMode
Entra nel plan mode, 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 limitati alla sessione per impostazione predefinita, 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 le 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 la 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 le routine abilitate, ed è assente quando la politica della tua organizzazione disabilita le sessioni cloud. 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

Rimosso in v2.1.275. Fino a v2.1.274, uno strumento sperimentale REPL poteva essere attivato con CLAUDE_CODE_REPL=1 nell’opzione env.

ReportFindings

Nome del tool: ReportFindings
Segnala i risultati della code review come un elenco strutturato in modo che Claude Code possa renderli invece di stamparli come testo. 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. level è facoltativo e contiene il livello di sforzo che Claude riporta per la revisione. Claude Code non lo confronta con il livello con cui è stata eseguita la revisione, quindi i due possono differire. 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. Ogni campo di seguito si applica a una pubblicazione:
  • icon: una parola generica breve per l’icona della scheda del browser dell’artifact, come chart o map. Claude la include su una prima pubblicazione e la omette su un aggiornamento, il che mantiene l’icona memorizzata dell’artifact.
  • favicon: deprecato, e Claude lo omette.
  • 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 esegue il merge delle sue modifiche su 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. limit imposta il numero massimo di artifact che un elenco restituisce, da 1 a 200. Un limit superiore a 50 richiede Agent SDK v0.3.292 o successivo. Senza limit, un elenco restituisce fino a 25 artifact.
  • 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 il valore predefinito è 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 degli strumenti

Documentazione degli schemi di output per gli strumenti Claude Code incorporati. Questi tipi vengono esportati da @anthropic-ai/claude-agent-sdk/sdk-tools e rappresentano i dati di risposta effettivi restituiti da ogni strumento.

ToolOutputSchemas

Unione di tipi di output degli strumenti esportati da @anthropic-ai/claude-agent-sdk/sdk-tools; i membri includono:

Agent

Nome dello strumento: Agent. Il nome precedente Task è ancora accettato come alias, e l’array tools nel messaggio di inizializzazione SDKSystemMessage attualmente elenca questo strumento come Task per compatibilità con le versioni precedenti.
Restituisce il risultato dal subagent. Discriminato sul campo status: "completed" per le attività finite, "async_launched" per le attività in background, e "remote_launched" per le attività che Claude Code ha inviato a una sessione cloud, dove sessionUrl si collega a quella sessione e taskId la identifica. Sulla variante completed, resolvedModel nomina il modello su cui il subagent ha iniziato, che può differire dal model input richiesto quando availableModels o un altro override si applica. Questo campo richiede Claude Code v2.1.174 o successivo. Su async_launched, nomina il modello in uso quando l’attività è passata in background. modelsUsed elenca i modelli utilizzati dal subagent, 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 del passaggio in background. Sia modelsUsed che il comportamento di passaggio in background di resolvedModel richiedono Claude Code v2.1.212 o successivo. Se Claude Code ha mantenuto il worktree isolato del subagent, worktreePath sul risultato completed è dove trovarlo. worktreeBranch è il suo branch, presente quando Claude Code ha creato il worktree con git. Claude Code riempie usage e totalTokens dalla richiesta API finale del subagent, 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 ragionamento. Il campo output_tokens_details richiede TypeScript SDK v0.3.228 o successivo, che include Claude Code v2.1.228. Il campo fallback_credit richiede TypeScript SDK v0.3.285 o successivo, che include Claude Code v2.1.285. 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 dello strumento: 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 “The user responded: …” invece dell’elenco di risposte per domanda.

Bash

Nome dello strumento: Bash
I campi stdout, stderr e backgroundTaskId contengono: timedOutAfterMs è il timeout in millisecondi, impostato quando il comando ha raggiunto il suo timeout ed è passato in background piuttosto che essere avviato 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 subagent in esecuzione in primo piano possiede un comando in background, il comando termina quando quel subagent completa la sua esecuzione. 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 subagent in background. Il campo richiede Claude Code v2.1.227 o successivo. Claude Code imposta gitOperation.commit.branch al branch indicato 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 dello strumento: Monitor
Restituisce l’ID dell’attività in background per il monitor in esecuzione. Usa questo ID con TaskStop per annullare il watch in anticipo.

Edit

Nome dello strumento: Edit
Restituisce il diff strutturato dell’operazione di modifica.

Read

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

Write

Nome dello strumento: 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 è andato in timeout

Glob

Nome dello strumento: 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 dello strumento: 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 dello strumento: TaskStop
Restituisce la conferma dopo l’interruzione dell’attività in background.

NotebookEdit

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

WebFetch

Nome dello strumento: WebFetch
Restituisce il contenuto recuperato con lo stato HTTP e i metadati. artifactRead è il record proprio di Claude Code di una lettura di artefatto, presente solo quando Claude ha recuperato un artefatto su cui 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’artefatto, ver è la versione che la lettura ha messo a registro 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 dello strumento: WebSearch
Restituisce i risultati della ricerca dal web.

Workflow

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

TaskCreate

Nome dello strumento: TaskCreate
Restituisce l’attività creata con il suo ID assegnato.

TaskUpdate

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

TaskGet

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

TaskList

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

ExitPlanMode

Nome dello strumento: ExitPlanMode
Restituisce lo stato del piano dopo l’uscita dal plan mode.

ListMcpResources

Nome dello strumento: ListMcpResourcesTool
Restituisce un array di risorse MCP disponibili.

ReadMcpResource

Nome dello strumento: ReadMcpResourceTool
Restituisce i contenuti della risorsa MCP richiesta.

EnterWorktree

Nome dello strumento: EnterWorktree
Restituisce le informazioni sul worktree git.

ExitWorktree

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

EnterPlanMode

Nome dello strumento: EnterPlanMode
Restituisce una conferma che il plan mode è stato attivato.

CronCreate

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

CronDelete

Nome dello strumento: CronDelete
Restituisce l’ID del lavoro eliminato.

CronList

Nome dello strumento: 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 dello strumento: 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 dello strumento: RemoteTrigger
Restituisce lo stato della risposta API e il corpo per l’operazione di attivazione.

PushNotification

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

ReportFindings

Nome dello strumento: ReportFindings
Restituisce il numero di risultati segnalati, il valore level passato da Claude, 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 dello strumento: 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 artefatto 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ù artefatti del limite richiesto. Negli elenchi il cui ambito non è "mine", ogni riga contiene rel che contrassegna se l’utente possiede l’artefatto o se è stato condiviso con lui, e lo scope dell’output registra quale ambito non predefinito ha prodotto l’elenco; entrambi sono assenti negli elenchi predefiniti. Un risultato di elenco riporta anche total, il numero di artefatti che corrispondono all’ambito elencato, inclusi quelli oltre limit. Quando total_at_least è impostato, quel numero è un limite inferiore e potrebbero esistere altri artefatti. Entrambi i campi richiedono Agent SDK v0.3.292 o successivo.

Projects

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

ReadMcpResourceDir

Nome dello strumento: ReadMcpResourceDirTool
Restituisce i figli diretti della risorsa directory. Le sottodirectory appaiono con mimeType "inode/directory"; error contiene un messaggio leggibile quando il server non è riuscito a elencare la directory.

RefreshMcpTools

Nome dello strumento: 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 attiva da interrogare.

ShowOnboardingRolePicker

Nome dello strumento: 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 dello strumento: nomi di strumenti 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. Per un risultato che contiene anche structuredContent o link a risorse, consulta tool_use_result, che contiene questo valore nel suo membro content. A runtime il valore può anche essere undefined, sebbene il tipo esportato non modelli questo caso.

Tipi di permesso

PermissionUpdate

Operazioni per l’aggiornamento dei permessi.

PermissionBehavior

PermissionUpdateDestination

PermissionRuleValue

Altri tipi

ApiKeySource

La provenienza della chiave API usata per le richieste della sessione, riportata come apiKeySource nel messaggio init SDKSystemMessage.
Claude Code riporta 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 meno recente continui a compilare, ma Claude Code non li riporta.

SdkBeta

Funzionalità beta disponibili che possono essere abilitate tramite l’opzione betas. Per maggiori informazioni, consulta Beta headers.
Sulla Claude API, la beta context-1m-2025-08-07 è stata ritirata per Claude Sonnet 4.5 e Claude Sonnet 4. Se la passi ancora con uno di questi modelli, le richieste che superano la finestra di contesto standard di 200K token restituiscono un errore, quindi rimuovila da betas. Per eseguire una sessione con una finestra di contesto da 1M token, imposta model su un modello che funziona con la finestra da 1M per impostazione predefinita, come claude-sonnet-5-5 o claude-opus-5-5. Per un modello che raggiunge 1M solo tramite la sua variante [1m], aggiungi il suffisso all’ID del modello, come in claude-opus-4-6[1m].

SlashCommand

Informazioni su un comando disponibile.
builtin è true su una riga quando il comando è proprio di Claude Code e digitare /name lo esegue. È assente per un comando definito da un utente, un progetto, un plugin o un server MCP, e per un comando incluso che uno di questi sostituisce per nome. Richiede Agent SDK v0.3.277 o versioni successive.

ModelInfo

Informazioni su un modello disponibile.

AgentInfo

Informazioni su un subagent disponibile che può essere invocato tramite lo strumento Agent.

McpServerProvenance

Il server MCP che fornisce uno strumento mcp__* e la provenienza della definizione di quel server. Gli input degli hook PreToolUse, PostToolUse, PostToolUseFailure, PermissionRequest e PermissionDenied lo riportano come mcp_server, e le opzioni di CanUseTool lo riportano come mcpServer. Entrambi lo omettono per gli strumenti che non provengono da un server MCP.
source assume uno dei seguenti valori. L’insieme è aperto, quindi tratta un valore che non riconosci come una sorgente configurata, mai come sdk:
  • sdk: un server in-process registrato dalla tua applicazione. Solo l’applicazione host dell’SDK può registrarne uno, quindi un server configurato non riporta mai sdk, qualunque sia il suo nome.
  • plugin: un server fornito da un plugin. Il suo name è nella forma con ambito plugin:<plugin-name>:<server-name> descritta in server MCP forniti dai plugin.
  • Un ambito di configurazione: user, project, local, dynamic, managed, enterprise, claudeai o agent. Un server di .mcp.json riporta project, e ambiti di installazione MCP definisce local, project e user. I server che la tua applicazione passa nell’opzione mcpServers, ad eccezione dei server SDK in-process, riportano dynamic.
Basa le decisioni di fiducia su source, non su name né sul prefisso mcp__<server>__ del nome dello strumento. Per qualsiasi sorgente diversa da sdk, name è testo non attendibile: eseguine l’escape prima di visualizzarlo. McpServerProvenance e i campi che lo riportano richiedono Agent SDK v0.3.274 o versioni successive.

McpServerStatus

Stato di un server MCP connesso.
source indica la provenienza della definizione del server, con gli stessi valori e la stessa regola di fiducia del source di McpServerProvenance. Il campo richiede Agent SDK v0.3.274 o versioni successive ed è assente nelle versioni precedenti. _meta in una voce di tools riporta i membri MCP Apps del _meta di quello strumento, in modo che la tua applicazione possa trovare la risorsa ui:// da visualizzare con readMcpResource(). Claude Code inoltra l’oggetto ui e la stringa piatta deprecata ui/resourceUri, e trattiene ogni altra chiave. All’interno di ui, resourceUri è una stringa ui:// e visibility un array di "model" e "app" quando il server li imposta, e qualsiasi altro membro viene inoltrato invariato. Claude Code scarta ciascuna delle due chiavi il cui valore sia malformato, e omette _meta da uno strumento che non dichiara nessuna delle due. Il campo è presente solo quando le capabilities del messaggio init includono mcp_tool_ui_meta_v1, e richiede TypeScript Agent SDK v0.3.280 o versioni successive.

McpServerStatusConfig

La configurazione di un server MCP come riportata da mcpServerStatus(). È l’unione di tutti i tipi di trasporto dei server MCP.
Consulta McpServerConfig per i dettagli su ciascun tipo di trasporto.

AccountInfo

Informazioni sull’account dell’utente autenticato.

ModelUsage

Statistiche di utilizzo per modello restituite nei messaggi di risultato. Il valore costUSD è una stima lato client. Consulta Monitorare costi e utilizzo per le avvertenze sulla fatturazione.
thinkingTokens conta i token di ragionamento generati da questo modello. outputTokens li include già, quindi non sommare i due valori. Il campo è assente finché un turno non viene eseguito su una versione di Claude Code che lo registra, quindi una sessione ripresa iniziata su una versione precedente riporta un conteggio parziale. thinkingTokens richiede Agent SDK v0.3.257 o versioni successive. I campi canonicalModel e provider richiedono Claude Code v2.1.218 o versioni successive. canonicalModel è l’ID canonico del modello usato per la ricerca dei prezzi; può differire dalla stringa grezza del modello che funge da chiave per la voce, ad esempio quando tale stringa è un ID specifico del provider o un alias. provider indica il backend API che ha servito il modello, come firstParty, bedrock, vertex, foundry, anthropicAws, mantle o gateway. costBasis indica la tabella dei prezzi usata per la richiesta più recente del modello: list per il prezzo di listino, managed per una tabella modelPricing, oppure unknown quando nessuna delle due corrisponde all’ID del modello. Il campo richiede Claude Code v2.1.246 o versioni successive.

ConfigScope

NonNullableUsage

Una versione di Usage in cui ogni campo nullable è reso non-nullable tranne fallback_credit, che può ancora essere null.

Usage

Statistiche di utilizzo dei token. È il tipo BetaUsage di @anthropic-ai/sdk.
BetaServerToolUsage, BetaIterationsUsage, BetaOutputTokensDetails e BetaFallbackCreditUsage sono definiti in @anthropic-ai/sdk. output_tokens_details suddivide l’output fatturato per categoria. Attualmente contiene un solo campo, thinking_tokens: number, che conta i token di output generati dal modello come ragionamento interno, inclusi i delimitatori dei blocchi di ragionamento. Il campo output_tokens_details richiede TypeScript SDK v0.3.228 o versioni successive, che include 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 copre il conteggio: il ragionamento grezzo prodotto dal modello, che può essere più lungo del testo di ragionamento restituito nel corpo della risposta. L’API lo calcola ri-tokenizzando quel testo grezzo, quindi può differire di alcuni token dal conteggio esatto della generazione del modello.
  • Streaming: nei messaggi dell’assistente trasmessi in streaming questa suddivisione, come output_tokens, è un segnaposto di message_start e non contiene un conteggio reale, quindi leggila dallo usage del messaggio di risultato come descritto in Leggere i token di output dal messaggio di risultato. Nel messaggio di risultato, thinking_tokens vale 0 quando il modello o il provider non riporta alcuna suddivisione.
  • Casi null: output_tokens_details stesso è null nei messaggi dell’assistente sintetizzati da Claude Code, come i messaggi di errore API.
La presenza di fallback_credit in Usage dipende dalla versione installata di @anthropic-ai/sdk, che lo ha aggiunto nella 0.115.0.

CallToolResult

Tipo di risultato degli strumenti MCP (da @modelcontextprotocol/sdk/types.js). structuredContent è un oggetto JSON che può essere restituito insieme a content, inclusi i blocchi immagine. Consulta Restituire dati strutturati.
Un file restituito per riferimento da uno strumento MCP. Claude Code costruisce ogni voce da un blocco resource_link nel risultato dello strumento e consegna l’elenco come resourceLinks in SDKUserMessage.tool_use_result, oppure come resource_links in SDKTaskNotificationMessage quando la chiamata è terminata in background. Richiede Agent SDK v0.3.257 o versioni successive.
Claude Code scarta un blocco il cui uri o name non è una stringa, e omette un campo facoltativo il cui valore non è del tipo indicato.

ThinkingConfig

Controlla il comportamento di ragionamento di Claude. Ha la precedenza sul deprecato maxThinkingTokens.
Il campo facoltativo display controlla se il testo di ragionamento viene restituito "summarized" o "omitted". Su Claude Opus 4.7 e versioni successive, il valore predefinito dell’API è "omitted", quindi imposta "summarized" per ricevere il contenuto del ragionamento nei blocchi thinking. Claude Code non passa il tuo valore di display ad alcuni provider, come Amazon Bedrock e Agent Platform di Google Cloud. Su questi provider, Opus 4.7 e versioni successive restituiscono blocchi thinking vuoti anche quando imposti display su "summarized".

SpawnedProcess

Interfaccia per la creazione personalizzata di processi (usata con l’opzione spawnClaudeCodeProcess). ChildProcess soddisfa già questa interfaccia.

SpawnOptions

Opzioni passate alla funzione di spawn personalizzata.
Il campo signal indica alla tua funzione di spawn quando terminare il processo. Passalo come opzione signal a spawn() di Node, oppure passalo al gestore di terminazione della tua VM o del tuo container.Questo segnale non si attiva nell’istante in cui Options.abortController esegue l’abort. L’SDK chiude prima lo stdin del processo e attende circa due secondi affinché la CLI possa arrestarsi correttamente, poi esegue l’abort di questo segnale. Per reagire invece nel momento in cui il chiamante esegue l’abort, rimani in ascolto sul tuo Options.abortController.signal, a cui la tua funzione di spawn può fare riferimento dallo scope che la racchiude.

McpSetServersResult

Risultato di un’operazione setMcpServers().
Quando chiami setMcpServers(), Claude Code applica queste regole:
  • Server non indicati dalla chiamata: al di fuori di una sessione cloud, Claude Code disconnette i server aggiunti da una precedente chiamata setMcpServers() e i server SDK in-process, e li elenca in removed. Gli altri server continuano a funzionare e non sono elencati in removed, tra cui i server stdio, HTTP e SSE dell’opzione mcpServers, i server dei file di impostazioni e i server forniti dai plugin.
  • Server indicati dalla chiamata: Claude Code sostituisce un server stdio, HTTP o SSE aggiunto da una precedente chiamata setMcpServers() solo quando la sua configurazione differisce da quella che hai passato. Un server SDK in-process già registrato con quel nome rimane invariato, quindi per sostituirne uno, omettilo in una chiamata e aggiungilo in quella successiva.
  • Server integrati avviati dalla CLI all’avvio: se la chiamata ne indica uno, Claude Code scarta quella voce e la riporta in errors.
La promise si risolve dopo che i server stdio, HTTP e SSE appena aggiunti si sono connessi o non sono riusciti a farlo, quindi gli strumenti dei 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 è riuscito a connettersi compare sia in added sia in errors, con il testo dell’errore in errors e una riga failed in mcpServerStatus(). Prima di Claude Code v2.1.257, un server il cui tentativo di connessione generava un’eccezione veniva riportato solo in errors.

RewindFilesResult

Risultato di un’operazione rewindFiles().
skippedLinks conta i percorsi tracciati che il rewind si è rifiutato di ripristinare o eliminare per la sicurezza dei collegamenti: un collegamento simbolico, un hard link o un altro file non regolare nel percorso tracciato, una directory padre che non si risolve più nella posizione a cui puntava quando è stato creato il checkpoint, oppure un backup che non è stato possibile leggere in modo sicuro. Il campo richiede Claude Code v2.1.216 o versioni successive. Una chiamata di anteprima con rewindFiles(userMessageId, { dryRun: true }) non lo imposta mai.

SDKStatusMessage

Messaggio di aggiornamento di stato (ad esempio, compattazione in corso).

SDKTaskNotificationMessage

Notifica inviata quando un’attività in background viene completata, fallisce o viene arrestata. Le attività in background includono i comandi Bash run_in_background, le osservazioni Monitor e i subagent in background. Per i campi run_id e ambient, consulta SDKTaskStartedMessage, che li definisce insieme ai relativi requisiti di versione.
reason è impostato quando un’attività termina per una causa diversa dal proprio completamento, fallimento o arresto, e richiede Agent SDK v0.3.273 o versioni successive. Claude Code lo imposta solo nelle sessioni che si connettono tramite claude.ai: le sessioni cloud, incluse quelle su runner self-hosted, e le sessioni Remote Control. Una chiamata query() locale non lo imposta mai. Il suo unico valore, worker_restart, significa che il processo Claude Code che eseguiva l’attività si è riavviato. La notifica riporta lo stato "stopped", quindi tratta l’attività come né completata né fallita. Quando Claude Code sposta in background una lunga chiamata a uno strumento MCP, il blocco tool_result di quella chiamata contiene solo un segnaposto e il risultato reale della chiamata arriva in questa notifica. Associa la notifica alla chiamata tramite tool_use_id. In una notifica completed, resource_links elenca i file restituiti per riferimento dallo strumento 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 conteneva link e nelle notifiche per attività che non sono chiamate a strumenti MCP. resource_links richiede Agent SDK v0.3.257 o versioni successive. Claude Code antepone un avviso a ogni notifica di attività che invia al modello, tranne le consegne contrassegnate con il subkind scheduled-trigger, che riportano invece un’impostazione da attività assegnata. L’avviso indica che non c’è stato alcun input umano, in modo che il modello non tratti la notifica come un’istruzione o un’approvazione dell’utente. Per rilevare un turno di notifica di attività, verifica origin.kind === "task-notification" su SDKUserMessage o SDKResultMessage invece di confrontare il testo dell’avviso. Leggi subkind dallo stesso campo se devi sapere cosa l’ha generata. Prima della v2.1.205, Claude Code ometteva l’avviso dalle notifiche arrivate mentre la sessione era inattiva.

SDKToolUseSummaryMessage

Riepilogo dell’utilizzo degli strumenti in una conversazione.

SDKHookStartedMessage

Emesso quando un hook inizia l’esecuzione. Claude Code consegna questo messaggio, SDKHookProgressMessage e SDKHookResponseMessage al flusso dei messaggi immediatamente, anche mentre un hook SessionStart o Setup è ancora in esecuzione durante l’avvio della sessione. Claude Code dalla v2.1.169 alla v2.1.203 consegnava questi messaggi in un unico blocco dopo il completamento di un hook SessionStart o Setup; la v2.1.204 ha ripristinato la consegna in tempo reale.

SDKHookProgressMessage

Emesso mentre un hook è in esecuzione, con l’output stdout/stderr.

SDKHookResponseMessage

Emesso quando un hook termina l’esecuzione.

SDKToolProgressMessage

Emesso periodicamente durante l’esecuzione di uno strumento per indicarne l’avanzamento.
Mentre una chiamata a uno strumento è in esecuzione nella conversazione principale, Claude Code emette un messaggio tool_progress ogni 30 secondi con heartbeat: true. Ogni heartbeat riporta il nome dello strumento e i secondi trascorsi, così puoi distinguere una chiamata di lunga durata da una sessione bloccata. Claude Code non emette heartbeat per le chiamate agli strumenti all’interno di un subagent. Il campo heartbeat richiede Agent SDK v0.3.214 o versioni successive. Prima della v2.1.257, Claude Code non emetteva heartbeat nemmeno per una chiamata allo strumento Agent in primo piano. Nei messaggi tool_progress per lo strumento Agent diversi dagli heartbeat, subagent_type indica il tipo di subagent in esecuzione, come general-purpose. subagent_retry è presente mentre quel subagent attende il backoff dopo un errore API, come un rate limit o un sovraccarico, con un messaggio per ogni nuovo tentativo. Entrambi i campi richiedono Agent SDK v0.3.214 o versioni successive. Per visualizzare un indicatore di nuovo tentativo a partire da subagent_retry:
  • Traccia l’indicatore tramite parent_tool_use_id, che è univoco per ogni subagent. tool_use_id è condiviso dai subagent paralleli avviati da uno stesso turno dell’assistente, quindi tracciarlo in base a esso permetterebbe all’aggiornamento di un subagent di cancellare l’indicatore di un altro.
  • Cancella l’indicatore quando arriva un successivo tool_progress per lo stesso parent_tool_use_id senza né subagent_retry né heartbeat: true, oppure quando arriva il messaggio di risultato dello strumento. I frame con heartbeat: true segnalano solo che la sessione è attiva, quindi mantieni l’indicatore quando ne arriva uno. attempt può superare max_retries in caso di nuovi tentativi persistenti, quindi non basare la cancellazione sui contatori.
  • Tratta error_category come un token per scegliere il testo del tuo messaggio, non come testo da visualizzare. 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 future 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 le osservazioni Monitor, "local_agent" per i subagent, oppure "remote_agent".
run_id identifica una singola esecuzione dell’attività. Quando un’attività viene eseguita di nuovo con lo stesso task_id, come un subagent che Claude riprende, la nuova esecuzione riceve un nuovo run_id. Il campo richiede Agent SDK v0.3.292 o versioni successive. Usalo per tenere distinte le esecuzioni di una stessa attività:
  • Associare i messaggi a un’esecuzione: i messaggi task_started, task_progress, task_updated e task_notification di una stessa esecuzione riportano lo stesso run_id. Lo riporta anche la voce dell’esecuzione in ogni SDKBackgroundTasksChangedMessage, così come il runId nell’origine del messaggio dell’utente che consegna la notifica dell’esecuzione.
  • Rilevare un messaggio in ritardo: confrontati come semplici stringhe, gli ID di esecuzione di un’attività si ordinano nell’ordine in cui le esecuzioni sono iniziate, quindi un messaggio il cui run_id viene ordinato prima dell’esecuzione che stai mostrando proviene da un’esecuzione precedente. A parte questo confronto, tratta il valore come opaco.
  • Ricorrere a task_id: quando un messaggio non riporta alcun run_id, come il task_notification che una sessione ripresa emette per chiudere un’attività avviata dal processo precedente, attribuiscilo tramite task_id.
Ad esempio, questi tre messaggi, ridotti ai loro campi identificativi, provengono da un subagent in background che Claude ha ripreso una volta. I due messaggi task_started condividono un task_id, e la notifica che ha terminato la prima esecuzione riporta l’ID della prima esecuzione:
ambient è true per le attività che non fanno parte del lavoro della sessione, come le attività che Claude Code esegue per il proprio funzionamento. Anche gli osservatori di aggiornamenti in tempo reale sono ambient, compresi quelli richiesti dall’utente. Escludi le attività ambient dagli indicatori di attività. Il campo richiede Agent SDK v0.3.247 o versioni successive. ambient compare anche in SDKTaskNotificationMessage e nelle voci di SDKBackgroundTasksChangedMessage. is_backgrounded e spawn_depth descrivono come Claude Code ha avviato l’attività. Entrambi i campi richiedono Agent SDK v0.3.238 o versioni successive.
  • is_backgrounded: Claude Code lo imposta sulle 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 allo strumento che l’ha avviata resta bloccata finché l’attività non termina o non passa in background.
  • spawn_depth: Claude Code lo imposta solo sulle attività "local_agent". Un subagent avviato dal thread principale ha profondità 1. Un subagent avviato da un subagent di profondità 1 ha profondità 2, e così via.
Un subagent ripreso riporta sempre is_backgrounded: true, perché Claude Code esegue ogni subagent ripreso in background. Quando un’attività in primo piano passa in seguito in background, Claude Code riporta il nuovo valore di is_backgrounded in un messaggio task_updated invece di inviare un secondo task_started. parent_task_id contiene il task_id del subagent che ha avviato questa attività. Usalo per raggruppare ogni attività sotto il subagent che l’ha avviata. Claude Code lo imposta sulle attività di subagent, Bash e Monitor. Il campo richiede Agent SDK v0.3.292 o versioni successive. È assente quando:
  • L’attività è stata avviata dal thread principale
  • Claude Code non tiene più traccia dell’attività padre
  • L’attività è stata avviata da un membro di un team di agenti o da un agente all’interno di un workflow
L’attività padre può essere un’attività in primo piano o un’attività già terminata, quindi tratta un ID che non riconosci come assenza di attività padre.

SDKTaskProgressMessage

Emesso periodicamente mentre un subagent o un’attività in background è in esecuzione. Per il campo run_id, consulta SDKTaskStartedMessage, che lo definisce insieme al relativo requisito di versione. Per un’attività di subagent, il campo summary contiene un riepilogo dell’avanzamento generato dal modello ed è popolato solo quando agentProgressSummaries è abilitato. Per una chiamata a uno strumento MCP spostata in background, summary contiene l’ultimo avanzamento riportato dal server MCP e non dipende da tale opzione.

SDKTaskUpdatedMessage

Emesso quando lo stato di un’attività in background cambia, ad esempio quando passa da running a completed. Fai il merge di patch nella tua mappa locale delle attività con chiave task_id. Il campo end_time è un timestamp Unix epoch in millisecondi, confrontabile con Date.now(). Per il campo run_id, consulta SDKTaskStartedMessage, che lo definisce insieme al relativo requisito di versione.

SDKBackgroundTasksChangedMessage

Emesso ogni volta che l’insieme delle attività in background attive cambia: un’attività inizia, viene completata o viene terminata; un agente in primo piano passa in background; oppure cambia il campo description, ambient o parent_task_id di un’attività. Per i campi run_id e parent_task_id di ciascuna voce, consulta SDKTaskStartedMessage, che li definisce insieme ai relativi requisiti di versione. L’array tasks è l’intero insieme attivo. Sostituisci qualsiasi insieme memorizzato nella cache con ogni payload invece di abbinare gli eventi task_started e task_notification, in modo che la successiva modifica dell’insieme corregga qualsiasi evento che ti sei perso. Quando un’attività termina, i suoi task_updated e task_notification arrivano prima del background_tasks_changed che la rimuove dall’elenco. Per il resto, l’ordinamento rispetto agli eventi per singola attività non è specificato. All’avvio non viene emesso nulla. Reimposta su un insieme vuoto ogni volta che il processo CLI della sessione si avvia o si riavvia e lascia che la successiva modifica dell’insieme lo ripopoli. Quando invii una richiesta di controllo initialize ripetuta a una sessione in esecuzione, ad esempio con reinitialize() dopo un’interruzione del trasporto, Claude Code fa seguire alla risposta un’istantanea dell’insieme attivo corrente, anche quando è vuoto. Un host che si riconnette scopre quindi cosa è in esecuzione senza attendere la successiva modifica dell’insieme. Prima di Agent SDK v0.3.239, Claude Code non inviava alcuna istantanea dopo un initialize ripetuto. Richiede Claude Code v2.1.203 o versioni successive.
subagent_type indica il tipo di subagent nelle voci il cui task_type è "local_agent", come general-purpose o il nome di un subagent personalizzato. Il campo richiede Agent SDK v0.3.293 o versioni successive.

SDKThinkingTokensMessage

Emesso mentre Claude produce un blocco di ragionamento, incluso uno oscurato. estimated_tokens è una stima progressiva dei token di ragionamento generati finora nel blocco corrente, e estimated_tokens_delta è l’incremento riportato da questo frame. Usa queste stime per visualizzare l’avanzamento. Quando il modello o il provider riporta una suddivisione, il conteggio finale per il ciclo dell’agente di primo livello è usage.output_tokens_details.thinking_tokens del messaggio di risultato, che non include i token dei subagent. Richiede Claude Code v2.1.153 o versioni successive.

SDKSessionStateChangedMessage

Emesso quando Claude Code riporta lo stato della sessione. Per ricevere questi messaggi, imposta CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1. Claude Code può riportare lo stesso stato più di una volta, quindi interpreta un messaggio come lo stato corrente della sessione piuttosto che come una transizione. Il campo state contiene uno di questi valori:
  • running: la sessione sta lavorando.
  • idle: Claude Code è in attesa del tuo prossimo prompt.
  • requires_action: la sessione è bloccata in attesa di una risposta a una richiesta inviata al tuo host, come una richiesta di permesso.
Il messaggio idle di un turno e il suo messaggio result possono arrivare in qualsiasi ordine. Per cambiare se idle attende il lavoro in background, come un subagent in background o un’esecuzione di un workflow, consulta CLAUDE_CODE_BG_TASKS_REPORT_RUNNING.

SDKFilesPersistedEvent

Emesso quando i checkpoint dei file vengono salvati su disco.

SDKRateLimitEvent

Emesso quando la sessione incontra un rate limit.
Quando errorCode è "credits_required", il rifiuto proviene da un abbonamento claude.ai il cui utilizzo incluso è esaurito, e la sessione non può continuare finché l’utente non acquista crediti di utilizzo. canUserPurchaseCredits indica se l’utente autenticato può acquistare crediti per l’account, e hasChargeableSavedPaymentMethod indica se è registrato un metodo di pagamento salvato. Tutti e tre i campi sono assenti negli eventi di rate limit che non sono rifiuti per crediti richiesti. Richiede Claude Code v2.1.181 o versioni successive.

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 delle skill mentre l’agente entra in una sottodirectory. L’array commands è l’intero elenco 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 segue l’invio più recente; questo richiede Agent SDK v0.3.216 o versioni successive. Nelle versioni precedenti dell’SDK, supportedCommands() restituisce l’istantanea acquisita all’inizializzazione e non riflette mai le modifiche durante la sessione. Claude Code emette questo messaggio anche quando i prompt di un server MCP entrano o escono dall’elenco, ad esempio quando un server finisce di connettersi dopo l’avvio della sessione. Questo richiede Claude Code v2.1.281 o versioni successive.

SDKPromptSuggestionMessage

Emesso dopo un turno quando promptSuggestions è abilitato e Claude Code ha generato un suggerimento per quel turno. Contiene il prossimo prompt dell’utente previsto. Per i turni che non ne ricevono, consulta 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 campi facoltativi descrivono il reset:
  • trigger: cosa ha scartato la conversazione. Reimposta la tua trascrizione a ogni messaggio conversation_reset, incluso uno in cui questo campo è assente o contiene un valore che non riconosci.
  • user_message_uuid: l’uuid del messaggio dell’utente che conteneva il /clear. Usalo per associare il reset a quel messaggio.
  • timestamp: quando è avvenuto il reset, come stringa ISO 8601 in UTC. Usalo per la visualizzazione, non per ordinare i messaggi.
I campi trigger, user_message_uuid e timestamp richiedono Claude Code v2.1.281 o versioni successive. Le tipizzazioni pubblicate dell’SDK dichiarano SDKConversationResetMessage in Claude Code v2.1.203 e versioni successive. Prima della v2.1.203, SDKMessage faceva riferimento al tipo senza dichiararlo, quindi il restringimento su type === "conversation_reset" non superava il controllo dei tipi quando skipLibCheck era disabilitato.

AbortError

Classe di errore personalizzata per le operazioni di abort.
AbortError è l’unica classe di errore nell’API tipizzata dell’SDK. Gli altri errori, come l’uscita o il mancato avvio del processo Claude Code, rifiutano l’iterazione dei messaggi con errori che non hanno alcuna classe dell’SDK su cui fare il confronto. Risoluzione dei problemi classifica questi errori in base al messaggio, con la causa e la soluzione 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. Le tue voci excludedCommands invece escono dalla sandbox senza coinvolgimento del modello; sandbox.excludedCommands copre quando una voce si applica. 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