Installation
Installieren Sie das Paket in einer virtuellen Umgebung. Bei aktuellen Debian-, Ubuntu- und Homebrew-Python-Installationen schlägt die Ausführung vonpip install gegen System-Python mit error: externally-managed-environment fehl.
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 einenAsyncIterator[Message] zurück, der Nachrichten aus der Konversation liefert.
Beispiel - Mit Optionen
tool()
Dekorator zum Definieren von MCP-Tools mit Typsicherheit.
Parameter
Eingabeschema-Optionen
-
Einfache Typ-Zuordnung (empfohlen):
-
JSON-Schema-Format (für komplexe Validierung):
Rückgabewert
Eine Dekoratorfunktion, die die Tool-Implementierung umhüllt und eineSdkMcpTool-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 einMcpSdkServerConfig-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 nachlast_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 inSDKSessionInfo.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 SieNone, 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).
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 durchClaudeAgentOptions.env:
API_TIMEOUT_MS: Pro-Request-Timeout auf dem Anthropic-Client in Millisekunden. Standard600000. Gilt für die Hauptschleife und alle Subagenten.CLAUDE_CODE_MAX_RETRIES: Maximale API-Wiederholungen. Standard10, begrenzt auf15. Jede Wiederholung erhält sein eigenesAPI_TIMEOUT_MS-Fenster, daher ist die schlimmste Wandzeit ungefährAPI_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)plus Backoff. Für unbeaufsichtigte Läufe, die längere Ausfallzeiten abwarten müssen, setzen SieCLAUDE_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 auf300und entfernt die Obergrenze für diese Variable.CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: Stall-Watchdog für Subagenten, die mitrun_in_backgroundgestartet werden. Standard600000. 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_WATCHDOGmitCLAUDE_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 SieCLAUDE_ENABLE_STREAM_WATCHDOG=0, um ihn zu deaktivieren.CLAUDE_STREAM_IDLE_TIMEOUT_MShat einen Standard von300000und 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
Wennsetting_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.Einstellungsprioritä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 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.
tool_name: Name des aufgerufenen Toolsinput_data: Die Eingabeparameter des Toolscontext: EinToolPermissionContextmit zusätzlichen Informationen
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.
betas in ClaudeAgentOptions, um Beta-Funktionen zu aktivieren.
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:
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.
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. ImmerTruebei denerror_*-Subtypen. Beisubtype="success"ist esTrue, 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 beisubtype="success"gefüllt.result: Text der endgültigen Assistent-Nachricht beisubtype="success"oderNonebei denerror_*-Subtypen. Wennsubtype="success"undis_error=True, enthält dies die API-Fehlerzeichenfolge, falls verfügbar, kann aber leer sein. Überprüfen Sie daherapi_error_statusund den vorherigenAssistantMessage-Inhalt für Details.errors: Fehlerzeichenfolgen auf Schleifenebene, wie die Max-Turns-Nachricht. Wird nur bei denerror_*-Subtypen gefüllt.
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.
input: Stark typisierte Hook-Eingabe mit diskriminierten Unions basierend aufhook_event_name(sieheHookInput)tool_use_id: Optionale Tool-Use-Kennung (für Tool-bezogene Hooks)context: Hook-Kontext mit zusätzlichen Informationen
HookJSONOutput zurück, das enthalten kann:
decision:"block", um die Aktion zu blockierensystemMessage: Warnmeldung, die dem Benutzer angezeigt wirdhookSpecificOutput: 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 wierm -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:
AskUserQuestion
Tool-Name:AskUserQuestion
Stellt dem Benutzer während der Ausführung Klärungsfragen. Siehe Genehmigungen und Benutzereingaben handhaben für Verwendungsdetails.
Eingabe:
Bash
Tool-Name:Bash
Eingabe:
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:
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
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.TaskCreate
Tool-Name:TaskCreate
Eingabe:
TaskUpdate
Tool-Name:TaskUpdate
Eingabe:
TaskGet
Tool-Name:TaskGet
Eingabe:
TaskList
Tool-Name:TaskList
Eingabe:
BashOutput
Tool-Name:BashOutput
Eingabe:
KillBash
Tool-Name:KillBash
Eingabe:
ExitPlanMode
Tool-Name:ExitPlanMode
Eingabe:
ListMcpResources
Tool-Name:ListMcpResourcesTool
Eingabe:
ReadMcpResource
Tool-Name:ReadMcpResourceTool
Eingabe:
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
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
WennallowUnsandboxedCommands 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 esdangerouslyDisableSandbox: Truein der Tool-Eingabe setzt.
- 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
Siehe auch
- SDK-Übersicht - Allgemeine SDK-Konzepte
- TypeScript SDK-Referenz - TypeScript SDK-Dokumentation
- CLI-Referenz - Befehlszeilenschnittstelle
- Häufige Workflows - Schritt-für-Schritt-Anleitungen