Zum Hauptinhalt springen

Installation

Installieren Sie das Paket in einer virtuellen Umgebung. Bei aktuellen Debian-, Ubuntu- und Homebrew-Python-Installationen schlägt die Ausführung von pip install gegen System-Python mit error: externally-managed-environment fehl.
Für uv, Windows PowerShell und API-Schlüssel-Setup siehe Erste Schritte in der Agent SDK-Übersicht.

Wahl zwischen query() und ClaudeSDKClient

Das Python SDK bietet zwei Möglichkeiten, um mit Claude Code zu interagieren:

Schnellvergleich

Wann query() verwendet werden sollte (einmalige Aufgaben)

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 neuen Anfang möchten

Wann ClaudeSDKClient verwendet werden sollte (kontinuierliche Konversation)

Am besten für:
  • Konversationen fortsetzen - Wenn Claude den Kontext merken muss
  • Nachfolgefragen - Aufbauend 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 standardmäßig 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, es sei denn, Sie übergeben continue_conversation=True oder resume in ClaudeAgentOptions. Siehe Sitzungen.

Parameter

Rückgabewert

Gibt einen AsyncIterator[Message] zurück, der Nachrichten aus der Konversation liefert.

Beispiel - Mit Optionen

tool()

Dekorator zum Definieren von MCP-Tools mit Typsicherheit.

Parameter

Eingabeschema-Optionen

  1. Einfache Typ-Zuordnung (empfohlen):
  2. JSON-Schema-Format (für komplexe Validierung):

Rückgabewert

Eine Dekoratorfunktion, die die Tool-Implementierung umhüllt und eine SdkMcpTool-Instanz zurückgibt.

Beispiel

ToolAnnotations

Erneut exportiert aus mcp.types (auch verfügbar als from claude_agent_sdk import ToolAnnotations). Alle Felder sind optionale Hinweise; Clients sollten sich nicht auf sie für Sicherheitsentscheidungen verlassen.

create_sdk_mcp_server()

Erstellt einen In-Process-MCP-Server, der in Ihrer Python-Anwendung ausgeführt wird.

Parameter

Rückgabewert

Gibt ein McpSdkServerConfig-Objekt zurück, das an ClaudeAgentOptions.mcp_servers übergeben werden kann.

Beispiel

list_sessions()

Listet vergangene Sitzungen mit Metadaten auf. Filtern Sie nach Projektverzeichnis oder listen Sie Sitzungen über alle Projekte auf. Synchron; gibt sofort zurück.

Parameter

Rückgabetyp: SDKSessionInfo

Beispiel

Geben Sie die 10 neuesten Sitzungen für ein Projekt aus. Die Ergebnisse werden nach last_modified absteigend sortiert, daher ist das erste Element das neueste. Lassen Sie directory weg, um über alle Projekte zu suchen.

get_session_messages()

Ruft Nachrichten aus einer vergangenen Sitzung ab. Synchron; gibt sofort zurück.

Parameter

Rückgabetyp: SessionMessage

Beispiel

get_session_info()

Liest Metadaten für eine einzelne Sitzung nach ID, ohne das vollständige Projektverzeichnis zu durchsuchen. Synchron; gibt sofort zurück.

Parameter

Gibt SDKSessionInfo zurück, oder None, wenn die Sitzung nicht gefunden wird.

Beispiel

Suchen Sie die Metadaten einer einzelnen Sitzung, ohne das Projektverzeichnis zu durchsuchen. Nützlich, wenn Sie bereits eine Sitzungs-ID aus einem vorherigen Durchlauf haben.

rename_session()

Benennt eine Sitzung um, indem ein benutzerdefinierter Titeleintrag angehängt wird. Wiederholte Aufrufe sind sicher; der neueste Titel gewinnt. Synchron.

Parameter

Wirft ValueError, wenn session_id keine gültige UUID ist oder title leer ist; FileNotFoundError, wenn die Sitzung nicht gefunden werden kann.

Beispiel

Benennen Sie die neueste Sitzung um, damit sie später leichter zu finden ist. Der neue Titel wird in SDKSessionInfo.custom_title bei nachfolgenden Lesevorgängen angezeigt.

tag_session()

Markiert eine Sitzung mit einem Tag. Übergeben Sie None, um das Tag zu löschen. Wiederholte Aufrufe sind sicher; das neueste Tag gewinnt. Synchron.

Parameter

Wirft ValueError, wenn session_id keine gültige UUID ist oder tag nach der Bereinigung leer ist; FileNotFoundError, wenn die Sitzung nicht gefunden werden kann.

