Vai al contenuto principale

Installazione

Installare il pacchetto in un ambiente virtuale. Su recenti installazioni di Debian, Ubuntu e Homebrew Python, l’esecuzione di pip install su Python di sistema fallisce con error: externally-managed-environment.
Per uv, Windows PowerShell e configurazione della chiave API, vedere Iniziare nella panoramica di Agent SDK.

Scelta tra query() e ClaudeSDKClient

Python SDK fornisce due modi per interagire con Claude Code:

Confronto rapido

Quando usare query() (attività una tantum)

Migliore per:
  • Domande una tantum dove non hai bisogno della cronologia della conversazione
  • Attività indipendenti che non richiedono contesto da scambi precedenti
  • Script di automazione semplici
  • Quando vuoi un nuovo inizio ogni volta

Quando usare ClaudeSDKClient (conversazione continua)

Migliore per:
  • Continuare conversazioni - Quando hai bisogno che Claude ricordi il contesto
  • Domande di follow-up - Costruire su risposte precedenti
  • Applicazioni interattive - Interfacce chat, REPL
  • Logica guidata dalla risposta - Quando l’azione successiva dipende dalla risposta di Claude
  • Controllo della sessione - Gestire il ciclo di vita della conversazione in modo esplicito

Funzioni

query()

Crea una nuova sessione per ogni interazione con Claude Code per impostazione predefinita. Restituisce un iteratore asincrono che produce messaggi man mano che arrivano. Ogni chiamata a query() inizia da zero senza memoria di interazioni precedenti a meno che non passiate continue_conversation=True o resume in ClaudeAgentOptions. Vedi Sessions.

Parametri

Restituisce

Restituisce un AsyncIterator[Message] che produce messaggi dalla conversazione.

Esempio - Con opzioni

tool()

Decoratore per definire strumenti MCP con sicurezza dei tipi.

Parametri

Opzioni dello schema di input

  1. Mappatura di tipo semplice (consigliato):
  2. Formato JSON Schema (per validazione complessa):

Restituisce

Una funzione decoratore che avvolge l’implementazione dello strumento e restituisce un’istanza SdkMcpTool.

Esempio

ToolAnnotations

Riesportato da mcp.types (disponibile anche come from claude_agent_sdk import ToolAnnotations). Tutti i campi sono suggerimenti opzionali; i client non dovrebbero fare affidamento su di essi per decisioni di sicurezza.

create_sdk_mcp_server()

Crea un server MCP in-process che viene eseguito all’interno della tua applicazione Python.

Parametri

Restituisce

Restituisce un oggetto McpSdkServerConfig che può essere passato a ClaudeAgentOptions.mcp_servers.

Esempio

list_sessions()

Elenca le sessioni passate con metadati. Filtra per directory di progetto o elenca le sessioni in tutti i progetti. Sincrono; restituisce immediatamente.

Parametri

Tipo di ritorno: SDKSessionInfo

Esempio

Stampa le 10 sessioni più recenti per un progetto. I risultati sono ordinati per last_modified decrescente, quindi il primo elemento è il più recente. Ometti directory per cercare in tutti i progetti.

get_session_messages()

Recupera i messaggi da una sessione passata. Sincrono; restituisce immediatamente.

Parametri

Tipo di ritorno: SessionMessage

Esempio

get_session_info()

Legge i metadati per una singola sessione per ID senza scansionare la directory del progetto completo. Sincrono; restituisce immediatamente.

Parametri

Restituisce SDKSessionInfo, o None se la sessione non viene trovata.

Esempio

Cerca i metadati di una singola sessione senza scansionare la directory del progetto. Utile quando hai già un ID di sessione da un’esecuzione precedente.

rename_session()

Rinomina una sessione aggiungendo una voce di titolo personalizzato. Le chiamate ripetute sono sicure; il titolo più recente vince. Sincrono.

Parametri

Genera ValueError se session_id non è un UUID valido o title è vuoto; FileNotFoundError se la sessione non può essere trovata.

