Installation
Wahl zwischen query() und ClaudeSDKClient
Das Python SDK bietet zwei Möglichkeiten, um mit Claude Code zu interagieren:
Schnellvergleich
| Funktion | query() | ClaudeSDKClient |
|---|---|---|
| Sitzung | Erstellt jedes Mal eine neue Sitzung | Verwendet dieselbe Sitzung wieder |
| Konversation | Einzelner Austausch | Mehrere Austausche im gleichen Kontext |
| Verbindung | Automatisch verwaltet | Manuelle Kontrolle |
| Streaming-Eingabe | ✅ Unterstützt | ✅ Unterstützt |
| Unterbrechungen | ❌ Nicht unterstützt | ✅ Unterstützt |
| Hooks | ❌ Nicht unterstützt | ✅ Unterstützt |
| Benutzerdefinierte Tools | ❌ Nicht unterstützt | ✅ Unterstützt |
| Chat fortsetzen | ❌ Neue Sitzung jedes Mal | ✅ Behält Konversation bei |
| Anwendungsfall | Einmalige Aufgaben | Kontinuierliche Konversationen |
Wann query() verwenden (Neue Sitzung jedes Mal)
Am besten für:
- Einmalige Fragen, bei denen Sie keinen Konversationsverlauf benötigen
- Unabhängige Aufgaben, die keinen Kontext aus vorherigen Austauschen erfordern
- Einfache Automatisierungsskripte
- Wenn Sie jedes Mal einen Neuanfang möchten
Wann ClaudeSDKClient verwenden (Kontinuierliche Konversation)
Am besten für:
- Konversationen fortsetzen - Wenn Claude den Kontext merken muss
- Nachfolgefragen - Aufbau auf vorherigen Antworten
- Interaktive Anwendungen - Chat-Schnittstellen, REPLs
- Antwortgesteuerte Logik - Wenn die nächste Aktion von Claudes Antwort abhängt
- Sitzungskontrolle - Explizite Verwaltung des Konversationslebenszyklus
Funktionen
query()
Erstellt für jede Interaktion mit Claude Code eine neue Sitzung. Gibt einen asynchronen Iterator zurück, der Nachrichten bei ihrer Ankunft liefert. Jeder Aufruf von query() beginnt neu ohne Erinnerung an vorherige Interaktionen.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
prompt | str | AsyncIterable[dict] | Die Eingabeaufforderung als Zeichenkette oder asynchroner Iterator für den Streaming-Modus |
options | ClaudeAgentOptions | None | Optionales Konfigurationsobjekt (standardmäßig ClaudeAgentOptions(), wenn None) |
Rückgabe
Gibt einenAsyncIterator[Message] zurück, der Nachrichten aus der Konversation liefert.
Beispiel - Mit Optionen
tool()
Dekorator zum Definieren von MCP-Tools mit Typsicherheit.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
name | str | Eindeutige Kennung für das Tool |
description | str | Benutzerfreundliche Beschreibung der Funktion des Tools |
input_schema | type | dict[str, Any] | Schema, das die Eingabeparameter des Tools definiert (siehe unten) |
Optionen für Eingabeschema
-
Einfache Typ-Zuordnung (empfohlen):
-
JSON-Schema-Format (für komplexe Validierung):
Rückgabe
Eine Dekoratorfunktion, die die Tool-Implementierung umhüllt und eineSdkMcpTool-Instanz zurückgibt.
Beispiel
create_sdk_mcp_server()
Erstellen Sie einen In-Process-MCP-Server, der in Ihrer Python-Anwendung ausgeführt wird.
Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
name | str | - | Eindeutige Kennung für den Server |
version | str | "1.0.0" | Versionsnummer des Servers |
tools | list[SdkMcpTool[Any]] | None | None | Liste von Tool-Funktionen, die mit dem @tool-Dekorator erstellt wurden |
Rückgabe
Gibt einMcpSdkServerConfig-Objekt zurück, das an ClaudeAgentOptions.mcp_servers übergeben werden kann.
Beispiel
Klassen
ClaudeSDKClient
Behält eine Konversationssitzung über mehrere Austausche hinweg bei. Dies ist das Python-Äquivalent dazu, wie die query()-Funktion des TypeScript SDK intern funktioniert - sie erstellt ein Client-Objekt, das Konversationen fortsetzen kann.
Wichtigste Funktionen
- Sitzungskontinuität: Behält Konversationskontext über mehrere
query()-Aufrufe hinweg bei - Gleiche Konversation: Claude erinnert sich an vorherige Nachrichten in der Sitzung
- Unterbrechungsunterstützung: Kann Claude während der Ausführung stoppen
- Expliziter Lebenszyklus: Sie kontrollieren, wann die Sitzung beginnt und endet
- Antwortgesteuerte Abläufe: Kann auf Antworten reagieren und Nachverfolgungen senden
- Benutzerdefinierte Tools & Hooks: Unterstützt benutzerdefinierte Tools (erstellt mit
@tool-Dekorator) und Hooks
Methoden
| Methode | Beschreibung |
|---|---|
__init__(options) | Initialisieren Sie den Client mit optionaler Konfiguration |
connect(prompt) | Verbindung zu Claude mit optionaler Anfangsnachricht oder Nachrichtenstrom |
query(prompt, session_id) | Senden Sie eine neue Anfrage im Streaming-Modus |
receive_messages() | Empfangen Sie alle Nachrichten von Claude als asynchronen Iterator |
receive_response() | Empfangen Sie Nachrichten bis einschließlich einer ResultMessage |
interrupt() | Senden Sie ein Unterbrechungssignal (funktioniert nur im Streaming-Modus) |
disconnect() | Trennen Sie die Verbindung zu Claude |
Context Manager-Unterstützung
Der Client kann als asynchroner Context Manager für automatische Verbindungsverwaltung verwendet werden:
Wichtig: Vermeiden Sie bei der Iteration über Nachrichten die Verwendung von break, um vorzeitig zu beenden, da dies zu asyncio-Bereinigungsproblemen führen kann. Lassen Sie die Iteration stattdessen natürlich abschließen oder verwenden Sie Flags, um zu verfolgen, wann Sie gefunden haben, was Sie suchen.
Beispiel - Konversation fortsetzen
Beispiel - Streaming-Eingabe mit ClaudeSDKClient
Beispiel - Unterbrechungen verwenden
Beispiel - Erweiterte Berechtigungskontrolle
Typen
SdkMcpTool
Definition für ein SDK MCP-Tool, das mit dem @tool-Dekorator erstellt wurde.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
name | str | Eindeutige Kennung für das Tool |
description | str | Benutzerfreundliche Beschreibung |
input_schema | type[T] | dict[str, Any] | Schema für Eingabevalidierung |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Asynchrone Funktion, die die Tool-Ausführung verarbeitet |
ClaudeAgentOptions
Konfigurationsdatenklasse für Claude Code-Abfragen.
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
allowed_tools | list[str] | [] | Liste der zulässigen Tool-Namen |
system_prompt | str | SystemPromptPreset | None | None | Konfiguration der Systemaufforderung. Übergeben Sie eine Zeichenkette für eine benutzerdefinierte Aufforderung oder verwenden Sie {"type": "preset", "preset": "claude_code"} für die Systemaufforderung von Claude Code. Fügen Sie "append" hinzu, um die Voreinstellung zu erweitern |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | MCP-Serverkonfigurationen oder Pfad zur Konfigurationsdatei |
permission_mode | PermissionMode | None | None | Berechtigungsmodus für die Tool-Nutzung |
continue_conversation | bool | False | Setzen Sie die neueste Konversation fort |
resume | str | None | None | Sitzungs-ID zum Fortsetzen |
max_turns | int | None | None | Maximale Konversationsrunden |
disallowed_tools | list[str] | [] | Liste der nicht zulässigen Tool-Namen |
model | str | None | None | Zu verwendendes Claude-Modell |
permission_prompt_tool_name | str | None | None | MCP-Tool-Name für Berechtigungsaufforderungen |
cwd | str | Path | None | None | Aktuelles Arbeitsverzeichnis |
settings | str | None | None | Pfad zur Einstellungsdatei |
add_dirs | list[str | Path] | [] | Zusätzliche Verzeichnisse, auf die Claude zugreifen kann |
env | dict[str, str] | {} | Umgebungsvariablen |
extra_args | dict[str, str | None] | {} | Zusätzliche CLI-Argumente, die direkt an die CLI übergeben werden |
max_buffer_size | int | None | None | Maximale Bytes beim Puffern der CLI-Standardausgabe |
debug_stderr | Any | sys.stderr | Veraltet - Dateiähnliches Objekt für Debug-Ausgabe. Verwenden Sie stattdessen den stderr-Callback |
stderr | Callable[[str], None] | None | None | Callback-Funktion für stderr-Ausgabe von CLI |
can_use_tool | CanUseTool | None | None | Tool-Berechtigungscallback-Funktion |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Hook-Konfigurationen zum Abfangen von Ereignissen |
user | str | None | None | Benutzerkennung |
include_partial_messages | bool | False | Teilweise Nachricht-Streaming-Ereignisse einschließen |
fork_session | bool | False | Beim Fortsetzen mit resume zu einer neuen Sitzungs-ID verzweigen, anstatt die ursprüngliche Sitzung fortzusetzen |
agents | dict[str, AgentDefinition] | None | None | Programmgesteuert definierte Subagenten |
plugins | list[SdkPluginConfig] | [] | Laden Sie benutzerdefinierte Plugins aus lokalen Pfaden. Siehe Plugins für Details |
setting_sources | list[SettingSource] | None | None (keine Einstellungen) | Kontrollieren Sie, welche Dateisystem-Einstellungen geladen werden. Wenn weggelassen, werden keine Einstellungen geladen. Hinweis: Muss "project" enthalten, um CLAUDE.md-Dateien zu laden |
SystemPromptPreset
Konfiguration für die Verwendung der voreingestellten Systemaufforderung von Claude Code mit optionalen Ergänzungen.
| Feld | Erforderlich | Beschreibung |
|---|---|---|
type | Ja | Muss "preset" sein, um eine voreingestellte Systemaufforderung zu verwenden |
preset | Ja | Muss "claude_code" sein, um die Systemaufforderung von Claude Code zu verwenden |
append | Nein | Zusätzliche Anweisungen, die an die voreingestellte Systemaufforderung angehängt werden |
SettingSource
Kontrolliert, welche dateisystembasierte Konfigurationsquellen das SDK lädt.
| Wert | Beschreibung | Ort |
|---|---|---|
"user" | Globale Benutzereinstellungen | ~/.claude/settings.json |
"project" | Gemeinsame Projekteinstellungen (versionskontrolliert) | .claude/settings.json |
"local" | Lokale Projekteinstellungen (gitignoriert) | .claude/settings.local.json |
Standardverhalten
Wennsetting_sources weggelassen oder None ist, lädt das SDK keine Dateisystem-Einstellungen. Dies bietet Isolation für SDK-Anwendungen.
Warum setting_sources verwenden?
Laden Sie alle Dateisystem-Einstellungen (Legacy-Verhalten):Einstellungspriorität
Wenn mehrere Quellen geladen werden, werden Einstellungen mit dieser Priorität zusammengeführt (höchste bis niedrigste):- Lokale Einstellungen (
.claude/settings.local.json) - Projekteinstellungen (
.claude/settings.json) - Benutzereinstellungen (
~/.claude/settings.json)
agents, allowed_tools) überschreiben immer Dateisystem-Einstellungen.
AgentDefinition
Konfiguration für einen programmgesteuert definierten Subagenten.
| Feld | Erforderlich | Beschreibung |
|---|---|---|
description | Ja | Natürlichsprachige Beschreibung, wann dieser Agent verwendet werden soll |
tools | Nein | Array von zulässigen Tool-Namen. Wenn weggelassen, erbt alle Tools |
prompt | Ja | Die Systemaufforderung des Agenten |
model | Nein | Modellüberschreibung für diesen Agenten. Wenn weggelassen, verwendet das Hauptmodell |
PermissionMode
Berechtigungsmodi zur Kontrolle der Tool-Ausführung.
McpSdkServerConfig
Konfiguration für SDK MCP-Server, die mit create_sdk_mcp_server() erstellt wurden.
McpServerConfig
Union-Typ für MCP-Serverkonfigurationen.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
SdkPluginConfig
Konfiguration zum Laden von Plugins im SDK.
| Feld | Typ | Beschreibung |
|---|---|---|
type | Literal["local"] | Muss "local" sein (derzeit werden nur lokale Plugins unterstützt) |
path | str | Absoluter oder relativer Pfad zum Plugin-Verzeichnis |
Nachrichtentypen
Message
Union-Typ aller möglichen Nachrichten.
UserMessage
Benutzereingabenachricht.
AssistantMessage
Assistentenantwort-Nachricht mit Inhaltsblöcken.
SystemMessage
Systemnachricht mit Metadaten.
ResultMessage
Endgültige Ergebnisnachricht mit Kosten- und Nutzungsinformationen.
Inhaltsblocktypen
ContentBlock
Union-Typ aller Inhaltsblöcke.
TextBlock
Textinhaltsblock.
ThinkingBlock
Denkinhaltsblock (für Modelle mit Denkfähigkeit).
ToolUseBlock
Tool-Nutzungsanforderungsblock.
ToolResultBlock
Tool-Ausführungsergebnisblock.
Fehlertypen
ClaudeSDKError
Basis-Ausnahmeklasse für alle SDK-Fehler.
CLINotFoundError
Wird ausgelöst, wenn Claude Code CLI nicht installiert oder nicht gefunden ist.
CLIConnectionError
Wird ausgelöst, wenn die Verbindung zu Claude Code fehlschlägt.
ProcessError
Wird ausgelöst, wenn der Claude Code-Prozess fehlschlägt.
CLIJSONDecodeError
Wird ausgelöst, wenn das JSON-Parsing fehlschlägt.
Hook-Typen
HookEvent
Unterstützte Hook-Ereignistypen. Beachten Sie, dass das Python SDK aufgrund von Setup-Einschränkungen SessionStart-, SessionEnd- und Notification-Hooks nicht unterstützt.
HookCallback
Typdefinition für Hook-Callback-Funktionen.
input_data: Hook-spezifische Eingabedaten (siehe Hook-Dokumentation)tool_use_id: Optionale Tool-Nutzungskennung (für Tool-bezogene Hooks)context: Hook-Kontext mit zusätzlichen Informationen
decision:"block", um die Aktion zu blockierensystemMessage: Systemnachricht, die zum Transkript hinzugefügt werden sollhookSpecificOutput: Hook-spezifische Ausgabedaten
HookContext
Kontextinformationen, die an Hook-Callbacks übergeben werden.
HookMatcher
Konfiguration zum Abgleichen von Hooks mit bestimmten Ereignissen oder Tools.
Hook-Verwendungsbeispiel
Tool-Ein-/Ausgabetypen
Dokumentation von Ein-/Ausgabeschemas für alle integrierten Claude Code-Tools. Obwohl das Python SDK diese nicht als Typen exportiert, stellen sie die Struktur von Tool-Ein- und -Ausgaben in Nachrichten dar.Task
Tool-Name:Task
Eingabe:
Bash
Tool-Name:Bash
Eingabe:
Edit
Tool-Name:Edit
Eingabe:
Read
Tool-Name:Read
Eingabe:
Write
Tool-Name:Write
Eingabe:
Glob
Tool-Name:Glob
Eingabe:
Grep
Tool-Name:Grep
Eingabe:
NotebookEdit
Tool-Name:NotebookEdit
Eingabe:
WebFetch
Tool-Name:WebFetch
Eingabe:
WebSearch
Tool-Name:WebSearch
Eingabe:
TodoWrite
Tool-Name:TodoWrite
Eingabe:
BashOutput
Tool-Name:BashOutput
Eingabe:
KillBash
Tool-Name:KillBash
Eingabe:
ExitPlanMode
Tool-Name:ExitPlanMode
Eingabe:
ListMcpResources
Tool-Name:ListMcpResources
Eingabe:
ReadMcpResource
Tool-Name:ReadMcpResource
Eingabe:
Erweiterte Funktionen mit ClaudeSDKClient
Aufbau einer kontinuierlichen Konversationsschnittstelle
Verwendung von Hooks zur Verhaltensänderung
Echtzeit-Fortschrittsüberwachung
Beispielverwendung
Grundlegende Dateivorgänge (mit query)
Fehlerbehandlung
Streaming-Modus mit Client
Verwendung von benutzerdefinierten Tools mit ClaudeSDKClient
Siehe auch
- Python SDK-Anleitung - Tutorial und Beispiele
- SDK-Übersicht - Allgemeine SDK-Konzepte
- TypeScript SDK-Referenz - TypeScript SDK-Dokumentation
- CLI-Referenz - Befehlszeilenschnittstelle
- Häufige Workflows - Schritt-für-Schritt-Anleitungen