Beispiel

Markieren Sie eine Sitzung mit einem Tag, und filtern Sie später nach diesem Tag. Übergeben Sie None, um ein vorhandenes Tag zu löschen.

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.

Wichtige Funktionen

  • Sitzungskontinuität: Behält Konversationskontext über mehrere query()-Aufrufe hinweg bei
  • Gleiche Konversation: Die Sitzung behält vorherige Nachrichten bei
  • Unterbrechungsunterstützung: Kann die Ausführung mitten in einer Aufgabe stoppen
  • Expliziter Lebenszyklus: Sie kontrollieren, wann die Sitzung beginnt und endet
  • Antwortgesteuerte Abläufe: Kann auf Antworten reagieren und Nachfolgefragen senden
  • Benutzerdefinierte Tools und Hooks: Unterstützt benutzerdefinierte Tools (erstellt mit dem @tool-Dekorator) und Hooks

Methoden

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 brauchen.

Beispiel - Konversation fortsetzen

Beispiel - Streaming-Eingabe mit ClaudeSDKClient

Beispiel - Unterbrechungen verwenden

Pufferverhalten nach Unterbrechung: interrupt() sendet ein Stopsignal, löscht aber nicht den Nachrichtenpuffer. Nachrichten, die bereits von der unterbrochenen Aufgabe produziert wurden, einschließlich ihrer ResultMessage (mit subtype="error_during_execution"), bleiben im Stream. Sie müssen sie mit receive_response() entleeren, bevor Sie die Antwort auf eine neue Abfrage lesen. Wenn Sie unmittelbar nach interrupt() eine neue Abfrage senden und receive_response() nur einmal aufrufen, erhalten Sie die Nachrichten der unterbrochenen Aufgabe, nicht die Antwort der neuen Abfrage.

Beispiel - Erweiterte Berechtigungskontrolle

Typen

@dataclass vs TypedDict: Dieses SDK verwendet zwei Arten von Typen. Klassen, die mit @dataclass dekoriert sind (wie ResultMessage, AgentDefinition, TextBlock), sind zur Laufzeit Objektinstanzen und unterstützen Attributzugriff: msg.result. Klassen, die mit TypedDict definiert sind (wie ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput), sind zur Laufzeit einfache Dicts und erfordern Schlüsselzugriff: config["budget_tokens"], nicht config.budget_tokens. Die ClassName(field=value)-Aufrufsyntax funktioniert für beide, aber nur Dataclasses erzeugen Objekte mit Attributen.

SdkMcpTool

Definition für ein SDK MCP-Tool, das mit dem @tool-Dekorator erstellt wurde.

Transport

Abstrakte Basisklasse für benutzerdefinierte Transport-Implementierungen. Verwenden Sie dies, um mit dem Claude-Prozess über einen benutzerdefinierten Kanal zu kommunizieren (z. B. eine Remote-Verbindung statt eines lokalen Subprozesses).
Dies ist eine Low-Level-interne API. Die Schnittstelle kann sich in zukünftigen Versionen ändern. Benutzerdefinierte Implementierungen müssen aktualisiert werden, um Schnittstellenänderungen zu entsprechen.
Import: from claude_agent_sdk import Transport

ClaudeAgentOptions

Konfigurationsdatenklasse für Claude Code-Abfragen.

Langsame oder steckengebliebene API-Antworten handhaben

Die CLI-Subprozess liest mehrere Umgebungsvariablen, die API-Timeouts und Stall-Erkennung steuern. Übergeben Sie sie durch ClaudeAgentOptions.env:
  • API_TIMEOUT_MS: Pro-Request-Timeout auf dem Anthropic-Client in Millisekunden. Standard 600000. Gilt für die Hauptschleife und alle Subagenten.
  • CLAUDE_CODE_MAX_RETRIES: Maximale API-Wiederholungen. Standard 10, begrenzt auf 15. Jede Wiederholung erhält sein eigenes API_TIMEOUT_MS-Fenster, daher ist die schlimmste Wandzeit ungefähr API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) plus Backoff. Für unbeaufsichtigte Läufe, die längere Ausfallzeiten abwarten müssen, setzen Sie CLAUDE_CODE_RETRY_WATCHDOG=1: Es wiederholt Kapazitätsfehler unbegrenzt, und ab Claude Code v2.1.199 erhöht sich der Standard für andere vorübergehende Fehler auf 300 und entfernt die Obergrenze für diese Variable.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: Stall-Watchdog für Subagenten, die mit run_in_background gestartet werden. Standard 600000. Setzt sich bei jedem Stream-Ereignis zurück; bei Stall bricht es den Subagenten ab, markiert die Aufgabe als fehlgeschlagen und zeigt den Fehler dem übergeordneten Element mit jedem Teilergebnis. Gilt nicht für synchrone Subagenten.
  • CLAUDE_ENABLE_STREAM_WATCHDOG mit CLAUDE_STREAM_IDLE_TIMEOUT_MS: Bricht die Anfrage ab, wenn Header angekommen sind, aber der Antwortkörper nicht mehr streamt. Der Watchdog ist standardmäßig für alle Anbieter aktiviert; setzen Sie CLAUDE_ENABLE_STREAM_WATCHDOG=0, um ihn zu deaktivieren. CLAUDE_STREAM_IDLE_TIMEOUT_MS hat einen Standard von 300000 und ist auf dieses Minimum begrenzt. Die abgebrochene Anfrage durchläuft den normalen Wiederholungspfad.

