Installation
Das SDK bündelt eine native Claude Code-Binärdatei für Ihre Plattform als optionale Abhängigkeit wie
@anthropic-ai/claude-agent-sdk-darwin-arm64. Die meisten Installationen benötigen keine separate Claude Code-Installation. Die SDK-Version verfolgt die gebündelte Claude Code-Version. SDK v0.3.191 bündelt Claude Code v2.1.191, daher benötigt eine Funktion auf dieser Seite, die eine Claude Code-Version erfordert, die SDK-Version mit der gleichen Patch-Nummer oder später. Wenn Ihr Paketmanager optionale Abhängigkeiten überspringt, wirft das SDK Native CLI binary for <platform>-<arch> not found; setzen Sie stattdessen pathToClaudeCodeExecutable auf eine separat installierte claude-Binärdatei.Wenn Ihr Paketmanager das npm-Feld libc nicht anwendet, wie Yarn 1.x nicht, erhalten Sie auf Linux sowohl die glibc- als auch die musl-Plattformpakete, was die Installationsgröße ungefähr verdoppelt. Bei Agent SDK v0.2.141 oder später startet das SDK immer noch die richtige Variante. Um den Speicherplatz in einem Container-Image freizugeben, löschen Sie das Plattformpaket, das nicht mit der libc übereinstimmt, wo Ihre App ausgeführt wird; für eine glibc-Laufzeit auf x64 ist das rm -rf node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl. Auf einem Entwicklungscomputer ist das Löschen vorübergehend, da Yarn das Paket bei der nächsten Abhängigkeitsänderung neu installiert.In eine einzelne ausführbare Datei kompilieren
Wenn Sie Ihre Anwendung mitbun build --compile in eine einzelne ausführbare Datei kompilieren, kann das SDK die gebündelte CLI-Binärdatei zur Laufzeit nicht auflösen. require.resolve funktioniert nicht innerhalb des virtuellen Dateisystems $bunfs der kompilierten ausführbaren Datei, daher wirft das SDK Native CLI binary for <platform>-<arch> not found.
Um dies zu umgehen, betten Sie die Plattform-Binärdatei als Datei-Asset ein, extrahieren Sie sie beim Start mit extractFromBunfs() in einen echten Pfad und übergeben Sie diesen Pfad an pathToClaudeCodeExecutable.
Der extractFromBunfs()-Helfer erfordert @anthropic-ai/claude-agent-sdk v0.3.144 oder später. Das folgende Beispiel erstellt für macOS auf Apple Silicon:
extractFromBunfs() kopiert die eingebettete Binärdatei aus dem virtuellen Dateisystem der kompilierten ausführbaren Datei in ein benutzerabhängiges temporäres Verzeichnis und gibt den echten Pfad zurück. Außerhalb einer kompilierten ausführbaren Datei gibt es den Eingabepfad unverändert zurück, sodass derselbe Code in der Entwicklung ohne Änderung ausgeführt wird.
Jede kompilierte ausführbare Datei bettet eine einzelne Plattform-Binärdatei ein. Stimmen Sie das Plattformpaket im Import mit Ihrem --target ab:
- Zum Cross-Kompilieren installieren Sie das nicht übereinstimmende Plattformpaket, beispielsweise
npm install @anthropic-ai/claude-agent-sdk-linux-x64 --force. - Unter Windows ist der Binär-Unterpfad
claude.exe, beispielsweise@anthropic-ai/claude-agent-sdk-win32-x64/claude.exe.
Importieren Sie den /core-Eintrag, wenn Sie das Agent SDK bündeln
Wenn Ihre Anwendung das Agent SDK zusammen mit ihren eigenen Abhängigkeiten bündelt, importieren Sie von @anthropic-ai/claude-agent-sdk/core statt vom Paket-Root. Der /core-Eintrag erfordert TypeScript Agent SDK v0.3.282 oder später, und seine Typen erfordern TypeScript 5.0 oder später.
Der /core-Eintrag exportiert dieselben query(), startup(), tool(), createSdkMcpServer() und resolveSettings() wie der Root-Eintrag, zusammen mit den Funktionen, die Sitzungen umbenennen, taggen und löschen, AbortError, die Laufzeitkonstanten und jeden Typ. Es fügt keine eigenen Namen hinzu. Um den Code, den Ihre Anwendung lädt, klein zu halten, lässt /core einige Root-Exporte weg, einschließlich prewarm(), die InMemorySessionStore-Klasse und die Helfer, die Sitzungen auflisten, lesen, forken, importieren und zusammenfassen. Wenn Sie einen davon benötigen, verwenden Sie stattdessen den Root-Eintrag.
Der Root-Eintrag inliniert seine eigenen Kopien von zod und @modelcontextprotocol/sdk. Der /core-Eintrag importiert sie aus Ihrem node_modules in den Bereichen, die die peerDependencies des Agent SDK deklarieren, sodass ein Bundle, das sie bereits enthält, keine zweite Kopie trägt. Importieren Sie in einem bestimmten Prozess entweder vom Root oder von /core, nicht von beiden: Sie sind separate Bundles, und das Laden beider gibt Ihnen zwei Kopien der Klassen und des Zustands des Agent SDK.
Funktionen
query()
Die primäre Funktion für die Interaktion mit Claude Code. Erstellt einen asynchronen Generator, der Nachrichten streamt, sobald sie ankommen.
Parameter
Rückgabewert
Gibt einQuery-Objekt zurück, das AsyncGenerator<SDKMessage, void> mit zusätzlichen Methoden erweitert.
startup()
Wärmt den CLI-Subprozess vor, indem sie ihn spawnt und den Initialize-Handshake abschließt, bevor ein Prompt verfügbar ist. Das zurückgegebene WarmQuery-Handle akzeptiert später einen Prompt und schreibt ihn in einen bereits bereiten Prozess, sodass der erste query()-Aufruf aufgelöst wird, ohne die Kosten für Subprozess-Spawn und Initialisierung inline zu zahlen. Wenn Sie das Arbeitsverzeichnis der Sitzung noch nicht kennen, verwenden Sie stattdessen prewarm().
Parameter
Rückgabewert
Gibt einPromise<WarmQuery> zurück, das aufgelöst wird, sobald der Subprozess gespawnt wurde und seinen Initialize-Handshake abgeschlossen hat.
Beispiel
Rufen Siestartup() früh auf, beispielsweise beim Anwendungsstart, und rufen Sie dann .query() auf dem zurückgegebenen Handle auf, sobald ein Prompt bereit ist. Dies verlagert Subprozess-Spawn und Initialisierung aus dem kritischen Pfad.
prewarm()
Alpha. Startet einen Claude Code-Prozess als Reserve, bevor Sie wissen, welche Sitzung er bedienen wird, sodass Sie ihn später mit claim() an eine Sitzung binden können. Verwenden Sie es in einer Anwendung, die startet, bevor der Benutzer einen Ordner auswählt. Erfordert TypeScript Agent SDK v0.3.282 oder später.
prewarm() führt denselben Initialize-Handshake wie startup() durch, wobei der Prozess in options.cwd wartet, wenn Sie ihn setzen, und ansonsten in einem privaten temporären Verzeichnis unter Ihrem Claude Code-Konfigurationsverzeichnis. Das Arbeitsverzeichnis der Sitzung, ihre SessionStart-Hooks, ihre stdio-MCP-Server und ihr CLAUDE.md- und Git-Kontext warten auf die Beanspruchung. Eine Reserve belegt ungefähr 230 bis 260 MB Speicher, während sie wartet. Wenn Ihr spawnClaudeCodeProcess Claude Code auf einem anderen Computer oder in einem Container ausführt, setzen Sie options.cwd auf ein Verzeichnis, das dort existiert, damit die Reserve darin wartet.
options und initializeTimeoutMs bedeuten dasselbe wie für startup(), außer dass options.cwd nur das Verzeichnis setzt, in dem die Reserve wartet. Das Promise wird mit einem SpareProcess aufgelöst, sobald der Prozess seinen Initialize-Handshake abgeschlossen hat. prewarm() wirft einen Fehler, wenn options resume, continue oder forkSession setzt, da eine Reserve noch keine Sitzung hat. Alles, was ein Claim nicht setzen kann, wie mcpServers, hooks, canUseTool, settingSources, systemPrompt und plugins, ist für die Lebensdauer der Reserve festgelegt, daher halten Sie eine Reserve pro unterschiedlichem Satz dieser Optionen und wärmen Sie erneut vor, wenn sie sich ändern.
Beispiel
Wärmen Sie beim Anwendungsstart vor, dann beanspruchen Sie die Reserve, wenn der Benutzer eine Sitzung startet:tool()
Erstellt eine typsichere MCP-Tool-Definition zur Verwendung mit SDK-MCP-Servern.
Parameter
ToolAnnotations
Definiert in @modelcontextprotocol/sdk/types.js. Alle Felder sind optionale Hinweise; Clients sollten sich nicht auf sie für Sicherheitsentscheidungen verlassen.
createSdkMcpServer()
Erstellt eine MCP-Server-Instanz, die im selben Prozess wie Ihre Anwendung ausgeführt wird.
Parameter
listSessions()
Entdeckt und listet vergangene Sitzungen mit leichten Metadaten auf. Filtern Sie nach Projektverzeichnis oder listen Sie Sitzungen über alle Projekte auf.
Parameter
Rückgabetyp: SDKSessionInfo
Beispiel
Geben Sie die 10 neuesten Sitzungen für ein Projekt aus. Die Ergebnisse werden nachlastModified absteigend sortiert, sodass das erste Element das neueste ist. Lassen Sie dir weg, um über alle Projekte zu suchen.
getSessionMessages()
Liest Benutzer- und Assistenten-Nachrichten aus einem vergangenen Sitzungstranskript.
Parameter
Rückgabetyp: SessionMessage
Beispiel
getSessionInfo()
Liest Metadaten für eine einzelne Sitzung nach ID, ohne das vollständige Projektverzeichnis zu durchsuchen.
Parameter
Gibt
SDKSessionInfo zurück, oder undefined, wenn die Sitzung nicht gefunden wird.
renameSession()
Benennt eine Sitzung um, indem ein benutzerdefinierter Titeleintrag angehängt wird. Wiederholte Aufrufe sind sicher; der neueste Titel gewinnt.
Parameter
tagSession()
Markiert eine Sitzung mit einem Tag. Übergeben Sie null, um das Tag zu löschen. Wiederholte Aufrufe sind sicher; das neueste Tag gewinnt.
Parameter
forkSession()
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 upToMessageId.
Parameter
Gibt
{ sessionId } zurück, die UUID der neuen Sitzung. Übergeben Sie sie 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.
forkSession() wirft einen Fehler, wenn:
sessionIdkeine UUID ist- die Sitzung nicht gefunden werden kann oder keine Nachrichten enthält
upToMessageIdmit keiner Nachricht im Transkript übereinstimmt
resolveSettings()
Löst die effektiven Claude Code-Einstellungen für ein bestimmtes Verzeichnis mit derselben Merge-Engine wie die CLI auf, ohne die Claude CLI zu spawnen. Verwenden Sie es, um zu überprüfen, welche Konfiguration ein query()-Aufruf sehen würde, bevor Sie einen aufrufen.
Diese Funktion ist Alpha und ihre API kann sich vor der Stabilisierung ändern.
query()-Sitzung anwendet:
policyHelper:resolveSettings()liest MDM-Quellen, einschließlich macOS plist und Windows HKLM/HKCU, führt aber nicht den vom Administrator konfiguriertenpolicyHelper-Subprozess aus.- Server-verwaltete Einstellungen:
resolveSettings()ruft server-verwaltete Einstellungen nicht ab. Übergeben Sie sie alsoptions.serverManagedSettings, um sie einzubeziehen. defaultMode: Der Snapshot gibtpermissions.defaultModeunverändert aus jeder Ebene zurück, sodass er die Werte'auto'und'bypassPermissions'aus Projekt- und lokalen Einstellungen enthalten kann, die eine Live-Sitzung ignoriert.
Parameter
resolveSettings() akzeptiert ein einzelnes Optionsobjekt. Alle Felder sind optional.
Rückgabetyp: ResolvedSettings
resolveSettings() gibt ein Objekt zurück, das die zusammengeführten Einstellungen und die Quelle beschreibt, die jeden Schlüssel beigetragen hat.
Beispiel
Das folgende Beispiel löst Einstellungen für ein Projektverzeichnis auf und gibt die Quelle aus, die den Cleanup-Zeitraum steuert. Auf einem Computer, auf dem keine EinstellungsdateicleanupPeriodDays setzt, zeigen beide gedruckten Zeilen undefined für den Wert an, was die erwartete Ausgabe ist, anstatt ein Fehler.
Typen
Options
Konfigurationsobjekt für die Funktion query().
Langsame oder hängende API-Antworten behandeln
Der CLI-Subprozess liest mehrere Umgebungsvariablen, die API-Timeouts und die Erkennung hängender Vorgänge steuern. Übergeben Sie sie über die Optionenv:
-
API_TIMEOUT_MS: Timeout pro Anfrage im Anthropic-Client, in Millisekunden. Standard600000. Gilt für die Hauptschleife und alle Subagenten. -
CLAUDE_CODE_MAX_RETRIES: maximale Anzahl an API-Wiederholungsversuchen. Standard10, begrenzt auf15. Jeder Wiederholungsversuch erhält ein eigenesAPI_TIMEOUT_MS-Zeitfenster. Für unbeaufsichtigte Läufe, die längere Ausfälle überstehen 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 Standardwert für andere vorübergehende Fehler auf300angehoben und die Obergrenze dieser Variable aufgehoben. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: Watchdog für hängende Subagenten. Solange der Stream-Watchdog aktiv ist, beträgt der StandardCLAUDE_STREAM_IDLE_TIMEOUT_MSplus 5 Minuten, was600000ergibt, sofern Sie diese Variable nicht erhöhen. Bei ausgeschaltetem Stream-Watchdog beträgt der Standard600000. Vor v2.1.257 betrug der Standard immer600000. Der Timer wird bei jedem Stream-Ereignis zurückgesetzt. Bei einem Hänger bricht Claude Code den Subagenten ab und meldet dies 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 die Header eingetroffen sind, der Response-Body aber nicht mehr gestreamt wird. Der Watchdog ist für alle Anbieter standardmäßig aktiv; setzen SieCLAUDE_ENABLE_STREAM_WATCHDOG=0, um ihn zu deaktivieren.CLAUDE_STREAM_IDLE_TIMEOUT_MShat den Standardwert300000und 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 eine Antwort abwartet, die ein Gateway hinterANTHROPIC_BASE_URLmit Keep-alive-Pings offen hält, erhält ein Host, derincludePartialMessagessetzt, weiterhinping-Stream-Ereignisse. Werten Sie diese Frames daher als Lebenszeichen, anstatt die Sitzung bei Stille per Timeout zu beenden. Vor v2.1.257 endeten die Frames 5 Minuten nach dem letzten echten Stream-Ereignis.
Query-Objekt
Von der Funktion query() zurückgegebene Schnittstelle.
Methoden
applyFlagSettings()
Ändert Einstellungen in einer laufenden Sitzung, ohne die Abfrage neu zu starten. Verwenden Sie die Methode, wenn sich eine Einstellung ohne eigenen Setter während der Sitzung ändern muss, etwa um permissions zu verschärfen, nachdem der Agent nicht vertrauenswürdige Eingaben gelesen hat. setModel() und setPermissionMode() sind eigene Setter für diese beiden Schlüssel; applyFlagSettings() ist die allgemeine Form, die eine beliebige Teilmenge der Einstellungsschlüssel akzeptiert, und die Übergabe von model hier verhält sich genauso wie setModel().
Nur einige Schlüssel wirken während der Sitzung:
- Wirksam ab dem nächsten Turn:
effortLevel,ultracode,permissions,hooks,skillOverrides,fastMode,agent. Ein Wechsel vonagentwendet ab dem nächsten Turn auch die Modellüberschreibung und die Hooks dieses Agenten an. Sein System-Prompt wirkt ab dem nächsten Turn oder, in einer Sitzung, die einen aufgezeichneten System-Prompt wiederverwendet, sobald die Sitzung komprimiert wird. - Wirksam während des aktuellen Turns:
model. Wenn Siemodelwechseln, während Claude an einem Turn arbeitet, wird die Antwort, die Claude gerade erzeugt, mit dem alten Modell abgeschlossen, und der Rest des Turns verwendet ab dem nächsten Aufruf, den Claude Code an das Modell richtet, das neue Modell. Subagenten behalten ihr eigenes Modell. Vor v2.1.212 wartete ein Wechsel mitten im Turn auf den nächsten Turn. - Keine Wirkung während der Sitzung: die Optionen für den System-Prompt. Diese werden einmalig beim Start aufgelöst, sodass die laufende Sitzung den ursprünglichen Wert behält, obwohl der Aufruf erfolgreich ist. Um sie zu ändern, starten Sie eine neue Sitzung.
effortLevel akzeptiert den Namen einer Effort-Stufe. Es akzeptiert außerdem "ultracode", was die Effort-Stufe xhigh mit aktiviertem Ultracode anfordert. applyFlagSettings() deklariert effortLevel ohne diesen Wert, übergeben Sie daher in TypeScript { ultracode: true, effortLevel: "xhigh" } für dasselbe Ergebnis oder nur den Schlüssel ultracode, um Ultracode bei der aktuellen Effort-Stufe der Sitzung einzuschalten. Der Wert ultracode erfordert Claude Code v2.1.203 oder höher und wird nur von applyFlagSettings() akzeptiert, nicht vom Schlüssel effortLevel in einer Einstellungsdatei. Vor v2.1.284 setzte der Schlüssel ultracode allein die Stufe auch auf xhigh.
Die Werte werden in die Flag-Einstellungsebene geschrieben und über das zusammengeführt, was die Inline-Option settings von query() beim Start gesetzt hat. Dies ist dieselbe Ebene, die der Abschnitt zur Rangfolge auf dieser Seite als programmatische Optionen bezeichnet.
Aufeinanderfolgende Aufrufe führen die Schlüssel der obersten Ebene flach zusammen. Ein zweiter Aufruf mit { permissions: {...} } ersetzt das gesamte permissions-Objekt des vorherigen Aufrufs, anstatt tief darin zusammengeführt zu werden.
Um einen mit applyFlagSettings() gesetzten Schlüssel zu löschen, übergeben Sie null für diesen Schlüssel. Die meisten Schlüssel fallen dann zunächst auf einen Wert zurück, den die Option settings von query() beim Start gesetzt hat, und danach auf Quellen mit niedrigerem Vorrang. Ein gelöschtes model wird auf das Standardmodell von Claude Code zurückgesetzt, selbst wenn eine Einstellungsdatei model setzt. Die Übergabe von undefined hat keine Wirkung, da die JSON-Serialisierung diesen Wert verwirft.
Drei Schlüssel neben model setzen den Sitzungszustand zurück, anstatt auf einen Fallback zurückzufallen:
effortLevel: nullsetzt die Sitzung auf die Standard-Effort-Stufe des Modells zurück, nicht auf die Optioneffortvonquery()oder eineffortLevelaus einer Einstellungsdatei.agent: nullführt den Hauptthread ab dem nächsten Turn ohne Agenten aus, anstatt die Optionagentvonquery()oder einagentaus einer Einstellungsdatei wiederherzustellen. Wenn der gelöschte Agent ein eigenes Modell angewendet hatte, kehrt die Sitzung zu dem Modell zurück, das sie beim Start aufgelöst hat.ultracode: nullschaltet Ultracode aus, wiefalse, anstatt einenultracode-Wert aus einer Einstellungsdatei wiederherzustellen. Die Sitzung behält ihre aktuelle Effort-Stufe; übergeben Sie dahereffortLevelim selben Aufruf, um sie zu ändern.
setModel() und setPermissionMode().
Das folgende Beispiel wechselt das aktive Modell während der Sitzung und löscht dann die Überschreibung, sodass das Modell auf das Standardmodell von Claude Code zurückgesetzt wird.
applyFlagSettings() ist nur in TypeScript verfügbar. Das Python SDK stellt keine entsprechende Methode bereit.updateSettings()
Schreibt einen zugelassenen Schlüssel in eine Einstellungsdatei auf der Festplatte, sodass der Wert für spätere Sitzungen erhalten bleibt, die diese Quelle laden. Jede Quelle akzeptiert einen Schlüssel mit einem Zeichenfolgenwert:
"localSettings": akzeptiertoutputStyleund führt ihn in die lokale Einstellungsdatei des Projekts,.claude/settings.local.json, zusammen. Der neue Stil wird bei der nächsten Anfrage der Sitzung wirksam."userSettings": akzeptierteffortLevelund speichert ihn als Standard-Effort-Stufe für das aktuelle Modell der Sitzung untermodelSettingsin Ihrer Benutzereinstellungsdatei. Die Übergabe vonmaxschreibt nichts, damaxnur für die Sitzung gilt. Die laufende Sitzung behält in jedem Fall ihre aktuelle Effort-Stufe; rufen Sie daherapplyFlagSettings()auf, wenn Sie diese ebenfalls ändern möchten. Diese Quelle erfordert TypeScript SDK v0.3.277 oder höher, das Claude Code v2.1.277 bündelt.
settingSources der Sitzung die angegebene Quelle ausschließen. Das Löschen eines Schlüssels wird nicht unterstützt.
toggleMcpServer()
Das Deaktivieren eines Servers trennt seine Verbindung und entfernt seine Tools aus der Sitzung. Für Server, die Sie während der Sitzung hinzugefügt haben, und für prozessinterne Server hängt dies von Ihrer Claude Code-Version ab:
- Ein stdio-, SSE- oder HTTP-Server, den Sie während der Sitzung mit
setMcpServers()hinzugefügt haben: Das Entfernen seiner Tools erfordert Claude Code v2.1.285 oder höher. - Ein prozessinterner Server, den Sie mit
createSdkMcpServer()erstellt haben, unabhängig davon, ob Sie ihn inmcpServersoder mitsetMcpServers()übergeben haben: Das Trennen der Verbindung und das Entfernen seiner Tools erfordert Claude Code v2.1.286 oder höher. Das Deaktivieren eines solchen Servers lässt außerdem seine noch laufenden Tool-Aufrufe fehlschlagen, sodass Claude für jeden davon sofort ein Fehlerergebnis erhält, ohne darauf zu warten, dass Ihr Handler zurückkehrt.
WarmQuery
Von startup() zurückgegebenes Handle. Der Subprozess ist bereits gestartet und initialisiert, sodass der Aufruf von query() auf diesem Handle den Prompt direkt an einen bereiten Prozess schreibt, ohne Startlatenz.
Methoden
WarmQuery implementiert AsyncDisposable und kann daher mit await using für eine automatische Bereinigung verwendet werden.
SpareProcess
Alpha. Von prewarm() zurückgegebenes Handle: ein gestarteter Claude Code-Prozess, der noch an keine Sitzung gebunden ist und einmal beansprucht werden kann. Erfordert TypeScript Agent SDK v0.3.282 oder höher.
Member
options.cwd ist erforderlich. Eine Beanspruchung kann außerdem additionalDirectories, model, permissionMode, maxThinkingTokens, eine Flag-Einstellungsüberlagerung in settings, appendSystemPrompt, title, agents und sitzungsspezifische Token in env setzen.
Claude Code kann eine Beanspruchung verweigern, zum Beispiel für einen Ordner, der nicht existiert, oder für einen, dessen Projekteinstellungen env, agent oder model setzen. Nach einer Verweigerung erhält ein Prompt, den claim() bereits gesendet hat, ein Fehlerergebnis, dessen Text mit not_claimed beginnt, und die zurückgegebene Abfrage wirft danach einen Fehler. Umschließen Sie die Schleife der Abfrage mit einem try-Block, um nach dem Fehler fortzufahren. Wenn claimed mit einer Meldung abgelehnt wird, die mit option_not_applied beginnt, läuft die Sitzung ohne das angeforderte model oder maxThinkingTokens. Nach jeder anderen Ablehnung wurde Ihr Prompt nicht ausgeführt; starten Sie die Sitzung daher stattdessen mit query().
SDKControlInitializeResponse
Rückgabetyp von initializationResult(). Enthält Initialisierungsdaten der Sitzung.
hooks_applied gibt an, ob Claude Code die hooks registriert hat, die die initialize-Anfrage enthielt. Das SDK sendet diese Anfrage einmal beim Start der Sitzung und erneut bei jedem Aufruf von reinitialize(). Das Feld erfordert Agent SDK v0.3.238 oder höher.
Claude Code lässt das Feld weg, wenn die Anfrage keine Hooks enthielt. Wenn die Anfrage Hooks enthielt, hängt der Wert davon ab, ob es sich um die erste Initialisierung der Sitzung handelt, und bei einer wiederholten davon, wie sie die Sitzung erreicht hat:
true: Claude Code hat die Hooks registriert. Die erste Initialisierung einer Sitzung gibt diesen Wert zurück. Eine wiederholte Initialisierung, die über stdin der CLI gesendet wird, gibt ebenfallstruezurück. In diesem Fall ersetzen die Hooks der neuen Anfrage die zuvor registrierten Hooks.false: Claude Code hat die Hooks ignoriert. Eine wiederholte Initialisierung, die an eine Remote-Sitzung gesendet wird, gibt diesen Wert zurück, sodass ein zweiter Client, der einer Sitzung beitritt, die vom ersten Client registrierten Hooks nicht ersetzen kann.
hooks bei jeder wiederholten Initialisierung.
Das Feld sdkMcpServerManifests der Anfrage und das Feld sdk_mcp_manifests_parked der Antwort dienen den prozessinternen SDK-MCP-Servern, die Sie mit createSdkMcpServer() erstellt haben. Ihre Anwendung setzt oder liest keines dieser Felder.
claude_code_version ist die Claude-Code-Version des Prozesses, der die Turns der Sitzung ausführt. Es ist derselbe Wert, den die Init-Nachricht SDKSystemMessage enthält, sodass Sie die CLI-Version bereits vor dem ersten Turn lesen können.
- Das Feld erfordert Agent SDK v0.3.296 oder höher, das Claude Code v2.1.296 bündelt.
- Wenn das Feld
undefinedist und SiepathToClaudeCodeExecutablesetzen, verweisen Sie damit auf Claude Code v2.1.296 oder höher.
fast_mode_state, und wenn etwas den Fast-Modus blockiert, enthält fast_mode_disabled_reason zusätzlich den Ursachencode, sodass Sie den blockierten Zustand erklären können, anstatt die Verfügbarkeit selbst erneut abzuleiten. Beide Verhaltensweisen erfordern Claude Code v2.1.219 oder höher. Vor v2.1.219 ließ die Antwort fast_mode_state weg, wenn der Fast-Modus nicht verfügbar war, und enthielt nie eine Ursache. Zu den Ursachencodes und ihrer Bedeutung siehe fast_mode_disabled_reason in der Ergebnisnachricht.
Der Wrapper der Steuerungsantwort für ein erfolgreiches initialize enthält außerdem ein Array pending_permission_requests. Das Feld befindet sich im Wrapper der Antwort selbst, nicht in der obigen SDKControlInitializeResponse-Payload. Jeder Eintrag ist eine vollständige control_request-Nachricht mit derselben Form { type: "control_request", request_id, request }, in der die Sitzung während der Ausführung Berechtigungsanfragen streamt.
Das Array listet die Berechtigungsanfragen auf, die dieser Claude Code-Prozess ausgegeben und noch nicht aufgelöst hat. Das SDK liest das Array für Sie und leitet jeden Eintrag an Ihren canUseTool-Callback weiter, dieselbe erneute Zustellung, die reinitialize() nach einer Unterbrechung des Transports auslöst. Behandeln Sie wiederholte Anfrage-IDs idempotent, da ein Eintrag eine Anfrage wiederholen kann, die der Callback bereits vor dem Verbindungsabbruch erhalten hat.
Das Array ist in einer erfolgreichen initialize-Antwort immer vorhanden und leer, wenn dieser Prozess keine unaufgelöste Berechtigungsanfrage hat. Erfordert Claude Code v2.1.268 oder höher. Frühere Versionen konnten das Feld weglassen; wenn Sie das Wire-Protokoll selbst parsen, werten Sie ein fehlendes Feld daher als Hinweis auf eine ältere CLI und nicht als Beweis, dass nichts aussteht.
SDKControlInterruptResponse
Die Unterbrechungsquittung: der Wert, mit dem interrupt() bei einer CLI aufgelöst wird, die die Fähigkeit interrupt_receipt_v1 in SDKSystemMessage.capabilities ankündigt. Erfordert Claude Code v2.1.205 oder höher. Frühere CLIs beantworten die Unterbrechung mit einer leeren Erfolgs-Payload, sodass interrupt() mit undefined aufgelöst wird.
still_queued listet die UUIDs der Benutzernachrichten auf, die beim Eintreffen der Unterbrechung ausstanden: Nachrichten, die sich noch in der Warteschlange befinden, sowie alle Nachrichten, die Claude Code bereits für den nächsten Turn aus der Warteschlange genommen hatte. Sobald der erste Turn der Sitzung begonnen hat, verarbeitet Claude Code die aufgelisteten Nachrichten nach der Unterbrechung, sofern Sie sie nicht vorher abbrechen, und kann mehrere zu einem Turn zusammenfassen. Wenn Sie unterbrechen, bevor der erste Turn beginnt, bricht Claude Code diesen Turn ab, sobald er beginnt, und die aufgelisteten Nachrichten in diesem Turn erhalten keine Antwort.
Verwenden Sie die Quittung, um zu entscheiden, ob Sie etwas erneut senden. Eine aufgelistete Nachricht, die Sie nicht abbrechen, gelangt in die Konversation, unabhängig davon, ob sie eine Antwort erhält; ein erneutes Senden stellt sie Claude also doppelt zu.
Berücksichtigen Sie bei der Auswertung der Liste folgende Einschränkungen:
- Es erscheinen nur Nachrichten, die mit einer UUID in die Warteschlange gestellt wurden. Ein leeres Array bedeutet nicht, dass nichts anderes ausgeführt wird.
- Es werden nur Nachrichten des Hauptthreads aufgelistet. An einen Subagenten adressierte Nachrichten sind nicht erfasst.
- Die Liste kann UUIDs enthalten, die Ihr Client nie gesendet hat, etwa Auslöser geplanter Aufgaben. Ignorieren Sie UUIDs, die Sie nicht kennen, anstatt sie als Fehler zu behandeln.
interrupt() bedient, kann in der Steuerungsanfrage interrupt den Wert cancel_queued: true setzen. Claude Code ab v2.1.219 kündigt die Unterstützung mit der Fähigkeit interrupt_cancel_queued_v1 in SDKSystemMessage.capabilities an; ältere CLIs ignorieren das Feld und lassen Nachrichten in der Warteschlange wie gewohnt ausführen. Eine solche Unterbrechung bricht außerdem jede Nachricht ab, die andernfalls unter still_queued aufgeführt würde: Die Quittung listet sie stattdessen unter cancelled auf, still_queued ist leer, und keine von ihnen wird ausgeführt.
Für die Liste cancelled gelten dieselben Einschränkungen wie für still_queued. Die Methode interrupt() sendet nie cancel_queued, sodass die Quittungen, mit denen sie aufgelöst wird, kein cancelled enthalten.
Die Quittung ist eine Momentaufnahme zum Zeitpunkt der Verarbeitung der Unterbrechung, und bei einer sauberen Unterbrechung trifft sie vor der SDKResultMessage des unterbrochenen Turns ein. Lesen Sie die Quittung, anstatt die Warteschlange nach diesem Ergebnis zu prüfen: Die Schleife startet sofort den nächsten Turn aus der Warteschlange, sodass sich die Warteschlange, die Sie nach dem Ergebnis prüfen, bereits geändert hat.
SDKControlGetContextUsageResponse
Rückgabetyp von getContextUsage(). Mit dem Standardwert für detail ist dies dieselbe Payload, die Claude Code für den Befehl /context in einer interaktiven Sitzung darstellt. Neben den Token-Zahlen enthält sie daher Anzeigefelder wie color und gridRows, mit denen Claude Code das Nutzungsraster von /context zeichnet.
Das optionale Argument detail der Methode legt fest, wie Claude Code jede Kategorie zählt. Das Argument detail erfordert Agent SDK v0.3.257 oder höher.
'full': der Standard. Claude Code zählt jede Kategorie mit API-Anfragen zur Token-Zählung. Diese Anfragen erscheinen nicht im Nachrichtenstream, sodass eine Kostenverfolgung, die den Stream liest, sie nicht sieht. Auf der Anthropic API wird die Token-Zählung nicht berechnet.'summary': Übergeben Sie{ detail: 'summary' }, um stattdessen eine Antwort auf Basis der Nutzung der letzten Antwort und lokaler Schätzungen zu erhalten. Es werden keine Anfragen zur Token-Zählung gesendet, und die Zahlen pro Kategorie sind Näherungswerte.
/context als Prompt senden, anstatt die Methode aufzurufen, hängt Claude Code eine SDKContextUsage-Payload an das Feld context_usage der Assistant-Nachricht an, die das Ergebnis liefert. Dieses Feld erfordert Agent SDK v0.3.232 oder höher.
categoriesenthält die Summen pro Kategorie. Das Feldkindjedes Eintrags klassifiziert die Zeile mit denselben Werten wieSDKContextUsageCategory. Klassifizieren Sie Zeilen anhand dieses Felds statt anhand des Anzeigenamensname. Das Feld erfordert Agent SDK v0.3.268 oder höher.mcpToolsundagentsordnen Token einzelnen MCP-Tools und Subagenten zu.memoryFileslistet jede geladene Memory-Datei mit ihren Kosten auf.skills.skillFrontmatterordnet die Token der Skill-Auflistung jedem enthaltenen Skill zu. Die Zählungen pro Skill messen den Auflistungseintrag jedes Skills so, wie Claude Code ihn tatsächlich sendet; dieser kann kürzer sein als das vollständige Frontmatter des Skills. Vergleichen Sieskills.totalSkillsmitskills.includedSkills, um zu sehen, ob jeder gefundene Skill in die Auflistung aufgenommen wurde.
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, falls zutreffend, das niedrigere Fenster der automatischen Komprimierung. rawMaxTokens enthält denselben Wert wie maxTokens, und percentage ist totalTokens als gerundeter Prozentsatz dieses Fensters. apiUsage enthält die Nutzung aus der letzten API-Antwort, keine laufende Summe für die Sitzung.
Claude Code lässt die optionalen Diagnosefelder deferredBuiltinTools, systemTools und systemPromptSections ungesetzt; rechnen Sie also damit, dass sie fehlen, obwohl der Typ sie deklariert.
SDKControlReadFileResponse
Rückgabetyp von readFile().
contents enthält den Dateitext oder Base64-Daten, wenn Sie encoding: 'base64' angefordert haben; das Feld encoding der Antwort ist in diesem Fall auf 'base64' gesetzt. absPath ist der aufgelöste absolute Pfad. truncated ist gesetzt, wenn die Datei länger als die Obergrenze maxBytes war und der Inhalt an dieser Grenze abgeschnitten wurde.
Was readFile() lesen kann
readFile() stellt eine kleinere Menge von Dateien bereit als das Read-Tool:
- Eine reguläre Datei in einem der Arbeitsverzeichnisse der Sitzung, etwa
cwdundadditionalDirectories - Einige von Claude Codes eigenen Dateien für die Sitzung, etwa Tool-Ergebnisse
Read-Ablehnungs- und Nachfrageregeln blockieren weiterhin einen passenden Pfad, und eine weit gefasste Read-Erlaubnisregel öffnet readFile() nicht den Rest des Dateisystems. Für alles andere wird der Aufruf mit null aufgelöst.
SDKControlReloadPluginsResponse
Rückgabetyp von reloadPlugins().
commands,agentsundmcpServers: die Befehle, Subagenten und der MCP-Server-Status der Sitzung, in denselben Formen, diesupportedCommands(),supportedAgents()undmcpServerStatus()zurückgeben.supportedAgents()gibt weiterhin die bei der Initialisierung erfasste Liste zurück; lesen Sie daheragentshier, um die Menge nach einem Neuladen zu erhaltenplugins: jedes geladene Plugin mit seinemnameund seinem Installationspfadpath.versiongibt wieder, was das Manifest des Plugins deklariert, und wird vom Plugin-Autor gesteuert; validieren Sie den Wert daher, bevor Sie ihm vertrauen. Er fehlt, wenn das Manifest keinen deklarierterror_count: die Anzahl der Fehler beim Laden von Plugins
{ holdOnCacheImpact: true } an reloadPlugins(), um ein Neuladen zurückzuhalten, das den Prompt-Cache der Konversation ungültig machen würde, anstatt es anzuwenden. Claude Code führt die Prüfung aus, die der interaktive Befehl /reload-plugins vornimmt, bevor er vor den Cache-Kosten warnt. Die Option erfordert Agent SDK v0.3.268 oder höher. Eine ausführbare Claude Code-Datei älter als v2.1.268, etwa eine, auf die Sie pathToClaudeCodeExecutable verweisen lassen, ignoriert die Option und wendet das Neuladen an.
Wenn Sie die Option übergeben, lesen Sie held, um zu erfahren, was geschehen ist:
true: Das Neuladen wurde nicht angewendet, und die Sammlungsfelder beschreiben die Sitzung in ihrem unveränderten Zustand.cache_impactgibt an, was das Anwenden ändern würde. Um trotzdem anzuwenden, rufen SiereloadPlugins()erneut ohne die Option auf.false: Die Prüfung hat keine Auswirkung auf den Cache festgestellt, und das Neuladen wurde angewendet.- Fehlend: Sie haben die Option nicht übergeben, oder die ausführbare Claude Code-Datei ist älter als v2.1.268 und hat das Neuladen angewendet.
cache_impact ist nur zusammen mit held: true vorhanden. mcp_servers_added und mcp_servers_removed nennen die Plugin-MCP-Server, die das Neuladen registrieren oder entfernen würde, als eingeschränkte Namen der Form plugin:<plugin>:<server>. Die Namen stammen von Plugin-Autoren; validieren Sie sie daher, bevor Sie sie anzeigen. lsp_tool_change gibt an, ob das Anwenden das LSP-Tool hinzufügen oder entfernen würde, oder ist null, wenn beides nicht zutrifft. Die may--Formen bedeuten, dass die Prüfung die ausstehende Plugin-Menge nicht vollständig einsehen konnte.
SDKControlReloadSkillsResponse
Rückgabetyp von reloadSkills().
skills listet die nach dem Neuladen verfügbaren Skills auf, in derselben SlashCommand-Form, die supportedCommands() zurückgibt.
SDKControlReloadOutputStylesResponse
Rückgabetyp von reloadOutputStyles().
available_output_styles listet die Namen der integrierten und benutzerdefinierten Ausgabestile auf, die nach dem Neuladen verfügbar sind.
SDKControlMcpReadResourceResponse
Rückgabetyp von readMcpResource(), der das resources/read-Ergebnis des MCP-Servers enthält. Erfordert TypeScript Agent SDK v0.3.280 oder höher.
readMcpResource() den Servernamen so, wie mcpServerStatus() ihn meldet, und eine ui://-URI, etwa die ui.resourceUri, die ein Tool in seinem _meta deklariert. Der Aufruf wird abgelehnt bei jedem anderen URI-Schema, bei einem SDK-MCP-Server, den Ihre Anwendung selbst hostet, und bei einem Server, der nicht verbunden ist. Er ist verfügbar, wenn die capabilities der Init-Nachricht mcp_read_resource_v1 enthalten.
Jeder contents-Eintrag ist ein Inhaltselement, so wie der Server es gesendet hat, abzüglich aller _meta-Schlüssel unter dem Präfix com.anthropic/, das für Claude Code reserviert ist. blob enthält Base64-Daten für ein binäres Element, und _meta ist das eigene _meta des Elements, in das ein MCP-Apps-Server die Werte ui.csp und ui.permissions der Ressource legt.
Die Inhalte sind nicht vertrauenswürdiges HTML von Drittanbietern; stellen Sie sie daher in einer Sandbox dar.
AgentDefinition
Konfiguration für einen programmatisch definierten Subagenten.
AgentMcpServerSpec
Gibt die MCP-Server an, die einem Subagenten zur Verfügung stehen. Kann ein Servername sein (ein String, der auf einen Server aus der mcpServers-Konfiguration des übergeordneten Agenten verweist) oder ein Inline-Konfigurationsdatensatz, der Servernamen auf Konfigurationen abbildet.
McpServerConfigForProcessTransport gleich McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig.
SettingSource
Steuert, aus welchen dateisystembasierten Konfigurationsquellen das SDK Einstellungen lädt.
Standardverhalten
WennsettingSources weggelassen wird oder undefined ist, lädt query() dieselben Dateisystemeinstellungen wie die Claude Code CLI: Benutzer, Projekt und lokal. Unter Was settingSources nicht steuert finden Sie Eingaben, die unabhängig von dieser Option gelesen werden, und wie Sie diese deaktivieren.
Warum settingSources verwenden
Dateisystemeinstellungen deaktivieren:"project" in settingSources auf. Unter System-Prompts anpassen erfahren Sie, wie das Laden von CLAUDE.md mit den System-Prompt-Optionen zusammenwirkt.
Vorrang von Einstellungen
Wenn mehrere Quellen geladen werden, werden die Einstellungen mit dieser Rangfolge zusammengeführt (von der höchsten zur niedrigsten):- Lokale Einstellungen (
.claude/settings.local.json) - Projekteinstellungen (
.claude/settings.json) - Benutzereinstellungen (
~/.claude/settings.json)
agents, allowedTools und settings überschreiben Benutzer-, Projekt- und lokale Dateisystemeinstellungen. Verwaltete Richtlinieneinstellungen haben Vorrang vor programmatischen Optionen.
PermissionMode
CanUseTool
Typ einer benutzerdefinierten Berechtigungsfunktion zur Steuerung der Tool-Nutzung.
Die Funktion ist der SDK-Ersatz für die interaktive Berechtigungsabfrage: Sie wird nur aufgerufen, wenn der Ablauf der Berechtigungsauswertung zu einer Abfrage führt. Tool-Aufrufe, die bereits durch einen allowedTools-Eintrag, eine Allow-Regel in den Einstellungen oder den Berechtigungsmodus wie acceptEdits oder bypassPermissions genehmigt sind, rufen sie nie auf. Um jeden Tool-Aufruf zu kontrollieren, verwenden Sie stattdessen einen PreToolUse-Hook.
Eine Allow-Regel genehmigt die Aktionen, die kein Modus automatisch genehmigt, nicht vorab; unter Wie Berechtigungen ausgewertet werden erfahren Sie, welche davon den Callback erreichen und was im Modus dontAsk und auto geschieht.
Der Callback beantwortet die Anfrage normalerweise, indem er ein
PermissionResult zurückgibt, das das SDK über seinen Transport als control_response zurückschreibt. Geben Sie null nur zurück, wenn Ihre Anwendung die control_response für diese Anfrage bereits über ihren eigenen Kanal gesendet hat und dabei requestId zurückgibt; das SDK schreibt die Antwort dann nicht in seinen Transport. Die Rückgabe von null in jedem anderen Fall blockiert den Tool-Aufruf auf unbestimmte Zeit, da nie eine control_response gesendet wird und Berechtigungsabfragen keinen Timeout haben.
Die Option requestId und der Rückgabewert null erfordern Claude Code v2.1.199 oder höher.
PermissionResult
Ergebnis einer Berechtigungsprüfung.
ToolConfig
Konfiguration für das Verhalten integrierter Tools.
McpServerConfig
Konfiguration für MCP-Server.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
McpClaudeAIProxyServerConfig
SdkPluginConfig
Konfiguration zum Laden von Plugins im SDK.
Beispiel:
Nachrichtentypen
SDKMessage
Union-Typ aller möglichen Nachrichten, die von der Abfrage zurückgegeben werden.
SDKAssistantMessage
Assistenten-Antwortnachricht.
message-Feld ist eine BetaMessage aus dem Anthropic SDK. Es enthält Felder wie id, content, model, stop_reason und usage.
SDKAssistantMessageError ist einer von: 'authentication_failed', 'oauth_org_not_allowed', 'account_on_hold', 'billing_error', 'rate_limit', 'overloaded', 'invalid_request', 'model_not_found', 'server_error', 'max_output_tokens', 'cloud_credential_error' oder 'unknown'. Vier dieser Werte bedeuten mehr als ihre Namen aussagen:
'model_not_found': Das ausgewählte Modell existiert nicht oder ist nicht für Ihr Konto oder Ihre Bereitstellung verfügbar'overloaded': Die API hat einen 529-Fehler zurückgegeben, weil der Server ausgelastet ist, im Gegensatz zu'rate_limit', das ein 429-Fehler gegen Ihr Kontingent ist'account_on_hold': Ihr Konto ist gesperrt'cloud_credential_error': Claude Code konnte keine verwendbaren AWS- oder Google Cloud-Anmeldedaten auf der Maschine, auf der es läuft, abrufen, daher erreichte keine Anfrage den Cloud-Anbieter. Die übliche Ursache ist eine Cloud-Anmeldung, die abgelaufen ist oder auf dieser Maschine nie abgeschlossen wurde, obwohl ein kurzzeitig unerreichbarer Anmeldedatendienst denselben Wert meldet. Siehe AWS- oder Google Cloud-Anmeldedaten konnten nicht geladen werden. Erfordert TypeScript Agent SDK v0.3.267 oder später, das Claude Code v2.1.267 bündelt
aborted ist true, wenn ein Interrupt oder Abbruch die Assistenten-Nachricht vor Abschluss des Streams abgeschnitten hat: Die Nachricht hat keinen stop_reason und der Inhalt kann mitten im Wort enden. Das Feld fehlt bei normal abgeschlossenen Nachrichten. Es erfordert Agent SDK v0.3.214 oder später.
agent_id identifiziert den Subagenten, der die Nachricht erzeugt hat, und fehlt bei Nachrichten des Hauptthreads. Der Wert entspricht der task_id in den task_started- und anderen Task-Ereignissen dieses Subagenten und bleibt unverändert, wenn der Subagent fortgesetzt wird. Das Feld erfordert Agent SDK v0.3.292 oder höher.
Ordnen Sie die Nachrichten eines Subagenten seinen Task-Ereignissen über agent_id zu, statt die parent_tool_use_id einer Nachricht mit der tool_use_id eines Task-Ereignisses zu paaren. Wenn ein Tool-Aufruf den Subagenten fortsetzt, tragen die Task-Ereignisse die tool_use_id dieses Aufrufs, während die Nachrichten die parent_tool_use_id des Tool-Aufrufs behalten, der den Subagenten ursprünglich gestartet hat, sodass die beiden nicht mehr übereinstimmen.
Claude Code setzt user_message_uuid und user_message_uuids in der ersten Assistentennachricht des Turns, unter den in user_message_uuid beschriebenen Bedingungen. Wenn der Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde, tragen die Assistentennachrichten mit diesen Feldern auch resume_reason.
timestamp ist die ISO-8601-Zeit, wenn die Generierung des Nachrichteninhalts auf dem Prozess, der ihn erzeugt hat, beendet wurde. Der Wert stammt von der Uhr dieser Maschine, daher verwenden Sie ihn nur zur Anzeige und ordnen Sie Nachrichten nicht danach. Ein API-Turn kann mehrere Assistenten-Nachrichten erzeugen, die eine message.id teilen, jede mit ihrem eigenen timestamp. Wenn das Feld fehlt, greifen Sie auf die Zeit zurück, zu der Sie die Nachricht erhalten haben.
context_usage ist eine strukturierte Kopie des /context-Berichts, typisiert als SDKContextUsage, und erfordert Agent SDK v0.3.232 oder später. Wenn Sie /context als Prompt senden, liefert Claude Code den Bericht als Assistenten-Nachricht, deren message.content die Markdown-Tabelle enthält, und fügt context_usage an dieselbe Nachricht an. Claude Code setzt das Feld nicht auf andere Assistenten-Nachrichten, und frühere Versionen liefern die /context-Tabelle ohne es, daher lesen Sie die Aufschlüsselung aus dem Feld, wenn es vorhanden ist, und greifen Sie auf den Markdown-Text zurück, wenn es nicht vorhanden ist.
usage_report ist eine strukturierte Kopie des /usage-Berichts, typisiert als SDKUsageReport, und erfordert Agent SDK v0.3.273 oder höher. Wenn Sie /usage als Prompt senden, liefert Claude Code den Bericht als Assistentennachricht, deren message.content den Text enthält. usage_report wird nur dann an diese Nachricht angehängt, wenn die Sitzung alle folgenden Bedingungen erfüllt:
- Die Sitzung authentifiziert sich mit claude.ai-Anmeldedaten
- Die Anmeldedaten weisen einen bekannten Plantyp aus oder tragen den Scope
user:profile - Das Konto nutzt keine nutzungsbasierte Abrechnung
claude setup-token-Token, das als CLAUDE_CODE_OAUTH_TOKEN übergeben wird, erfüllt diese Bedingungen standardmäßig nicht, da es nur den Scope user:inference trägt. Andere Sitzungen, etwa Sitzungen mit API-Schlüssel, liefern den Text ohne das Feld, ebenso wie frühere Versionen. Lesen Sie den Bericht aus dem Feld, wenn es vorhanden ist, und greifen Sie andernfalls auf den Text zurück.
SDKUserMessage
Benutzer-Eingabenachricht.
pasted_content, um Inhalte zu senden, die der Benutzer in Ihre Prompt-Benutzeroberfläche eingefügt hat, anstatt sie einzugeben, einen Eintrag pro Einfügung, jeder ein String oder ein Array von Inhaltsblöcken. Claude Code fügt den Text jedes Eintrags nach dem eingegebenen Text an, in Reihenfolge, und kann jede Einfügung in <pasted_content>-Tags einwickeln. Blöcke außer Text werden ignoriert, daher senden Sie Bilder und Dokumente in message.content. Erfordert Agent SDK v0.3.277 oder später.
Setzen Sie inline_pastes, um Claude Code mitzuteilen, welche Teile von message.content der Benutzer eingefügt statt eingetippt hat, ein String pro Einfügung. Der Prompt-Text bleibt dort, wo der Benutzer ihn platziert hat. Claude Code kann jede aufgeführte Einfügung an ihrer Stelle in <pasted_content>-Tags einschließen, damit Claude eingefügtes Material von den eigenen Worten des Benutzers unterscheiden kann. Nur Einfügungen im letzten Textblock des Prompts werden eingeschlossen. Erfordert TypeScript Agent SDK v0.3.280 oder höher.
Jedes Einfügefeld hat eine Größenbeschränkung:
pasted_content: Wenn die Einträge zusammen mit den darin enthaltenen Inhaltsblöcken mehr als 1.000 ergeben, ignoriert Claude Code das gesamte Feld.inline_pastes: Claude Code verwendet die ersten 100 nicht leeren Einträge und ignoriert den Rest.
shouldQuery, client_composed oder priority, um zu ändern, wie Claude Code eine von Ihnen gesendete Nachricht behandelt:
shouldQuery: Setzen Sie es auffalse, um die Nachricht zum Transkript hinzuzufügen, ohne einen Assistenten-Turn auszulösen. Die Nachricht wird gehalten und in die nächste Benutzer-Nachricht zusammengeführt, die einen Turn auslöst. Verwenden Sie dies, um Kontext einzufügen, z. B. die Ausgabe eines Befehls, den Sie außerhalb des Bands ausgeführt haben, ohne einen Modell-Aufruf dafür auszugeben.client_composed: Setzen Sie es auftrue, um Claude Code die Nachricht so zu liefern, wie sie geschrieben ist. Claude Code erweitert dann nicht@pathoder@server:resource-Erwähnungen und führt keinen Text aus, der mit/beginnt, als Befehl aus. Während dieverbatimPrompts-Option aktiv ist, setzt das SDK das Feld auf jede Nachricht. Erfordert TypeScript Agent SDK v0.3.280 oder später und Claude Code v2.1.248 oder später.priority: steuert, wann eine Nachricht, die Sie während eines laufenden Turns senden, Claude erreicht:'next'oder keinpriority-Feld: Claude liest die Nachricht im selben Turn, sobald die laufenden Tool-Aufrufe abgeschlossen sind. Endet der Turn vorher, startet die Nachricht den nächsten Turn.'later': Claude Code hält die Nachricht zurück, bis der Turn endet, und sendet sie als neuen Turn.'now'mitorigin: { kind: "human" }: Ab Claude Code v2.1.286 wird Arbeit, die im Hintergrund fortgesetzt werden kann, dorthin verschoben, und Claude liest die Nachricht im selben Turn. Zur verschiebbaren Arbeit gehören Shell-Befehle, Subagenten und MCP-Tool-Aufrufe. Ab v2.1.287 gehören auch WebFetch- und WebSearch-Aufrufe dazu. Wenn Claude nur eine Antwort schreibt oder die laufende Arbeit nicht verschoben werden kann, unterbricht Claude Code stattdessen den Turn, und Claude liest die Nachricht als Nächstes.'now'ohne diesen Origin: Claude Code unterbricht den Turn, und Claude liest die Nachricht als Nächstes.
tool_result für einen seiner eigenen Tool-Aufrufe, trägt agent_id. Siehe SDKAssistantMessage, wo das Feld und seine Versionsanforderung definiert sind.
Bei einer Nachricht, die einen tool_result-Block enthält, ist tool_use_result das strukturierte Ausgabeobjekt des Tools und nicht der an das Modell gesendete Text. Seine Form hängt von dem Tool ab, das im zugehörigen tool_use-Block genannt wird, daher ist das Feld als unknown typisiert; die integrierten Formen sind unter Tool-Ausgabetypen aufgeführt. Diese Ergebnisse erfordern eine Behandlung über ihre aufgeführte Form hinaus:
- Das
Agent-Tool:tool_use_resultistAgentOutput. Rendern Sie daraus, statt dentool_result-Text zu parsen. Dercontenteinescompleted-Ergebnisses enthält den Bericht des Subagenten oder, bei einem Subagenten, dessen Bericht über einenSubagentHandback-Tool-Aufruf läuft, anstelle des Berichts einen kurzen Hinweis auf diese Übergabe. Im Auto-Modus ab Claude Code v2.1.271 berichtet jeder Subagent, der eincompleted-Ergebnis erzeugt, auf diese Weise, sofern er kein Fork ist, und Claude erhält den Bericht als separate Nachricht vom Subagenten. - Ein WebFetch- oder WebSearch-Aufruf, den Claude Code in den Hintergrund verschoben hat, um eine
'now'-Nachricht zuzustellen: Bei der Benutzernachricht, die dastool_resultdieses Aufrufs enthält, isttool_use_resultauf{ detachedToolCall: true }gesetzt. Der Aufruf läuft weiter, und Claude erhält sein Ergebnis, sobald er abgeschlossen ist. Es folgt kein zweitestool_resultfür diesetool_use_id. Wenn Ihre Anwendung also für jeden Tool-Aufruf eine Zeile darstellt, markieren Sie diese Zeile als in den Hintergrund verschoben, wenn diese Nachricht eintrifft. Erfordert Claude Code v2.1.287 oder höher. - Ein MCP-Tool, dessen Ergebnis
resource_link-Blöcke enthält:tool_use_resultist ein Objekt mit einemresourceLinks-Array ausSDKMcpResourceLink-Einträgen. Claude erhält jeden Link als Textzeile imtool_result-Block. Lesen Sie daherresourceLinks, um die vom Server zurückgegebenen Dateien darzustellen, statt diesen Text zu parsen. Claude Code lässtresourceLinksweg, wenn das Ergebnis keine Links enthält, sowie bei Ergebnissen von Subagenten, behält höchstens 50 Links pro Ergebnis und fügt keine weiteren Links hinzu, sobald das Array 64 KiB serialisiertes JSON erreicht.resourceLinkserfordert Agent SDK v0.3.257 oder höher. - Ein MCP-Tool, das
structuredContentzurückgibt:tool_use_resultist ein Objekt, dessen MemberstructuredContententhält, was der Server gesendet hat, und dessen MembercontentdenMcpOutput-Wert enthält. Ergebnisse von Subagenten enthalten keinstructuredContent. - Ein MCP-Tool, dessen
structuredContentzu mehr als 1.048.576 Zeichen JSON serialisiert wird: Claude Code läsststructuredContentintool_use_resultweg und setzt stattdessenstructuredContentOmitted: true, damit Ihre Anwendung ein verworfenes Objekt von einem Tool unterscheiden kann, das keines gesendet hat. Die anderen Member wiecontentundresourceLinksbleiben erhalten, und was Claude erhält, ändert sich nicht. Claude Code ab v2.1.287 wendet diese Obergrenze an. Zwei Arten von Tools verhalten sich anders:- Tools von prozessinternen SDK-Servern sind ausgenommen und liefern das Objekt vollständig.
- Ein Tool, dessen
tools/list-Eintrag eine MCP-Apps-ui://-Ressource deklariert, hat ab Claude Code v2.1.295 ein Limit von 8.388.608 Zeichen; Versionen vor v2.1.295 nehmen es aus.
SDKUserMessageReplay
Wiedergegebene Benutzer-Nachricht mit erforderlicher UUID.
origin-Art peer oder channel ist, erreicht den Stream als Wiedergabe, unabhängig davon, ob er während eines aktiven Turns geliefert wurde oder einen neuen Turn gestartet hat, während die Sitzung untätig war. Vor v2.1.207 erzeugte ein eingefügter Turn, der geliefert wurde, während die Sitzung untätig war, keine Nachricht im Stream und erschien nur, wenn Sie das Transkript erneut lasen.
SDKResultMessage
Endgültige Ergebnis-Nachricht.
subtype hinaus:
api_error_status: Der HTTP-Statuscode des API-Fehlers, der die Konversation beendet hat. Fehlt oder istnull, wenn der Turn ohne API-Fehler endete.ttft_ms: Zeit bis zum ersten Token in Millisekunden, gemessen, wenn die erste vollständige Assistenten-Nachricht ankommt. Nur auf dem Success-Arm vorhanden.ttft_stream_ms: Zeit in Millisekunden bis zum erstenmessage_start-Stream-Ereignis, wenn der Response-Stream öffnet. Niedriger alsttft_ms; die Lücke zwischen den beiden ist die Zeit, die zum Streamen der ersten Nachricht benötigt wird. Nur auf dem Success-Arm vorhanden.user_message_uuid: Dieuuidder Nachricht, die Sie gesendet haben und die dieser Turn beantwortet hat. Sieheuser_message_uuiddazu, welche Ergebnisse sie tragen.user_message_uuids: Dieuuids jeder Nachricht, die Sie gesendet haben und die Claude Code in diesem Turn beantwortet hat. Sieheuser_message_uuids.resume_reason: warum dieser Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde. In beiden Zweigen vorhanden. Sieheresume_reason.local_command: Der Name des Befehls, den der Turn versendet hat, auf dem Success-Ergebnis eines Turns, den ein Befehl abgeschlossen hat, ohne die Agentenschleife zu betreten, wie/compact. Der Name wird auf Kleinbuchstaben und Unterstriche gefaltet, daher meldet/reload-pluginsreload_plugins. Ein Befehl, den ein MCP-Server bereitstellt, und das integrierte/mcpmeldenmcp. Ein Befehl, den Sie selbst definiert haben, meldetcustom. Die Argumente sind nie enthalten. Fehlt bei jedem Turn, der die Agentenschleife betreten hat, und bei Sends, die keinen Befehl ausgeführt haben. Erfordert Agent SDK v0.3.268 oder später.request_sent_wall_ms: Epoch-Millisekunden, zu denen Claude Code die API-Anfrage versendet hat, für Joins gegen Server-seitige Zeitstempel. Nur zusammen mituser_message_uuidvorhanden, auf einem Success-Ergebnis mitis_errorfalse, dessen Turn eine API-Anfrage versendet hat.first_content_frame_ms: Zeit in Millisekunden bis zum erstencontent_block_start- odercontent_block_delta-Stream-Ereignis, wobei Thinking-Blöcke als Inhalt gezählt werden. Nur auf dem Success-Arm vorhanden, wennis_errorfalse ist. Erfordert Agent SDK v0.3.260 oder später.first_stream_post_ms,first_stream_post_ack_ms,first_stream_post_wall_ms: Zeitangaben zum Hochladen des ersten Stream-Ereignisses des Turns. Claude Code zeichnet sie nur in Sitzungen auf, die es zu claude.ai streamt, wie Cloud-Sitzungen, und die Ergebnisse, diequery()liefert, enthalten sie nicht. Erfordert Agent SDK v0.3.260 oder später.usage: Nur Hauptagentenschleife. Schließt Subagenten- und Hilfsmodell-Aufrufe aus und ist pro Turn in Streaming-Input-Sitzungen. Bevorzugen SiemodelUsagefür Token-/Kostenabrechnung.modelUsage: Pro-Modell-Summen für jeden Modell-Aufruf, der während diesesquery()-Aufrufs durch die Abfrage-Pipeline gemacht wurde, einschließlich der Hauptschleife, Subagenten und interner Aufrufe wie Komprimierung und Workflow-Agenten. Hilfsaufrufe außerhalb dieser Pipeline, wie der Berechtigungsklassifikator und Token-Zählungsanfragen, sind ausgeschlossen. Ein Aufruf, der eine Sitzung fortsetzt, zählt auch die Pro-Modell-Summen, die aus den früheren Aufrufen der Sitzung wiederhergestellt wurden. In Streaming-Input-Sitzungen sind die Summen kumulativ über Turns, daher lesen Sie das neueste Ergebnis, anstatt über Ergebnisse zu summieren. Siehe Kosten im Streaming-Input-Modus verfolgen für Zurücksetzungen und Summen nach einem Sitzungsabsturz wiederherstellen für zurückgesetzte Ergebnisse.total_cost_usd: Kumulative geschätzte Kosten in USD, die die gleichen Aufrufe wiemodelUsageabdecken und an den gleichen Punkten zurückgesetzt werden. Ein Aufruf, der eine Sitzung fortsetzt, zählt auch die Summen, die aus den früheren Aufrufen der Sitzung wiederhergestellt wurden. Es ist eine Schätzung, keine Abrechnungsaussage. Siehe Kosten und Nutzung verfolgen für Genauigkeitsvorbehalte.queued_turn_count: Die Anzahl der Nachrichten, die Sie mitorigin: { kind: "human" }gesendet haben und die noch warten, wenn Claude Code das Ergebnis erzeugt hat. Siehequeued_turn_countdazu, was0und ein fehlendes Feld Ihnen sagen.result_index: Wo dieses Ergebnis in der Lieferreihenfolge des Durchlaufs fällt, gezählt von 0 über jedes Ergebnis, das der Prozess schreibt. Vorhanden auf beiden Armen. Ein Ergebnis, dessen Schreiben fehlschlägt, verbraucht immer noch seine Nummer, daher bedeutet eine Lücke in der Sequenz, dass ein Ergebnis verloren ging. Erfordert Agent SDK v0.3.268 oder später.startup_failure_reason: Warum Claude Code sich weigerte zu starten, auf demerror_during_execution-Ergebnis, das es vor dem Beenden bei einem bekannten Startfehler schreibt. Siehestartup_failure_reasonfür die Werte und welche Fehler es tragen. Erfordert Agent SDK v0.3.274 oder später.terminal_reason: Warum die Schleife endete. Einer von"completed","max_turns","tool_deferred","aborted_streaming","aborted_tools","hook_stopped","stop_hook_prevented","background_requested","blocking_limit","rapid_refill_breaker","prompt_too_long","image_error","model_error","api_error","malformed_tool_use_exhausted","budget_exhausted","structured_output_retry_exhausted","tool_deferred_unavailable"oder"turn_setup_failed".fast_mode_state: Einer von"on","off"oder"cooldown".fast_mode_disabled_reason: Warum der Fast-Modus gerade nicht verfügbar ist. Fehlt, wenn nichts den Fast-Modus blockiert, obwohl eine Anfrage möglicherweise immer noch mit Standardgeschwindigkeit ausgeführt wird. Während der Abkühlung nach einem Rate-Limit des Fast-Modus meldet Claude Codefast_mode_state: "cooldown"ohne Grund-Code und reaktiviert den Fast-Modus, wenn die Abkühlung abläuft. Erfordert Claude Code v2.1.219 oder später.
Das gleiche Feldpaar erscheint auf
SDKSystemMessage und auf SDKControlInitializeResponse, daher können Sie den Status des Fast-Modus vor dem ersten Turn lesen.
Das origin-Feld leitet die SDKMessageOrigin der Benutzer-Nachricht weiter, die dieses Ergebnis ausgelöst hat. Wenn das SDK einen synthetischen Follow-up-Turn einfügt, wie für eine beendete Hintergrundaufgabe, trägt die resultierende SDKResultMessage origin: { kind: "task-notification" }. Routinen, deren Trigger ausgelöst wurde, und von Servern verifizierte Nachrichten von Ihren anderen Sitzungen kommen mit dieser Art an, jede mit dem subkind, der in Task-Notification-Subkinds beschrieben ist. Überprüfen Sie kind, um Ergebnisse, die Ihren Prompt beantworten, von eingefügten Follow-ups zu unterscheiden, bevor Sie sie weiterleiten oder unterdrücken. Wenn Ihre Anwendung geplante Ausführungen erklärt, tragen ihre Ergebnisse auch kind: "task-notification", daher unterdrücken Sie nicht allein anhand von kind.
Wenn mehrere Abschlüsse von Hintergrundaufgaben zusammen in die Warteschlange eingereiht werden, kann Claude Code sie in einem Turn beantworten, anstatt einen Turn pro Abschluss. Jeder Abschluss erzeugt immer noch sein eigenes Ergebnis mit dieser Herkunft. Alle außer dem letzten der Abschlüsse, die Claude Code zusammen beantwortet, erzeugen leere Ergebnisse mit num_turns: 0, in Reihenfolge, und das Ergebnis des letzten trägt den Turn, der sie alle beantwortet.
Das Feld fehlt bei Ergebnissen, die vor einem Benutzer-Turn ausgegeben werden, z. B. Startfehler.
Wenn ein PreToolUse-Hook permissionDecision: "defer" zurückgibt, hat das Ergebnis stop_reason: "tool_deferred" und deferred_tool_use enthält die id, den name und die input des ausstehenden Tools. Lesen Sie dieses Feld, um die Anfrage in Ihrer eigenen Benutzeroberfläche anzuzeigen, und setzen Sie dann mit derselben session_id fort, um fortzufahren. Siehe Einen Tool-Aufruf für später aufschieben für die vollständige Runde.
user_message_uuid
Die uuid der SDKUserMessage, die der Turn beantwortet, wiedergegeben, damit Sie Claude Codes Antwort mit der Nachricht abgleichen können, die Sie gesendet haben. Claude Code wiederholt eine uuid nur, wenn Sie eine auf der Nachricht setzen. Das Feld ist optional auf SDKUserMessage, und ein String-Prompt, der an query() übergeben wird, trägt keine.
Welche Ihrer Nachrichten ein Turn beantwortet, hängt davon ab, wie der Turn gestartet wurde:
- Eine reguläre Nachricht, die Sie gesendet haben, d. h. eine ohne
isSynthetic: true: Der Turn beantwortet diese Nachricht für seinen gesamten Lauf. Wenn Sie mehrere Nachrichten dicht beieinander senden, kann Claude Code sie in einen Turn zusammenführen, und das Feld trägt dann nur dieuuidder letzten Nachricht. Um die Antwort mit einer der zusammengeführten Nachrichten abzugleichen, verwenden Sieuser_message_uuids. - Eine Nachricht, die Sie mit
isSynthetic: truegesendet haben: Der Turn beantwortet diese Nachricht zunächst. Wenn Claude Code eine reguläre Nachricht von Ihnen zwischen Tool-Aufrufen aufgreift, beantwortet der Turn die aufgegriffene Nachricht von da an. Das Wiederholen deruuideiner synthetischen Nachricht erfordert Agent SDK v0.3.265 oder später; frühere Versionen wiederholen nichts bei synthetischen Turns. - Der Prompt, den Claude Code erzeugt, um einen unterbrochenen Turn unter
CLAUDE_CODE_RESUME_INTERRUPTED_TURNfortzusetzen: Wenn der letzte Prompt des unterbrochenen Turns eine reguläre, von Ihnen gesendete Nachricht ist, unabhängig davon, ob sie den Turn eröffnet hat oder von Claude Code während des Turns aufgenommen wurde, beantwortet der fortgesetzte Turn zunächst diese Nachricht.resume_reasonunterscheidet die Frames des fortgesetzten Turns von denen des unterbrochenen Versuchs. Wenn der letzte Prompt keine reguläre Nachricht von Ihnen ist, beantwortet der fortgesetzte Turn zunächst keine Ihrer Nachrichten. Wenn Claude Code zwischen Tool-Aufrufen eine reguläre Nachricht von Ihnen aufnimmt, beantwortet der Turn ab dann die aufgenommene Nachricht. Die Rückgabe des Prompts des unterbrochenen Turns erfordert Agent SDK v0.3.268 oder höher. - Jeder andere Prompt, den Claude Code selbst generiert hat: Der Turn beantwortet zunächst keine Nachricht von Ihnen und seine Frames tragen keine Wiederholung. Wenn Claude Code eine reguläre Nachricht von Ihnen zwischen Tool-Aufrufen aufgreift, beantwortet der Turn diese Nachricht von da an. Die Aufgreif-Wiederholung erfordert Agent SDK v0.3.265 oder später; frühere Versionen wiederholen nichts bei diesen Turns.
uuid der beantworteten Nachricht auf drei Arten von Frames:
- Das Ergebnis: Jedes Ergebnis eines Turns, der eine Nachricht beantwortet, die Sie gesendet haben. Jedes solche Ergebnis trägt es auf Agent SDK v0.3.265 oder später. Vor v0.3.265 fehlte es auf dem Success-Ergebnis eines Turns, den eine reguläre Nachricht gestartet hat, wenn der Turn keine API-Anfrage versendet hat oder mit einem aufgeschobenen Tool-Aufruf endete. Vor v0.3.246 fehlte es auch auf Fehler-Ergebnissen, und vor v0.3.216 auf jedem Ergebnis.
- Die erste Antwort des Turns: die erste Assistenten-Nachricht und mit
includePartialMessagesaußerdem das erste Stream-Ereignis, dessenevent.typenichtpingist, damit Sie die Antwort binden können, bevor das Ergebnis ankommt. Die Erste-Antwort-Wiederholung erfordert Agent SDK v0.3.246 oder später. Vor v0.3.269 setzte Claude Code es mitincludePartialMessagesnur auf dieses erste Stream-Ereignis oder, wenn der Turn nichts streamte, auf die erste Assistenten-Nachricht. Wenn sich die Nachricht, die der Turn beantwortet, mitten im Turn ändert, trägt die erste Antwort nach der Änderung das Feld auch auf Agent SDK v0.3.265 oder später; frühere Versionen setzen es auf einen Antwort-Frame pro Turn. - Jeder
thinking_tokens-Frame des Turns: damit Sie den Thinking-Fortschritt der Nachricht zuordnen können, die Sie gesendet haben, ohne auf die erste Antwort des Turns zu warten. Erfordert Agent SDK v0.3.260 oder später.
- Antwort-Frames außer diesen ersten Antworten
- Subagenten-Frames
- Turns, die keine Nachricht von Ihnen beantworten oder eine Nachricht beantworten, die Sie ohne
uuidgesendet haben - Ergebnisse, die keine Nachricht beantworten, die Sie gesendet haben, wie das zurückgesetzte Ergebnis nach einem abgestürzten Worker-Prozess
user_message_uuids
Die uuids jeder Nachricht, die Sie gesendet haben und die Claude Code in diesem Turn beantwortet hat. Wenn Sie mehrere Nachrichten dicht beieinander senden, kann Claude Code sie in einen Turn zusammenführen, und user_message_uuid benennt dann nur die letzte davon. Um die Antwort mit einer der zusammengeführten Nachrichten abzugleichen, suchen Sie nach der uuid dieser Nachricht überall in dieser Liste. Erfordert Agent SDK v0.3.259 oder später.
Claude Code setzt die Liste zusammen mit user_message_uuid auf jeden Antwort-Frame, der dieses Feld trägt, und auf das Ergebnis. Für den vollständigen Satz von Turn-Frames, die die uuid der beantworteten Nachricht wiederholen, und die Version, die jeder erfordert, siehe user_message_uuid. Die Liste enthält immer user_message_uuid und hält höchstens 64 Einträge.
Wenn Claude Code eine reguläre Nachricht aufgreift, die Sie während eines Turns gesendet haben, fügt es die uuid dieser Nachricht zur Liste des Ergebnisses hinzu.
Wenn eine erste Antwort oder ein Ergebnis user_message_uuid ohne die Liste trägt, kam es von einer früheren Claude Code-Version, daher greifen Sie auf das einzelne Feld zurück.
resume_reason
Warum dieser Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde. Claude Code setzt dieses Feld bei einem Turn, der einen unterbrochenen Turn unter CLAUDE_CODE_RESUME_INTERRUPTED_TURN fortsetzt, damit Sie Antwort und Ergebnis des fortgesetzten Turns von denen des unterbrochenen Versuchs unterscheiden können. Erfordert Agent SDK v0.3.268 oder höher.
Claude Code setzt das Feld auf zwei Arten von Frames:
- Das Ergebnis des fortgesetzten Turns: im Erfolgs- wie im Fehlerzweig, unabhängig davon, ob das Ergebnis
user_message_uuidträgt. - Die Antwort-Frames des fortgesetzten Turns: diejenigen, die
user_message_uuidtragen.
interrupted_turn.
queued_turn_count
Die Anzahl der Nachrichten, die Sie mit origin: { kind: "human" } gesendet haben und die noch in der Befehlswarteschlange warten, wenn Claude Code das Ergebnis erzeugt hat. Erfordert Agent SDK v0.3.242 oder später.
Was 0 und ein fehlendes Feld Ihnen sagen:
0: Claude Code zählt keine Nachrichten, die Sie ohne dieseorigingesendet haben, und zählt keine Task-Benachrichtigungen, daher kann ein Turn immer noch folgen.- Fehlt: Das endgültige Ergebnis, das Claude Code nach einem Absturz oder fatalen Startfehler ausgibt, lässt das Feld weg, und kann zurückgesetzte Summen tragen.
startup_failure_reason
Warum Claude Code sich weigerte zu starten, damit Ihre Anwendung die Behebung anbieten kann, anstatt einen Wiederholungsversuch. Claude Code setzt es auf das error_during_execution-Ergebnis, das es vor dem Beenden bei einem bekannten Startfehler schreibt. Dieses Ergebnis trägt zurückgesetzte Summen, und sein errors-Array trägt den gleichen Text wie stderr. Das Feld fehlt auf jedem anderen Ergebnis. Erfordert Agent SDK v0.3.274 oder später.
Setzen Sie CLAUDE_CODE_STARTUP_FAILURE_RESULTS auf 1 in env, um dieses Ergebnis für jeden SDKStartupFailureReason-Wert zu erhalten. Ohne diese Variable schreibt Claude Code das Ergebnis nur für diese Fehler, und der Rest endet mit stderr-Ausgabe, einem Nicht-Null-Exit und keiner Ergebnis-Nachricht:
- Ein Resume, das Claude Code stoppt, weil es die Sitzung nicht zu ihrem Worktree zurückbringen kann, mit
worktree_unverifiedoderworktree_resume_refused. Dieser Abschnitt sagt, welcher Fehler welchen Wert trägt. - Ein abgelehntes
continueeiner Konversation, die eine Hintergrund-Sitzung hält, mitsession_held_by_background. Für ein abgelehntesresumeeiner solchen Konversation schreibt Claude Code das Ergebnis nur, wenn die Variable gesetzt ist.
SDKSystemMessage
System-Initialisierungsnachricht.
fast_mode_state meldet den Status des Fast-Modus der Sitzung. Wenn etwas den Fast-Modus blockiert, benennt fast_mode_disabled_reason die Überprüfung, die ihn blockiert hat; das Feld erfordert Claude Code v2.1.219 oder später. Für die Grund-Codes und ihre Bedeutungen siehe fast_mode_disabled_reason auf der Ergebnis-Nachricht.
terminal_slash_commands benennt die Einträge in slash_commands, deren Schnittstelle an das lokale Terminal gebunden ist, wie exit. Sie können sie wie jeden anderen Eintrag in slash_commands senden; das Feld existiert, damit ein Remote- oder Mobile-Client sie aus seinen Befehlsmenüs ausblenden kann. Das Feld ist nur vorhanden, wenn nicht leer, und erfordert Agent SDK v0.3.229 oder später.
sourceauf jedemmcp_servers-Eintrag: Woher die Definition des Servers kam, mit den gleichen Werten wiesourcevonMcpServerStatus. Erfordert Agent SDK v0.3.274 oder später.effort: Die Effort-Stufe, die Claude Code bei der nächsten Anfrage der Sitzung sendet, odernull, wenn es keine sendet. Claude Code setzt das Feld nur auf die Init-Nachricht, die es an Remote Control-Clients sendet, und lässt es aus der Init-Nachricht weg, die Ihre Anwendung liest. Erfordert Agent SDK v0.3.234 oder später.
capabilities-Array benennt die Protokoll-Verhaltensweisen, die diese CLI implementiert, damit Sie Feature-Erkennung durchführen können, anstatt claude_code_version-Zeichenketten zu vergleichen. Es ist ein offenes Set: Ignorieren Sie Werte, die Sie nicht erkennen, und überprüfen Sie auf die spezifische Fähigkeit, deren Verhalten Sie benötigen. Das Feld erfordert Claude Code v2.1.205 oder später und fehlt auf früheren CLIs.
Das
plugin_errors-Array listet Plugin-Ladefehler auf. Ein Eintrag beschreibt entweder ein Plugin, das nicht geladen wurde und in plugins fehlt, oder ein Plugin, das ohne einen seiner Teile geladen wurde, wie seine Hooks-Datei. Der Schlüssel wird weggelassen, wenn nichts fehlgeschlagen ist. SDKSystemMessage deklariert plugin_errors in Agent SDK v0.3.283 oder später.
Wenn ein Verzeichnis oder Archiv aus Ihrer plugins-Option selbst nicht geladen wird, hält das plugin-Feld des Eintrags ein Positions-Tag wie inline[0] anstelle eines Plugin-Namens. Dies geschieht beispielsweise, wenn der Pfad nicht existiert oder das Manifest ungültig ist. Gleichen Sie einen solchen Eintrag mit Ihrer Option durch sein path-Feld ab.
Die Tabelle unten listet die Felder jedes plugin_errors-Eintrags auf.
SDKPartialAssistantMessage
Partielle Streaming-Nachricht (nur wenn includePartialMessages true ist).
Das Feld parent_tool_use_id ist immer null: Stream-Ereignisse werden nur für die Hauptsitzung ausgegeben. Zur Zuordnung zu Subagenten verwenden Sie vollständige Nachrichten, die agent_id und parent_tool_use_id tragen, oder aktivieren Sie forwardSubagentText, um Text und Thinking von Subagenten als vollständige Nachrichten zu erhalten.
user_message_uuid und user_message_uuids im ersten Nicht-Ping-Stream-Ereignis des Turns und erneut, wenn sich die Nachricht ändert, die der Turn beantwortet, unter den in user_message_uuid beschriebenen Bedingungen. Wenn der Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde, tragen die Stream-Ereignisse mit diesen Feldern auch resume_reason.
SDKCompactBoundaryMessage
Nachricht, die eine Konversations-Komprimierungsgrenze anzeigt.
SDKInformationalMessage
Generisches Text-Banner, das von der Schleife ausgegeben wird. Enthält Warnungen, Hinweise und andere nicht-fehlerhafte Statuszeilen, die Claude Code auslöst, und Hook-Feedback wie den Block-Grund eines UserPromptSubmit-Hooks.
Auf Claude Code v2.1.227 oder später kann die systemMessage eines Hooks als diese Nachricht ankommen, wobei jeder Zeile der Name des Hooks vorangestellt ist, wie PostToolUse:Bash says:. Jeder Ereignisabschnitt auf der Hooks-Seite sagt, wie die Ausgabe angezeigt wird.
Rendern Sie content als Klartext auf der angegebenen level.
SDKWorkerShuttingDownMessage
Wird bei ordnungsgemäßem Herunterfahren des Workers ausgegeben, damit Remote-Clients sehen können, warum der Worker beendet wurde, anstatt auf Heartbeat-Timeout zu warten. Der reason ist eine kurze snake_case-Zeichenkette, die von der Host-CLI gesetzt wird, z. B. "host_exit" oder "remote_control_disabled". Handeln Sie nur dann, wenn Sie live streamen. Eine wiederaufgenommene Sitzung spielt vergangene Instanzen dieser Nachricht ab, also ignorieren Sie sie in diesem Fall.
SDKPluginInstallMessage
Plugin-Installationsfortschritt-Ereignis. Wird ausgegeben, wenn CLAUDE_CODE_SYNC_PLUGIN_INSTALL gesetzt ist, damit Ihre Agent SDK-Anwendung die Marketplace-Plugin-Installation vor dem ersten Turn verfolgen kann. Die started- und completed-Status klammern die Gesamtinstallation. Die installed- und failed-Status melden einzelne Marketplaces und enthalten name.
SDKPermissionDeniedMessage
Stream-Ereignis, das ausgegeben wird, wenn das Berechtigungssystem einen Tool-Aufruf ohne interaktive Berechtigungsabfrage ablehnt. Verwenden Sie es, um die Ablehnung in Ihrer Benutzeroberfläche zu rendern, während sie geschieht, anstatt nur das is_error-Tool-Ergebnis zu beobachten, das folgt. Welche Ablehnungen es meldet, hängt davon ab, wie der Lauf Berechtigungsabfragen handhabt:
- Mit einem
canUseTool-Callback und dem StandardpermissionPrompts: 'host': Berechtigungsabfragen gehen an Ihren Callback, und dieses Ereignis meldet die Ablehnungen, die Claude Code auf eigene Faust entscheidet, ohne ihn aufzurufen. - Mit keinem von beiden: Ein reiner
-p-Lauf oder einquery(), das wedercanUseToolnochpermissionPromptToolNamesetzt, lehnt jeden Tool-Aufruf ab, für den eine Berechtigungsabfrage erfolgt wäre, sofern ihn keinPermissionRequest-Hook erlaubt, und dieses Event meldet diese Ablehnungen sowie diejenigen, die Claude Code selbst entscheidet. Vor v2.1.223 gab Claude Code dieses Event in Läufen ohne Callback nicht aus. - Mit einem MCP-Tool für Berechtigungsabfragen, gesetzt mit
permissionPromptToolNameoder dem--permission-prompt-tool-Flag, und dem StandardpermissionPrompts: 'host': Claude Code gibt dieses Ereignis überhaupt nicht aus, nicht einmal für die Regel-Ablehnungen, die es auf eigene Faust entscheidet. - Mit
permissionPrompts: 'none': Claude Code lehnt die Aufrufe ab, die eine Berechtigungsabfrage ausgelöst hätten, auch wenn zusätzlichcanUseTooloder ein MCP-Tool für Berechtigungsabfragen gesetzt ist, und dieses Ereignis meldet diese Ablehnungen sowie die, die Claude Code auf eigene Faust entscheidet. Erfordert Claude Code v2.1.259 oder später.
PreToolUse-Hook-Pfad entschieden wurde, ob der Hook den Aufruf selbst ablehnte oder eine Deny-Regel die Allow- oder Ask-Entscheidung des Hooks überschrieb. Das Ereignis ist auch Best-Effort: Gelegentlich zeichnet Claude Code eine Ablehnung auf, ohne dieses Ereignis auszugeben, daher ist permission_denials auf der Ergebnis-Nachricht der maßgebliche Datensatz.
SDKPermissionDenial
Informationen über einen verweigerten Tool-Einsatz.
SDKContextUsage
Strukturierte Form des /context-Berichts, getragen als context_usage auf der SDKAssistantMessage, die ein /context-Ergebnis liefert. Agent SDK v0.3.232 und später exportieren den Typ. Im Gegensatz zu SDKControlGetContextUsageResponse trägt es nur die Daten, die benötigt werden, um die Nutzungsaufschlüsselung zu rendern, ohne Anzeigefelder wie color und gridRows. Claude Code berechnet den Bericht mit Token-Zählungs-API-Anfragen, die nicht im Nachrichtenstream erscheinen; siehe wie diese Anfragen behandelt werden.
model bis over_limit beschreiben die Sitzung als Ganzes, und die Sammlungsfelder ordnen Token einzelnen Elementen zu.
over_limit.kind zeichnet auf, wie Claude Code das Fenster aufgelöst hat, nicht ob die API die nächste Anfrage akzeptiert:
hard_limit: Das Fenster ist das, was Claude Code für das eigene Limit des Modells hält, über das hinaus die API Anfragen ablehntcompaction_window: Das Fenster ist ein Komprimierungs-Richtlinien-Fenster, das möglicherweise mit dem Limit des Modells übereinstimmt oder nicht
SDKContextUsageCategory
Eine Zeile der /context-Nutzungs-nach-Kategorie-Aufschlüsselung.
Jeder
kind-Wert sagt, was die Token der Zeile sind:
used: Inhalt, der das Kontextfenster belegtfree: Das verbleibende Fensterbuffer: Die Komprimierungs-Reservedeferred: Tool-Schemas, die Claude Code aus dem Fenster heraushält und von der Nutzungsberechnung ausschließt, aufgelistet zur Kenntnis
SDKUsageReport
Strukturierte Form des /usage-Berichts, getragen als usage_report in der SDKAssistantMessage, die ein /usage-Ergebnis liefert. Agent SDK v0.3.273 und höher exportieren den Typ. Der Typ ist experimentell: Seine Form kann sich ändern.
session und rate_limits:
session: die laufenden Kosten- und Nutzungssummen von Claude Code, gelesen aus demselben Ledger wietotal_cost_usdundmodelUsageinSDKResultMessage. Jedermodel_usage-Eintrag ist einModelUsage.rate_limits: die Nutzungszeilen des Plans inlimitsund die Ausgaben des Nutzungsguthabens inextra_usage. Der Wert istnull, wenn Claude Code die Nutzung des Plans nicht abrufen konnte, etwa wenn dem OAuth-Token der Sitzung der Scopeuser:profilefehlt.
session.total_cost_usd lokal aus Token-Zählungen; es handelt sich also um eine Schätzung und nicht um das, was Ihr Plan abrechnet. Die vom Server gemeldeten Ausgaben des Nutzungsguthabens stehen im separaten extra_usage-Block. Siehe Kosten und Nutzung verfolgen für die Hinweise zur Genauigkeit.
limits enthält die Nutzungszeilen des Servers so, wie der Server sie gesendet hat: Welche Zähler gelten sowie deren Geltungsbereich, Bezeichnungen, Schweregrad und Reihenfolge bestimmt der Server; stellen Sie die Zeilen daher unverändert dar.
- Ein leeres Array bedeutet, dass der Server keine Zähler gemeldet hat.
nullbedeutet, dass Claude Code keine Zeilen zu melden hat.
limits beschreibt einen Nutzungszähler:
Vor Agent SDK v0.3.277 deklarierte der Typ
severity und is_active als optional und nullable, und eine Zeile konnte ohne sie eintreffen.
extra_usage sind die Ausgaben und die Obergrenze des Nutzungsguthabens für den Abrechnungszeitraum, wie der Server sie meldet, vorhanden, wenn der Plan Nutzungsguthaben hat. Beträge werden in der kleinsten Einheit von currency angegeben, bei USD in Cent.
monthly_limitistnull, wenn dieses Konto keine eigene Ausgabenobergrenze hat. Stellen Sienullbei Team- und Enterprise-Plänen nicht als unbegrenzt dar.is_enabledistfalse, solange das Nutzungsguthaben keine Anfragen bezahlen kann.
SDKMessageOrigin
Herkunft einer Nachricht mit Benutzer-Rolle. Dies erscheint als origin auf SDKUserMessage und wird auf die entsprechende SDKResultMessage weitergeleitet, damit Sie erkennen können, was einen bestimmten Turn ausgelöst hat.
Task-Notification-Subkinds
Wenn Claude Code eine Task-Benachrichtigung in eine Sitzung liefert, setzt essubkind auf der origin der Benachrichtigung, wenn Anthropic-Server verifiziert haben, woher diese Benachrichtigung kam. Es setzt subkind auch, wenn Ihre Anwendung die Nachricht selbst als geplante Ausführung erklärt, was TypeScript Agent SDK v0.3.280 oder später erfordert. subkind erfordert Claude Code v2.1.213 oder später, und es nimmt einen von zwei Werten an:
scheduled-trigger: Die Benachrichtigung ist der gespeicherte Prompt einer Routine, geliefert, weil einer der Trigger der Routine ausgelöst wurde: ihr Zeitplan, ihr API-Trigger, ihr GitHub-Trigger oder Run now. Ein Prompt, den Ihre Anwendung als geplante Ausführung erklärt, trägt diesen Wert ebenfalls. Claude Code rahmt diese gegenüber dem Modell als die zugewiesene Aufgabe der Sitzung ein, mit einem anderen Hinweis als dem Hinweis, den andere Task-Benachrichtigungen tragen.peer-send-message: Die Benachrichtigung ist eine Nachricht, die eine andere Ihrer Sitzungen mit dem Server-seitigensend_message-Tool gesendet hat, das Cloud-Sitzungen verwenden, um sich gegenseitig Nachrichten zu senden, nicht mit dem Cross-Session-SendMessage-Tool, und Anthropic-Server haben verifiziert, dass beide Sitzungen zur gleichen privaten Gruppe von Sitzungen gehören. Erfordert Claude Code v2.1.224 oder später. Einesend_message-Lieferung, die die Server nicht auf diese Weise verifiziert haben, bekommt keinen Subkind.
subkind. Das schließt PR-Aktivität, die in eine Sitzung geliefert wird, und Hintergrund-Ereignisse wie eine beendete Aufgabe ein. Nachrichten vom Cross-Session-SendMessage-Tool sind überhaupt keine Task-Benachrichtigungen: Ob sie von einer Sitzung auf der gleichen Maschine oder über Anthropic-Server von einer anderen Maschine kommen, Claude Code gibt ihnen kind: "peer" und die Peer-Herkunftsfelder.
fireReason sagt, warum eine scheduled-trigger-Benachrichtigung ausgelöst wurde, als kurzes Kleinbuchstaben-Token wie scheduled, manual, retry, catch_up oder api. Anthropic-Server setzen es auf die Lieferungen einer Routine, und Ihre Anwendung setzt es, wenn sie eine geplante Ausführung erklärt. Es fehlt, wenn keiner von beiden einen gesendet hat. Erfordert TypeScript Agent SDK v0.3.280 oder später.
Eine Hintergrundaufgabe kann mehr als einmal unter derselben task_id ausgeführt werden, etwa wenn Claude einen Subagenten fortsetzt. Jeder Lauf hat seine eigene run_id. Wenn die Benachrichtigung eines Laufs Ihre Sitzung als Benutzernachricht erreicht, enthält runId im task-notification-Origin dieser Nachricht denselben Wert. Eine Benachrichtigung kann eintreffen, nachdem der nächste Lauf der Aufgabe bereits begonnen hat, und trägt dennoch die ID des früheren Laufs. Um festzustellen, zu welchem Lauf ein Turn gehört, vergleichen Sie runId, nicht task_id. Erfordert TypeScript Agent SDK v0.3.292 oder höher.
Geplante Ausführung erklären
Wenn Ihre Anwendung Prompts nach ihrem eigenen Zeitplan ausführt, erklären Sie jede Ausführung, damit Claude Code den Turn gegenüber dem Modell als geplante Aufgabe einrahmt, anstatt als Live-Eingabe vom Benutzer. Starten Sie die Sitzung mitCLAUDE_CODE_HOST_SCHEDULED_RUN auf 1 in env, dann senden Sie die SDKUserMessage der Ausführung mit origin: { kind: "task-notification", subkind: "scheduled-trigger", fireReason: "scheduled" } und ohne isSynthetic. Claude Code ignoriert die Erklärung in einem Prozess, der ohne diese Variable gestartet wurde. Es ignoriert sie auch in einem Prozess, dessen Umgebung CLAUDECODE oder CLAUDE_CODE_CHILD_SESSION trägt. Claude Code behält fireReason nur, wenn der Wert aus 1 bis 32 Kleinbuchstaben oder Unterstrichen besteht. Erfordert TypeScript Agent SDK v0.3.280 oder später.
Peer-Herkunftsfelder
Einepeer-Herkunft identifiziert, welcher Agent die Nachricht gesendet hat: ein In-Process-Teamkollege, der mit SendMessage an main sendet, oder ein Cross-Session-Peer, eine andere Ihrer Claude Code-Sitzungen. Cross-Session-Peers erfordern Claude Code v2.1.224 oder später auf macOS und Linux; siehe Cross-Session-Messaging-Verfügbarkeit für die Anforderung unter nativem Windows. Ein Cross-Session-Peer kann auf der gleichen Maschine laufen, oder auf einer anderen Ihrer Maschinen oder in der Cloud, wenn seine Nachricht über Remote Control ankommt. Die zwei Arten von Sendern füllen die Felder unterschiedlich:
from: Der Name des Teamkollegen, oder die Absenderadresse für einen Cross-Session-Peer. Für eine Einweg-Cross-Machine-Nachricht hat der Sender keine Antwortadresse undfromist"unknown". Der Wert ist vom Sender verfasst;verifiedPeerPidist die verifizierte Identität.fromMode: Die Berechtigungsklasse der sendenden Sitzung,bypassoderprompting, deklariert von einem Host, der eine Peer-Nachricht zwischen Ihren Sitzungen weiterleitet, wie die Desktop-App. Claude Code liest es in der empfangenden Sitzung, wenn es die Inbound-Steuerungen anwendet. Erfordert Agent SDK v0.3.234 oder später.senderTaskId: Die Task-ID des Teamkollegen. Fehlt für einen Cross-Session-Peer.name: Der Anzeigename des Absenders, normalisiert von Claude Code: Es entfernt Unicode-Steuer-, Format-, Surrogate- und Zeilen- oder Absatz-Trennzeichen-Codepunkte, kürzt dann das Ergebnis und begrenzt es auf 64 Codepunkte mit einer Ellipse. Erfordert Claude Code v2.1.205 oder später.body: der dekodierte Nachrichtentext ohne den Peer-Umschlag, bytegenau identisch mit dem, was das Modell sieht. Vorhanden bei einer einzelnen Nachricht eines Teammitglieds, fehlt, wenn mehrere zusammengeführt werden; bei einem sitzungsübergreifenden Peer nur vorhanden, wenn der Turn aus genau einem von Claude Code gebildeten Peer-Umschlag besteht. Stellen Sienameundbodydar, anstatt den Nachrichtentext erneut zu parsen. Vor v2.1.299 behielten zusammengeführte Nachrichten denbodyder ersten Nachricht. Erfordert Claude Code v2.1.205 oder höher.fromSession: Die vom Host öffenbare Sitzungs-ID des Absenders, gesetzt vom Host des Absenders, damit Ihre Benutzeroberfläche zurück zur sendenden Sitzung verlinken kann. Wiefromist es vom Sender behauptet: Verwenden Sie es nur als Navigationsziel, und behandeln Sie es nicht als Beweis der Identität des Absenders. Erfordert Claude Code v2.1.216 oder später.verifiedPeerPid: Die Prozess-ID des Prozesses, der sich mit dem Cross-Session-Messaging-Socket dieser Sitzung verbunden hat, verifiziert vom Kernel und aus der Verbindung selbst gelesen, niemals aus der Payload. Verwenden Sie es, nichtfrom, um den Absender zu identifizieren:fromist von jedem Prozess desselben Benutzers fälschbar. Das Feld fehlt, wenn Claude Code es nicht verifizieren kann, etwa unter Windows oder bei Nicht-Socket-Eingang, daher bedeutet ein fehlender Wert, dass der Absender nicht verifiziert ist. Für weitergeleiteten Traffic identifiziert es das Relay anstelle des Autors der Nachricht, und Prozess-IDs sind wiederverwendbar, daher behandeln Sie es als Herkunftsangabe und nicht als Authentifizierungs-Token. Erfordert Claude Code v2.1.216 oder später.
Hook-Typen
Einen umfassenden Leitfaden zur Verwendung von Hooks mit Beispielen und häufigen Mustern finden Sie im Hooks-Leitfaden.HookEvent
Verfügbare Hook-Ereignisse.
HookCallback
Hook-Callback-Funktionstyp.
HookCallbackMatcher
Hook-Konfiguration mit optionalem Matcher.
HookInput
Union-Typ aller Hook-Eingabetypen.
BaseHookInput
Basis-Schnittstelle, die alle Hook-Eingabetypen erweitern.
prompt_id ist eine UUID, die die derzeit verarbeitete Benutzereingabe identifiziert. Sie entspricht dem prompt.id-Attribut bei OpenTelemetry-Ereignissen und ist bis zur ersten Benutzereingabe nicht vorhanden. Erfordert Claude Code v2.1.196 oder später.
PreToolUseHookInput
mcp_server ist vorhanden, wenn das Tool von einem MCP-Server stammt; siehe McpServerProvenance. Die Eingaben PostToolUse, PostToolUseFailure, PermissionRequest und PermissionDenied enthalten das gleiche Feld. Das Feld erfordert Agent SDK v0.3.274 oder später.
PostToolUseHookInput
PostToolUseFailureHookInput
PostToolBatchHookInput
Wird einmal ausgelöst, nachdem jeder Werkzeugaufruf in einem Batch aufgelöst wurde, bevor die nächste Modellanfrage erfolgt. tool_response enthält den serialisierten tool_result-Inhalt, den das Modell sieht; die Form unterscheidet sich vom strukturierten Output-Objekt von PostToolUseHookInput.
PermissionDeniedHookInput
NotificationHookInput
UserPromptSubmitHookInput
UserPromptExpansionHookInput
SessionStartHookInput
SessionEndHookInput
StopHookInput
StopFailureHookInput
SubagentStartHookInput
SubagentStopHookInput
PreCompactHookInput
PostCompactHookInput
PreModelSwitchHookInput
Wird ausgelöst, bevor ein angefordeter Modellwechsel wirksam wird. context_tokens und die Felder danach schätzen, was das erneute Senden des Gesprächs an das neue Modell kostet. Für die vollständigen Feldbeschreibungen und Blocking-Semantik siehe PreModelSwitch.
PostModelSwitchHookInput
Wird ausgelöst, nachdem sich das Modell der Sitzung ändert. Es enthält die gleichen Felder wie PreModelSwitchHookInput, mit zwei weiteren source-Werten. Siehe PostModelSwitch.
PermissionRequestHookInput
SetupHookInput
TeammateIdleHookInput
TaskCreatedHookInput
TaskCompletedHookInput
ElicitationHookInput
ElicitationResultHookInput
ConfigChangeHookInput
InstructionsLoadedHookInput
DirectoryAddedHookInput
directory ist der absolute Pfad des hinzugefügten Verzeichnisses. source ist "slash_command", wenn /add-dir es hinzugefügt hat, und "register_repo_root", wenn die SDK-Steueranfrage dies tat.
WorktreeCreateHookInput
WorktreeRemoveHookInput
CwdChangedHookInput
FileChangedHookInput
MessageDisplayHookInput
HookJSONOutput
Hook-Rückgabewert.
AsyncHookJSONOutput
SyncHookJSONOutput
Tool-Eingabetypen
Dokumentation von Eingabeschemas für integrierte Claude Code-Tools. Diese Typen werden aus@anthropic-ai/claude-agent-sdk/sdk-tools exportiert und können für typsichere Tool-Interaktionen verwendet werden.
ToolInputSchemas
Union von Tool-Eingabetypen, die aus @anthropic-ai/claude-agent-sdk/sdk-tools exportiert werden; Mitglieder umfassen:
Agent
Tool-Name:Agent. Der frühere Name Task wird immer noch als Alias akzeptiert, und das tools-Array in der SDKSystemMessage-Initialisierungsnachricht listet dieses Tool derzeit aus Gründen der Rückwärtskompatibilität als Task auf.
Das Feld
mode ist in Claude Code v2.1.212 oder später veraltet und wird ignoriert. Ein Subagent läuft entweder im Berechtigungsmodus der übergeordneten Sitzung oder in seiner Definition permissionMode, und die Subagent-Vererbungsregeln entscheiden, welcher verwendet wird.AskUserQuestion
Tool-Name:AskUserQuestion
Bash
Tool-Name:Bash
Monitor
Tool-Name:Monitor
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. Die ws-Quelle erfordert Claude Code v2.1.195 oder später.
timeout_ms ist die Frist der Überwachung in Millisekunden. Sie beträgt standardmäßig 300000 und akzeptiert Werte bis zu 3600000. Die effektive Frist beträgt höchstens 1800000, was 30 Minuten sind, daher wird ein größerer akzeptierter Wert auf diesen gekürzt. Bei Ablauf der Frist endet die Überwachung und Claude erhält eine Benachrichtigung, damit es eine neue Überwachung starten kann, wenn es noch eine benötigt.
Der exportierte Typ markiert timeout_ms als erforderlich, da das Schema den Standard ausfüllt; ein Aufruf, der ihn auslässt, validiert.
Wenn Monitor einen Befehl ausführt, folgt es den gleichen Berechtigungsregeln wie Bash; eine WebSocket-Überwachung fordert separat zur Genehmigung auf. Siehe die Monitor-Tool-Referenz für Verhalten und Anbieter-Verfügbarkeit.
TaskOutput
Entfernt in Claude Code v2.1.277, zusammen mit seinemTaskOutputInput-Typ. Zuvor wurde die Ausgabe aus einer laufenden oder abgeschlossenen Hintergrundaufgabe abgerufen; Claude liest die Ausgabedatei einer Hintergrundaufgabe stattdessen mit Read.
Ein disallowedTools-Eintrag oder eine Deny-Regel, die immer noch TaskOutput nennt, wird ohne Warnung ignoriert.
Edit
Tool-Name:Edit
Read
Tool-Name:Read
- Verwenden Sie
pagesfür PDF-Seitenbereiche (z. B."1-5"). allow_largeermöglicht es Claude, eine Textdatei über die üblichen Größenbeschränkungen hinaus zu lesen, wenn das Kontextfenster der Sitzung Platz bietet. Es erfordert Agent SDK v0.3.296 oder später, das Claude Code v2.1.296 enthält.
tool_result-Inhalt des Read-Aufrufs. Ein Read, das die pdf-Ausgabe zurückgibt, enthält einen Zusammenfassungs-text-Block gefolgt von einem document-Block. Ein Read, das die parts-Ausgabe zurückgibt, enthält den Zusammenfassungs-text-Block gefolgt von einem Block pro extrahierter Seite: einen image-Block oder einen text-Block, der die Seite benennt, wenn Claude Code sie nicht als Bild rendern konnte. Vor Agent SDK v0.3.242 lieferte Claude Code den Inhalt der Datei als separate user-Nachricht nach dem Tool-Ergebnis.
Write
Tool-Name:Write
Glob
Tool-Name:Glob
Grep
Tool-Name:Grep
TaskStop
Tool-Name:TaskStop
task_id auch einen Agent-Team-Teamkollegen oder einen benannten Hintergrund-Agenten nach Agent-ID oder Name.
NotebookEdit
Tool-Name:NotebookEdit
WebFetch
Tool-Name:WebFetch
offset ist die Anzahl der Zeichen, die ab dem Anfang der Seite übersprungen werden. Claude setzt es, um eine lange Seite weiterzulesen. Das Feld erfordert Agent SDK v0.3.290 oder später.
WebSearch
Tool-Name:WebSearch
Workflow
Tool-Name:Workflow
Workflow-Tool ist in Agent SDK v0.3.149 und später verfügbar. Mindestens eines von script, name oder scriptPath ist erforderlich.
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
TaskUpdate
Tool-Name:TaskUpdate
status auf "deleted", um sie zu entfernen.
TaskGet
Tool-Name:TaskGet
null, wenn die ID nicht gefunden wird.
TaskList
Tool-Name:TaskList
ExitPlanMode
Tool-Name:ExitPlanMode
allowedPrompts ist veraltet und wird ignoriert; Claude Code akzeptiert es immer noch, damit bestehende Aufrufer und Transkripte validieren. Vor v2.1.205 forderte es Prompt-basierte Bash-Berechtigungen zur Implementierung des Plans an.
ListMcpResources
Tool-Name:ListMcpResourcesTool
ReadMcpResource
Tool-Name:ReadMcpResourceTool
EnterWorktree
Tool-Name:EnterWorktree
path, um stattdessen in einen bestehenden Worktree zu wechseln, anstatt einen neuen zu erstellen. Beim ersten Eintritt muss das Ziel ein registrierter Worktree des aktuellen Repositorys oder in einem Multi-Repo-Workspace eines darin verschachtelten Repositorys sein; von innerhalb einer Worktree-Sitzung muss es unter .claude/worktrees/ des Repositorys der Sitzung sein. name und path schließen sich gegenseitig aus.
ExitWorktree
Tool-Name:ExitWorktree
keep-Aktion lässt den Worktree und Branch auf der Festplatte, während remove beide löscht. discard_changes muss true sein, wenn ein Worktree mit nicht committeten Dateien oder nicht gemergten Commits entfernt wird.
EnterPlanMode
Tool-Name:EnterPlanMode
CronCreate
Tool-Name:CronCreate
recurring auf false, um einmal beim nächsten Match zu feuern. Jobs sind standardmäßig sitzungsbegrenzt, und das Fortsetzen mit --resume oder --continue stellt Jobs wieder her, die nicht abgelaufen sind. Siehe Geplante Aufgaben.
Das Setzen von durable auf true fordert Persistenz zu .claude/scheduled_tasks.json an, damit der Job Neustarts überlebt. Dauerhafte Planung ist nicht in jeder Sitzung verfügbar: wenn sie nicht verfügbar ist, akzeptiert Claude Code durable: true, erstellt aber den Job nur sitzungsbegrenzt. Lesen Sie das durable-Feld der Ausgabe, um zu sehen, ob der Job persistiert wurde.
CronDelete
Tool-Name:CronDelete
CronCreate zurückgegeben wurde.
CronList
Tool-Name:CronList
.claude/scheduled_tasks.json und sitzungsbegrenzte Jobs aus der aktuellen Sitzung.
ScheduleWakeup
Tool-Name:ScheduleWakeup
/loop-Befehl. Die Laufzeit begrenzt delaySeconds auf zwischen 60 und 3600 Sekunden. Die Felder delaySeconds, reason, prompt und noop sind erforderlich, es sei denn, stop ist true. noop: true meldet ein Wake-up, bei dem sich nichts geändert hat. Das Setzen von stop: true bricht das ausstehende Wake-up ab und beendet die selbstgesteuerte /loop. Das Feld stop erfordert Claude Code v2.1.202 oder später. Siehe die ScheduleWakeup-Zeile in der Tools-Referenz.
RemoteTrigger
Tool-Name:RemoteTrigger
/schedule-Befehl. trigger_id ist erforderlich für die Aktionen get, update, run und list_runs. body ist erforderlich für create, update und create_webhook_trigger und optional für run.
create_webhook_trigger fügt eine Ereignisquelle an eine bestehende Routine an, wie z. B. ein GitHub-Ereignis, das sie auslöst. Der body benennt die Quelle, die Ereignisse und die Routine, die ausgelöst werden soll. Erfordert Claude Code v2.1.225 oder später.
list_runs listet die letzten Läufe einer Routine auf, und get_run_log liest das Log eines Laufs. session_id benennt den zu lesenden Lauf aus einem list_runs-Ergebnis, und cursor blättert durch die Ergebnisse beider Aktionen. Beide Aktionen erfordern Claude Code v2.1.227 oder später.
Dieses Tool ist nur verfügbar, wenn die Sitzung mit einem claude.ai-Konto auf einem Plan mit aktivierten Routinen authentifiziert ist, und fehlt, wenn die Richtlinie Ihrer Organisation Cloud-Sitzungen deaktiviert. In Claude Code v2.1.227 oder später fehlt das Tool auch, wenn ein Besitzer Routinen für die Organisation deaktiviert hat. Vor v2.1.227 zeigte eine Sitzung mit nur dem deaktivierten Routinen-Toggle immer noch das Tool an, und der Server verweigerte seine Aufrufe.
PushNotification
Tool-Name:PushNotification
message unter 200 Zeichen, da mobile Betriebssysteme längeren Text abschneiden. Siehe die PushNotification-Zeile in der Tools-Referenz für Anbieter-Verfügbarkeit; Push-Zustellung läuft durch von Anthropic gehostete Infrastruktur, die nicht von Amazon Bedrock, Claude Platform on AWS, Google Cloud’s Agent Platform oder Microsoft Foundry zugänglich ist.
REPL
Entfernt in v2.1.275. Bis v2.1.274 konnte ein experimentellesREPL-Tool mit CLAUDE_CODE_REPL=1 in der env-Option aktiviert werden.
ReportFindings
Tool-Name:ReportFindings
level ist optional und enthält die Effort-Stufe, die Claude für das Review meldet. Claude Code vergleicht sie nicht mit der Stufe, auf der das Review ausgeführt wurde, daher können die beiden voneinander abweichen.
Jede Erkenntnis enthält diese Felder:
file: Repo-relativer Pfad, in dem sich die Erkenntnis befindet. Das optionalelineist die 1-indizierte Zeile, zu der es verankert ist.summary: Ein-Satz-Aussage des Defekts.failure_scenariobeschreibt die konkreten Eingaben und den Zustand, die zu der falschen Ausgabe oder dem Absturz führen.short_summary: optionale komprimierte Bezeichnung von höchstens 60 Zeichen für kompakte Anzeige. Erfordert Claude Code v2.1.212 oder später.category: optionaler kurzer Kebab-Case-Slug des Erkennungstyps, wiecorrectnessodertest-coverage. Erfordert Claude Code v2.1.199 oder später.verdict: wird gesetzt, wenn ein Verify-Pass ausgeführt wurde; fehlt bei Inline-Only-Überprüfungen.outcome: wird nur gesetzt, wenn nach Anwendung von Fixes erneut gemeldet wird.
Artifact
Tool-Name:Artifact
.html- oder .md-Datei als gehostete Artifact-Seite oder listet die veröffentlichten Artifacts des Benutzers auf. Lassen Sie action weg oder übergeben Sie "publish", um file_path zu veröffentlichen, das für die Publish-Aktion erforderlich ist. Jedes Feld unten gilt für eine Veröffentlichung:
icon: ein kurzes generisches Wort für das Browser-Tab-Symbol des Artifacts, wiechartodermap. Claude fügt es bei einer ersten Veröffentlichung ein und lässt es bei einer Aktualisierung weg, was das gespeicherte Symbol des Artifacts beibehält.favicon: veraltet, und Claude lässt es weg.title: benennt die veröffentlichte Seite im Browser-Tab und in der Galerie, wenn die HTML-Datei kein<title>-Tag hat.url: zielt auf ein bestehendes Artifact ab, um es an Ort und Stelle zu aktualisieren, anstatt ein neues zu erstellen.
force ist ein letzter Ausweg zum Überschreiben, der eine neuere Version verwirft, die eine andere Sitzung veröffentlicht hat. Bei einem Konflikt gibt die fehlgeschlagene Veröffentlichung den neueren Inhalt zurück; Claude führt seine Änderungen mit diesem Inhalt zusammen oder liest das Artifact erneut und veröffentlicht erneut. Übergeben Sie force nur, wenn der Benutzer explizit darum bittet, diese Version zu verwerfen.
Übergeben Sie "list", um die veröffentlichten Artifacts des Benutzers aufzuzählen; nur limit und scope dürfen es begleiten. scope ist standardmäßig "mine", das Artifacts auflistet, die der Benutzer besitzt; "shared" listet Artifacts auf, die andere Personen mit dem Benutzer geteilt haben, und "all" listet beide auf.
limit legt fest, wie viele Artifacts eine Auflistung höchstens zurückgibt, von 1 bis 200. Ein limit über 50 erfordert Agent SDK v0.3.292 oder später. Ohne limit gibt eine Auflistung bis zu 25 zurück.
capabilities: die Laufzeit-Funktionen, die die veröffentlichte Seite verwendet, nach Funktionsnamen indiziert, wie die Konnektoren, die die Seite aufrufen kann. Der Artifact-Service validiert die Deklaration und lehnt eine Veröffentlichung ab, die eine Funktion benennt, die das Konto nicht verwenden kann, oder eine ungültige Konfiguration gibt. Übergeben Sie{}, um eine gespeicherte Deklaration zu löschen, und lassen Sie das Feld bei einer erneuten Bereitstellung weg, um es zu behalten. Erfordert Agent SDK v0.3.235 oder später.contract: die Laufzeit-Version, gegen die die veröffentlichte Seite ausgeführt wird. Lassen Sie es weg, um die aktuelle Version des Artifacts zu behalten, übergeben Sie"latest", um zu aktualisieren, oder übergeben Sie eine spezifische Version, um zu fixieren oder zurückzurollen. Erfordert Agent SDK v0.3.235 oder später.
Projects
Tool-Name:Projects
method:
project_info: gibt Projekt-Metadaten und die Dokumentenliste zurück.project_read: liest ein Dokument nachpath.project_search: fragt die Wissensdatenbank des Projekts mitqueryab.nbegrenzt die Treffer und ist standardmäßig5.project_write: erstellt oder ersetzt ein Dokument unterpathaus genau einem voncontent, das Inline-Text enthält, oderlocal_path, das eine Datei im Arbeitsverzeichnis benennt.present_to_user: truemarkiert das geschriebene Dokument als das Ergebnis, das der Benutzer sehen muss.project_delete: löscht ein Dokument nachpath.
ReadMcpResourceDir
Tool-Name:ReadMcpResourceDirTool
resources-Liste zurück und das error-Feld meldet, dass Verzeichnisauflistung nicht aktiviert ist.
RefreshMcpTools
Tool-Name:RefreshMcpTools
CLAUDE_CODE_ENABLE_REFRESH_MCP_TOOLS=1 in der env-Option setzen, und nur in Sitzungen mit mindestens einem MCP-Server. Erfordert Claude Code v2.1.211 oder später.
ShowOnboardingRolePicker
Tool-Name:ShowOnboardingRolePicker
McpInput
Tool-Name: dynamische MCP-Tool-Namen der Formmcp__<server>__<tool>
Tool-Ausgabetypen
Dokumentation von Ausgabeschemas für integrierte Claude Code-Tools. Diese Typen werden aus@anthropic-ai/claude-agent-sdk/sdk-tools exportiert und stellen die tatsächlichen Antwortdaten dar, die von jedem Tool zurückgegeben werden.
ToolOutputSchemas
Union von Tool-Ausgabetypen, die aus @anthropic-ai/claude-agent-sdk/sdk-tools exportiert werden; Mitglieder umfassen:
Agent
Tool-Name:Agent. Der frühere Name Task wird immer noch als Alias akzeptiert, und das tools-Array in der SDKSystemMessage-Initialisierungsnachricht listet dieses Tool derzeit als Task für Rückwärtskompatibilität auf.
status-Feld: "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.
Bei 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. Bei async_launched benennt es das Modell, das verwendet wird, wenn die Aufgabe in den Hintergrund wechselt.
modelsUsed listet die Modelle auf, die der Subagent verwendet hat, in der Reihenfolge. Das Feld ist nur vorhanden, wenn ein Mid-Run-Wechsel stattgefunden hat, und ein Modell erscheint erneut, wenn der Lauf zu ihm zurückgewechselt hat. Bei async_launched deckt die Liste die Modelle ab, die vor dem Hintergrund-Wechsel verwendet wurden. Sowohl modelsUsed als auch das Hintergrund-Verhalten von resolvedModel erfordern Claude Code v2.1.212 oder später.
Wenn Claude Code den isolierten Worktree des Subagenten beibehalten hat, ist worktreePath im completed-Ergebnis der Ort, wo er zu finden ist. worktreeBranch ist sein Branch, vorhanden, wenn Claude Code den Worktree mit Git erstellt hat.
Claude Code füllt usage und totalTokens aus der letzten API-Anfrage des Subagenten, nicht aus dem gesamten Lauf, daher ist usage.service_tier die Service-Tier-Zeichenkette, die die API bei dieser Anfrage gemeldet hat. Wenn vorhanden, ist usage.output_tokens_details.thinking_tokens die Anzahl der Ausgabe-Token dieser Anfrage, die Thinking-Token waren. Das Feld output_tokens_details erfordert TypeScript SDK v0.3.228 oder später, das Claude Code v2.1.228 bündelt. Das Feld fallback_credit erfordert TypeScript SDK v0.3.285 oder später, das Claude Code v2.1.285 bündelt.
usage.output_tokens_details entspricht Usage.output_tokens_details in der Bedeutung, begrenzt auf diese letzte Anfrage, aber jede Ebene davon ist optional hier. Schützen Sie sowohl das Objekt als auch das Feld, zum Beispiel usage.output_tokens_details?.thinking_tokens ?? 0, anstatt es direkt zu lesen.
Vor v2.1.207 war der veröffentlichte Typ enger. Er ließ worktreePath, worktreeBranch, citations, toolStats.frameCount und die Nutzungsfelder inference_geo, speed und iterations weg, und er typisierte service_tier als "standard" | "priority" | "batch". Felder, die der Typ als optional markiert, können bei Ergebnissen fehlen, die von früheren Versionen aufgezeichnet wurden.
AskUserQuestion
Tool-Name:AskUserQuestion
response wird gesetzt, wenn der Benutzer eine freie Antwort eingegeben hat, anstatt die strukturierten Fragen zu beantworten; wenn vorhanden, erhält Claude „Der Benutzer hat geantwortet: …“ anstelle der Pro-Frage-Antworteliste.
Bash
Tool-Name:Bash
stdout, stderr und backgroundTaskId enthalten:
timedOutAfterMs ist das Timeout in Millisekunden, gesetzt, wenn der Befehl sein Timeout erreicht hat und in den Hintergrund wechselt, anstatt dort explizit zu starten. backgroundCwdHint wird gesetzt, wenn der Hintergrund-Befehl ein Verzeichniswechsel-Builtin wie cd, pushd, popd oder chdir enthielt, und vermerkt, dass sich das Sitzungsarbeitsverzeichnis nicht geändert hat. Beide Felder erfordern Claude Code v2.1.210 oder später.
Wenn ein Subagent, der im Vordergrund läuft, einen Hintergrund-Befehl besitzt, endet der Befehl, wenn dieser Subagent seinen Lauf beendet. Claude Code setzt backgroundEndsWithFinalResponse auf true bei solchen Befehlen und lässt das Feld weg, wenn der Befehl den Turn überlebt, wie Befehle, die von der Hauptkonversation oder von Hintergrund-Subagenten gestartet werden. Das Feld erfordert Claude Code v2.1.227 oder später.
Claude Code setzt gitOperation.commit.branch auf den Branch, der in Gits Commit-Zusammenfassungszeile benannt ist, und lässt ihn für einen Commit auf einem detached HEAD weg. Das Feld erfordert Agent SDK v0.3.227 oder später. Claude Code meldet einen gh pr reopen-Befehl als die reopened-PR-Aktion, was Agent SDK v0.3.234 oder später erfordert.
Monitor
Tool-Name:Monitor
TaskStop, um die Überwachung früh zu stornieren.
Edit
Tool-Name:Edit
Read
Tool-Name:Read
type-Feld.
Write
Tool-Name:Write
originalFile und structuredPatch enthalten, hängt vom Schreib-Vorgang ab:
- Für eine neu erstellte Datei ist
originalFilenull undstructuredPatchist leer - Bei einem Überschreiben enthält
originalFileden vorherigen Inhalt, außer wenn dieser Inhalt größer als etwa 10 MB ist: Claude Code überspringt dann den Diff und gibtoriginalFilenull undstructuredPatchleer zurück structuredPatchist auch leer, wenn der Schreib-Vorgang nichts geändert hat oder das Diff-Timeout abgelaufen ist
Glob
Tool-Name:Glob
totalMatches und countIsComplete erfordern Claude Code v2.1.191 oder später. totalMatches meldet die Anzahl der übereinstimmenden Dateien vor der Kürzung. Wenn countIsComplete false ist, ist totalMatches eine untere Grenze, da die zugrunde liegende Suche ihre eigene Ausgabe gekürzt hat.
Grep
Tool-Name:Grep
mode: Dateiliste, Inhalt mit Übereinstimmungen oder Übereinstimmungszahlen. Im count-Modus sind numFiles und numMatches Gesamtwerte über den vollständigen Ergebnissatz, nicht den paginierten Slice. Vor v2.1.208 kürzten ein head_limit oder offset, das die aufgelisteten Einträge kürzten, auch diese Gesamtwerte.
totalFiles erfordert Claude Code v2.1.208 oder später und meldet die Gesamtzahl der Ergebnisse vor head_limit und offset-Paginierung im files_with_matches-Modus. totalLines erfordert Claude Code v2.1.210 oder später und meldet die Gesamtzahl der Zeilen vor der Paginierung im content-Modus.
TaskStop
Tool-Name:TaskStop
NotebookEdit
Tool-Name:NotebookEdit
WebFetch
Tool-Name:WebFetch
artifactRead ist Claude Codes eigener Datensatz eines Artefakt-Lesevorgangs, vorhanden nur, wenn Claude ein Artefakt abgerufen hat, das die Sitzung veröffentlichen kann. Claude Code liest es zurück, wenn eine Sitzung fortgesetzt wird, damit eine spätere Veröffentlichung auf der richtigen Version aufbaut; Ihr Code muss nicht darauf reagieren. slug benennt das Artefakt, ver ist die Version, die der Lesevorgang aufgezeichnet hat, und ist abwesend, wenn er keine aufgezeichnet hat, und seeded: false markiert einen Lesevorgang, dessen vollständige Quelle Claude nicht erreichte. Das Feld seeded erfordert Agent SDK v0.3.239 oder später.
WebSearch
Tool-Name:WebSearch
Workflow
Tool-Name:Workflow
error, bevor Sie den Lauf als gestartet behandeln: Ein Skript, das seine Syntaxprüfung nicht besteht, gibt status: "async_launched" mit gesetztem error zurück und wird nie ausgeführt.
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, um sich anzumelden.TaskCreate
Tool-Name:TaskCreate
TaskUpdate
Tool-Name:TaskUpdate
TaskGet
Tool-Name:TaskGet
null, wenn die ID nicht gefunden wird.
TaskList
Tool-Name:TaskList
ExitPlanMode
Tool-Name:ExitPlanMode
ListMcpResources
Tool-Name:ListMcpResourcesTool
ReadMcpResource
Tool-Name:ReadMcpResourceTool
EnterWorktree
Tool-Name:EnterWorktree
ExitWorktree
Tool-Name:ExitWorktree
EnterPlanMode
Tool-Name:EnterPlanMode
CronCreate
Tool-Name:CronCreate
CronDelete
Tool-Name:CronDelete
CronList
Tool-Name:CronList
.claude/scheduled_tasks.json und Sitzungs-Only-Jobs aus der aktuellen Sitzung. Ein Sitzungs-Only-Job enthält durable: false; Jobs, die von der Festplatte gelesen werden, lassen das Feld weg.
ScheduleWakeup
Tool-Name:ScheduleWakeup
stopped ist true, wenn der Aufruf die Schleife mit stop: true beendet hat. Es erfordert Claude Code v2.1.202 oder später. Das Feld cancelledWakeups zählt, wie viele ausstehende Aufweckungen ein stop: true-Aufruf storniert hat. Ein Wert von 0 bedeutet, dass nichts ausstehend war, und ein wiederkehrendes /loop-Cron wird nicht durch stop: true storniert. Es erfordert Claude Code v2.1.206 oder später.
RemoteTrigger
Tool-Name:RemoteTrigger
PushNotification
Tool-Name:PushNotification
ReportFindings
Tool-Name:ReportFindings
level-Wert, den Claude übergeben hat, und die Erkenntnisse zurück, die für den Ergebnis-Text wiedergegeben werden. Erfordert Claude Code v2.1.196 oder später. Das wiedergegebene Feld short_summary erfordert Claude Code v2.1.212 oder später.
Artifact
Tool-Name:Artifact
url der veröffentlichten Seite und den lokalen path zurück, der für die Veröffentlichungsaktion veröffentlicht wurde, mit updated auf true gesetzt, wenn die Veröffentlichung ein vorhandenes Artefakt erneut bereitgestellt hat, und warnings mit allen Veröffentlichungs-Zeit-Hinweisen. Die Listenaktion gibt stattdessen die artifacts-Zeilen zurück, mit truncated gesetzt, wenn mehr Artefakte vorhanden sind als das angeforderte Limit. Bei Auflistungen, deren Umfang nicht "mine" ist, enthält jede Zeile rel, das markiert, ob der Benutzer das Artefakt besitzt oder es mit ihm geteilt wurde, und die Ausgabe des scope zeichnet auf, welcher Nicht-Standard-Umfang die Auflistung erzeugt hat; beide fehlen bei Standard-Auflistungen.
Ein Listenergebnis meldet außerdem total, die Anzahl der Artefakte, die dem aufgelisteten Umfang entsprechen, einschließlich derer jenseits von limit. Wenn total_at_least gesetzt ist, ist diese Zahl eine untere Grenze, und es können weitere Artefakte existieren. Beide Felder erfordern Agent SDK v0.3.292 oder später.
Projects
Tool-Name:Projects
method-Feld, spiegelt die Eingabe wider. project_read gibt kleine Text-Dokumente inline in content zurück und schreibt größere Dokumente stattdessen in einen local_file-Pfad; project_search gibt RAG-hits mit rag: true zurück, wenn der Projektindex verfügbar ist, und fällt ansonsten auf eine docs-Pfadliste zurück.
ReadMcpResourceDir
Tool-Name:ReadMcpResourceDirTool
"inode/directory"; error enthält eine menschenlesbare Nachricht, wenn der Server das Verzeichnis nicht auflisten konnte.
RefreshMcpTools
Tool-Name:RefreshMcpTools
refreshed bedeutet, dass die neu abgefragte Tool-Liste angewendet wurde, error bedeutet, dass die Neuabfrage fehlgeschlagen ist und die vorherige Tool-Liste beibehalten wurde, und not_connected bedeutet, dass der Server keine Live-Verbindung zum Abfragen hat.
ShowOnboardingRolePicker
Tool-Name:ShowOnboardingRolePicker
role, wenn er einen Rollen-Chip ausgewählt oder eingegeben hat, und dismissed: true, wenn er die Auswahl geschlossen hat. Ein leeres Objekt bedeutet, dass der Benutzer den Aufruf genehmigt hat, ohne eine Rolle auszuwählen.
McpOutput
Tool-Name: dynamische MCP-Tool-Namen der Formmcp__<server>__<tool>
structuredContent oder Ressourcenlinks enthält, siehe tool_use_result, das diesen Wert in seinem content-Element enthält. Zur Laufzeit kann der Wert auch undefined sein, obwohl der exportierte Typ dies nicht modelliert.
Berechtigungstypen
PermissionUpdate
Operationen zum Aktualisieren von Berechtigungen.
PermissionBehavior
PermissionUpdateDestination
PermissionRuleValue
Andere Typen
ApiKeySource
Woher der API-Schlüssel für die Anfragen der Sitzung kam, gemeldet als apiKeySource in der SDKSystemMessage-Initialisierungsnachricht.
Agent SDK v0.3.234 und später listen diese vier Werte im Typ auf. Der Typ behält auch
user, project, org, temporary und oauth, damit älterer Code noch kompiliert wird, und Claude Code meldet sie nicht.
SdkBeta
Verfügbare Beta-Funktionen, die über die betas-Option aktiviert werden können. Siehe Beta-Header für weitere Informationen.
SlashCommand
Informationen über einen verfügbaren Befehl.
builtin ist true in einer Zeile, wenn der Befehl Claude Code’s eigener ist und das Eingeben von /name ihn ausführt. Er fehlt für einen Befehl, der von einem Benutzer, Projekt, Plugin oder MCP-Server definiert wird, und für einen gebündelten Befehl, den einer dieser nach Name ersetzt. Erfordert Agent SDK v0.3.277 oder später.
ModelInfo
Informationen über ein verfügbares Modell.
AgentInfo
Informationen über einen verfügbaren Subagenten, der über das Agent-Tool aufgerufen werden kann.
McpServerProvenance
Der MCP-Server, der ein mcp__*-Tool bereitstellt, und woher die Definition dieses Servers kam. Die PreToolUse-, PostToolUse-, PostToolUseFailure-, PermissionRequest- und PermissionDenied-Hook-Eingaben tragen ihn als mcp_server, und die CanUseTool-Optionen tragen ihn als mcpServer. Beide lassen ihn für Tools weg, die nicht von einem MCP-Server stammen.
source nimmt einen der folgenden Werte an. Die Menge ist offen, daher behandeln Sie einen Wert, den Sie nicht erkennen, als konfigurierte Quelle, niemals als sdk:
sdk: ein In-Process-Server, den Ihre Anwendung registriert hat. Nur die SDK-Host-Anwendung kann einen registrieren, daher meldet ein konfigurierter Server niemalssdk, unabhängig von seinem Namen.plugin: ein Server, den ein Plugin bereitstellt. Seinnameist die scopedplugin:<plugin-name>:<server-name>-Form, die unter Plugin-bereitgestellte MCP-Server beschrieben wird.- Ein Konfigurations-Geltungsbereich:
user,project,local,dynamic,managed,enterprise,claudeaioderagent. Ein.mcp.json-Server meldetproject, und Geltungsbereiche der MCP-Installation definiertlocal,projectunduser. Server, die Ihre Anwendung in dermcpServers-Option übergibt, außer In-Process-SDK-Servern, meldendynamic.
source, nicht auf name oder dem mcp__<server>__-Tool-Namen-Präfix. Für jede Quelle außer sdk ist name nicht vertrauenswürdiger Text: maskieren Sie ihn vor der Anzeige.
McpServerProvenance und die Felder, die ihn tragen, erfordern Agent SDK v0.3.274 oder später.
McpServerStatus
Status eines verbundenen MCP-Servers.
source sagt, woher die Definition des Servers kam, mit den gleichen Werten und Vertrauensregel wie McpServerProvenance’s source. Das Feld erfordert Agent SDK v0.3.274 oder später und fehlt in früheren Versionen.
_meta auf einem tools-Eintrag trägt die MCP-Apps-Mitglieder des _meta dieses Tools, sodass Ihre Anwendung die ui://-Ressource finden kann, um sie mit readMcpResource() zu rendern. Claude Code leitet das ui-Objekt und die veraltete flache ui/resourceUri-Zeichenkette durch und behält jeden anderen Schlüssel zurück. Innerhalb von ui ist resourceUri eine ui://-Zeichenkette und visibility ein Array von "model" und "app", wenn der Server sie setzt, und jedes andere Mitglied wird unverändert durchgeleitet. Claude Code verwirft jeden Schlüssel, wenn der Wert fehlerhaft ist, und lässt _meta von einem Tool weg, das weder deklariert. Das Feld ist nur vorhanden, wenn die capabilities der Init-Nachricht mcp_tool_ui_meta_v1 enthalten, und erfordert TypeScript Agent SDK v0.3.280 oder später.
McpServerStatusConfig
Die Konfiguration eines MCP-Servers, wie von mcpServerStatus() gemeldet. Dies ist die Union aller MCP-Server-Transporttypen.
McpServerConfig für Details zu jedem Transporttyp.
AccountInfo
Kontoinformationen für den authentifizierten Benutzer.
ModelUsage
Pro-Modell-Nutzungsstatistiken, die in Ergebnis-Nachrichten zurückgegeben werden. Der costUSD-Wert ist eine clientseitige Schätzung. Siehe Kosten und Nutzung verfolgen für Abrechnungsvorbehalte.
thinkingTokens zählt die Thinking-Token, die dieses Modell generiert hat. outputTokens enthält sie bereits, daher addieren Sie die beiden nicht zusammen. Das Feld fehlt, bis ein Turn auf einer Claude-Code-Version läuft, die es aufzeichnet, daher meldet eine fortgesetzte Sitzung, die auf einer früheren Version begann, eine teilweise Anzahl. thinkingTokens erfordert Agent SDK v0.3.257 oder später.
Die Felder canonicalModel und provider erfordern Claude Code v2.1.218 oder später. canonicalModel ist die kanonische Modell-ID, die die Preissuche verwendet; sie kann sich von der rohen Modell-Zeichenkette unterscheiden, die den Eintrag indiziert, z. B. wenn diese Zeichenkette eine anbieter-spezifische ID oder ein Alias ist.
provider benennt das API-Backend, das das Modell bereitgestellt hat, z. B. firstParty, bedrock, vertex, foundry, anthropicAws, mantle oder gateway.
costBasis benennt die Preistabelle, die die letzte Anfrage des Modells bepreist hat: list für Listenpreis, managed für eine modelPricing-Tabelle, oder unknown, wenn keine zur Modell-ID passte. Das Feld erfordert Claude Code v2.1.246 oder später.
ConfigScope
NonNullableUsage
Eine Version von Usage, in der alle nullable Felder nicht nullable gemacht werden, außer fallback_credit, das weiterhin null sein kann.
Usage
Token-Nutzungsstatistiken. Dies ist der BetaUsage-Typ aus @anthropic-ai/sdk.
BetaServerToolUsage, BetaIterationsUsage, BetaOutputTokensDetails und BetaFallbackCreditUsage sind in @anthropic-ai/sdk definiert.
output_tokens_details unterteilt die abgerechnete Ausgabe nach Kategorie. Sie trägt derzeit ein Feld, thinking_tokens: number, das die Ausgabe-Token zählt, die das Modell als interne Überlegung generiert hat, einschließlich der Trennzeichen der Thinking-Blöcke. Das Feld output_tokens_details erfordert TypeScript SDK v0.3.228 oder später, das Claude Code v2.1.228 bündelt.
- Abrechnung: Lesen Sie die Aufschlüsselung zur Beobachtung, nicht zur Abrechnung.
output_tokensbleibt die autoritative Summe, undoutput_tokens - thinking_tokensapproximiert die Nicht-Reasoning-Ausgabe. - Was die Anzahl abdeckt: das rohe Reasoning, das das Modell produziert hat, das länger sein kann als der Thinking-Text, der im Response-Body zurückgegeben wird. Die API berechnet es durch erneutes Tokenisieren dieses rohen Textes, daher kann es sich um einige Token von der genauen Generierungsanzahl des Modells unterscheiden.
- Streaming: Bei gestreamten Assistenten-Nachrichten ist diese Aufschlüsselung wie
output_tokenseinmessage_start-Platzhalter und trägt keine echte Anzahl, daher lesen Sie sie aus der Ergebnis-Nachrichtusage, wie Ausgabe-Token aus der Ergebnis-Nachricht lesen beschreibt. In der Ergebnis-Nachricht liestthinking_tokens0, wenn das Modell oder der Provider keine Aufschlüsselung meldet. null-Fälle:output_tokens_detailsselbst istnullbei Assistenten-Nachrichten, die Claude Code synthetisiert, z. B. API-Fehler-Nachrichten.
Usage das Feld fallback_credit enthält, hängt von Ihrem installierten @anthropic-ai/sdk ab, das es in 0.115.0 hinzugefügt hat.
CallToolResult
MCP-Tool-Ergebnistyp (aus @modelcontextprotocol/sdk/types.js). structuredContent ist ein JSON-Objekt, das zusammen mit content zurückgegeben werden kann, einschließlich Bildblöcke. Siehe Strukturierte Daten zurückgeben.
SDKMcpResourceLink
Eine Datei, die ein MCP-Tool per Referenz zurückgegeben hat. Claude Code erstellt jeden Eintrag aus einem resource_link-Block im Ergebnis des Tools und liefert die Liste als resourceLinks auf SDKUserMessage.tool_use_result oder als resource_links auf SDKTaskNotificationMessage, wenn der Aufruf im Hintergrund beendet wurde. Erfordert Agent SDK v0.3.257 oder später.
uri oder name keine Zeichenkette ist, und lässt ein optionales Feld weg, dessen Wert nicht vom aufgelisteten Typ ist.
ThinkingConfig
Steuert das Thinking-/Reasoning-Verhalten von Claude. Hat Vorrang vor dem veralteten maxThinkingTokens.
display-Feld 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 thinking-Blöcken zu erhalten. Claude Code übergibt Ihren display-Wert nicht an einige Anbieter, etwa Amazon Bedrock und Google Clouds Agent Platform. Bei diesen Anbietern geben Opus 4.7 und später leere thinking-Blöcke zurück, auch wenn Sie display auf "summarized" setzen.
SpawnedProcess
Schnittstelle für benutzerdefiniertes Process-Spawning (verwendet mit spawnClaudeCodeProcess-Option). ChildProcess erfüllt bereits diese Schnittstelle.
SpawnOptions
Optionen, die an die benutzerdefinierte Spawn-Funktion übergeben werden.
Das
signal-Feld teilt Ihrer Spawn-Funktion mit, wann der Prozess abgebaut werden soll. Übergeben Sie es als signal-Option an Node’s spawn(), oder übergeben Sie es an Ihren VM- oder Container-Abbau-Handler.Dieses Signal wird nicht in dem Moment ausgelöst, in dem Options.abortController abbricht. Das SDK schließt zunächst die Standardeingabe des Prozesses und wartet etwa zwei Sekunden, damit die CLI sauber herunterfahren kann, dann bricht dieses Signal ab. Um in dem Moment zu reagieren, in dem der Aufrufer abbricht, hören Sie stattdessen auf Ihrem eigenen Options.abortController.signal, auf das Ihre Spawn-Funktion aus ihrem umschließenden Bereich verweisen kann.McpSetServersResult
Ergebnis einer setMcpServers()-Operation.
setMcpServers() aufrufen, wendet Claude Code diese Regeln an:
- Server, die der Aufruf nicht benennt: Außerhalb einer Cloud-Sitzung trennt Claude Code die Server, die ein früherer
setMcpServers()-Aufruf hinzugefügt hat, sowie die In-Process-SDK-Server und listet sie inremovedauf. Andere Server laufen weiter und werden nicht inremovedaufgeführt, darunter die Stdio-, HTTP- und SSE-Server aus dermcpServers-Option, Server aus Einstellungsdateien und von Plugins bereitgestellte Server. - Server, die der Aufruf benennt: Claude Code ersetzt einen Stdio-, HTTP- oder SSE-Server, den ein früherer
setMcpServers()-Aufruf hinzugefügt hat, nur, wenn sich seine Konfiguration von der unterscheidet, die Sie übergeben haben. Ein In-Process-SDK-Server, der bereits unter diesem Namen registriert ist, bleibt unverändert; um einen auszutauschen, lassen Sie ihn in einem Aufruf weg und fügen Sie ihn im nächsten hinzu. - Integrierte Server, die die CLI beim Start gestartet hat: Wenn der Aufruf einen benennt, verwirft Claude Code diesen Eintrag und meldet ihn in
errors.
added listet die Server auf, die Claude Code hinzugefügt oder ersetzt hat, unabhängig davon, ob sie verbunden sind. Ein Server, der keine Verbindung hergestellt hat, erscheint sowohl in added als auch in errors, mit dem Fehlertext unter errors und einer failed-Zeile in mcpServerStatus(). Vor Claude Code v2.1.257 wurde ein Server, dessen Verbindungsversuch einen Fehler auslöste, nur unter errors gemeldet.
RewindFilesResult
Ergebnis einer rewindFiles()-Operation.
skippedLinks zählt die verfolgten Pfade, die das Rewind aus Linksicherheitsgründen nicht wiederherstellen oder löschen konnte: ein Symlink, Hard Link oder andere Nicht-Regulär-Datei am verfolgten Pfad, ein übergeordnetes Verzeichnis, das nicht mehr zu dem Ort aufgelöst wird, auf den es zeigte, als der Checkpoint erstellt wurde, oder ein Backup, das nicht sicher gelesen werden konnte. Das Feld erfordert Claude Code v2.1.216 oder später. Ein Vorschau-Aufruf mit rewindFiles(userMessageId, { dryRun: true }) setzt ihn nie.
SDKStatusMessage
Status-Update-Nachricht (z. B. Komprimierung).
SDKTaskNotificationMessage
Benachrichtigung, wenn eine Hintergrundaufgabe abgeschlossen, fehlgeschlagen oder gestoppt wird. Hintergrundaufgaben umfassen run_in_background Bash-Befehle, Monitor-Watches und Hintergrund-Subagenten. Für die Felder run_id und ambient siehe SDKTaskStartedMessage, das sie und ihre Versionsanforderungen definiert.
reason wird gesetzt, wenn eine Aufgabe aus einem anderen Grund als ihrem eigenen Abschluss, Fehlschlag oder Stopp endet, und erfordert Agent SDK v0.3.273 oder später. Claude Code setzt es nur in Sitzungen, die sich über claude.ai verbinden: Cloud-Sitzungen, einschließlich solcher auf selbst gehosteten Runnern, und Remote-Control-Sitzungen. Ein lokaler query()-Aufruf setzt es nie. Sein einziger Wert, worker_restart, bedeutet, dass der Claude-Code-Prozess, der die Aufgabe ausgeführt hat, neu gestartet wurde. Die Benachrichtigung trägt den Status "stopped", behandeln Sie die Aufgabe daher weder als abgeschlossen noch als fehlgeschlagen.
Wenn Claude Code einen langen MCP-Tool-Aufruf in den Hintergrund verschiebt, enthält der tool_result-Block für diesen Aufruf nur einen Platzhalter und das echte Ergebnis des Aufrufs kommt in dieser Benachrichtigung an. Gleichen Sie die Benachrichtigung mit dem Aufruf mit tool_use_id ab. Bei einer completed-Benachrichtigung listet resource_links die Dateien auf, die das Tool per Referenz als SDKMcpResourceLink-Einträge zurückgegeben hat, mit den gleichen 50-Link- und 64-KiB-Limits wie tool_use_result.resourceLinks. Claude Code lässt resource_links weg, wenn das Ergebnis keine Links hatte und bei Benachrichtigungen für Aufgaben, die keine MCP-Tool-Aufrufe sind. resource_links erfordert Agent SDK v0.3.257 oder später.
Claude Code stellt jeder Task-Benachrichtigung, die es an das Modell sendet, einen Hinweis voran, außer Lieferungen mit dem scheduled-trigger-Subkind, die stattdessen einen zugewiesenen Task-Rahmen tragen. Der Hinweis besagt, dass keine menschliche Eingabe stattgefunden hat, daher behandelt das Modell die Benachrichtigung nicht als Benutzer-Anweisung oder Genehmigung.
Um einen Task-Benachrichtigungs-Turn zu erkennen, überprüfen Sie origin.kind === "task-notification" auf der SDKUserMessage oder SDKResultMessage, anstatt auf den Hinweistext zu prüfen. Lesen Sie subkind aus dem gleichen Feld, wenn Sie wissen müssen, was es ausgelöst hat. Vor v2.1.205 ließ Claude Code den Hinweis bei Benachrichtigungen weg, die ankamen, während die Sitzung untätig war.
SDKToolUseSummaryMessage
Zusammenfassung der Tool-Nutzung in einer Konversation.
SDKHookStartedMessage
Wird ausgegeben, wenn ein Hook mit der Ausführung beginnt.
Claude Code liefert diese Nachricht, SDKHookProgressMessage und SDKHookResponseMessage sofort an den Nachrichtenstrom, auch während ein SessionStart- oder Setup-Hook noch während des Sitzungsstarts läuft. Claude Code v2.1.169 bis v2.1.203 lieferte diese Nachrichten in einem Batch, nachdem ein SessionStart- oder Setup-Hook abgeschlossen war; v2.1.204 stellte die Live-Lieferung wieder her.
SDKHookProgressMessage
Wird ausgegeben, während ein Hook läuft, mit Stdout/Stderr-Ausgabe.
SDKHookResponseMessage
Wird ausgegeben, wenn ein Hook die Ausführung beendet.
SDKToolProgressMessage
Wird regelmäßig ausgegeben, während ein Tool ausgeführt wird, um Fortschritt anzuzeigen.
tool_progress-Nachricht mit heartbeat: true aus. Jeder Heartbeat trägt den Tool-Namen und verstrichene Sekunden, daher können Sie einen lang laufenden Aufruf von einer steckengebliebenen Sitzung unterscheiden. Claude Code gibt keine Heartbeats für Tool-Aufrufe innerhalb eines Subagenten aus. Das heartbeat-Feld erfordert Agent SDK v0.3.214 oder später. Vor v2.1.257 gab Claude Code auch keine Heartbeats für einen Vordergrund-Agent-Tool-Aufruf aus.
Bei tool_progress-Nachrichten für das Agent-Tool außer Heartbeats benennt subagent_type den laufenden Subagenten-Typ, z. B. general-purpose. subagent_retry ist vorhanden, während dieser Subagent einen API-Fehler-Backoff abwartet, z. B. ein Rate-Limit oder eine Überlastung, mit einer Nachricht pro Wiederholungsversuch. Beide Felder erfordern Agent SDK v0.3.214 oder später.
Um einen Wiederholungs-Indikator aus subagent_retry zu rendern:
- Verfolgen Sie den Indikator nach
parent_tool_use_id, das pro Subagent eindeutig ist.tool_use_idwird von parallelen Subagenten aus einem Assistenten-Turn geteilt, daher würde die Verfolgung danach zulassen, dass das Update eines Subagenten den Indikator eines anderen löscht. - Löschen Sie den Indikator, wenn ein späterer
tool_progressfür den gleichenparent_tool_use_idweder mitsubagent_retrynoch mitheartbeat: trueankommt, oder wenn die Ergebnis-Nachricht des Tools ankommt. Frames mitheartbeat: truemelden nur Lebendigkeit, daher behalten Sie den Indikator, wenn einer ankommt.attemptkannmax_retriesbei persistenten Wiederholungsversuchen überschreiten, daher leiten Sie das Löschen nicht von den Zählern ab. - Behandeln Sie
error_categoryals Token zur Auswahl Ihres eigenen Nachrichtentextes, nicht als Anzeigetext. Die Werte sindrate_limit,overloaded,authentication_failed,server_error,cloud_credential_errorundunknown. Behandeln Sie einen Wert, den Sie nicht erkennen, wieunknown, weil spätere Versionen Werte hinzufügen können.
SDKAuthStatusMessage
Wird während Authentifizierungsflüssen ausgegeben.
SDKTaskStartedMessage
Wird ausgegeben, wenn eine Aufgabe beginnt. Das task_type-Feld ist "local_bash" für Bash-Befehle und Monitor-Watches, "local_agent" für Subagenten oder "remote_agent".
run_id identifiziert einen Lauf der Aufgabe. Wenn eine Aufgabe erneut unter derselben task_id läuft, z. B. ein Subagent, den Claude fortsetzt, erhält der neue Lauf eine neue run_id. Das Feld erfordert Agent SDK v0.3.292 oder später. Verwenden Sie es, um die Läufe einer Aufgabe auseinanderzuhalten:
- Nachrichten einem Lauf zuordnen: Die Nachrichten
task_started,task_progress,task_updatedundtask_notificationeines Laufs tragen dieselberun_id. Der Eintrag des Laufs in jederSDKBackgroundTasksChangedMessageträgt sie ebenfalls, ebenso dierunIdim Origin der Benutzer-Nachricht, die die Benachrichtigung des Laufs liefert. - Eine verspätete Nachricht erkennen: Als einfache Zeichenketten verglichen, sortieren sich die Lauf-IDs einer Aufgabe in der Reihenfolge, in der die Läufe gestartet wurden; eine Nachricht, deren
run_idvor dem Lauf einsortiert wird, den Sie gerade anzeigen, stammt daher aus einem früheren Lauf. Behandeln Sie den Wert abgesehen von diesem Vergleich als opak. - Auf
task_idzurückgreifen: Wenn eine Nachricht keinerun_idträgt, z. B. dietask_notification, die eine fortgesetzte Sitzung ausgibt, um eine vom früheren Prozess gestartete Aufgabe abzuschließen, ordnen Sie sie übertask_idzu.
task_started-Nachrichten teilen sich eine task_id, und die Benachrichtigung, die den ersten Lauf beendet hat, trägt die ID des ersten Laufs:
ambient ist true für Aufgaben, die nicht Teil der Arbeit der Sitzung sind, z. B. Aufgaben, die Claude Code für seinen eigenen Betrieb ausführt. Live-Update-Watcher sind auch ambient, einschließlich Watcher, die der Benutzer angefordert hat. Schließen Sie ambient-Aufgaben aus Aktivitätsindikatoren aus. Das Feld erfordert Agent SDK v0.3.247 oder später.
ambient erscheint auch auf SDKTaskNotificationMessage und auf SDKBackgroundTasksChangedMessage-Einträgen.
is_backgrounded und spawn_depth beschreiben, wie Claude Code die Aufgabe gestartet hat. Beide Felder erfordern Agent SDK v0.3.238 oder später.
is_backgrounded: Claude Code setzt es auf"local_agent"- und"local_bash"-Aufgaben.truebedeutet, die Aufgabe läuft im Hintergrund.falsebedeutet, die Aufgabe läuft im Vordergrund, und der Tool-Aufruf, der sie gestartet hat, bleibt blockiert, bis die Aufgabe beendet wird oder in den Hintergrund wechselt.spawn_depth: Claude Code setzt es nur auf"local_agent"-Aufgaben. Ein Subagent, den der Hauptthread gespawnt hat, hat Tiefe1. Ein Subagent, den ein Tiefe-1-Subagent gespawnt hat, hat Tiefe2, und so weiter.
is_backgrounded: true, weil Claude Code jeden fortgesetzten Subagenten im Hintergrund ausführt. Wenn eine Vordergrund-Aufgabe später in den Hintergrund wechselt, meldet Claude Code den neuen is_backgrounded-Wert in einer task_updated-Nachricht, anstatt eine zweite task_started zu senden.
parent_task_id enthält die task_id des Subagenten, der diese Aufgabe gestartet hat. Verwenden Sie es, um jede Aufgabe unter dem Subagenten zu gruppieren, der sie gestartet hat. Claude Code setzt es bei Subagenten-, Bash- und Monitor-Aufgaben. Das Feld erfordert Agent SDK v0.3.292 oder später. Es fehlt, wenn:
- Der Hauptthread die Aufgabe gestartet hat
- Claude Code die übergeordnete Aufgabe nicht mehr verfolgt
- Ein Teammitglied oder ein Agent innerhalb eines Workflows die Aufgabe gestartet hat
SDKTaskProgressMessage
Wird regelmäßig ausgegeben, während ein Subagent oder eine Hintergrundaufgabe läuft. Für das run_id-Feld siehe SDKTaskStartedMessage, das es und seine Versionsanforderung definiert.
Für eine Subagenten-Aufgabe trägt das summary-Feld eine modellgenerierte Fortschritts-Zusammenfassung und wird nur ausgefüllt, wenn agentProgressSummaries aktiviert ist. Für einen in den Hintergrund verschobenen MCP-Tool-Aufruf trägt summary den neuesten gemeldeten Fortschritt des MCP-Servers und hängt nicht von dieser Option ab.
SDKTaskUpdatedMessage
Wird ausgegeben, wenn sich der Status einer Hintergrundaufgabe ändert, z. B. wenn sie von running zu completed übergeht. Führen Sie patch in Ihre lokale Aufgabenkarte zusammen, die nach task_id indiziert ist. Das end_time-Feld ist ein Unix-Epoch-Zeitstempel in Millisekunden, vergleichbar mit Date.now(). Für das run_id-Feld siehe SDKTaskStartedMessage, das es und seine Versionsanforderung definiert.
SDKBackgroundTasksChangedMessage
Wird ausgegeben, wenn sich die Menge der aktiven Hintergrundaufgaben ändert: eine Aufgabe startet, wird abgeschlossen oder wird beendet; ein Vordergrund-Agent wird in den Hintergrund verschoben; oder das description-, ambient- oder parent_task_id-Feld einer Aufgabe ändert sich. Für die Felder run_id und parent_task_id in jedem Eintrag siehe SDKTaskStartedMessage, das sie und ihre Versionsanforderungen definiert.
Das tasks-Array ist die vollständige aktive Menge. Ersetzen Sie alle zwischengespeicherten Mengen mit jeder Payload, anstatt task_started- und task_notification-Ereignisse zu koppeln, sodass die nächste Änderung der Mitgliedschaft alle verpassten Ereignisse korrigiert.
Wenn eine Aufgabe endet, kommen ihre task_updated- und task_notification-Nachrichten vor der background_tasks_changed-Nachricht an, die sie aus der Liste entfernt. Ansonsten ist die Reihenfolge relativ zu den Pro-Aufgaben-Ereignissen nicht spezifiziert.
Beim Start wird nichts ausgegeben. Setzen Sie auf eine leere Menge zurück, wenn der CLI-Prozess der Sitzung startet oder neu startet, und lassen Sie die nächste Änderung der Mitgliedschaft ihn neu auffüllen.
Wenn Sie eine wiederholte initialize-Steueranfrage an eine laufende Sitzung senden, z. B. mit reinitialize() nach einer Transportlücke, folgt Claude Code der Antwort mit einem Snapshot der aktuellen aktiven Menge, auch wenn sie leer ist. Ein wiederverbindender Host erfährt daher, was läuft, ohne auf die nächste Änderung der Mitgliedschaft zu warten. Vor Agent SDK v0.3.239 sendete Claude Code keinen Snapshot nach einer wiederholten initialize.
Erfordert Claude Code v2.1.203 oder später.
subagent_type benennt den Subagenten-Typ bei Einträgen, deren task_type "local_agent" ist, z. B. general-purpose oder den Namen eines benutzerdefinierten Subagenten. Das Feld erfordert Agent SDK v0.3.293 oder später.
SDKThinkingTokensMessage
Wird ausgegeben, während Claude einen Thinking-Block produziert, einschließlich eines redigierten. estimated_tokens ist eine laufende Schätzung der bisher im aktuellen Block generierten Thinking-Token, und estimated_tokens_delta ist das Inkrement, das von diesem Frame getragen wird. Verwenden Sie diese Schätzungen für die Fortschrittsanzeige.
Wenn das Modell oder der Provider eine Aufschlüsselung meldet, ist die endgültige Anzahl für die Top-Level-Agentenschleife die usage.output_tokens_details.thinking_tokens der Ergebnis-Nachricht, die keine Subagenten-Token enthält.
Erfordert Claude Code v2.1.153 oder später.
SDKSessionStateChangedMessage
Wird ausgegeben, wenn Claude Code den Status der Sitzung meldet. Um diese Nachrichten zu erhalten, setzen Sie CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1. Claude Code kann denselben Status mehr als einmal melden, lesen Sie eine Nachricht daher als aktuellen Status der Sitzung und nicht als Übergang.
Das state-Feld trägt einen dieser Werte:
running: Die Sitzung arbeitet.idle: Claude Code wartet auf Ihren nächsten Prompt.requires_action: Die Sitzung ist blockiert, bis eine Anfrage beantwortet wird, die sie an Ihren Host gesendet hat, z. B. eine Berechtigungsabfrage.
idle-Nachricht eines Turns und seine result-Nachricht können in beliebiger Reihenfolge ankommen. Um zu ändern, ob idle auf Hintergrundarbeit wie einen Hintergrund-Subagenten oder einen Workflow-Lauf wartet, siehe CLAUDE_CODE_BG_TASKS_REPORT_RUNNING.
SDKFilesPersistedEvent
Wird ausgegeben, wenn Datei-Checkpoints auf der Festplatte persistiert werden.
SDKRateLimitEvent
Wird ausgegeben, wenn die Sitzung auf ein Rate-Limit trifft.
errorCode "credits_required" ist, stammt die Ablehnung von einem claude.ai-Abonnement, dessen enthaltene Nutzung aufgebraucht ist, und die Sitzung kann nicht fortgesetzt werden, bis der Benutzer Nutzungsguthaben kauft. canUserPurchaseCredits gibt an, ob der authentifizierte Benutzer Guthaben für das Konto kaufen kann, und hasChargeableSavedPaymentMethod gibt an, ob eine gespeicherte Zahlungsmethode hinterlegt ist. Alle drei Felder fehlen bei Rate-Limit-Ereignissen, die keine Guthaben-erforderlich-Ablehnungen sind. Erfordert Claude Code v2.1.181 oder später.
SDKLocalCommandOutputMessage
Claude Code gibt diesen Nachrichtentyp nicht aus. Wenn Sie einen Befehl wie /context oder /usage als Prompt senden, kommt seine Ausgabe als SDKAssistantMessage an.
SDKCommandsChangedMessage
Wird ausgegeben, wenn sich die Menge der verfügbaren Befehle während einer Sitzung ändert, z. B. wenn Claude Code Skills entdeckt, wenn der Agent ein Unterverzeichnis betritt. Das commands-Array ist die vollständig aktualisierte Liste, daher ersetzen Sie alle zwischengespeicherten Befehlslisten durch diese Payload. Das Aufrufen von supportedCommands() nach dieser Nachricht gibt die gleiche aktualisierte Liste zurück, weil die Methode den neuesten Push verfolgt; dies erfordert Agent SDK v0.3.216 oder später. In früheren SDK-Versionen gibt supportedCommands() den bei der Initialisierung erfassten Snapshot zurück und spiegelt nie Änderungen während der Sitzung wider.
Claude Code gibt diese Nachricht auch aus, wenn die Prompts eines MCP-Servers der Liste beitreten oder sie verlassen, z. B. wenn ein Server nach dem Sitzungsstart die Verbindung herstellt. Dies erfordert Claude Code v2.1.281 oder später.
SDKPromptSuggestionMessage
Wird nach einem Turn ausgegeben, wenn promptSuggestions aktiviert ist und Claude Code eine Suggestion für diesen Turn generiert hat. Enthält den vorhergesagten nächsten Benutzer-Prompt. Für die Turns, die keine erhalten, siehe Wenn Claude Code Suggestions überspringt.
SDKConversationResetMessage
Wird ausgegeben, wenn die Konversation der Sitzung ersetzt wird, ohne die Sitzung zu beenden. In einem query()-Aufruf erzeugen nur /clear und seine Aliase diese Nachricht. Mounten Sie ein leeres Transkript unter new_conversation_id und verwerfen Sie alle zwischengespeicherten Sitzungstitel.
trigger: was die Konversation verworfen hat. Setzen Sie Ihr Transkript bei jederconversation_reset-Nachricht zurück, einschließlich einer, bei der dieses Feld fehlt oder einen Wert trägt, den Sie nicht erkennen.user_message_uuid: dieuuidder Benutzer-Nachricht, die/cleartrug. Verwenden Sie sie, um den Reset mit dieser Nachricht abzugleichen.timestamp: wann der Reset stattfand, als ISO-8601-Zeichenkette in UTC. Verwenden Sie sie zur Anzeige, nicht zur Reihenfolge von Nachrichten.
trigger, user_message_uuid und timestamp erfordern Claude Code v2.1.281 oder später.
Die veröffentlichten Typings des SDK deklarieren SDKConversationResetMessage in Claude Code v2.1.203 und später. Vor v2.1.203 referenzierte SDKMessage den Typ, ohne ihn zu deklarieren, daher schlug die Eingrenzung auf type === "conversation_reset" bei der Typprüfung fehl, wenn skipLibCheck deaktiviert war.
AbortError
Benutzerdefinierte Fehlerklasse für Abbruchoperationen.
AbortError ist die einzige Fehlerklasse in der typisierten API des SDK. Andere Fehler, wie das Beenden oder der fehlgeschlagene Start des Claude-Code-Prozesses, lehnen die Nachrichteniteration mit Fehlern ab, die keine SDK-Klasse zum Abgleichen tragen. Fehlerbehebung ordnet diese Fehler nach Nachricht, mit der Ursache und Behebung für jeden.
Sandbox-Konfiguration
SandboxSettings
Konfiguration für Sandbox-Verhalten. Verwenden Sie dies, um Command-Sandboxing zu aktivieren und Netzwerkbeschränkungen programmatisch zu konfigurieren.
Die Sandbox hängt von der Plattformunterstützung ab und benötigt unter Linux Tools wie
bubblewrap und socat. Wenn enabled auf true gesetzt ist und die Sandbox nicht gestartet werden kann, meldet query() eine result-Nachricht mit subtype: "error_during_execution" und den Grund in errors. Für einen einzelnen query()-Aufruf wirft das SDK nach dem Liefern dieses Fehler-Ergebnisses, daher wickeln Sie die Schleife in einen try-Block ein, um über ihn hinwegzugehen. Siehe Handle the result für den Fehlervertrag.Um stattdessen unsandboxed auszuführen, setzen Sie failIfUnavailable: false.Beispielverwendung
SandboxNetworkConfig
Netzwerkspezifische Konfiguration für den Sandbox-Modus. Diese Einstellungen gelten für sandboxed 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
allowedDomains 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.SandboxFilesystemConfig
Dateisystemspezifische Konfiguration für den Sandbox-Modus.
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 canUseTool-Handler aufgerufen wird, sodass Sie benutzerdefinierte Autorisierungslogik implementieren können.
Ihre excludedCommands-Einträge führen stattdessen einen Aufruf außerhalb der Sandbox mit keiner Modellbeteiligung durch; sandbox.excludedCommands behandelt, wann ein Eintrag gilt.
Im folgenden Beispiel steht isCommandAuthorized für eine Autorisierungsprüfung, die Sie definieren.
Siehe auch
- SDK-Übersicht - Allgemeine SDK-Konzepte
- Python SDK-Referenz - Python SDK-Dokumentation
- CLI-Referenz - Befehlszeilenschnittstelle
- Häufige Workflows - Schritt-für-Schritt-Anleitungen