Esempio

Rinomina la sessione più recente in modo che sia più facile da trovare in seguito. Il nuovo titolo appare in SDKSessionInfo.custom_title nelle letture successive.

tag_session()

Etichetta una sessione. Passa None per cancellare l’etichetta. Le chiamate ripetute sono sicure; l’etichetta più recente vince. Sincrono.

Parametri

Genera ValueError se session_id non è un UUID valido o tag è vuoto dopo la sanitizzazione; FileNotFoundError se la sessione non può essere trovata.

Esempio

Etichetta una sessione, quindi filtra per quell’etichetta in una lettura successiva. Passa None per cancellare un’etichetta esistente.

Classi

ClaudeSDKClient

Mantiene una sessione di conversazione in più scambi. Questo è l’equivalente Python di come la funzione query() di TypeScript SDK funziona internamente - crea un oggetto client che può continuare le conversazioni.

Caratteristiche principali

  • Continuità della sessione: Mantiene il contesto della conversazione in più chiamate query()
  • Stessa conversazione: La sessione conserva i messaggi precedenti
  • Supporto per interruzioni: Può interrompere l’esecuzione a metà attività
  • Ciclo di vita esplicito: Controlli quando la sessione inizia e termina
  • Flusso guidato dalla risposta: Può reagire alle risposte e inviare follow-up
  • Strumenti personalizzati e hooks: Supporta strumenti personalizzati (creati con il decoratore @tool) e hooks

Metodi

Supporto Context Manager

Il client può essere utilizzato come context manager asincrono per la gestione automatica della connessione:
Importante: Quando iteri sui messaggi, evita di usare break per uscire anticipatamente poiché questo può causare problemi di pulizia asyncio. Invece, lascia che l’iterazione si completi naturalmente o usa flag per tracciare quando hai trovato quello che cerchi.

Esempio - Continuare una conversazione

Esempio - Input streaming con ClaudeSDKClient

Esempio - Utilizzo di interruzioni

Comportamento del buffer dopo l’interruzione: interrupt() invia un segnale di arresto ma non cancella il buffer dei messaggi. I messaggi già prodotti dall’attività interrotta, incluso il suo ResultMessage (con subtype="error_during_execution"), rimangono nel flusso. Devi drenare con receive_response() prima di leggere la risposta a una nuova query. Se invii una nuova query immediatamente dopo interrupt() e chiami receive_response() una sola volta, riceverai i messaggi dell’attività interrotta, non la risposta della nuova query.

Esempio - Controllo avanzato delle autorizzazioni

Tipi

@dataclass vs TypedDict: Questo SDK utilizza due tipi di tipi. Le classi decorate con @dataclass (come ResultMessage, AgentDefinition, TextBlock) sono istanze di oggetti in fase di esecuzione e supportano l’accesso agli attributi: msg.result. Le classi definite con TypedDict (come ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput) sono dicts semplici in fase di esecuzione e richiedono l’accesso alle chiavi: config["budget_tokens"], non config.budget_tokens. La sintassi di chiamata ClassName(field=value) funziona per entrambi, ma solo le dataclass producono oggetti con attributi.

SdkMcpTool

Definizione per uno strumento SDK MCP creato con il decoratore @tool.

Transport

Classe base astratta per implementazioni di trasporto personalizzate. Usala per comunicare con il processo Claude su un canale personalizzato (ad esempio, una connessione remota invece di un subprocess locale).
Questa è un’API interna di basso livello. L’interfaccia potrebbe cambiare nelle versioni future. Le implementazioni personalizzate devono essere aggiornate per corrispondere a eventuali modifiche dell’interfaccia.
Importazione: from claude_agent_sdk import Transport

ClaudeAgentOptions

Dataclass di configurazione per le query Claude Code.

Gestisci risposte API lente o bloccate