OutputFormat

Konfiguration für die Validierung strukturierter Ausgaben. Übergeben Sie dies als dict an das Feld output_format auf ClaudeAgentOptions:

SystemPromptPreset

Konfiguration für die Verwendung des Preset-System-Prompts von Claude Code mit optionalen Ergänzungen.

SystemPromptFile

Konfiguration zum Laden eines benutzerdefinierten System-Prompts aus einer Datei, anstatt ihn als Zeichenkette zu übergeben. Das SDK ordnet dies dem CLI-Flag --system-prompt-file zu. Verwenden Sie die Dateiform, wenn der Prompt groß ist: Das SDK übergibt einen Zeichenketten-system_prompt auf der CLI-Subprozess-argv, die OS-Befehlszeilenlängenbeschränkungen unterliegt, bevor das SDK eine API-Anfrage sendet. Auf Linux schlägt ein einzelnes Argument, das länger als ungefähr 128 KB ist, beim Prozessstart mit Argument list too long fehl. Unter Windows ist die gesamte Befehlszeile auf ungefähr 32 KB begrenzt, daher schlägt die Zeichenkettenform bei einem niedrigeren Schwellenwert fehl.

SettingSource

Steuert, welche dateisystembasierte Konfigurationsquellen das SDK Einstellungen aus lädt.

Standardverhalten

Wenn setting_sources weggelassen oder None ist, lädt query() die gleichen Dateisystem-Einstellungen wie die Claude Code CLI: Benutzer, Projekt und lokal. Verwaltete Richtlinieneinstellungen werden in allen Fällen geladen; Server-verwaltete Einstellungen werden abgerufen, wenn sich die Sitzung mit einer Organisationsanmeldedaten auf einer berechtigten Konfiguration authentifiziert. Siehe Was settingSources nicht kontrolliert für Eingaben, die unabhängig von dieser Option gelesen werden, und wie man sie deaktiviert.

Warum setting_sources verwenden

Dateisystem-Einstellungen deaktivieren:
Im Python SDK 0.1.59 und früher wurde eine leere Liste gleich behandelt wie das Weglassen der Option, daher hatte setting_sources=[] keine Auswirkung auf die Deaktivierung von Dateisystem-Einstellungen. Aktualisieren Sie auf eine neuere Version, wenn Sie benötigen, dass eine leere Liste wirksam wird. Das TypeScript SDK ist nicht betroffen.
Alle Dateisystem-Einstellungen explizit laden:
Nur bestimmte Einstellungsquellen laden:
Test- und CI-Umgebungen:
SDK-only-Anwendungen:
Laden von CLAUDE.md-Projektanweisungen:

Einstellungspriorität

Wenn mehrere Quellen geladen werden, werden Einstellungen mit dieser Priorität zusammengeführt (höchste zu niedrigste):
  1. Lokale Einstellungen (.claude/settings.local.json)
  2. Projekteinstellungen (.claude/settings.json)
  3. Benutzereinstellungen (~/.claude/settings.json)
Programmgesteuerte Optionen wie agents und allowed_tools überschreiben Benutzer-, Projekt- und lokale Dateisystem-Einstellungen. Verwaltete Richtlinieneinstellungen haben Vorrang vor programmgesteuerten Optionen.

AgentDefinition

Konfiguration für einen programmgesteuert definierten Subagenten.
AgentDefinition-Feldnamen verwenden camelCase, wie disallowedTools, permissionMode und maxTurns. Diese Namen werden direkt dem Drahtformat zugeordnet, das mit dem TypeScript SDK geteilt wird. Dies unterscheidet sich von ClaudeAgentOptions, das Python snake_case für die entsprechenden Top-Level-Felder wie disallowed_tools und permission_mode verwendet. Da AgentDefinition eine Dataclass ist, wirft das Übergeben eines snake_case-Schlüsselworts einen TypeError zur Konstruktionszeit auf.

