Installation
Wahl zwischen query()
und ClaudeSDKClient
Das Python SDK bietet zwei Möglichkeiten, mit Claude Code zu interagieren:
Schneller Vergleich
Feature | query() | ClaudeSDKClient |
---|---|---|
Session | Erstellt jedes Mal eine neue Session | Verwendet dieselbe Session wieder |
Unterhaltung | Einzelner Austausch | Mehrere Austausche im selben Kontext |
Verbindung | Automatisch verwaltet | Manuelle Kontrolle |
Streaming Input | ✅ Unterstützt | ✅ Unterstützt |
Interrupts | ❌ Nicht unterstützt | ✅ Unterstützt |
Hooks | ❌ Nicht unterstützt | ✅ Unterstützt |
Custom Tools | ❌ Nicht unterstützt | ✅ Unterstützt |
Continue Chat | ❌ Neue Session jedes Mal | ✅ Erhält Unterhaltung aufrecht |
Anwendungsfall | Einmalige Aufgaben | Kontinuierliche Unterhaltungen |
Wann query()
verwenden (Neue Session jedes Mal)
Am besten für:
- Einmalige Fragen, bei denen Sie keine Unterhaltungshistorie benötigen
- Unabhängige Aufgaben, die keinen Kontext aus vorherigen Austauschen erfordern
- Einfache Automatisierungsskripte
- Wenn Sie jedes Mal einen frischen Start wollen
Wann ClaudeSDKClient
verwenden (Kontinuierliche Unterhaltung)
Am besten für:
- Fortführung von Unterhaltungen - Wenn Claude sich an den Kontext erinnern soll
- Nachfragen - Aufbauend auf vorherigen Antworten
- Interaktive Anwendungen - Chat-Interfaces, REPLs
- Antwort-gesteuerte Logik - Wenn die nächste Aktion von Claudes Antwort abhängt
- Session-Kontrolle - Explizite Verwaltung des Unterhaltungslebenszyklus
Funktionen
query()
Erstellt eine neue Session für jede Interaktion mit Claude Code. Gibt einen async Iterator zurück, der Nachrichten liefert, sobald sie ankommen. Jeder Aufruf von query()
startet frisch ohne Erinnerung an vorherige Interaktionen.
Parameter
Parameter | Typ | Beschreibung |
---|---|---|
prompt | str | AsyncIterable[dict] | Der Eingabe-Prompt als String oder async iterable für Streaming-Modus |
options | ClaudeAgentOptions | None | Optionales Konfigurationsobjekt (standardmäßig ClaudeAgentOptions() wenn None) |
Rückgabe
Gibt einenAsyncIterator[Message]
zurück, der Nachrichten aus der Unterhaltung liefert.
Beispiel - Mit Optionen
tool()
Decorator zum Definieren von MCP-Tools mit Typsicherheit.
Parameter
Parameter | Typ | Beschreibung |
---|---|---|
name | str | Eindeutige Kennung für das Tool |
description | str | Menschenlesbare Beschreibung dessen, was das Tool tut |
input_schema | type | dict[str, Any] | Schema, das die Eingabeparameter des Tools definiert (siehe unten) |
Input Schema Optionen
-
Einfache Typ-Zuordnung (empfohlen):
-
JSON Schema Format (für komplexe Validierung):
Rückgabe
Eine Decorator-Funktion, die die Tool-Implementierung umhüllt und eineSdkMcpTool
-Instanz zurückgibt.
Beispiel
create_sdk_mcp_server()
Erstellt einen In-Process-MCP-Server, der innerhalb Ihrer Python-Anwendung läuft.
Parameter
Parameter | Typ | Standard | Beschreibung |
---|---|---|---|
name | str | - | Eindeutige Kennung für den Server |
version | str | "1.0.0" | Server-Versionsstring |
tools | list[SdkMcpTool[Any]] | None | None | Liste von Tool-Funktionen, die mit dem @tool -Decorator erstellt wurden |
Rückgabe
Gibt einMcpSdkServerConfig
-Objekt zurück, das an ClaudeAgentOptions.mcp_servers
übergeben werden kann.
Beispiel
Klassen
ClaudeSDKClient
Erhält eine Unterhaltungssession über mehrere Austausche aufrecht. Dies ist das Python-Äquivalent dazu, wie die query()
-Funktion des TypeScript SDK intern funktioniert - es erstellt ein Client-Objekt, das Unterhaltungen fortsetzen kann.
Hauptmerkmale
- Session-Kontinuität: Erhält Unterhaltungskontext über mehrere
query()
-Aufrufe aufrecht - Dieselbe Unterhaltung: Claude erinnert sich an vorherige Nachrichten in der Session
- Interrupt-Unterstützung: Kann Claude mitten in der Ausführung stoppen
- Expliziter Lebenszyklus: Sie kontrollieren, wann die Session startet und endet
- Antwort-gesteuerter Ablauf: Kann auf Antworten reagieren und Nachfragen senden
- Custom Tools & Hooks: Unterstützt benutzerdefinierte Tools (erstellt mit
@tool
-Decorator) und Hooks
Methoden
Methode | Beschreibung |
---|---|
__init__(options) | Initialisiert den Client mit optionaler Konfiguration |
connect(prompt) | Verbindet sich mit Claude mit einem optionalen initialen Prompt oder Nachrichtenstrom |
query(prompt, session_id) | Sendet eine neue Anfrage im Streaming-Modus |
receive_messages() | Empfängt alle Nachrichten von Claude als async Iterator |
receive_response() | Empfängt Nachrichten bis einschließlich einer ResultMessage |
interrupt() | Sendet Interrupt-Signal (funktioniert nur im Streaming-Modus) |
disconnect() | Trennt die Verbindung zu Claude |
Context Manager Unterstützung
Der Client kann als async Context Manager für automatische Verbindungsverwaltung verwendet werden:
Wichtig: Beim Iterieren über Nachrichten vermeiden Sie die Verwendung von break
zum vorzeitigen Beenden, da dies asyncio-Cleanup-Probleme verursachen kann. Lassen Sie stattdessen die Iteration natürlich abschließen oder verwenden Sie Flags, um zu verfolgen, wann Sie gefunden haben, was Sie brauchen.
Beispiel - Fortsetzung einer Unterhaltung
Beispiel - Streaming-Eingabe mit ClaudeSDKClient
Beispiel - Verwendung von Interrupts
Beispiel - Erweiterte Berechtigungskontrolle
Typen
SdkMcpTool
Definition für ein SDK MCP-Tool, das mit dem @tool
-Decorator erstellt wurde.
Eigenschaft | Typ | Beschreibung |
---|---|---|
name | str | Eindeutige Kennung für das Tool |
description | str | Menschenlesbare Beschreibung |
input_schema | type[T] | dict[str, Any] | Schema für Eingabevalidierung |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Async-Funktion, die Tool-Ausführung behandelt |
ClaudeAgentOptions
Konfigurations-Dataclass für Claude Code-Abfragen.
Eigenschaft | Typ | Standard | Beschreibung |
---|---|---|---|
allowed_tools | list[str] | [] | Liste erlaubter Tool-Namen |
max_thinking_tokens | int | 8000 | Maximale Token für Denkprozess |
system_prompt | str | None | None | System-Prompt-Konfiguration. Übergeben Sie einen String für benutzerdefinierten Prompt oder verwenden Sie Preset-Format für Claude Codes System-Prompt |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | MCP-Server-Konfigurationen oder Pfad zur Konfigurationsdatei |
permission_mode | PermissionMode | None | None | Berechtigungsmodus für Tool-Verwendung |
continue_conversation | bool | False | Setzt die neueste Unterhaltung fort |
resume | str | None | None | Session-ID zum Fortsetzen |
fork_session | bool | False | Beim Fortsetzen mit resume , fork zu einer neuen Session-ID anstatt die ursprüngliche Session fortzusetzen |
max_turns | int | None | None | Maximale Unterhaltungsrunden |
disallowed_tools | list[str] | [] | Liste nicht erlaubter Tool-Namen |
model | str | None | None | Zu verwendendes Claude-Modell |
permission_prompt_tool_name | str | None | None | MCP-Tool-Name für Berechtigungs-Prompts |
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 |
extra_args | dict[str, str | None] | {} | Zusätzliche CLI-Argumente, die direkt an die CLI übergeben werden |
can_use_tool | CanUseTool | None | None | Tool-Berechtigungs-Callback-Funktion |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Hook-Konfigurationen zum Abfangen von Ereignissen |
agents | dict[str, AgentDefinition] | None | None | Programmatisch definierte Subagenten |
setting_sources | list[SettingSource] | None | None (keine Einstellungen) | Kontrolliert, welche Dateisystem-Einstellungen das SDK lädt. Wenn weggelassen, werden keine Einstellungen geladen |
SettingSource
Kontrolliert, welche dateisystembasierten Konfigurationsquellen das SDK für Einstellungen lädt.
Wert | Beschreibung | Ort |
---|---|---|
"user" | Globale Benutzereinstellungen | ~/.claude/settings.json |
"project" | Geteilte Projekteinstellungen (versionskontrolliert) | .claude/settings.json |
"local" | Lokale Projekteinstellungen (gitignored) | .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?
Alle Dateisystem-Einstellungen laden (Legacy-Verhalten):Einstellungs-Priorität
Wenn mehrere Quellen geladen werden, werden Einstellungen mit dieser Priorität zusammengeführt (höchste zu 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 programmatisch definierten Subagenten.
Feld | Erforderlich | Beschreibung |
---|---|---|
description | Ja | Natürlichsprachige Beschreibung, wann dieser Agent zu verwenden ist |
tools | Nein | Array erlaubter Tool-Namen. Wenn weggelassen, erbt alle Tools |
prompt | Ja | Der System-Prompt des Agenten |
model | Nein | Modell-Override 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-Server-Konfigurationen.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
Nachrichtentypen
Message
Union-Typ aller möglichen Nachrichten.
UserMessage
Benutzereingabe-Nachricht.
AssistantMessage
Assistenten-Antwortnachricht mit Inhaltsblöcken.
SystemMessage
System-Nachricht mit Metadaten.
ResultMessage
Finale Ergebnisnachricht mit Kosten- und Nutzungsinformationen.
Inhaltsblock-Typen
ContentBlock
Union-Typ aller Inhaltsblöcke.
TextBlock
Text-Inhaltsblock.
ThinkingBlock
Denk-Inhaltsblock (für Modelle mit Denkfähigkeit).
ToolUseBlock
Tool-Verwendungsanfrage-Block.
ToolResultBlock
Tool-Ausführungsergebnis-Block.
Fehlertypen
ClaudeSDKError
Basis-Exception-Klasse für alle SDK-Fehler.
CLINotFoundError
Wird ausgelöst, wenn Claude Code CLI nicht installiert oder nicht gefunden wird.
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 JSON-Parsing fehlschlägt.
Hook-Typen
HookEvent
Unterstützte Hook-Ereignistypen. Beachten Sie, dass das Python SDK aufgrund von Setup-Beschrä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-Verwendungskennung (für tool-bezogene Hooks)context
: Hook-Kontext mit zusätzlichen Informationen
decision
:"block"
um die Aktion zu blockierensystemMessage
: System-Nachricht zum Hinzufügen zum TranskripthookSpecificOutput
: Hook-spezifische Ausgabedaten
HookContext
Kontextinformationen, die an Hook-Callbacks übergeben werden.
HookMatcher
Konfiguration zum Zuordnen von Hooks zu spezifischen Ereignissen oder Tools.
Hook-Verwendungsbeispiel
Tool-Input/Output-Typen
Dokumentation der Input/Output-Schemas für alle eingebauten Claude Code-Tools. Obwohl das Python SDK diese nicht als Typen exportiert, repräsentieren sie die Struktur von Tool-Inputs und -Outputs in Nachrichten.Task
Tool-Name:Task
Input:
Bash
Tool-Name:Bash
Input:
Edit
Tool-Name:Edit
Input:
MultiEdit
Tool-Name:MultiEdit
Input:
Read
Tool-Name:Read
Input:
Write
Tool-Name:Write
Input:
Glob
Tool-Name:Glob
Input:
Grep
Tool-Name:Grep
Input:
NotebookEdit
Tool-Name:NotebookEdit
Input:
WebFetch
Tool-Name:WebFetch
Input:
WebSearch
Tool-Name:WebSearch
Input:
TodoWrite
Tool-Name:TodoWrite
Input:
BashOutput
Tool-Name:BashOutput
Input:
KillBash
Tool-Name:KillBash
Input:
ExitPlanMode
Tool-Name:ExitPlanMode
Input:
ListMcpResources
Tool-Name:ListMcpResources
Input:
ReadMcpResource
Tool-Name:ReadMcpResource
Input:
Erweiterte Features mit ClaudeSDKClient
Aufbau einer kontinuierlichen Unterhaltungsschnittstelle
Verwendung von Hooks zur Verhaltensmodifikation
Echtzeit-Fortschrittsüberwachung
Beispielverwendung
Grundlegende Dateioperationen (mit query)
Fehlerbehandlung
Streaming-Modus mit Client
Verwendung benutzerdefinierter Tools mit ClaudeSDKClient
Siehe auch
- Python SDK-Leitfaden - Tutorial und Beispiele
- SDK-Übersicht - Allgemeine SDK-Konzepte
- TypeScript SDK-Referenz - TypeScript SDK-Dokumentation
- CLI-Referenz - Befehlszeilenschnittstelle
- Häufige Arbeitsabläufe - Schritt-für-Schritt-Anleitungen