Il subprocess CLI legge diverse variabili di ambiente che controllano i timeout dell’API e il rilevamento dei blocchi. Passale attraverso ClaudeAgentOptions.env:
  • API_TIMEOUT_MS: timeout per richiesta sul client Anthropic, in millisecondi. Predefinito 600000. Si applica al ciclo principale e a tutti i subagenti.
  • CLAUDE_CODE_MAX_RETRIES: numero massimo di tentativi API. Predefinito 10, limitato a 15. Ogni tentativo ottiene la propria finestra API_TIMEOUT_MS, quindi il tempo di parete nel caso peggiore è approssimativamente API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) più backoff. Per esecuzioni incustodite che devono attendere interruzioni più lunghe, imposta CLAUDE_CODE_RETRY_WATCHDOG=1: ritenta gli errori di capacità indefinitamente, e a partire da Claude Code v2.1.199 aumenta il valore predefinito per altri errori transitori a 300 e rimuove il limite su questa variabile.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog di blocco per i subagenti lanciati con run_in_background. Predefinito 600000. Si ripristina su ogni evento di flusso; in caso di blocco interrompe il subagente, contrassegna l’attività come non riuscita e presenta l’errore al genitore con qualsiasi risultato parziale. Non si applica ai subagenti sincroni.
  • CLAUDE_ENABLE_STREAM_WATCHDOG con CLAUDE_STREAM_IDLE_TIMEOUT_MS: interrompe la richiesta quando le intestazioni sono arrivate ma il corpo della risposta smette di trasmettere. Il watchdog è attivo per impostazione predefinita per tutti i provider; imposta CLAUDE_ENABLE_STREAM_WATCHDOG=0 per disabilitarlo. CLAUDE_STREAM_IDLE_TIMEOUT_MS predefinito a 300000 e viene bloccato a quel minimo. La richiesta interrotta passa attraverso il percorso di ripetizione normale.

OutputFormat

Configurazione per la validazione dell’output strutturato. Passa questo come dict al campo output_format su ClaudeAgentOptions:

SystemPromptPreset

Configurazione per l’utilizzo del prompt di sistema preset di Claude Code con aggiunte opzionali.

SystemPromptFile

Configurazione per il caricamento di un prompt di sistema personalizzato da un file invece di passarlo come stringa. L’SDK mappa questo al flag CLI --system-prompt-file. Usa il modulo file quando il prompt è grande: l’SDK passa una stringa system_prompt sull’argv del subprocess CLI, che è soggetto ai limiti di lunghezza della riga di comando del sistema operativo prima che l’SDK invii qualsiasi richiesta API. Su Linux un singolo argomento più lungo di circa 128 KB fallisce al spawn del processo con Argument list too long. Su Windows l’intera riga di comando è limitata a circa 32 KB, quindi il modulo stringa fallisce a una soglia inferiore.

SettingSource

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

Comportamento predefinito

Quando setting_sources è omesso o None, query() carica le stesse impostazioni del filesystem della CLI di Claude Code: utente, progetto e locale. Le impostazioni della politica gestita vengono caricate in tutti i casi; le impostazioni gestite dal server vengono recuperate quando la sessione si autentica con una credenziale organizzativa su una configurazione idonea. Vedi Cosa settingSources non controlla per gli input che vengono letti indipendentemente da questa opzione, e come disabilitarli.

Perché usare setting_sources

Disabilita le impostazioni del filesystem:
In Python SDK 0.1.59 e versioni precedenti, un elenco vuoto era trattato come l’omissione dell’opzione, quindi setting_sources=[] non disabilitava le impostazioni del filesystem. Aggiorna a una versione più recente se hai bisogno che un elenco vuoto abbia effetto. TypeScript SDK non è interessato.
Carica tutte le impostazioni del filesystem in modo esplicito:
Carica solo fonti di impostazioni specifiche:
Ambienti di test e CI:
Applicazioni solo SDK:
Caricamento delle istruzioni del progetto CLAUDE.md:

Precedenza delle impostazioni