PermissionMode

Berechtigungsmodi zur Kontrolle der Tool-Ausführung.

EffortLevel

Anstrengungsstufen zur Steuerung der Denktiefe.

CanUseTool

Typ-Alias für Tool-Berechtigungs-Callback-Funktionen.
Der Callback empfängt:
  • tool_name: Name des aufgerufenen Tools
  • input_data: Die Eingabeparameter des Tools
  • context: Ein ToolPermissionContext mit zusätzlichen Informationen
Gibt ein PermissionResult zurück (entweder PermissionResultAllow oder PermissionResultDeny). Der Callback ist der SDK-Ersatz für die interaktive Berechtigungsaufforderung: Er wird nur aufgerufen, wenn der Berechtigungsbewertungsfluss zu einer Aufforderung führt. Tool-Aufrufe, die bereits von einem allowed_tools-Eintrag, einer Settings-Allow-Regel oder dem Berechtigungsmodus wie acceptEdits oder bypassPermissions genehmigt wurden, rufen ihn nie auf. Um jeden Tool-Aufruf zu kontrollieren, verwenden Sie stattdessen einen PreToolUse-Hook. AskUserQuestion, MCP-Tools, die mit requiresUserInteraction gekennzeichnet sind, und Connector-Tools die Ihre Organisation auf ask gesetzt hat erreichen den Callback auch, wenn eine Allow-Regel übereinstimmt. Im dontAsk-Modus werden diese Aufrufe stattdessen verweigert, ohne den Callback aufzurufen.

ToolPermissionContext

Kontextinformationen, die an Tool-Berechtigungs-Callbacks übergeben werden.

PermissionResult

Union-Typ für Berechtigungs-Callback-Ergebnisse.

PermissionResultAllow

Ergebnis, das angibt, dass der Tool-Aufruf zulässig sein sollte.

PermissionResultDeny

Ergebnis, das angibt, dass der Tool-Aufruf verweigert werden sollte.

PermissionUpdate

Konfiguration zum programmgesteuerten Aktualisieren von Berechtigungen.

PermissionRuleValue

Eine Regel, die in einer Berechtigungsaktualisierung hinzugefügt, ersetzt oder entfernt werden soll.

ToolsPreset

Preset-Tools-Konfiguration für die Verwendung des Standard-Tool-Sets von Claude Code.

ThinkingConfig

Steuert das Verhalten des erweiterten Denkens. Eine Union von drei Konfigurationen:
Das optionale Feld display steuert, ob Thinking-Text "summarized" oder "omitted" zurückgegeben wird. Bei Claude Opus 4.7 und später ist der API-Standard "omitted", daher setzen Sie "summarized", um Thinking-Inhalte in ThinkingBlock-Ausgaben zu erhalten. Da dies TypedDict-Klassen sind, sind sie zur Laufzeit einfache Dicts. Konstruieren Sie sie entweder als Dict-Literale oder rufen Sie die Klasse wie einen Konstruktor auf; beide erzeugen ein dict. Greifen Sie auf Felder mit config["budget_tokens"] zu, nicht mit config.budget_tokens:

SdkBeta

Literal-Typ für SDK-Beta-Funktionen.
Verwenden Sie mit dem Feld betas in ClaudeAgentOptions, um Beta-Funktionen zu aktivieren.
Die context-1m-2025-08-07-Beta ist seit dem 30. April 2026 veraltet. Das Übergeben dieses Headers mit Claude Sonnet 4.5 oder Sonnet 4 hat keine Auswirkung, und Anfragen, die das Standard-200k-Token-Kontextfenster überschreiten, geben einen Fehler zurück. Um ein 1M-Token-Kontextfenster zu verwenden, migrieren Sie zu Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Opus 4.7 oder Claude Opus 4.8, die 1M-Kontext zu Standardpreisen ohne Beta-Header enthalten.

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

McpServerStatusConfig

Die Konfiguration eines MCP-Servers, wie von get_mcp_status() gemeldet. Dies ist die Union aller McpServerConfig-Transport-Varianten plus eine nur-Ausgabe-claudeai-proxy-Variante für Server, die durch claude.ai proxiert werden.
McpSdkServerConfigStatus ist die serialisierbare Form von McpSdkServerConfig mit nur type ("sdk") und name (str)-Feldern; die In-Process-instance wird weggelassen. McpClaudeAIProxyServerConfig hat type ("claudeai-proxy"), url (str) und id (str)-Felder.

