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:
Verwenden Sie
ClaudeSDKClient für interaktive Anwendungen wie Chat-Schnittstellen oder wenn die nächste Aktion von Claudes Antwort abhängt.
Funktionen
Signaturblöcke und bloße
async for / async with Fragmente auf dieser Seite sind illustrativ. Um sie auszuführen, wickeln Sie den Text in async def main(): ... ein und rufen Sie asyncio.run(main()) auf.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):
-
TypedDict-Klasse: ein typisiertes Schema, dessen
NotRequired-Schlüssel nicht inrequiredaufgenommen werden.- Python 3.11 und später: Importieren Sie
TypedDictundNotRequiredaustyping. - Python 3.10:
typingenthält keinNotRequired. Importieren SieTypedDictundNotRequiredaustyping_extensions, das das SDK unter Python 3.10 installiert.
- Python 3.11 und später: Importieren Sie
Annotated[type, "description"], um die Beschreibung des Felds festzulegen.
Rückgabewert
Eine Dekoratorfunktion, die die Tool-Implementierung umhüllt und eineSdkMcpTool-Instanz zurückgibt.
Beispiel
ToolAnnotations
Verhaltenshinweise für ein Tool, die als annotations-Argument von tool() übergeben werden. ToolAnnotations erweitert die mcp.types.ToolAnnotations des MCP SDK um ein maxResultSizeChars-Feld, und Sie können jeden Hinweis in camelCase oder snake_case schreiben: ToolAnnotations(readOnlyHint=True) und ToolAnnotations(read_only_hint=True) sind gleichwertig. Um einen Hinweis aus dem Objekt wieder auszulesen, verwenden Sie die Schreibweise, die Ihr installiertes mcp-Paket deklariert: .readOnlyHint unter mcp 1.x und .read_only_hint unter 2.x, während .maxResultSizeChars unter beiden funktioniert. Sie können auch überall dort, wo das SDK Anmerkungen akzeptiert, ein einfaches mcp.types.ToolAnnotations übergeben.
Die snake_case-Namen und das typisierte maxResultSizeChars-Feld erfordern Python Agent SDK 0.2.140 oder später. Versionen 0.1.31 bis 0.2.139 exportieren mcp.types.ToolAnnotations unverändert erneut. In Versionen 0.1.55 bis 0.2.139 können Sie maxResultSizeChars immer noch als Schlüsselwortargument übergeben: Die MCP-Klasse akzeptiert zusätzliche Felder, und das SDK leitet den Wert an Claude Code weiter.
Alle Felder sind optional. Clients sollten sich nicht auf die Hinweise 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.
fork_session()
Kopiert das Transkript einer Sitzung in eine neue Sitzung, sodass Sie die Konversation in eine andere Richtung lenken können, während das Original unverändert bleibt. Um von einem früheren Punkt der Konversation abzuzweigen, übergeben Sie up_to_message_id. Synchron.
Parameter
Gibt ein
ForkSessionResult zurück, dessen session_id die UUID der neuen Sitzung ist. Übergeben Sie diese als resume, um den Fork fortzusetzen. Der Fork enthält nicht die Datei-Checkpoints der ursprünglichen Sitzung, sodass Sie ihn nicht auf einen Checkpoint zurücksetzen können, der vor dem Fork erstellt wurde.
fork_session() wirft:
ValueError:session_idoderup_to_message_idist keine gültige UUIDValueError: Die Sitzung enthält keine Nachrichten, oderup_to_message_identspricht keiner Nachricht im TranskriptFileNotFoundError: Die Sitzung kann nicht gefunden werden
Beispiel
Forken Sie die neueste Sitzung unter einem neuen Titel und setzen Sie anschließend den Fork fort. Die ursprüngliche Sitzung behält ihren eigenen Verlauf.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. Siehe den Vergleich mit query().
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
query() akzeptiert auch ein asynchrones Iterable von Benutzernachricht-Dicts, sodass Sie die Aufforderung zum Sendezeitpunkt zusammenstellen oder Inhaltsblöcke wie Bilder einschließen können. Claude Code beginnt, auf die erste erstellte Nachricht zu reagieren, sobald sie ankommt, ohne auf das Ende des Iterables zu warten, und receive_response() stoppt bei der ResultMessage, die diese Antwort beendet. Fügen Sie alles, das Claude vor der Antwort lesen sollte, in eine Nachricht ein, wie dieses Generator tut, und koppeln Sie jeden query()-Aufruf mit seiner eigenen receive_response()-Schleife.
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, 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
Der CLI-Subprozess liest mehrere Umgebungsvariablen, die API-Timeouts und die Erkennung von Stillständen steuern. Übergeben Sie sie überClaudeAgentOptions.env:
-
API_TIMEOUT_MS: Timeout pro Anfrage auf dem Anthropic-Client in Millisekunden. Standard600000. Gilt für die Hauptschleife und alle Subagenten. -
CLAUDE_CODE_MAX_RETRIES: Maximale Anzahl von API-Wiederholungsversuchen. Standard10, begrenzt auf15. Jeder Wiederholungsversuch erhält sein eigenesAPI_TIMEOUT_MS-Fenster. Für unbeaufsichtigte Läufe, die längere Ausfälle abwarten müssen, setzen SieCLAUDE_CODE_RETRY_WATCHDOG=1: Damit werden vorübergehende Kapazitätsfehler unbegrenzt erneut versucht, und ab Claude Code v2.1.199 wird der Standard für andere vorübergehende Fehler auf300erhöht und die Obergrenze für diese Variable entfernt. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: Stall-Watchdog für Subagenten. Während der Stream-Watchdog eingeschaltet ist, beträgt der StandardCLAUDE_STREAM_IDLE_TIMEOUT_MSplus 5 Minuten, was600000ergibt, es sei denn, Sie erhöhen diese Variable. Bei ausgeschaltetem Stream-Watchdog ist der Standard600000. Vor v2.1.257 war der Standard immer600000. Der Timer wird bei jedem Stream-Ereignis zurückgesetzt. Bei einem Stillstand bricht Claude Code den Subagenten ab und meldet den Stillstand an den übergeordneten Agenten. Bei einem Hintergrund-Subagenten markiert es außerdem die Aufgabe als fehlgeschlagen und hängt ein eventuelles Teilergebnis an. -
CLAUDE_ENABLE_STREAM_WATCHDOGmitCLAUDE_STREAM_IDLE_TIMEOUT_MS: Stream-Watchdog, der die Anfrage abbricht, wenn Header angekommen sind, aber der Response-Body 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 wird auf dieses Minimum begrenzt. Was Claude Code nach dem Abbruch tut, abhängig davon, wie weit die Antwort fortgeschritten war, beschreibt Automatische Wiederholungsversuche. Während der Watchdog auf eine Antwort wartet, die ein Gateway hinterANTHROPIC_BASE_URLmit Keep-Alive-Pings offen hält, empfängt ein Host, derinclude_partial_messagessetzt, weiterhinping-StreamEvent-Nachrichten. Werten Sie diese Frames als Lebenszeichen, anstatt die Sitzung bei Stille per Timeout zu beenden. Vor v2.1.257 stoppten die Frames 5 Minuten nach dem letzten echten Stream-Ereignis.
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.
SystemPromptCustom
Ein benutzerdefinierter System-Prompt in Objektform, äquivalent zum Übergeben einer Zeichenkette als system_prompt, der auch snapshot setzen kann. Erfordert claude-agent-sdk v0.2.153 oder später.
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 system_prompt als Zeichenkette in der argv des CLI-Subprozesses, die den Längenbeschränkungen der Befehlszeile des Betriebssystems unterliegt, bevor das SDK eine API-Anfrage sendet. Unter 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, aus welchen dateisystembasierten Konfigurationsquellen das SDK Einstellungen lädt.
Standardverhalten
Wennsetting_sources weggelassen oder None ist und skills nicht gesetzt ist, lädt query() die gleichen Dateisystem-Einstellungen wie die Claude Code CLI: Benutzer, Projekt und lokal. Wenn skills gesetzt ist, beschreibt die Zeile setting_sources den aktuellen Standard. Endpoint-verwaltete Richtlinien werden in allen Fällen geladen; serververwaltete Einstellungen werden abgerufen, wenn sich die Sitzung mit Anmeldedaten einer Organisation auf einer berechtigten Konfiguration authentifiziert. Weitere Informationen finden Sie unter Was settingSources nicht steuert.
Warum setting_sources verwenden
Dateisystem-Einstellungen deaktivieren:Im Python SDK 0.1.59 und früher wurde eine leere Liste genauso behandelt wie das Weglassen der Option, daher hat
setting_sources=[] Dateisystem-Einstellungen nicht deaktiviert. Aktualisieren Sie auf eine neuere Version, wenn eine leere Liste wirksam werden soll. Das TypeScript SDK ist nicht betroffen."project" in setting_sources ein. Siehe System-Prompts ändern für das Zusammenspiel des Ladens von CLAUDE.md mit den System-Prompt-Optionen.
Vorrang der Einstellungen
Wenn mehrere Quellen geladen werden, werden Einstellungen in dieser Rangfolge zusammengeführt (höchste zu niedrigste):- Lokale Einstellungen (
.claude/settings.local.json) - Projekteinstellungen (
.claude/settings.json) - Benutzereinstellungen (
~/.claude/settings.json)
agents, allowed_tools und settings ü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 entsprechen direkt dem Wire-Format, das mit dem TypeScript SDK geteilt wird. Dies unterscheidet sich von ClaudeAgentOptions, das für die entsprechenden Top-Level-Felder wie disallowed_tools und permission_mode Python-snake_case verwendet. Da AgentDefinition eine Dataclass ist, löst das Übergeben eines snake_case-Schlüsselworts bei der Konstruktion einen TypeError aus.PermissionMode
Berechtigungsmodi zur Steuerung der Tool-Ausführung.
EffortLevel
Effort-Stufen 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 Berechtigungsabfrage: Er wird nur aufgerufen, wenn der Ablauf der Berechtigungsprüfung zu einer Berechtigungsabfrage führt. Tool-Aufrufe, die bereits durch einen allowed_tools-Eintrag, eine Allow-Regel in den Einstellungen oder den Berechtigungsmodus wie acceptEdits oder bypassPermissions genehmigt wurden, rufen ihn nie auf. Um jeden Tool-Aufruf zu kontrollieren, verwenden Sie stattdessen einen PreToolUse-Hook.
Eine Allow-Regel genehmigt nicht vorab die Aktionen, die kein Modus automatisch genehmigt; siehe Wie Berechtigungen ausgewertet werden dazu, welche davon den Callback erreichen und was im Modus dontAsk und auto geschieht.
ToolPermissionContext
Kontextinformationen, die an Tool-Berechtigungs-Callbacks übergeben werden.
PermissionResult
Union-Typ für Ergebnisse von Berechtigungs-Callbacks.
PermissionResultAllow
Ergebnis, das angibt, dass der Tool-Aufruf erlaubt werden soll.
PermissionResultDeny
Ergebnis, das angibt, dass der Tool-Aufruf verweigert werden soll.
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 von Extended Thinking. Eine Union aus 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", setzen Sie daher "summarized", um Thinking-Inhalte in ThinkingBlock-Ausgaben zu erhalten. Claude Code gibt Ihren display-Wert an einige Anbieter nicht weiter, etwa Amazon Bedrock und die Agent Platform von Google Cloud. Bei diesen Anbietern geben Opus 4.7 und später leere ThinkingBlock-Ausgaben zurück, auch wenn Sie display auf "summarized" setzen.
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 Varianten erzeugen ein dict. Greifen Sie auf Felder mit config["budget_tokens"] zu, nicht mit config.budget_tokens:
TaskBudget
API-seitiges Aufgabenbudget in Token, verwendet mit dem Feld task_budget in ClaudeAgentOptions.
Da dies ein
TypedDict ist, übergeben Sie es als einfaches Dict, etwa ClaudeAgentOptions(task_budget={"total": 50000}).
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-Transportvarianten plus einer reinen Ausgabevariante claudeai-proxy für Server, die über claude.ai proxiert werden.
McpSdkServerConfigStatus ist die serialisierbare Form von McpSdkServerConfig mit nur den Feldern type ("sdk") und name (str); die prozessinterne instance wird weggelassen. McpClaudeAIProxyServerConfig hat die Felder type ("claudeai-proxy"), url (str) und id (str).
McpStatusResponse
Antwort von ClaudeSDKClient.get_mcp_status(). Umschließt die Liste der Serverstatus unter dem Schlüssel mcpServers.
McpServerStatus
Status eines verbundenen MCP-Servers, enthalten in McpStatusResponse.
ContextUsageResponse
Antwort von ClaudeSDKClient.get_context_usage(). Dies ist dieselbe Payload, die Claude Code für den Befehl /context in einer interaktiven Sitzung rendert, daher enthält sie neben den Token-Zählungen auch Anzeigefelder wie color und gridRows, mit denen Claude Code das /context-Nutzungsraster zeichnet.
Claude Code erstellt diese Payload, indem es mehrere Anfragen an die Token-Counting-API sendet. Diese Anfragen erscheinen nicht im Nachrichtenstrom, daher sieht eine Kostenverfolgung, die den Strom liest, sie nicht. In der Anthropic API wird Token-Counting nicht abgerechnet.
ContextUsageCategory-Eintrag enthält name, tokens, color und ein optionales Flag isDeferred. totalTokens ist die aktuelle Kontextnutzung der Sitzung, und maxTokens ist das Fenster, an dem diese Nutzung gemessen wird. Dieses Fenster ist das Kontextfenster des Modells oder das niedrigere Fenster der automatischen Komprimierung, sofern eines gilt, und rawMaxTokens enthält denselben Wert wie maxTokens. apiUsage enthält die Nutzung aus der neuesten API-Antwort, keine laufende Summe für die Sitzung. Claude Code lässt die optionalen Schlüssel deferredBuiltinTools, systemTools und systemPromptSections ungesetzt; rechnen Sie also damit, dass sie fehlen, obwohl der Typ sie deklariert.
SdkPluginConfig
Konfiguration zum Laden von Plugins im SDK.
Beispiel:
Nachrichtentypen
Message
Union-Typ aller möglichen Nachrichten.
UserMessage
Benutzereingabe-Nachricht.
Das SDK übergibt
tool_use_result unverändert von der CLI durch. Für ein Tool auf einem externen MCP-Server, dessen Ergebnis resource_link-Blöcke enthält, hat das Dict einen resourceLinks-Schlüssel, der eine Liste von Dicts mit den Schlüsseln des TypeScript-Typs SDKMcpResourceLink enthält. Claude empfängt jeden Link als eine Textzeile im Tool-Ergebnis. Um die vom Server zurückgegebenen Dateien zu rendern, lesen Sie resourceLinks statt diesen Text zu analysieren. Der resourceLinks-Schlüssel erfordert Python Agent SDK 0.2.150 oder später und Claude Code v2.1.257 oder später; die mit dieser SDK-Version gebündelte CLI erfüllt die Claude-Code-Anforderung.
Die CLI lässt den Schlüssel weg, wenn das Ergebnis keine Links hat und bei Ergebnissen von Subagenten. Die CLI behält höchstens 50 Links pro Ergebnis und stoppt das Hinzufügen von Links, sobald die Liste 64 KiB serialisiertes JSON erreicht. Ein Tool, das Sie in-process mit tool() definieren, erzeugt niemals den Schlüssel, da das SDK seine resource_link-Blöcke zu Text vereinfacht, bevor die CLI das Ergebnis sieht.
AssistantMessage
Assistent-Antwortnachricht mit Inhaltsblöcken.
AssistantMessageError
Mögliche Fehlertypen für Assistent-Nachrichten.
max_output_tokens. Das SDK übergibt den Wert unverändert durch, daher behandeln Sie Strings außerhalb dieser Liste wie unknown. Der TypeScript-Typ SDKAssistantMessageError listet den vollständigen Satz von Werten auf, die die CLI ausgeben kann.
SystemMessage
System-Nachricht mit Metadaten.
SystemMessage an. Um die Sitzung zwischen Turns zu verfolgen, setzen Sie CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1 und lesen Sie message.data["state"] bei jeder Nachricht, deren subtype session_state_changed ist. SDKSessionStateChangedMessage listet die Zustände auf, die sie enthalten kann. Iterieren Sie mit receive_messages(), um sie zu lesen: receive_response() stoppt bei der ResultMessage, und eine session_state_changed-Nachricht kann auf dieses Ergebnis folgen.
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, wie das Gespräch endete:
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.terminal_reason: Warum die Abfrage-Schleife endete, z. B."completed","max_turns","api_error","aborted_streaming"oder"aborted_tools". Ein Wert von"aborted_streaming"oder"aborted_tools"bedeutet, dass die Umdrehung vor Abschluss abgebrochen wurde. Häufige Ursachen sindinterrupt()und ein Berechtigungsrückruf, derPermissionResultDenymitinterrupt=Truezurückgibt.Nonebei CLI-Versionen, die dem Feld vorausgehen, bei Ergebnissen von lokalen Befehlen wie/voiceoder/usage, die die Abfrage-Schleife umgehen, oder bei synthetisierten Fehlerergebnissen, die ausgegeben werden, wenn die Sitzung fatal fehlschlägt. Spiegelt den TypeScript SDK-TypSDKResultMessage.terminal_reasonwider, der den vollständigen Satz von Werten auflistet.origin: Herkunft der Benutzernachricht, die diese Umdrehung ausgelöst hat. Im Streaming-Eingabemodus überprüfen Sie dies, um das Ergebnis Ihrer eigenen Eingabeaufforderung zu unterscheiden, wobeioriginNoneoder{"kind": "human"}ist, vom Ergebnis einer eingefügten Umdrehung wie einer Hintergrund-Task-Benachrichtigung. Erfordert Python Agent SDK 0.2.137 oder später.
ResultMessage pro Benachrichtigung, in der richtigen Reihenfolge, jeweils mit einem origin, dessen kind "task-notification" ist. Bei allen außer der letzten ist num_turns auf 0 gesetzt und result leer; die letzte enthält den Turn, der alle beantwortet.
Das usage-Dict deckt nur die Haupt-Agent-Schleife ab und schließt Subagenten und andere verschachtelte oder Hilfs-Modellaufrufe aus. Im Streaming-Eingabemodus sind die Werte pro Umdrehung. Bevorzugen Sie model_usage für Token- und Kostenabrechnung. Das usage-Dict enthält die folgenden Schlüssel, wenn vorhanden:
Das
model_usage-Dict ordnet Modellnamen der Nutzung pro Modell zu. Es deckt jeden Modellaufruf ab, der durch die Abfrage-Pipeline gemacht wird: die Hauptschleife, Subagenten und interne Aufrufe wie Komprimierung und Workflow-Agenten. Hilfsaufrufe außerhalb dieser Pipeline, wie der Berechtigungsklassifizierer und Token-Zählungsanfragen, sind von model_usage ausgeschlossen. Behandeln Sie model_usage als eine Schätzung, nicht als Abrechnungsauszug.
Im Streaming-Eingabemodus sind model_usage und total_cost_usd kumulativ über Umdrehungen hinweg, daher lesen Sie das neueste Ergebnis statt über Ergebnisse zu summieren. Eine Anfrage, die eine Sitzung fortsetzt, zählt auch die Gesamtwerte, die aus den früheren Aufrufen der Sitzung wiederhergestellt wurden. Siehe Kosten im Streaming-Eingabemodus verfolgen für Zurückstellungen und Gesamtwerte nach einem Sitzungsabsturz wiederherstellen für auf Null gesetzte Ergebnisse.
Jeder Wert in model_usage ist ein ModelUsage TypedDict, importiert über from claude_agent_sdk.types import ModelUsage. Seine Schlüssel verwenden camelCase, da das SDK den Wert unverändert vom zugrunde liegenden CLI-Prozess übergibt und dem TypeScript-Typ ModelUsage 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.
ConversationResetMessage
Wird ausgegeben, wenn das Gespräch ersetzt wird, ohne die Verbindung zu beenden, z. B. nach /clear. Siehe Kosten im Streaming-Eingabemodus verfolgen für die Auswirkung eines Zurückstellens auf die laufenden Gesamtwerte bei späteren ResultMessage-Objekten. Erfordert Python Agent SDK 0.2.137 oder später.
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.
Wenn die CLI einen langen MCP-Tool-Aufruf in den Hintergrund verschiebt, enthält das Tool-Ergebnis für diesen Aufruf nur einen Platzhalter und das echte Ergebnis des Aufrufs kommt in dieser Nachricht an. Bei einer
"completed"-Benachrichtigung für einen solchen Aufruf fügt die CLI einen resource_links-Schlüssel hinzu, der die Dateien auflistet, die das Tool durch Referenz zurückgegeben hat, mit den gleichen Einträgen und Grenzen wie der resourceLinks-Schlüssel auf UserMessage.tool_use_result. Der resource_links-Schlüssel erfordert Python Agent SDK 0.2.150 oder später und Claude Code v2.1.257 oder später; die mit dieser SDK-Version gebündelte CLI erfüllt die Claude-Code-Anforderung.
Die Dataclass hat kein Feld für resource_links. Lesen Sie es aus dem data-Dict, das die Nachricht von SystemMessage erbt: message.data.get("resource_links"). Ordnen Sie die Benachrichtigung dem Aufruf mit tool_use_id zu. Die CLI lässt den Schlüssel weg, wenn das Ergebnis keine Links hatte und bei Benachrichtigungen für Aufgaben, die keine MCP-Tool-Aufrufe sind.
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
Die folgenden Typen definieren, was Ihr Code abfängt. Für Einträge, die den Fehlermeldungen zugeordnet sind, die diese Typen auslösen, mit der Ursache und Behebung für jeden, siehe Troubleshooting.ClaudeSDKError
Basis-Ausnahmeklasse für alle SDK-Fehler.
query() mit einem Fehlerergebnis endet, beispielsweise ein Turn-Limit-Fehler, löst das SDK eine ResultError aus.
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.
ResultError
Wird ausgelöst, wenn der Claude Code-Prozess beendet wird, weil die Ausführung mit einer Fehler-Ergebnismeldung endete, z. B. ein Turn-Limit-Fehler oder ein API-Fehler. ResultError ist eine Unterklasse von ProcessError, daher fängt ein vorhandener except ProcessError-Handler auch diesen ab. Seine Attribute enthalten die Felder dieser Ergebnismeldung, sodass Sie verzweigen können, warum die Ausführung fehlgeschlagen ist, ohne den Meldungstext zu analysieren. Erfordert Python Agent SDK 0.2.140 oder später.
terminal_reason vor subtype. Wenn die endgültige Anfrage fehlschlägt, z. B. bei einem API-Fehler, meldet Claude Code subtype "success" mit der Ursache in terminal_reason, z. B. "api_error"; wenn ein von Ihnen festgelegtes Limit die Ausführung beendet, z. B. max_turns oder max_budget_usd, meldet es einen error_*-Subtyp.
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. Siehe die Hook-Verfügbarkeitstabelle für SDK-spezifische Unterstützung.
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.
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
Eine diskriminierte Union von ereignisspezifischen TypedDict-Ausgabetypen. Das Feld hookEventName bestimmt, welche Felder gültig sind. Vollständige Details zu verfügbaren Feldern pro Hook-Ereignis finden Sie unter Ausführung mit Hooks kontrollieren.
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.
Eingabe-/Ausgabetypen für Tools
Dokumentation der Eingabe-/Ausgabeschemas für integrierte Claude Code-Tools. Obwohl das Python SDK diese nicht als Typen exportiert, stellen sie die Struktur von Tool-Eingaben und -Ausgaben in Nachrichten dar. Jede angezeigte Ausgabe ist der Wert, den Sie ausUserMessage.tool_use_result für dieses Tool lesen. Schlüsselnamen erscheinen genau so, wie Claude Code sie ausgibt. Ein Schlüssel, der mit | None annotiert ist und einen Kommentar „vorhanden wenn“ oder „optional“ hat, wird weggelassen, wenn er nicht zutrifft.
Agent
Tool-Name:Agent. Der vorherige Name Task wird weiterhin als Alias akzeptiert, und die tools-Liste in der Init-SystemMessage meldet dieses Tool als Task für Rückwärtskompatibilität.
Eingabe:
"completed"):
"async_launched"):
"remote_launched"):
status-Feld diskriminiert: "completed" für abgeschlossene Aufgaben, "async_launched" für Hintergrundaufgaben und "remote_launched" für Aufgaben, die Claude Code an eine Cloud-Sitzung versendet hat, wobei sessionUrl auf diese Sitzung verweist und taskId sie identifiziert. Wenn Claude Code den isolierten Worktree des Subagenten beibehalten hat, ist worktreePath in der completed-Variante der Ort, wo er zu finden ist, und worktreeBranch ist sein Branch, wenn Claude Code den Worktree mit Git erstellt hat.
In der completed-Variante benennt resolvedModel das Modell, auf dem der Subagent gestartet wurde, das sich vom angeforderten model-Input unterscheiden kann, wenn availableModels oder eine andere Überschreibung gilt. Dieses Feld erfordert Claude Code v2.1.174 oder später. In der async_launched-Variante benennt resolvedModel das Modell in Verwendung, wenn der Agent in den Hintergrund wechselte, sodass ein Wechsel, der vor dem Hintergrund stattfand, dort widergespiegelt wird. Das modelsUsed-Feld in beiden Varianten listet die verwendeten Modelle in Reihenfolge auf, mit zusammengefallenen aufeinanderfolgenden Wiederholungen; es wird nur gesetzt, wenn das Modell während des Durchlaufs gewechselt wurde. modelsUsed und das Hintergrund-Zeit-resolvedModel-Verhalten erfordern Claude Code v2.1.212 oder später.
Claude Code füllt usage und totalTokens aus der letzten API-Anfrage des Subagenten, nicht aus dem gesamten Durchlauf. Wenn vorhanden, ist thinking_tokens unter output_tokens_details in usage die Anzahl der Ausgabe-Tokens dieser Anfrage, die Denk-Tokens waren. Der output_tokens_details-Schlüssel erfordert Python SDK v0.2.136 oder später, das Claude Code v2.1.228 bündelt. Der fallback_credit-Schlüssel erfordert Python SDK v0.2.162 oder später, das Claude Code v2.1.285 bündelt.
AskUserQuestion
Tool-Name:AskUserQuestion
Stellt dem Benutzer während der Ausführung Klärungsfragen. Siehe Genehmigungen und Benutzereingaben verarbeiten für Nutzungsdetails.
Eingabe:
Bash
Tool-Name:Bash
Für das, was die Vordergrund-Obergrenze setzt, siehe Timeout- und Ausgabegrenzen. Für das Hintergrund-Zeitlimit siehe Zeitlimit für Hintergrund-Befehle.
Eingabe:
Monitor
Tool-Name:Monitor
Führt eine Hintergrund-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 Text-Frame 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 Anbieter-Verfügbarkeit.
Eingabe:
Edit
Tool-Name:Edit
Eingabe:
Read
Tool-Name:Read
Eingabe:
type-Schlüssel, um sie zu unterscheiden.
Ausgabe (Typ: "text"):
"image"):
"notebook"):
"pdf"):
"parts"):
"file_unchanged"):
Write
Tool-Name:Write
Eingabe:
Glob
Tool-Name:Glob
Eingabe:
totalMatches und countIsComplete erfordern Claude Code v2.1.191 oder später.
Grep
Tool-Name:Grep
Eingabe:
output_mode ab.
totalFiles erfordert Claude Code v2.1.208 oder später. totalLines erfordert Claude Code v2.1.210 oder später.
NotebookEdit
Tool-Name:NotebookEdit
Eingabe:
WebFetch
Tool-Name:WebFetch
Eingabe:
WebSearch
Tool-Name:WebSearch
Eingabe:
TodoWrite
Tool-Name:TodoWrite
Die folgenden Tools sind standardmäßig nur auf Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5 und früheren Modellen verfügbar. Bei allen anderen Modellen, einschließlich Modell-IDs, die Claude Code nicht erkennt, sind sie nicht verfügbar, es sei denn, Sie aktivieren sie:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite, wenn Sie CLAUDE_CODE_ENABLE_TASKS=0 setzen.Dieser Standardsatz gilt in Claude Code v2.1.268 und später, das das TypeScript Agent SDK ab v0.3.268 bündelt.Siehe Modellverfügbarkeit zum Aktivieren.TaskCreate
Tool-Name:TaskCreate
Eingabe:
TaskUpdate
Tool-Name:TaskUpdate
Eingabe:
TaskGet
Tool-Name:TaskGet
Eingabe:
TaskList
Tool-Name:TaskList
Eingabe:
TaskOutput
Entfernt in Claude Code v2.1.277. Zuvor wurde die Ausgabe einer laufenden oder abgeschlossenen Hintergrundaufgabe abgerufen, wobeiBashOutput als Alias akzeptiert wurde; Claude liest die Ausgabedatei einer Hintergrundaufgabe stattdessen mit Read.
Ein disallowed_tools-Eintrag oder eine Ablehnungsregel, die immer noch einen der beiden Namen nennt, wird ohne Warnung ignoriert.
TaskStop
Tool-Name:TaskStop. Die vorherigen Namen KillShell und KillBash werden weiterhin als Aliase akzeptiert.
Eingabe:
ExitPlanMode
Tool-Name:ExitPlanMode
Eingabe:
ListMcpResources
Tool-Name:ListMcpResourcesTool
Eingabe:
tool_use_result eine list für dieses Tool.
Ausgabe:
ReadMcpResource
Tool-Name:ReadMcpResourceTool
Eingabe:
Erstellen einer kontinuierlichen Konversationsschnittstelle
Das folgende Beispiel hält einenClaudeSDKClient über mehrere Durchläufe hinweg verbunden, sodass Claude sich an frühere Nachrichten erinnert. Geben Sie new ein, um die Verbindung zu trennen und neu zu verbinden, um eine neue Sitzung zu starten, oder exit, um das Gespräch zu beenden.
Fehlerbehandlung
Das folgende Beispiel umhüllt einenquery()-Aufruf mit Handlern für vier der Fehlertypen, die das SDK auslöst.
Dieses Beispiel fängt ResultError ab, was Python Agent SDK 0.2.140 oder später erfordert.
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. Das SDK leitet failIfUnavailable zusammen mit den deklarierten SandboxSettings-Feldern an Claude Code weiter. query() meldet dann eine ResultMessage mit subtype="error_during_execution" und den Grund in errors. Da dies ein einzelner query()-Aufruf ist, löst das SDK nach dem Yielding dieses Fehler-Ergebnisses aus, daher wickeln Sie die Schleife in einen try-Block ein, um über ihn hinwegzugehen. Siehe Ergebnis verarbeiten für den Fehlervertrag.denyWrite in Ihren Sandbox-Einstellungen an, z. B. "filesystem": {"denyWrite": ["/home/user/project/.env"]}. Das SDK leitet filesystem zusammen mit den deklarierten SandboxSettings-Feldern an Claude Code weiter. Sobald die Sandbox gestartet ist, blockiert sie Schreibvorgänge auf jeden aufgeführten absoluten Pfad.
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.
Ihre excludedCommands-Einträge nehmen stattdessen einen Aufruf aus der Sandbox mit keiner Modellbeteiligung; sandbox.excludedCommands behandelt, wann ein Eintrag gilt.
Das folgende Beispiel protokolliert jede Unsandboxed-Anfrage und lehnt sie ab, es sei denn, Ihre eigene Autorisierungslogik erlaubt es:
Siehe auch
- SDK-Übersicht - Allgemeine SDK-Konzepte
- TypeScript SDK-Referenz - TypeScript SDK-Dokumentation
- Benutzerdefinierte Tools - Definieren Sie In-Process-MCP-Tools, die Claude aufrufen kann
- CLI-Referenz - Befehlszeilenschnittstelle
- Häufige Workflows - Schritt-für-Schritt-Anleitungen