Quando più fonti vengono caricate, le impostazioni vengono unite con questa precedenza (da più alta a 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 e allowed_tools sovrascrivono le impostazioni del filesystem utente, progetto e locale. Le impostazioni della politica gestita hanno la precedenza sulle opzioni programmatiche.

AgentDefinition

Configurazione per un subagente definito programmaticamente.
I nomi dei campi AgentDefinition usano camelCase, come disallowedTools, permissionMode e maxTurns. Questi nomi si mappano direttamente al formato wire condiviso con TypeScript SDK. Questo differisce da ClaudeAgentOptions, che usa Python snake_case per i campi di livello superiore equivalenti come disallowed_tools e permission_mode. Poiché AgentDefinition è una dataclass, passare una parola chiave snake_case genera un TypeError al momento della costruzione.

PermissionMode

Modalità di autorizzazione per controllare l’esecuzione dello strumento.

EffortLevel

Livelli di sforzo per guidare la profondità del pensiero.

CanUseTool

Alias di tipo per le funzioni di callback di autorizzazione dello strumento.
Il callback riceve:
  • tool_name: Nome dello strumento che viene chiamato
  • input_data: I parametri di input dello strumento
  • context: Un ToolPermissionContext con informazioni aggiuntive
Restituisce un PermissionResult (sia PermissionResultAllow che PermissionResultDeny). Il callback è il sostituto SDK per il prompt di autorizzazione interattivo: viene invocato solo quando il flusso di valutazione delle autorizzazioni si risolve in un prompt. Le chiamate dello strumento già approvate da una voce allowed_tools, una regola di autorizzazione nelle impostazioni, o la modalità di autorizzazione, come acceptEdits o bypassPermissions, non lo invocano mai. Per controllare ogni chiamata dello strumento, usa un hook PreToolUse invece. AskUserQuestion, strumenti MCP contrassegnati requiresUserInteraction, e strumenti connettore che la tua organizzazione ha impostato su ask lo raggiungono anche quando una regola di autorizzazione corrisponde. In modalità dontAsk queste chiamate vengono negate invece, senza invocare il callback.

ToolPermissionContext

Informazioni di contesto passate ai callback di autorizzazione dello strumento.

PermissionResult

Tipo di unione per i risultati del callback di autorizzazione.

PermissionResultAllow

Risultato che indica che la chiamata dello strumento deve essere consentita.

PermissionResultDeny

Risultato che indica che la chiamata dello strumento deve essere negata.

PermissionUpdate

Configurazione per l’aggiornamento delle autorizzazioni a livello di programmazione.

PermissionRuleValue

Una regola da aggiungere, sostituire o rimuovere in un aggiornamento delle autorizzazioni.

ToolsPreset

Configurazione degli strumenti preset per l’utilizzo del set di strumenti predefinito di Claude Code.

ThinkingConfig

Controlla il comportamento del pensiero esteso. Un’unione di tre configurazioni:
Il campo opzionale display controlla se il testo di pensiero viene restituito "summarized" o "omitted". Su Claude Opus 4.7 e versioni successive, l’impostazione predefinita dell’API è "omitted", quindi imposta "summarized" per ricevere il contenuto di pensiero negli output ThinkingBlock. Poiché queste sono classi TypedDict, sono dicts semplici in fase di esecuzione. Costruiscile come letterali dict o chiama la classe come costruttore; entrambi producono un dict. Accedi ai campi con config["budget_tokens"], non config.budget_tokens:

SdkBeta

Tipo letterale per le funzionalità beta dell’SDK.
Usa con il campo betas in ClaudeAgentOptions per abilitare le funzionalità beta.
La beta context-1m-2025-08-07 è ritirata a partire dal 30 aprile 2026. Passare questo header con Claude Sonnet 4.5 o Sonnet 4 non ha effetto, e le richieste che superano la finestra di contesto standard di 200k token restituiscono un errore. Per utilizzare una finestra di contesto di 1M token, esegui la migrazione a Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Opus 4.7, o Claude Opus 4.8, che includono 1M di contesto a prezzi standard senza header beta richiesto.

McpSdkServerConfig

Configurazione per i server MCP dell’SDK creati con create_sdk_mcp_server().

McpServerConfig

Tipo di unione per le configurazioni del server MCP.

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

La configurazione di un server MCP come riportato da get_mcp_status(). Questa è l’unione di tutte le varianti di trasporto McpServerConfig più una variante di output-only claudeai-proxy per i server proxy attraverso claude.ai.
McpSdkServerConfigStatus è la forma serializzabile di McpSdkServerConfig con solo i campi type ("sdk") e name (str); l’instance in-process viene omesso. McpClaudeAIProxyServerConfig ha i campi type ("claudeai-proxy"), url (str), e id (str).

McpStatusResponse

Risposta da ClaudeSDKClient.get_mcp_status(). Avvolge l’elenco degli stati del server sotto la chiave mcpServers.

McpServerStatus

Stato di un server MCP connesso, contenuto in McpStatusResponse.

SdkPluginConfig

Configurazione per il caricamento dei plugin nell’SDK.
Esempio:
Per informazioni complete sulla creazione e l’utilizzo dei plugin, vedi Plugin.

Tipi di messaggio

Message

Tipo di unione di tutti i possibili messaggi.

UserMessage

Messaggio di input dell’utente.

AssistantMessage

Messaggio di risposta dell’assistente con blocchi di contenuto.

AssistantMessageError

Possibili tipi di errore per i messaggi dell’assistente.

SystemMessage

Messaggio di sistema con metadati.

ResultMessage

Messaggio di risultato finale con informazioni su costo e utilizzo.
Il campo subtype determina quali altri campi sono popolati. È uno di "success", "error_during_execution", "error_max_turns", "error_max_budget_usd", o "error_max_structured_output_retries". La dataclass Python appiattisce tutte le varianti in una forma, quindi i campi che non si applicano al subtype restituito sono None. Diversi campi portano dettagli diagnostici quando la conversazione termina con un errore:
  • is_error: True quando la conversazione è terminata in uno stato di errore. Sempre True sui subtype error_*. Su subtype="success" è True quando la richiesta del modello finale ha fallito, il che significa che il ciclo dell’agente è stato completato ma l’ultima chiamata API ha restituito un errore.
  • api_error_status: il codice di stato HTTP dell’errore API terminale. None quando il turno è terminato senza uno. Popolato solo su subtype="success".
  • result: testo del messaggio dell’assistente finale su subtype="success", o None sui subtype error_*. Quando subtype="success" e is_error=True, questo contiene la stringa di errore API se disponibile ma può essere vuoto, quindi controlla api_error_status e il contenuto di AssistantMessage precedente per i dettagli.
  • errors: stringhe di errore a livello di ciclo come il messaggio max-turns. Popolato solo sui subtype error_*.
Il dict usage contiene le seguenti chiavi quando presenti: Il dict model_usage mappa i nomi dei modelli all’utilizzo per modello. Le chiavi del dict interno usano camelCase perché il valore viene passato senza modifiche dal processo CLI sottostante, corrispondendo al tipo TypeScript ModelUsage:

StreamEvent

Evento di flusso per aggiornamenti di messaggi parziali durante lo streaming. Ricevuto solo quando include_partial_messages=True in ClaudeAgentOptions. Importa tramite from claude_agent_sdk.types import StreamEvent.

RateLimitEvent

Emesso quando lo stato del limite di velocità cambia (ad esempio, da "allowed" a "allowed_warning"). Usalo per avvertire gli utenti prima che raggiungano un limite rigido, o per fare backoff quando lo stato è "rejected".

RateLimitInfo

Stato del limite di velocità trasportato da RateLimitEvent.

TaskStartedMessage

Emesso quando un’attività in background inizia. Un’attività in background è qualsiasi cosa tracciata al di fuori del turno principale: un comando Bash in background, un watch Monitor, un subagente generato tramite lo strumento Agent, o un agente remoto. Il campo task_type ti dice quale. Questo nome non è correlato al rinomina dello strumento Task-to-Agent.

TaskUsage

Dati di token e timing per un’attività in background.

TaskProgressMessage

Emesso periodicamente con aggiornamenti di progresso per un’attività in background in esecuzione.

TaskNotificationMessage

Emesso quando un’attività in background si completa, fallisce o viene interrotta. Le attività in background includono comandi Bash run_in_background, watch Monitor e subagenti in background.

Tipi di blocco di contenuto

ContentBlock

Tipo di unione di tutti i blocchi di contenuto.

TextBlock

Blocco di contenuto di testo.

ThinkingBlock

Blocco di contenuto di pensiero (per modelli con capacità di pensiero).

ToolUseBlock

Blocco di richiesta di utilizzo dello strumento.

ToolResultBlock

Blocco di risultato dell’esecuzione dello strumento.

Tipi di errore

ClaudeSDKError

Classe di eccezione base per tutti gli errori dell’SDK.

CLINotFoundError

Generato quando Claude Code CLI non è installato o non viene trovato.

CLIConnectionError

Generato quando la connessione a Claude Code fallisce.

ProcessError

Generato quando il processo Claude Code fallisce.

CLIJSONDecodeError

Generato quando l’analisi JSON fallisce.

Tipi di Hook

Per una guida completa sull’utilizzo degli hooks con esempi e modelli comuni, vedi la guida Hooks.

HookEvent

Tipi di evento hook supportati.
TypeScript SDK supporta eventi hook aggiuntivi non ancora disponibili in Python: SessionStart, SessionEnd, Setup, TeammateIdle, TaskCompleted, ConfigChange, WorktreeCreate, WorktreeRemove, PostToolBatch e MessageDisplay.

HookCallback

Definizione di tipo per le funzioni di callback hook.
Parametri:
  • input: Input hook fortemente tipizzato con unioni discriminate basate su hook_event_name (vedi HookInput)
  • tool_use_id: Identificatore di utilizzo dello strumento opzionale (per hook correlati allo strumento)
  • context: Contesto hook con informazioni aggiuntive
Restituisce un HookJSONOutput che può contenere:
  • decision: "block" per bloccare l’azione
  • systemMessage: Messaggio di avviso mostrato all’utente
  • hookSpecificOutput: Dati di output specifici dell’hook

HookContext

Informazioni di contesto passate ai callback hook.

HookMatcher

Configurazione per l’abbinamento degli hook a eventi o strumenti specifici.

HookInput

Tipo di unione di tutti i tipi di input hook. Il tipo effettivo dipende dal campo hook_event_name.

BaseHookInput

Campi di base presenti in tutti i tipi di input hook.

PreToolUseHookInput

Dati di input per gli eventi hook PreToolUse.

PostToolUseHookInput

Dati di input per gli eventi hook PostToolUse.

PostToolUseFailureHookInput

Dati di input per gli eventi hook PostToolUseFailure. Chiamato quando l’esecuzione di uno strumento fallisce.

UserPromptSubmitHookInput

Dati di input per gli eventi hook UserPromptSubmit.

StopHookInput

Dati di input per gli eventi hook Stop.

SubagentStopHookInput

Dati di input per gli eventi hook SubagentStop.

PreCompactHookInput

Dati di input per gli eventi hook PreCompact.

NotificationHookInput

Dati di input per gli eventi hook Notification.

SubagentStartHookInput

Dati di input per gli eventi hook SubagentStart.

PermissionRequestHookInput

Dati di input per gli eventi hook PermissionRequest. Consente agli hook di gestire le decisioni di autorizzazione a livello di programmazione.

HookJSONOutput

Tipo di unione per i valori di ritorno del callback hook.

SyncHookJSONOutput

Output hook sincrono con campi di controllo e decisione.
Usa continue_ (con underscore) nel codice Python. Viene automaticamente convertito a continue quando inviato alla CLI.

HookSpecificOutput

Un TypedDict contenente il nome dell’evento hook e i campi specifici dell’evento. La forma dipende dal valore hookEventName. Per i dettagli completi sui campi disponibili per evento hook, vedi Controlla l’esecuzione con gli hooks. Un’unione discriminata di tipi di output specifici dell’evento. Il campo hookEventName determina quali campi sono validi.

AsyncHookJSONOutput

Output hook asincrono che rinvia l’esecuzione dell’hook.
Usa async_ (con underscore) nel codice Python. Viene automaticamente convertito a async quando inviato alla CLI.

Esempio di utilizzo di Hook

Questo esempio registra due hook: uno che blocca i comandi bash pericolosi come rm -rf /, e un altro che registra tutto l’utilizzo dello strumento per il controllo. L’hook di sicurezza viene eseguito solo sui comandi Bash (tramite il matcher), mentre l’hook di registrazione viene eseguito su tutti gli strumenti.

Tipi di input/output dello strumento

Documentazione degli schemi di input/output per tutti gli strumenti Claude Code integrati. Mentre Python SDK non esporta questi come tipi, rappresentano la struttura degli input e output dello strumento nei messaggi.

Agent

Nome dello strumento: Agent (precedentemente Task, che è ancora accettato come alias) Input:
Output:

AskUserQuestion

Nome dello strumento: AskUserQuestion Chiede all’utente domande di chiarimento durante l’esecuzione. Vedi Gestisci approvazioni e input dell’utente per i dettagli di utilizzo. Input:
Output:

Bash

Nome dello strumento: Bash Input:
Output:

Monitor

Nome dello strumento: Monitor Esegue uno script in background e fornisce ogni evento a Claude in modo che possa reagire senza polling: command esegue uno script e emette un evento per riga stdout, e ws apre un WebSocket ed emette un evento per frame di testo. Fornire esattamente uno tra command o ws. Quando Monitor esegue un comando, segue le stesse regole di autorizzazione di Bash; un monitoraggio WebSocket richiede l’approvazione separatamente. L’origine ws richiede Claude Code v2.1.195 o successivo. Vedi il riferimento dello strumento Monitor per il comportamento e la disponibilità del provider. Input:
Output:

Edit

Nome dello strumento: Edit Input:
Output:

Read

Nome dello strumento: Read Input:
Output (File di testo):
Output (Immagini):

Write

Nome dello strumento: Write Input:
Output:

Glob

Nome dello strumento: Glob Input:
Output:

Grep

Nome dello strumento: Grep Input:
Output (modalità content):
Output (modalità files_with_matches):

NotebookEdit

Nome dello strumento: NotebookEdit Input:
Output:

WebFetch

Nome dello strumento: WebFetch Input:
Output:

WebSearch

Nome dello strumento: WebSearch Input:
Output:

TodoWrite

Nome dello strumento: TodoWrite
A partire da Claude Code v2.1.142, TodoWrite è disabilitato per impostazione predefinita. Utilizza invece TaskCreate, TaskGet, TaskUpdate e TaskList. Vedi Migra agli strumenti Task per aggiornare il tuo codice di monitoraggio, oppure imposta CLAUDE_CODE_ENABLE_TASKS=0 per ripristinare TodoWrite.
Input:
Output:

TaskCreate

Nome dello strumento: TaskCreate Input:
Output:

TaskUpdate

Nome dello strumento: TaskUpdate Input:
Output:

TaskGet

Nome dello strumento: TaskGet Input:
Output:

TaskList

Nome dello strumento: TaskList Input:
Output:

BashOutput

Nome dello strumento: BashOutput Input:
Output:

KillBash

Nome dello strumento: KillBash Input:
Output:

ExitPlanMode

Nome dello strumento: ExitPlanMode Input:
Output:

ListMcpResources

Nome dello strumento: ListMcpResourcesTool Input:
Output:

ReadMcpResource

Nome dello strumento: ReadMcpResourceTool Input:
Output:

Funzionalità avanzate con ClaudeSDKClient

Costruire un’interfaccia di conversazione continua

Utilizzo di hooks per la modifica del comportamento

Monitoraggio del progresso in tempo reale

Utilizzo di esempio

Operazioni di file di base (usando query)

Gestione degli errori

Modalità streaming con client

Utilizzo di strumenti personalizzati con ClaudeSDKClient

Configurazione della Sandbox

SandboxSettings

Configurazione per il comportamento della sandbox. Usala per abilitare il sandboxing dei comandi e configurare le restrizioni di rete a livello di programmazione.
La sandbox dipende dal supporto della piattaforma e, su Linux, da strumenti come bubblewrap e socat. Per impostazione predefinita, quando enabled è True ma la sandbox non può avviarsi, i comandi vengono eseguiti senza sandbox con un avviso su stderr. Questo comportamento predefinito differisce dall’SDK TypeScript, dove failIfUnavailable è predefinito su true.Imposta "failIfUnavailable": True nelle impostazioni della sandbox per interrompere invece. La chiave non è ancora dichiarata su SandboxSettings, ma l’SDK la inoltra a Claude Code, che la rispetta. query() quindi segnala un ResultMessage con subtype="error_during_execution" e il motivo in errors. Guarda quel sottotipo piuttosto che aspettarti che query() generi un’eccezione prima di cedere i messaggi.

Utilizzo di esempio

Sicurezza del socket Unix: L’opzione allowUnixSockets può concedere l’accesso a potenti servizi di sistema. Ad esempio, consentire /var/run/docker.sock concede effettivamente l’accesso completo al sistema host tramite l’API Docker, bypassando l’isolamento della sandbox. Consenti solo i socket Unix strettamente necessari e comprendi le implicazioni di sicurezza di ognuno.

SandboxNetworkConfig

Configurazione specifica della rete per la modalità sandbox. Queste impostazioni si applicano ai comandi Bash in sandbox quando enabled è True nella SandboxSettings padre. Non limitano lo strumento WebFetch, che utilizza invece regole di autorizzazione.
Il proxy sandbox integrato applica l’allowlist di rete in base al nome host richiesto e non termina o ispeziona il traffico TLS, quindi tecniche come il domain fronting possono potenzialmente bypassarlo. Vedi Limitazioni di sicurezza del sandboxing per i dettagli e Distribuzione sicura per configurare un proxy che termina TLS.

SandboxIgnoreViolations

Configurazione per ignorare violazioni specifiche della sandbox.

Fallback delle autorizzazioni per i comandi senza sandbox

Quando allowUnsandboxedCommands è abilitato, il modello può richiedere di eseguire comandi al di fuori della sandbox impostando dangerouslyDisableSandbox: True nell’input dello strumento. Queste richieste ricadono nel sistema di autorizzazioni esistente, il che significa che il tuo handler can_use_tool verrà invocato, permettendoti di implementare una logica di autorizzazione personalizzata.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: Un elenco statico di comandi che sempre bypassano la sandbox automaticamente (ad es. ["docker"]). Il modello non ha controllo su questo.
  • allowUnsandboxedCommands: Consenti al modello di decidere in fase di esecuzione se richiedere l’esecuzione senza sandbox impostando dangerouslyDisableSandbox: True nell’input dello strumento.
Questo modello ti consente di:
  • Controllare le richieste del modello: Registra quando il modello richiede l’esecuzione senza sandbox
  • Implementare allowlist: Consenti solo comandi specifici di essere eseguiti senza sandbox
  • Aggiungere flussi di lavoro di approvazione: Richiedi un’autorizzazione esplicita per operazioni privilegiate
I comandi in esecuzione con dangerouslyDisableSandbox: True hanno accesso completo al sistema. Assicurati che il tuo handler can_use_tool validi queste richieste attentamente.Se permission_mode è impostato su bypassPermissions e allow_unsandboxed_commands è abilitato, il modello può autonomamente eseguire comandi al di fuori della sandbox senza alcun prompt di approvazione. Questa combinazione consente effettivamente al modello di sfuggire all’isolamento della sandbox silenziosamente.

Vedi anche