McpStatusResponse

Antwort von ClaudeSDKClient.get_mcp_status(). Umhüllt die Liste der Server-Status unter dem mcpServers-Schlüssel.

McpServerStatus

Status eines verbundenen MCP-Servers, enthalten in McpStatusResponse.

SdkPluginConfig

Konfiguration zum Laden von Plugins im SDK.
Beispiel:
Vollständige Informationen zum Erstellen und Verwenden von Plugins finden Sie unter Plugins.

Nachrichtentypen

Message

Union-Typ aller möglichen Nachrichten.

UserMessage

Benutzereingabe-Nachricht.

AssistantMessage

Assistent-Antwortnachricht mit Inhaltsblöcken.

AssistantMessageError

Mögliche Fehlertypen für Assistent-Nachrichten.

SystemMessage

System-Nachricht mit Metadaten.

ResultMessage

Endgültige Ergebnis-Nachricht mit Kosten- und Nutzungsinformationen.
Das Feld subtype bestimmt, welche anderen Felder gefüllt werden. Es ist eines von "success", "error_during_execution", "error_max_turns", "error_max_budget_usd" oder "error_max_structured_output_retries". Die Python-Dataclass vereinfacht alle Varianten in eine Form, daher sind Felder, die nicht auf den zurückgegebenen Subtyp zutreffen, None. Mehrere Felder enthalten diagnostische Details, wenn das Gespräch mit einem Fehler endet:
  • is_error: True, wenn das Gespräch in einem Fehlerzustand endete. Immer True bei den error_*-Subtypen. Bei subtype="success" ist es True, wenn die letzte Modellanfrage fehlgeschlagen ist, was bedeutet, dass die Agent-Schleife abgeschlossen wurde, aber der letzte API-Aufruf einen Fehler zurückgab.
  • api_error_status: Der HTTP-Statuscode des beendenden API-Fehlers. None, wenn die Umdrehung ohne einen endete. Wird nur bei subtype="success" gefüllt.
  • result: Text der endgültigen Assistent-Nachricht bei subtype="success" oder None bei den error_*-Subtypen. Wenn subtype="success" und is_error=True, enthält dies die API-Fehlerzeichenfolge, falls verfügbar, kann aber leer sein. Überprüfen Sie daher api_error_status und den vorherigen AssistantMessage-Inhalt für Details.
  • errors: Fehlerzeichenfolgen auf Schleifenebene, wie die Max-Turns-Nachricht. Wird nur bei den error_*-Subtypen gefüllt.
Das usage-Dict enthält die folgenden Schlüssel, wenn vorhanden: Das model_usage-Dict ordnet Modellnamen der Nutzung pro Modell zu. Die inneren Dict-Schlüssel verwenden camelCase, da der Wert unverändert vom zugrunde liegenden CLI-Prozess übergeben wird und dem TypeScript ModelUsage-Typ entspricht:

StreamEvent

Stream-Ereignis für partielle Nachrichtenaktualisierungen während des Streamings. Wird nur empfangen, wenn include_partial_messages=True in ClaudeAgentOptions. Import über from claude_agent_sdk.types import StreamEvent.

RateLimitEvent

Wird ausgegeben, wenn sich der Rate-Limit-Status ändert (z. B. von "allowed" zu "allowed_warning"). Verwenden Sie dies, um Benutzer zu warnen, bevor sie eine harte Grenze erreichen, oder um zu backoff, wenn der Status "rejected" ist.

RateLimitInfo

Rate-Limit-Status, den RateLimitEvent trägt.

TaskStartedMessage

Wird ausgegeben, wenn eine Hintergrundaufgabe startet. Eine Hintergrundaufgabe ist alles, was außerhalb der Hauptumdrehung verfolgt wird: ein backgroundierter Bash-Befehl, eine Monitor-Überwachung, ein Subagent, der über das Agent-Tool erzeugt wird, oder ein Remote-Agent. Das Feld task_type sagt Ihnen, welches. Diese Benennung ist nicht verwandt mit der Task-zu-Agent-Tool-Umbenennung.

TaskUsage

Token- und Timing-Daten für eine Hintergrundaufgabe.

TaskProgressMessage

Wird regelmäßig mit Fortschrittsaktualisierungen für eine laufende Hintergrundaufgabe ausgegeben.

TaskNotificationMessage

