Installazione
Scegliere 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 | Scambio singolo | Scambi multipli nello stesso contesto |
Connessione | Gestita automaticamente | Controllo manuale |
Input 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 chat, REPL
- Logica guidata dalle risposte - Quando l’azione successiva dipende dalla risposta di Claude
- Controllo della sessione - Gestire esplicitamente il ciclo di vita della conversazione
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 (predefinito a 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 dall’uomo di cosa fa lo strumento |
input_schema | type | dict[str, Any] | Schema che definisce i parametri di input dello strumento (vedi sotto) |
Opzioni Schema di Input
-
Mappatura di tipo semplice (raccomandato):
-
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 funziona all’interno della tua applicazione Python.
Parametri
Parametro | Tipo | Predefinito | Descrizione |
---|---|---|---|
name | str | - | Identificatore univoco per il server |
version | str | "1.0.0" | Stringa versione del server |
tools | list[SdkMcpTool[Any]] | None | None | Lista 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 attraverso scambi multipli. Questo è l’equivalente Python di come funziona internamente la funzione query()
dell’SDK TypeScript - crea un oggetto client che può continuare le conversazioni.
Funzionalità Chiave
- Continuità della Sessione: Mantiene il contesto della conversazione attraverso chiamate multiple a
query()
- Stessa Conversazione: Claude ricorda i messaggi precedenti nella sessione
- Supporto Interruzioni: Può fermare Claude a metà esecuzione
- Ciclo di Vita Esplicito: Tu controlli quando la sessione inizia e finisce
- Flusso Guidato dalle Risposte: Può 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) | Connetti a Claude con un prompt iniziale opzionale o stream 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 includere un ResultMessage |
interrupt() | Invia segnale di interruzione (funziona solo in modalità streaming) |
disconnect() | Disconnetti da Claude |
Supporto Context Manager
Il client può essere usato come context manager asincrono per la gestione automatica della connessione:
Importante: Quando iteri sui messaggi, evita di usare break
per uscire presto 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 - Usare interruzioni
Esempio - Controllo avanzato dei permessi
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 dall’uomo |
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] | [] | Lista di nomi strumenti consentiti |
max_thinking_tokens | int | 8000 | Token massimi per il processo di pensiero |
system_prompt | str | None | None | Configurazione prompt di sistema. Passa una stringa per prompt personalizzato, o usa formato preset per il prompt di sistema di Claude Code |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Configurazioni server MCP o percorso al file di configurazione |
permission_mode | PermissionMode | None | None | Modalità permessi per l’uso degli strumenti |
continue_conversation | bool | False | Continua la conversazione più recente |
resume | str | None | None | ID sessione da riprendere |
fork_session | bool | False | Quando riprendi con resume , fork a un nuovo ID sessione invece di continuare la sessione originale |
max_turns | int | None | None | Turni massimi di conversazione |
disallowed_tools | list[str] | [] | Lista di nomi strumenti non consentiti |
model | str | None | None | Modello Claude da usare |
permission_prompt_tool_name | str | None | None | Nome strumento MCP per prompt di permessi |
cwd | str | Path | None | None | Directory di lavoro corrente |
settings | str | None | None | Percorso al file delle impostazioni |
add_dirs | list[str | Path] | [] | Directory aggiuntive a cui Claude può accedere |
extra_args | dict[str, str | None] | {} | Argomenti CLI aggiuntivi da passare direttamente al CLI |
can_use_tool | CanUseTool | None | None | Funzione callback per permessi strumenti |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Configurazioni hook per intercettare eventi |
agents | dict[str, AgentDefinition] | None | None | Subagenti definiti programmaticamente |
setting_sources | list[SettingSource] | None | None (nessuna impostazione) | Controlla quali impostazioni filesystem caricare. Quando omesso, nessuna impostazione viene caricata |
SettingSource
Controlla quali fonti di configurazione basate su filesystem l’SDK carica le impostazioni da.
Valore | Descrizione | Posizione |
---|---|---|
"user" | Impostazioni utente globali | ~/.claude/settings.json |
"project" | Impostazioni progetto condivise (controllate da versione) | .claude/settings.json |
"local" | Impostazioni progetto locali (gitignored) | .claude/settings.local.json |
Comportamento predefinito
Quandosetting_sources
è omesso o None
, l’SDK non carica alcuna impostazione filesystem. Questo fornisce isolamento per le applicazioni SDK.
Perché usare setting_sources?
Carica tutte le impostazioni filesystem (comportamento legacy):Precedenza delle impostazioni
Quando vengono caricate fonti multiple, le impostazioni vengono unite con questa precedenza (dalla più alta alla più bassa):- Impostazioni locali (
.claude/settings.local.json
) - Impostazioni progetto (
.claude/settings.json
) - Impostazioni utente (
~/.claude/settings.json
)
agents
, allowed_tools
) sovrascrivono sempre le impostazioni filesystem.
AgentDefinition
Configurazione per un subagente definito programmaticamente.
Campo | Richiesto | Descrizione |
---|---|---|
description | Sì | Descrizione in linguaggio naturale di quando usare questo agente |
tools | No | Array di nomi strumenti consentiti. Se omesso, eredita tutti gli strumenti |
prompt | Sì | Il prompt di sistema dell’agente |
model | No | Override modello per questo agente. Se omesso, usa il modello principale |
PermissionMode
Modalità permessi per controllare l’esecuzione degli strumenti.
McpSdkServerConfig
Configurazione per server SDK MCP creati con create_sdk_mcp_server()
.
McpServerConfig
Tipo union per configurazioni server MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
Tipi di Messaggio
Message
Tipo union di tutti i possibili messaggi.
UserMessage
Messaggio di input utente.
AssistantMessage
Messaggio di risposta assistente con blocchi di contenuto.
SystemMessage
Messaggio di sistema con metadati.
ResultMessage
Messaggio risultato finale con informazioni su costo e utilizzo.
Tipi di Blocco Contenuto
ContentBlock
Tipo union di tutti i blocchi di contenuto.
TextBlock
Blocco di contenuto testuale.
ThinkingBlock
Blocco di contenuto pensiero (per modelli con capacità di pensiero).
ToolUseBlock
Blocco richiesta uso strumento.
ToolResultBlock
Blocco risultato esecuzione strumento.
Tipi di Errore
ClaudeSDKError
Classe eccezione base per tutti gli errori SDK.
CLINotFoundError
Sollevato quando Claude Code CLI non è installato o non trovato.
CLIConnectionError
Sollevato quando la connessione a Claude Code fallisce.
ProcessError
Sollevato quando il processo Claude Code fallisce.
CLIJSONDecodeError
Sollevato quando il parsing JSON fallisce.
Tipi Hook
HookEvent
Tipi di eventi hook supportati. Nota che a causa di limitazioni di setup, l’SDK Python non supporta hook SessionStart, SessionEnd e Notification.
HookCallback
Definizione tipo per funzioni callback hook.
input_data
: Dati di input specifici dell’hook (vedi documentazione hook)tool_use_id
: Identificatore uso strumento opzionale (per hook relativi agli strumenti)context
: Contesto 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 hook.
HookMatcher
Configurazione per abbinare hook a eventi o strumenti specifici.
Esempio Uso Hook
Tipi Input/Output Strumenti
Documentazione degli schemi input/output per tutti gli strumenti integrati Claude Code. Mentre l’SDK Python non esporta questi come tipi, rappresentano la struttura degli input e output degli strumenti nei messaggi.Task
Nome strumento:Task
Input:
Bash
Nome strumento:Bash
Input:
Edit
Nome strumento:Edit
Input:
MultiEdit
Nome strumento:MultiEdit
Input:
Read
Nome strumento:Read
Input:
Write
Nome strumento:Write
Input:
Glob
Nome strumento:Glob
Input:
Grep
Nome strumento:Grep
Input:
NotebookEdit
Nome strumento:NotebookEdit
Input:
WebFetch
Nome strumento:WebFetch
Input:
WebSearch
Nome strumento:WebSearch
Input:
TodoWrite
Nome strumento:TodoWrite
Input:
BashOutput
Nome strumento:BashOutput
Input:
KillBash
Nome strumento:KillBash
Input:
ExitPlanMode
Nome strumento:ExitPlanMode
Input:
ListMcpResources
Nome strumento:ListMcpResources
Input:
ReadMcpResource
Nome strumento:ReadMcpResource
Input:
Funzionalità Avanzate con ClaudeSDKClient
Costruire un’Interfaccia di Conversazione Continua
Usare Hook per Modifica del Comportamento
Monitoraggio Progresso in Tempo Reale
Esempio di Utilizzo
Operazioni file di base (usando query)
Gestione errori
Modalità streaming con client
Usare strumenti personalizzati con ClaudeSDKClient
Vedi anche
- Guida Python SDK - Tutorial ed esempi
- Panoramica SDK - Concetti generali SDK
- Riferimento TypeScript SDK - Documentazione SDK TypeScript
- Riferimento CLI - Interfaccia a riga di comando
- Flussi di lavoro comuni - Guide passo-passo