Installazione
Scelta tra query() e ClaudeSDKClient
L’SDK Python fornisce due modi per interagire con Claude Code:
Confronto rapido
| Funzionalità | query() | ClaudeSDKClient |
|---|---|---|
| Sessione | Crea una nuova sessione ogni volta | Riutilizza la stessa sessione |
| Conversazione | Singolo scambio | Più scambi nello stesso contesto |
| Connessione | Gestita automaticamente | Controllo manuale |
| Input in streaming | ✅ Supportato | ✅ Supportato |
| Interruzioni | ❌ Non supportato | ✅ Supportato |
| Hook | ❌ Non supportato | ✅ Supportato |
| Strumenti personalizzati | ❌ Non supportato | ✅ Supportato |
| Continua chat | ❌ Nuova sessione ogni volta | ✅ Mantiene la conversazione |
| Caso d’uso | Attività una tantum | Conversazioni continue |
Quando usare query() (Nuova sessione ogni volta)
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 di 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 esplicitamente
Funzioni
query()
Crea una nuova sessione per ogni interazione con Claude Code. Restituisce un iteratore asincrono che produce messaggi man mano che arrivano. Ogni chiamata a query() inizia da zero senza memoria delle interazioni precedenti.
Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
prompt | str | AsyncIterable[dict] | Il prompt di input come stringa o iterabile asincrono per la modalità streaming |
options | ClaudeAgentOptions | None | Oggetto di configurazione opzionale (per impostazione predefinita ClaudeAgentOptions() se None) |
Restituisce
Restituisce unAsyncIterator[Message] che produce messaggi dalla conversazione.
Esempio - Con opzioni
tool()
Decoratore per definire strumenti MCP con sicurezza dei tipi.
Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
name | str | Identificatore univoco per lo strumento |
description | str | Descrizione leggibile di cosa fa lo strumento |
input_schema | type | dict[str, Any] | Schema che definisce i parametri di input dello strumento (vedi sotto) |
Opzioni dello schema di input
-
Mappatura di tipo semplice (consigliato):
-
Formato JSON Schema (per validazione complessa):
Restituisce
Una funzione decoratore che avvolge l’implementazione dello strumento e restituisce un’istanzaSdkMcpTool.
Esempio
create_sdk_mcp_server()
Crea un server MCP in-process che viene eseguito all’interno della tua applicazione Python.
Parametri
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
name | str | - | Identificatore univoco per il server |
version | str | "1.0.0" | Stringa della versione del server |
tools | list[SdkMcpTool[Any]] | None | None | Elenco di funzioni strumento create con il decoratore @tool |
Restituisce
Restituisce un oggettoMcpSdkServerConfig che può essere passato a ClaudeAgentOptions.mcp_servers.
Esempio
Classi
ClaudeSDKClient
Mantiene una sessione di conversazione su più scambi. Questo è l’equivalente Python di come la funzione query() dell’SDK TypeScript funziona internamente - crea un oggetto client che può continuare conversazioni.
Caratteristiche principali
- Continuità della sessione: Mantiene il contesto della conversazione su più chiamate
query() - Stessa conversazione: Claude ricorda i messaggi precedenti nella sessione
- Supporto per interruzioni: Può fermare Claude durante l’esecuzione
- Ciclo di vita esplicito: Controlli quando la sessione inizia e termina
- Flusso guidato dalla risposta: Puoi reagire alle risposte e inviare follow-up
- Strumenti personalizzati e hook: Supporta strumenti personalizzati (creati con il decoratore
@tool) e hook
Metodi
| Metodo | Descrizione |
|---|---|
__init__(options) | Inizializza il client con configurazione opzionale |
connect(prompt) | Connettiti a Claude con un prompt iniziale opzionale o flusso di messaggi |
query(prompt, session_id) | Invia una nuova richiesta in modalità streaming |
receive_messages() | Ricevi tutti i messaggi da Claude come iteratore asincrono |
receive_response() | Ricevi messaggi fino a e incluso un ResultMessage |
interrupt() | Invia segnale di interruzione (funziona solo in modalità streaming) |
disconnect() | Disconnettiti da Claude |
Supporto del 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 di 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 in streaming con ClaudeSDKClient
Esempio - Utilizzo di interruzioni
Esempio - Controllo delle autorizzazioni avanzato
Tipi
SdkMcpTool
Definizione per uno strumento SDK MCP creato con il decoratore @tool.
| Proprietà | Tipo | Descrizione |
|---|---|---|
name | str | Identificatore univoco per lo strumento |
description | str | Descrizione leggibile |
input_schema | type[T] | dict[str, Any] | Schema per la validazione dell’input |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Funzione asincrona che gestisce l’esecuzione dello strumento |
ClaudeAgentOptions
Dataclass di configurazione per le query Claude Code.
| Proprietà | Tipo | Predefinito | Descrizione |
|---|---|---|---|
allowed_tools | list[str] | [] | Elenco dei nomi degli strumenti consentiti |
system_prompt | str | SystemPromptPreset | None | None | Configurazione del prompt di sistema. Passa una stringa per un prompt personalizzato, o usa {"type": "preset", "preset": "claude_code"} per il prompt di sistema di Claude Code. Aggiungi "append" per estendere il preset |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Configurazioni del server MCP o percorso al file di configurazione |
permission_mode | PermissionMode | None | None | Modalità di autorizzazione per l’utilizzo dello strumento |
continue_conversation | bool | False | Continua la conversazione più recente |
resume | str | None | None | ID della sessione da riprendere |
max_turns | int | None | None | Numero massimo di turni di conversazione |
disallowed_tools | list[str] | [] | Elenco dei nomi degli strumenti non consentiti |
model | str | None | None | Modello Claude da utilizzare |
permission_prompt_tool_name | str | None | None | Nome dello strumento MCP per i prompt di autorizzazione |
cwd | str | Path | None | None | Directory di lavoro corrente |
settings | str | None | None | Percorso al file di impostazioni |
add_dirs | list[str | Path] | [] | Directory aggiuntive a cui Claude può accedere |
env | dict[str, str] | {} | Variabili di ambiente |
extra_args | dict[str, str | None] | {} | Argomenti CLI aggiuntivi da passare direttamente alla CLI |
max_buffer_size | int | None | None | Byte massimi durante il buffering dell’stdout della CLI |
debug_stderr | Any | sys.stderr | Deprecato - Oggetto simile a un file per l’output di debug. Usa il callback stderr invece |
stderr | Callable[[str], None] | None | None | Funzione di callback per l’output stderr dalla CLI |
can_use_tool | CanUseTool | None | None | Funzione di callback per le autorizzazioni dello strumento |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Configurazioni degli hook per intercettare gli eventi |
user | str | None | None | Identificatore dell’utente |
include_partial_messages | bool | False | Includi eventi di streaming di messaggi parziali |
fork_session | bool | False | Quando si riprende con resume, esegui il fork a un nuovo ID di sessione invece di continuare la sessione originale |
agents | dict[str, AgentDefinition] | None | None | Subagent definiti a livello di programmazione |
plugins | list[SdkPluginConfig] | [] | Carica plugin personalizzati da percorsi locali. Vedi Plugin per i dettagli |
setting_sources | list[SettingSource] | None | None (nessuna impostazione) | Controlla quali impostazioni del filesystem caricare. Se omesso, nessuna impostazione viene caricata. Nota: Deve includere "project" per caricare i file CLAUDE.md |
SystemPromptPreset
Configurazione per l’utilizzo del prompt di sistema preset di Claude Code con aggiunte opzionali.
| Campo | Obbligatorio | Descrizione |
|---|---|---|
type | Sì | Deve essere "preset" per usare un prompt di sistema preset |
preset | Sì | Deve essere "claude_code" per usare il prompt di sistema di Claude Code |
append | No | Istruzioni aggiuntive da aggiungere al prompt di sistema preset |
SettingSource
Controlla quali fonti di configurazione basate su filesystem l’SDK carica le impostazioni da.
| Valore | Descrizione | Posizione |
|---|---|---|
"user" | Impostazioni globali dell’utente | ~/.claude/settings.json |
"project" | Impostazioni di progetto condivise (controllate dalla versione) | .claude/settings.json |
"local" | Impostazioni di progetto locale (gitignored) | .claude/settings.local.json |
Comportamento predefinito
Quandosetting_sources è omesso o None, l’SDK non carica alcuna impostazione del filesystem. Questo fornisce isolamento per le applicazioni SDK.
Perché usare setting_sources?
Carica tutte le impostazioni del filesystem (comportamento legacy):Precedenza delle impostazioni
Quando più fonti vengono caricate, le impostazioni vengono unite con questa precedenza (più alta a più bassa):- Impostazioni locali (
.claude/settings.local.json) - Impostazioni di progetto (
.claude/settings.json) - Impostazioni dell’utente (
~/.claude/settings.json)
agents, allowed_tools) sostituiscono sempre le impostazioni del filesystem.
AgentDefinition
Configurazione per un subagent definito a livello di programmazione.
| Campo | Obbligatorio | Descrizione |
|---|---|---|
description | Sì | Descrizione in linguaggio naturale di quando usare questo agent |
tools | No | Array dei nomi degli strumenti consentiti. Se omesso, eredita tutti gli strumenti |
prompt | Sì | Il prompt di sistema dell’agent |
model | No | Override del modello per questo agent. Se omesso, usa il modello principale |
PermissionMode
Modalità di autorizzazione per controllare l’esecuzione dello strumento.
McpSdkServerConfig
Configurazione per i server MCP SDK creati con create_sdk_mcp_server().
McpServerConfig
Tipo di unione per le configurazioni del server MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
SdkPluginConfig
Configurazione per il caricamento dei plugin nell’SDK.
| Campo | Tipo | Descrizione |
|---|---|---|
type | Literal["local"] | Deve essere "local" (attualmente sono supportati solo plugin locali) |
path | str | Percorso assoluto o relativo alla directory del 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.
SystemMessage
Messaggio di sistema con metadati.
ResultMessage
Messaggio di risultato finale con informazioni su costo e utilizzo.
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 di base per tutti gli errori dell’SDK.
CLINotFoundError
Generato quando Claude Code CLI non è installato o non trovato.
CLIConnectionError
Generato quando la connessione a Claude Code non riesce.
ProcessError
Generato quando il processo Claude Code non riesce.
CLIJSONDecodeError
Generato quando l’analisi JSON non riesce.
Tipi di hook
HookEvent
Tipi di evento hook supportati. Nota che a causa di limitazioni di configurazione, l’SDK Python non supporta gli hook SessionStart, SessionEnd e Notification.
HookCallback
Definizione del tipo per le funzioni di callback dell’hook.
input_data: Dati di input specifici dell’hook (vedi documentazione dell’hook)tool_use_id: Identificatore di utilizzo dello strumento opzionale (per hook correlati allo strumento)context: Contesto dell’hook con informazioni aggiuntive
decision:"block"per bloccare l’azionesystemMessage: Messaggio di sistema da aggiungere alla trascrizionehookSpecificOutput: Dati di output specifici dell’hook
HookContext
Informazioni di contesto passate ai callback dell’hook.
HookMatcher
Configurazione per l’abbinamento degli hook a eventi o strumenti specifici.
Esempio di utilizzo dell’hook
Tipi di input/output dello strumento
Documentazione degli schemi di input/output per tutti gli strumenti Claude Code integrati. Sebbene l’SDK Python non esporti questi come tipi, rappresentano la struttura degli input e degli output dello strumento nei messaggi.Task
Nome dello strumento:Task
Input:
Bash
Nome dello strumento:Bash
Input:
Edit
Nome dello strumento:Edit
Input:
Read
Nome dello strumento:Read
Input:
Write
Nome dello strumento:Write
Input:
Glob
Nome dello strumento:Glob
Input:
Grep
Nome dello strumento:Grep
Input:
NotebookEdit
Nome dello strumento:NotebookEdit
Input:
WebFetch
Nome dello strumento:WebFetch
Input:
WebSearch
Nome dello strumento:WebSearch
Input:
TodoWrite
Nome dello strumento:TodoWrite
Input:
BashOutput
Nome dello strumento:BashOutput
Input:
KillBash
Nome dello strumento:KillBash
Input:
ExitPlanMode
Nome dello strumento:ExitPlanMode
Input:
ListMcpResources
Nome dello strumento:ListMcpResources
Input:
ReadMcpResource
Nome dello strumento:ReadMcpResource
Input:
Funzionalità avanzate con ClaudeSDKClient
Costruire un’interfaccia di conversazione continua
Utilizzo degli hook 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
Vedi anche
- Guida SDK Python - Tutorial ed esempi
- Panoramica dell’SDK - Concetti generali dell’SDK
- Riferimento SDK TypeScript - Documentazione dell’SDK TypeScript
- Riferimento CLI - Interfaccia della riga di comando
- Flussi di lavoro comuni - Guide passo dopo passo