Wird ausgegeben, wenn eine Hintergrundaufgabe abgeschlossen, fehlgeschlagen oder gestoppt wird. Hintergrundaufgaben umfassen run_in_background-Bash-Befehle, Monitor-Überwachungen und Background-Subagenten.

Inhaltsblock-Typen

ContentBlock

Union-Typ aller Inhaltsblöcke.

TextBlock

Text-Inhaltsblock.

ThinkingBlock

Thinking-Inhaltsblock (für Modelle mit Thinking-Fähigkeit).

ToolUseBlock

Tool-Use-Anfrage-Block.

ToolResultBlock

Tool-Ausführungs-Ergebnis-Block.

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 JSON-Parsing fehlschlägt.

Hook-Typen

Einen umfassenden Leitfaden zur Verwendung von Hooks mit Beispielen und häufigen Mustern finden Sie im Hooks-Leitfaden.

HookEvent

Unterstützte Hook-Ereignistypen.
Das TypeScript SDK unterstützt zusätzliche Hook-Ereignisse, die in Python noch nicht verfügbar sind: SessionStart, SessionEnd, Setup, TeammateIdle, TaskCompleted, ConfigChange, WorktreeCreate, WorktreeRemove, PostToolBatch und MessageDisplay.

HookCallback

Typ-Definition für Hook-Callback-Funktionen.
Parameter:
  • input: Stark typisierte Hook-Eingabe mit diskriminierten Unions basierend auf hook_event_name (siehe HookInput)
  • tool_use_id: Optionale Tool-Use-Kennung (für Tool-bezogene Hooks)
  • context: Hook-Kontext mit zusätzlichen Informationen
Gibt ein HookJSONOutput zurück, das enthalten kann:
  • decision: "block", um die Aktion zu blockieren
  • systemMessage: Warnmeldung, die dem Benutzer angezeigt wird
  • hookSpecificOutput: Hook-spezifische Ausgabedaten

HookContext

Kontextinformationen, die an Hook-Callbacks übergeben werden.

HookMatcher

Konfiguration zum Abgleichen von Hooks mit bestimmten Ereignissen oder Tools.

HookInput

Union-Typ aller Hook-Eingabetypen. Der tatsächliche Typ hängt vom Feld hook_event_name ab.

BaseHookInput

Basis-Felder, die in allen Hook-Eingabetypen vorhanden sind.

PreToolUseHookInput

Eingabedaten für PreToolUse-Hook-Ereignisse.

PostToolUseHookInput

Eingabedaten für PostToolUse-Hook-Ereignisse.

PostToolUseFailureHookInput

Eingabedaten für PostToolUseFailure-Hook-Ereignisse. Wird aufgerufen, wenn eine Tool-Ausführung fehlschlägt.

UserPromptSubmitHookInput

Eingabedaten für UserPromptSubmit-Hook-Ereignisse.

StopHookInput

Eingabedaten für Stop-Hook-Ereignisse.

SubagentStopHookInput

Eingabedaten für SubagentStop-Hook-Ereignisse.

PreCompactHookInput

Eingabedaten für PreCompact-Hook-Ereignisse.

NotificationHookInput

Eingabedaten für Notification-Hook-Ereignisse.

SubagentStartHookInput

Eingabedaten für SubagentStart-Hook-Ereignisse.

PermissionRequestHookInput

Eingabedaten für PermissionRequest-Hook-Ereignisse. Ermöglicht Hooks, Berechtigungsentscheidungen programmgesteuert zu handhaben.

HookJSONOutput

Union-Typ für Hook-Callback-Rückgabewerte.

SyncHookJSONOutput

Synchrone Hook-Ausgabe mit Kontroll- und Entscheidungsfeldern.
Verwenden Sie continue_ (mit Unterstrich) im Python-Code. Es wird automatisch in continue konvertiert, wenn es an die CLI gesendet wird.

HookSpecificOutput

Ein TypedDict, das den Hook-Ereignisnamen und ereignisspezifische Felder enthält. Die Form hängt vom hookEventName-Wert ab. Vollständige Details zu verfügbaren Feldern pro Hook-Ereignis finden Sie unter Ausführung mit Hooks kontrollieren. Eine diskriminierte Union von ereignisspezifischen Ausgabetypen. Das Feld hookEventName bestimmt, welche Felder gültig sind.

AsyncHookJSONOutput

Asynchrone Hook-Ausgabe, die Hook-Ausführung aufschiebt.
Verwenden Sie async_ (mit Unterstrich) im Python-Code. Es wird automatisch in async konvertiert, wenn es an die CLI gesendet wird.

Hook-Verwendungsbeispiel

Dieses Beispiel registriert zwei Hooks: einen, der gefährliche Bash-Befehle wie rm -rf / blockiert, und einen anderen, der alle Tool-Nutzung für Auditing protokolliert. Der Sicherheits-Hook wird nur auf Bash-Befehle ausgeführt (über den matcher), während der Logging-Hook auf alle Tools angewendet wird.

Tool-Eingabe-/Ausgabetypen

Dokumentation von Eingabe-/Ausgabeschemas für alle integrierten Claude Code-Tools. Während das Python SDK diese nicht als Typen exportiert, stellen sie die Struktur von Tool-Eingaben und -Ausgaben in Nachrichten dar.

Agent

Tool-Name: Agent (früher Task, das immer noch als Alias akzeptiert wird) Eingabe:
Ausgabe:

AskUserQuestion

Tool-Name: AskUserQuestion Stellt dem Benutzer während der Ausführung Klärungsfragen. Siehe Genehmigungen und Benutzereingaben handhaben für Verwendungsdetails. Eingabe:
Ausgabe:

Bash

Tool-Name: Bash Eingabe:
Ausgabe:

Monitor

Tool-Name: Monitor Führt eine Background-Quelle aus und liefert jedes Ereignis an Claude, damit es reagieren kann, ohne zu pollen: command führt ein Skript aus und gibt ein Ereignis pro stdout-Zeile aus, und ws öffnet einen WebSocket und gibt ein Ereignis pro Textframe aus. Geben Sie genau eines von command oder ws an. Wenn Monitor einen Befehl ausführt, folgt es den gleichen Berechtigungsregeln wie Bash; eine WebSocket-Überwachung fordert separat zur Genehmigung auf. Die ws-Quelle erfordert Claude Code v2.1.195 oder später. Siehe die Monitor-Tool-Referenz für Verhalten und Provider-Verfügbarkeit. Eingabe:
Ausgabe:

Edit

Tool-Name: Edit Eingabe:
Ausgabe:

Read

Tool-Name: Read Eingabe:
Ausgabe (Textdateien):
Ausgabe (Bilder):

Write

Tool-Name: Write Eingabe:
Ausgabe:

Glob

Tool-Name: Glob Eingabe:
Ausgabe:

Grep

Tool-Name: Grep Eingabe:
Ausgabe (content-Modus):
Ausgabe (files_with_matches-Modus):

NotebookEdit

Tool-Name: NotebookEdit Eingabe:
Ausgabe:

WebFetch

Tool-Name: WebFetch Eingabe:
Ausgabe:

WebSearch

Tool-Name: WebSearch Eingabe:
Ausgabe:

TodoWrite

Tool-Name: TodoWrite
Ab Claude Code v2.1.142 ist TodoWrite standardmäßig deaktiviert. Verwenden Sie stattdessen TaskCreate, TaskGet, TaskUpdate und TaskList. Siehe Zu Task-Tools migrieren, um Ihren Überwachungscode zu aktualisieren, oder setzen Sie CLAUDE_CODE_ENABLE_TASKS=0, um zu TodoWrite zurückzukehren.
Eingabe:
Ausgabe:

TaskCreate

Tool-Name: TaskCreate Eingabe:
Ausgabe:

TaskUpdate

Tool-Name: TaskUpdate Eingabe:
Ausgabe:

TaskGet

Tool-Name: TaskGet Eingabe:
Ausgabe:

TaskList

Tool-Name: TaskList Eingabe:
Ausgabe:

BashOutput

Tool-Name: BashOutput Eingabe:
Ausgabe:

KillBash

Tool-Name: KillBash Eingabe:
Ausgabe:

ExitPlanMode

Tool-Name: ExitPlanMode Eingabe:
Ausgabe:

ListMcpResources

Tool-Name: ListMcpResourcesTool Eingabe:
Ausgabe:

ReadMcpResource

Tool-Name: ReadMcpResourceTool Eingabe:
Ausgabe:

Erweiterte Funktionen mit ClaudeSDKClient

Erstellen einer kontinuierlichen Konversationsschnittstelle

Verwendung von Hooks zur Verhaltensänderung

Echtzeit-Fortschrittsüberwachung

Beispielverwendung

Grundlegende Dateivorgänge (mit query)

Fehlerbehandlung

Streaming-Modus mit Client

Verwendung benutzerdefinierter Tools mit ClaudeSDKClient

Sandbox-Konfiguration

SandboxSettings

Konfiguration für das Sandbox-Verhalten. Verwenden Sie dies, um Command-Sandboxing zu aktivieren und Netzwerkbeschränkungen programmgesteuert zu konfigurieren.
Die Sandbox hängt von der Plattformunterstützung ab und benötigt unter Linux Tools wie bubblewrap und socat. Standardmäßig werden Befehle, wenn enabled auf True gesetzt ist, aber die Sandbox nicht gestartet werden kann, unsandboxed mit einer Warnung auf stderr ausgeführt. Dieses Standardverhalten unterscheidet sich vom TypeScript SDK, wo failIfUnavailable standardmäßig auf true gesetzt ist.Setzen Sie "failIfUnavailable": True in Ihren Sandbox-Einstellungen, um stattdessen zu stoppen. Der Schlüssel ist noch nicht auf SandboxSettings deklariert, aber das SDK leitet ihn an Claude Code weiter, das ihn berücksichtigt. query() meldet dann eine ResultMessage mit subtype="error_during_execution" und den Grund in errors. Achten Sie auf diesen Subtyp, anstatt zu erwarten, dass query() vor dem Yielding von Nachrichten eine Ausnahme auslöst.

Beispielverwendung

Unix-Socket-Sicherheit: Die Option allowUnixSockets kann Zugriff auf leistungsstarke Systemdienste gewähren. Zum Beispiel ermöglicht das Zulassen von /var/run/docker.sock effektiv vollständigen Host-Systemzugriff über die Docker-API und umgeht die Sandbox-Isolation. Erlauben Sie nur Unix-Sockets, die absolut notwendig sind, und verstehen Sie die Sicherheitsauswirkungen jedes einzelnen.

SandboxNetworkConfig

Netzwerkspezifische Konfiguration für den Sandbox-Modus. Diese Einstellungen gelten für Sandbox-Bash-Befehle, wenn enabled in den übergeordneten SandboxSettings auf True gesetzt ist. Sie beschränken das WebFetch-Tool nicht, das stattdessen Berechtigungsregeln verwendet.
Der integrierte Sandbox-Proxy erzwingt die Netzwerk-Allowlist basierend auf dem angeforderten Hostnamen und beendet oder inspiziert keinen TLS-Verkehr, daher können Techniken wie Domain Fronting ihn möglicherweise umgehen. Siehe Sandboxing-Sicherheitsbeschränkungen für Details und Sichere Bereitstellung für die Konfiguration eines TLS-terminierenden Proxys.

SandboxIgnoreViolations

Konfiguration zum Ignorieren bestimmter Sandbox-Verstöße.

Berechtigungen-Fallback für Unsandboxed-Befehle

Wenn allowUnsandboxedCommands aktiviert ist, kann das Modell anfordern, Befehle außerhalb der Sandbox auszuführen, indem es dangerouslyDisableSandbox: True in der Tool-Eingabe setzt. Diese Anfragen fallen auf das bestehende Berechtigungssystem zurück, was bedeutet, dass Ihr can_use_tool-Handler aufgerufen wird, sodass Sie benutzerdefinierte Autorisierungslogik implementieren können.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: Eine statische Liste von Befehlen, die immer automatisch die Sandbox umgehen (z. B. ["docker"]). Das Modell hat keine Kontrolle darüber.
  • allowUnsandboxedCommands: Ermöglicht dem Modell, zur Laufzeit zu entscheiden, ob es die Ausführung außerhalb der Sandbox anfordert, indem es dangerouslyDisableSandbox: True in der Tool-Eingabe setzt.
Dieses Muster ermöglicht es Ihnen:
  • Modell-Anfragen prüfen: Protokollieren Sie, wenn das Modell die Ausführung außerhalb der Sandbox anfordert
  • Allowlists implementieren: Erlauben Sie nur bestimmten Befehlen, außerhalb der Sandbox ausgeführt zu werden
  • Genehmigungsworkflows hinzufügen: Erfordern Sie explizite Autorisierung für privilegierte Operationen
Befehle, die mit dangerouslyDisableSandbox: True ausgeführt werden, haben vollständigen Systemzugriff. Stellen Sie sicher, dass Ihr can_use_tool-Handler diese Anfragen sorgfältig validiert.Wenn permission_mode auf bypassPermissions gesetzt ist und allow_unsandboxed_commands aktiviert ist, kann das Modell autonom Befehle außerhalb der Sandbox ausführen, ohne dass Genehmigungsaufforderungen angezeigt werden. Diese Kombination ermöglicht dem Modell effektiv, die Sandbox-Isolation stillschweigend zu verlassen.

Siehe auch