Zum Hauptinhalt springen
Probieren Sie die neue V2-Schnittstelle (Vorschau): Eine vereinfachte Schnittstelle mit send()- und stream()-Mustern ist jetzt verfügbar und macht Multi-Turn-Konversationen einfacher. Erfahren Sie mehr über die TypeScript V2-Vorschau

Installation

npm install @anthropic-ai/claude-agent-sdk
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. Sie müssen Claude Code nicht separat installieren. Wenn Ihr Paketmanager optionale Abhängigkeiten überspringt, wirft das SDK Native CLI binary for <platform> not found; setzen Sie stattdessen pathToClaudeCodeExecutable auf eine separat installierte claude-Binärdatei.

Funktionen

query()

Die primäre Funktion für die Interaktion mit Claude Code. Erstellt einen asynchronen Generator, der Nachrichten streamt, wenn sie ankommen.
function query({
  prompt,
  options
}: {
  prompt: string | AsyncIterable<SDKUserMessage>;
  options?: Options;
}): Query;

Parameter

ParameterTypBeschreibung
promptstring | AsyncIterable<SDKUserMessage>Die Eingabeaufforderung als Zeichenkette oder asynchrones Iterable für den Streaming-Modus
optionsOptionsOptionales Konfigurationsobjekt (siehe Options-Typ unten)

Rückgabewert

Gibt ein Query-Objekt zurück, das AsyncGenerator<SDKMessage, void> mit zusätzlichen Methoden erweitert.

startup()

Wärmt den CLI-Unterprozess vor, indem er ihn spawnt und den Initialize-Handshake abschließt, bevor eine Eingabeaufforderung verfügbar ist. Das zurückgegebene WarmQuery-Handle akzeptiert später eine Eingabeaufforderung und schreibt sie in einen bereits bereiten Prozess, sodass der erste query()-Aufruf ohne Kosten für das Spawnen und Initialisieren des Unterprozesses aufgelöst wird.
function startup(params?: {
  options?: Options;
  initializeTimeoutMs?: number;
}): Promise<WarmQuery>;

Parameter

ParameterTypBeschreibung
optionsOptionsOptionales Konfigurationsobjekt. Gleich wie der options-Parameter für query()
initializeTimeoutMsnumberMaximale Zeit in Millisekunden zum Warten auf die Unterprozessinitialisierung. Standardwert ist 60000. Wenn die Initialisierung nicht rechtzeitig abgeschlossen wird, lehnt das Promise mit einem Timeout-Fehler ab

Rückgabewert

Gibt ein Promise<WarmQuery> zurück, das aufgelöst wird, sobald der Unterprozess gespawnt wurde und seinen Initialize-Handshake abgeschlossen hat.

Beispiel

Rufen Sie startup() früh auf, beispielsweise beim Anwendungsstart, und rufen Sie dann .query() auf dem zurückgegebenen Handle auf, sobald eine Eingabeaufforderung bereit ist. Dies verschiebt das Spawnen und die Initialisierung des Unterprozesses aus dem kritischen Pfad.
import { startup } from "@anthropic-ai/claude-agent-sdk";

// Bezahlen Sie die Startup-Kosten im Voraus
const warm = await startup({ options: { maxTurns: 3 } });

// Später, wenn eine Eingabeaufforderung bereit ist, ist dies sofort
for await (const message of warm.query("What files are here?")) {
  console.log(message);
}

tool()

Erstellt eine typsichere MCP-Tool-Definition zur Verwendung mit SDK MCP-Servern.
function tool<Schema extends AnyZodRawShape>(
  name: string,
  description: string,
  inputSchema: Schema,
  handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,
  extras?: { annotations?: ToolAnnotations }
): SdkMcpToolDefinition<Schema>;

Parameter

ParameterTypBeschreibung
namestringDer Name des Tools
descriptionstringEine Beschreibung, was das Tool tut
inputSchemaSchema extends AnyZodRawShapeZod-Schema, das die Eingabeparameter des Tools definiert (unterstützt sowohl Zod 3 als auch Zod 4)
handler(args, extra) => Promise<CallToolResult>Asynchrone Funktion, die die Tool-Logik ausführt
extras{ annotations?: ToolAnnotations }Optionale MCP-Tool-Anmerkungen, die Verhaltenshinweise für Clients bereitstellen

ToolAnnotations

Erneut exportiert aus @modelcontextprotocol/sdk/types.js. Alle Felder sind optionale Hinweise; Clients sollten sich nicht auf sie für Sicherheitsentscheidungen verlassen.
FeldTypStandardBeschreibung
titlestringundefinedBenutzerfreundlicher Titel für das Tool
readOnlyHintbooleanfalseWenn true, ändert das Tool seine Umgebung nicht
destructiveHintbooleantrueWenn true, kann das Tool destruktive Updates durchführen (nur sinnvoll, wenn readOnlyHint false ist)
idempotentHintbooleanfalseWenn true, haben wiederholte Aufrufe mit denselben Argumenten keine zusätzliche Auswirkung (nur sinnvoll, wenn readOnlyHint false ist)
openWorldHintbooleantrueWenn true, interagiert das Tool mit externen Entitäten (z. B. Websuche). Wenn false, ist die Domäne des Tools geschlossen (z. B. ein Memory-Tool)
import { tool } from "@anthropic-ai/claude-agent-sdk";
import { z } from "zod";

const searchTool = tool(
  "search",
  "Search the web",
  { query: z.string() },
  async ({ query }) => {
    return { content: [{ type: "text", text: `Results for: ${query}` }] };
  },
  { annotations: { readOnlyHint: true, openWorldHint: true } }
);

createSdkMcpServer()

Erstellt eine MCP-Server-Instanz, die im selben Prozess wie Ihre Anwendung ausgeführt wird.
function createSdkMcpServer(options: {
  name: string;
  version?: string;
  tools?: Array<SdkMcpToolDefinition<any>>;
}): McpSdkServerConfigWithInstance;

Parameter

ParameterTypBeschreibung
options.namestringDer Name des MCP-Servers
options.versionstringOptionale Versionsnummer
options.toolsArray<SdkMcpToolDefinition>Array von Tool-Definitionen, die mit tool() erstellt wurden

listSessions()

Entdeckt und listet vergangene Sitzungen mit leichten Metadaten auf. Filtern Sie nach Projektverzeichnis oder listen Sie Sitzungen über alle Projekte auf.
function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

Parameter

ParameterTypStandardBeschreibung
options.dirstringundefinedVerzeichnis, für das Sitzungen aufgelistet werden sollen. Wenn weggelassen, werden Sitzungen über alle Projekte zurückgegeben
options.limitnumberundefinedMaximale Anzahl der zurückzugebenden Sitzungen
options.includeWorktreesbooleantrueWenn dir sich in einem Git-Repository befindet, Sitzungen aus allen Worktree-Pfaden einbeziehen

Rückgabetyp: SDKSessionInfo

EigenschaftTypBeschreibung
sessionIdstringEindeutige Sitzungs-ID (UUID)
summarystringAnzeigetitel: benutzerdefinierter Titel, automatisch generierte Zusammenfassung oder erste Eingabeaufforderung
lastModifiednumberLetzte Änderungszeit in Millisekunden seit Epoch
fileSizenumber | undefinedSitzungsdateigröße in Bytes. Nur für lokale JSONL-Speicherung gefüllt
customTitlestring | undefinedVom Benutzer festgelegter Sitzungstitel (über /rename)
firstPromptstring | undefinedErste aussagekräftige Benutzer-Eingabeaufforderung in der Sitzung
gitBranchstring | undefinedGit-Branch am Ende der Sitzung
cwdstring | undefinedArbeitsverzeichnis für die Sitzung
tagstring | undefinedVom Benutzer festgelegtes Sitzungs-Tag (siehe tagSession())
createdAtnumber | undefinedErstellungszeit in Millisekunden seit Epoch, vom Zeitstempel des ersten Eintrags

Beispiel

Geben Sie die 10 neuesten Sitzungen für ein Projekt aus. Ergebnisse werden nach lastModified absteigend sortiert, sodass das erste Element das neueste ist. Lassen Sie dir weg, um über alle Projekte zu suchen.
import { listSessions } from "@anthropic-ai/claude-agent-sdk";

const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

for (const session of sessions) {
  console.log(`${session.summary} (${session.sessionId})`);
}

getSessionMessages()

Liest Benutzer- und Assistenten-Nachrichten aus einem vergangenen Sitzungstranskript.
function getSessionMessages(
  sessionId: string,
  options?: GetSessionMessagesOptions
): Promise<SessionMessage[]>;

Parameter

ParameterTypStandardBeschreibung
sessionIdstringerforderlichSitzungs-UUID zum Lesen (siehe listSessions())
options.dirstringundefinedProjektverzeichnis, in dem die Sitzung zu finden ist. Wenn weggelassen, werden alle Projekte durchsucht
options.limitnumberundefinedMaximale Anzahl der zurückzugebenden Nachrichten
options.offsetnumberundefinedAnzahl der Nachrichten, die vom Anfang übersprungen werden sollen

Rückgabetyp: SessionMessage

EigenschaftTypBeschreibung
type"user" | "assistant"Nachrichtenrolle
uuidstringEindeutige Nachrichten-ID
session_idstringSitzung, zu der diese Nachricht gehört
messageunknownRohe Nachricht-Payload aus dem Transkript
parent_tool_use_idnullReserviert

Beispiel

import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

if (latest) {
  const messages = await getSessionMessages(latest.sessionId, {
    dir: "/path/to/project",
    limit: 20
  });

  for (const msg of messages) {
    console.log(`[${msg.type}] ${msg.uuid}`);
  }
}

getSessionInfo()

Liest Metadaten für eine einzelne Sitzung nach ID, ohne das vollständige Projektverzeichnis zu scannen.
function getSessionInfo(
  sessionId: string,
  options?: GetSessionInfoOptions
): Promise<SDKSessionInfo | undefined>;

Parameter

ParameterTypStandardBeschreibung
sessionIdstringerforderlichUUID der zu suchenden Sitzung
options.dirstringundefinedProjektverzeichnispfad. Wenn weggelassen, werden alle Projektverzeichnisse durchsucht
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.
function renameSession(
  sessionId: string,
  title: string,
  options?: SessionMutationOptions
): Promise<void>;

Parameter

ParameterTypStandardBeschreibung
sessionIdstringerforderlichUUID der umzubenennenden Sitzung
titlestringerforderlichNeuer Titel. Muss nach dem Trimmen von Leerzeichen nicht leer sein
options.dirstringundefinedProjektverzeichnispfad. Wenn weggelassen, werden alle Projektverzeichnisse durchsucht

tagSession()

Taggt eine Sitzung. Übergeben Sie null, um das Tag zu löschen. Wiederholte Aufrufe sind sicher; das neueste Tag gewinnt.
function tagSession(
  sessionId: string,
  tag: string | null,
  options?: SessionMutationOptions
): Promise<void>;

Parameter

ParameterTypStandardBeschreibung
sessionIdstringerforderlichUUID der zu taggenden Sitzung
tagstring | nullerforderlichTag-Zeichenkette oder null zum Löschen
options.dirstringundefinedProjektverzeichnispfad. Wenn weggelassen, werden alle Projektverzeichnisse durchsucht

Typen

Options

Konfigurationsobjekt für die query()-Funktion.
EigenschaftTypStandardBeschreibung
abortControllerAbortControllernew AbortController()Controller zum Abbrechen von Operationen
additionalDirectoriesstring[][]Zusätzliche Verzeichnisse, auf die Claude zugreifen kann
agentstringundefinedAgent-Name für den Hauptthread. Der Agent muss in der agents-Option oder in den Einstellungen definiert sein
agentsRecord<string, [AgentDefinition](#agent-definition)>undefinedProgrammatische Definition von Subagenten
allowDangerouslySkipPermissionsbooleanfalseAktivieren Sie das Umgehen von Berechtigungen. Erforderlich bei Verwendung von permissionMode: 'bypassPermissions'
allowedToolsstring[][]Tools, die automatisch genehmigt werden, ohne zu fragen. Dies beschränkt Claude nicht nur auf diese Tools; nicht aufgelistete Tools fallen durch permissionMode und canUseTool. Verwenden Sie disallowedTools, um Tools zu blockieren. Siehe Berechtigungen
betasSdkBeta[][]Beta-Funktionen aktivieren
canUseToolCanUseToolundefinedBenutzerdefinierte Berechtigungsfunktion für die Tool-Nutzung
continuebooleanfalseSetzen Sie die neueste Konversation fort
cwdstringprocess.cwd()Aktuelles Arbeitsverzeichnis
debugbooleanfalseAktivieren Sie den Debug-Modus für den Claude Code-Prozess
debugFilestringundefinedSchreiben Sie Debug-Protokolle in einen bestimmten Dateipfad. Aktiviert implizit den Debug-Modus
disallowedToolsstring[][]Tools, die immer verweigert werden. Deny-Regeln werden zuerst überprüft und überschreiben allowedTools und permissionMode (einschließlich bypassPermissions)
effort'low' | 'medium' | 'high' | 'xhigh' | 'max''high'Steuert, wie viel Aufwand Claude in seine Antwort investiert. Funktioniert mit adaptivem Denken, um die Denktiefe zu lenken
enableFileCheckpointingbooleanfalseAktivieren Sie die Dateienänderungsverfolgung zum Zurückspulen. Siehe Datei-Checkpointing
envRecord<string, string | undefined>process.envUmgebungsvariablen. Setzen Sie CLAUDE_AGENT_SDK_CLIENT_APP, um Ihre App im User-Agent-Header zu identifizieren
executable'bun' | 'deno' | 'node'Automatisch erkanntJavaScript-Laufzeit zum Verwenden
executableArgsstring[][]Argumente, die an die ausführbare Datei übergeben werden sollen
extraArgsRecord<string, string | null>{}Zusätzliche Argumente
fallbackModelstringundefinedModell, das verwendet werden soll, wenn das primäre fehlschlägt
forkSessionbooleanfalseBeim Fortsetzen mit resume zu einer neuen Sitzungs-ID verzweigen, anstatt die ursprüngliche Sitzung fortzusetzen
hooksPartial<Record<HookEvent, HookCallbackMatcher[]>>{}Hook-Callbacks für Ereignisse
includePartialMessagesbooleanfalseTeilweise Nachrichtenereignisse einbeziehen
maxBudgetUsdnumberundefinedBeenden Sie die Abfrage, wenn die clientseitige Kostenschätzung diesen USD-Wert erreicht. Verglichen mit derselben Schätzung wie total_cost_usd; siehe Kosten und Nutzung verfolgen für Genauigkeitsvorbehalt
maxThinkingTokensnumberundefinedVeraltet: Verwenden Sie stattdessen thinking. Maximale Token für den Denkprozess
maxTurnsnumberundefinedMaximale agentengesteuerte Turns (Tool-Use-Roundtrips)
mcpServersRecord<string, [McpServerConfig](#mcp-server-config)>{}MCP-Server-Konfigurationen
modelstringStandard aus CLIClaude-Modell zum Verwenden
outputFormat{ type: 'json_schema', schema: JSONSchema }undefinedDefinieren Sie das Ausgabeformat für Agent-Ergebnisse. Siehe Strukturierte Ausgaben für Details
pathToClaudeCodeExecutablestringAutomatisch aufgelöst aus gebündelter nativer BinärdateiPfad zur Claude Code-Ausführungsdatei. Nur erforderlich, wenn optionale Abhängigkeiten während der Installation übersprungen wurden oder Ihre Plattform nicht in der unterstützten Menge enthalten ist
permissionModePermissionMode'default'Berechtigungsmodus für die Sitzung
permissionPromptToolNamestringundefinedMCP-Tool-Name für Berechtigungsaufforderungen
persistSessionbooleantrueWenn false, deaktiviert die Sitzungspersistenz auf der Festplatte. Sitzungen können später nicht fortgesetzt werden
pluginsSdkPluginConfig[][]Laden Sie benutzerdefinierte Plugins aus lokalen Pfaden. Siehe Plugins für Details
promptSuggestionsbooleanfalseAktivieren Sie Eingabeaufforderungsvorschläge. Gibt nach jedem Turn eine prompt_suggestion-Nachricht mit einer vorhergesagten nächsten Benutzer-Eingabeaufforderung aus
resumestringundefinedSitzungs-ID zum Fortsetzen
resumeSessionAtstringundefinedSitzung bei einer bestimmten Nachrichten-UUID fortsetzen
sandboxSandboxSettingsundefinedKonfigurieren Sie das Sandbox-Verhalten programmatisch. Siehe Sandbox-Einstellungen für Details
sessionIdstringAutomatisch generiertVerwenden Sie eine bestimmte UUID für die Sitzung, anstatt eine zu generieren
settingSourcesSettingSource[]CLI-Standards (alle Quellen)Steuern Sie, welche Dateisystem-Einstellungen geladen werden. Übergeben Sie [], um Benutzer-, Projekt- und lokale Einstellungen zu deaktivieren. Verwaltete Richtlinieneinstellungen werden unabhängig davon geladen. Siehe Claude Code-Funktionen verwenden
spawnClaudeCodeProcess(options: SpawnOptions) => SpawnedProcessundefinedBenutzerdefinierte Funktion zum Spawnen des Claude Code-Prozesses. Verwenden Sie, um Claude Code in VMs, Containern oder Remote-Umgebungen auszuführen
stderr(data: string) => voidundefinedCallback für Stderr-Ausgabe
strictMcpConfigbooleanfalseErzwingen Sie strikte MCP-Validierung
systemPromptstring | { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }undefined (minimale Eingabeaufforderung)Konfiguration der Systemeingabeaufforderung. Übergeben Sie eine Zeichenkette für eine benutzerdefinierte Eingabeaufforderung oder { type: 'preset', preset: 'claude_code' }, um die Systemeingabeaufforderung von Claude Code zu verwenden. Bei Verwendung der Preset-Objektform fügen Sie append hinzu, um sie mit zusätzlichen Anweisungen zu erweitern, und setzen Sie excludeDynamicSections: true, um sitzungsspezifischen Kontext in die erste Benutzer-Nachricht zu verschieben, um bessere Prompt-Cache-Wiederverwendung über Maschinen hinweg
thinkingThinkingConfig{ type: 'adaptive' } für unterstützte ModelleSteuert das Denk-/Reasoning-Verhalten von Claude. Siehe ThinkingConfig für Optionen
toolConfigToolConfigundefinedKonfiguration für das Verhalten integrierter Tools. Siehe ToolConfig für Details
toolsstring[] | { type: 'preset'; preset: 'claude_code' }undefinedTool-Konfiguration. Übergeben Sie ein Array von Tool-Namen oder verwenden Sie die Voreinstellung, um die Standard-Tools von Claude Code zu erhalten

Query-Objekt

Schnittstelle, die von der query()-Funktion zurückgegeben wird.
interface Query extends AsyncGenerator<SDKMessage, void> {
  interrupt(): Promise<void>;
  rewindFiles(
    userMessageId: string,
    options?: { dryRun?: boolean }
  ): Promise<RewindFilesResult>;
  setPermissionMode(mode: PermissionMode): Promise<void>;
  setModel(model?: string): Promise<void>;
  setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
  initializationResult(): Promise<SDKControlInitializeResponse>;
  supportedCommands(): Promise<SlashCommand[]>;
  supportedModels(): Promise<ModelInfo[]>;
  supportedAgents(): Promise<AgentInfo[]>;
  mcpServerStatus(): Promise<McpServerStatus[]>;
  accountInfo(): Promise<AccountInfo>;
  reconnectMcpServer(serverName: string): Promise<void>;
  toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;
  setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;
  streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;
  stopTask(taskId: string): Promise<void>;
  close(): void;
}

Methoden

MethodeBeschreibung
interrupt()Unterbricht die Abfrage (nur im Streaming-Eingabemodus verfügbar)
rewindFiles(userMessageId, options?)Stellt Dateien in ihren Zustand bei der angegebenen Benutzer-Nachricht wieder her. Übergeben Sie { dryRun: true }, um Änderungen in der Vorschau anzuzeigen. Erfordert enableFileCheckpointing: true. Siehe Datei-Checkpointing
setPermissionMode()Ändert den Berechtigungsmodus (nur im Streaming-Eingabemodus verfügbar)
setModel()Ändert das Modell (nur im Streaming-Eingabemodus verfügbar)
setMaxThinkingTokens()Veraltet: Verwenden Sie stattdessen die thinking-Option. Ändert die maximalen Denk-Token
initializationResult()Gibt das vollständige Initialisierungsergebnis zurück, einschließlich unterstützter Befehle, Modelle, Kontoinformationen und Ausgabestil-Konfiguration
supportedCommands()Gibt verfügbare Slash-Befehle zurück
supportedModels()Gibt verfügbare Modelle mit Anzeigeinformationen zurück
supportedAgents()Gibt verfügbare Subagenten als AgentInfo[] zurück
mcpServerStatus()Gibt den Status verbundener MCP-Server zurück
accountInfo()Gibt Kontoinformationen zurück
reconnectMcpServer(serverName)Verbinden Sie einen MCP-Server nach Name erneut
toggleMcpServer(serverName, enabled)Aktivieren oder deaktivieren Sie einen MCP-Server nach Name
setMcpServers(servers)Ersetzen Sie dynamisch die Menge der MCP-Server für diese Sitzung. Gibt Informationen darüber zurück, welche Server hinzugefügt, entfernt und welche Fehler aufgetreten sind
streamInput(stream)Streamen Sie Eingabenachrichten zur Abfrage für Multi-Turn-Konversationen
stopTask(taskId)Beenden Sie eine laufende Hintergrund-Aufgabe nach ID
close()Schließen Sie die Abfrage und beenden Sie den zugrunde liegenden Prozess. Beendet die Abfrage erzwungen und bereinigt alle Ressourcen

WarmQuery

Handle, das von startup() zurückgegeben wird. Der Unterprozess ist bereits gespawnt und initialisiert, sodass das Aufrufen von query() auf diesem Handle die Eingabeaufforderung direkt in einen bereiten Prozess ohne Startup-Latenz schreibt.
interface WarmQuery extends AsyncDisposable {
  query(prompt: string | AsyncIterable<SDKUserMessage>): Query;
  close(): void;
}

Methoden

MethodeBeschreibung
query(prompt)Senden Sie eine Eingabeaufforderung an den vorgewärmten Unterprozess und geben Sie ein Query zurück. Kann nur einmal pro WarmQuery aufgerufen werden
close()Schließen Sie den Unterprozess, ohne eine Eingabeaufforderung zu senden. Verwenden Sie dies, um eine warme Abfrage zu verwerfen, die nicht mehr benötigt wird
WarmQuery implementiert AsyncDisposable, sodass es mit await using für automatische Bereinigung verwendet werden kann.

SDKControlInitializeResponse

Rückgabetyp von initializationResult(). Enthält Sitzungsinitialisierungsdaten.
type SDKControlInitializeResponse = {
  commands: SlashCommand[];
  agents: AgentInfo[];
  output_style: string;
  available_output_styles: string[];
  models: ModelInfo[];
  account: AccountInfo;
  fast_mode_state?: "off" | "cooldown" | "on";
};

AgentDefinition

Konfiguration für einen programmatisch definierten Subagenten.
type AgentDefinition = {
  description: string;
  tools?: string[];
  disallowedTools?: string[];
  prompt: string;
  model?: "sonnet" | "opus" | "haiku" | "inherit";
  mcpServers?: AgentMcpServerSpec[];
  skills?: string[];
  maxTurns?: number;
  criticalSystemReminder_EXPERIMENTAL?: string;
};
FeldErforderlichBeschreibung
descriptionJaNatürlichsprachige Beschreibung, wann dieser Agent verwendet werden soll
toolsNeinArray von zulässigen Tool-Namen. Wenn weggelassen, erbt alle Tools vom übergeordneten Element
disallowedToolsNeinArray von Tool-Namen, die für diesen Agent explizit nicht zulässig sind
promptJaDie Systemeingabeaufforderung des Agenten
modelNeinModellüberschreibung für diesen Agenten. Wenn weggelassen oder 'inherit', verwendet das Hauptmodell
mcpServersNeinMCP-Server-Spezifikationen für diesen Agenten
skillsNeinArray von Skill-Namen, die in den Agent-Kontext vorgeladen werden sollen
maxTurnsNeinMaximale Anzahl agentengesteuerter Turns (API-Roundtrips) vor dem Stoppen
criticalSystemReminder_EXPERIMENTALNeinExperimentell: Kritische Erinnerung, die zur Systemeingabeaufforderung hinzugefügt wird

AgentMcpServerSpec

Gibt MCP-Server an, die einem Subagenten zur Verfügung stehen. Kann ein Server-Name (Zeichenkette, die auf einen Server aus der mcpServers-Konfiguration des übergeordneten Elements verweist) oder eine Inline-Server-Konfiguration sein, die Server-Namen auf Konfigurationen abbildet.
type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;
Wobei McpServerConfigForProcessTransport McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig ist.

SettingSource

Steuert, welche dateisystembasierte Konfigurationsquellen das SDK Einstellungen aus lädt.
type SettingSource = "user" | "project" | "local";
WertBeschreibungOrt
'user'Globale Benutzereinstellungen~/.claude/settings.json
'project'Gemeinsame Projekteinstellungen (versionskontrolliert).claude/settings.json
'local'Lokale Projekteinstellungen (gitignoriert).claude/settings.local.json

Standardverhalten

Wenn settingSources weggelassen oder undefined ist, lädt query() die gleichen Dateisystem-Einstellungen wie die Claude Code CLI: Benutzer, Projekt und lokal. Verwaltete Richtlinieneinstellungen werden in allen Fällen geladen. Siehe Was settingSources nicht steuert für Eingaben, die unabhängig von dieser Option gelesen werden, und wie man sie deaktiviert.

Warum settingSources verwenden

Dateisystem-Einstellungen deaktivieren:
// Laden Sie keine Benutzer-, Projekt- oder lokalen Einstellungen von der Festplatte
const result = query({
  prompt: "Analyze this code",
  options: { settingSources: [] }
});
Alle Dateisystem-Einstellungen explizit laden:
const result = query({
  prompt: "Analyze this code",
  options: {
    settingSources: ["user", "project", "local"] // Laden Sie alle Einstellungen
  }
});
Nur bestimmte Einstellungsquellen laden:
// Laden Sie nur Projekteinstellungen, ignorieren Sie Benutzer und lokal
const result = query({
  prompt: "Run CI checks",
  options: {
    settingSources: ["project"] // Nur .claude/settings.json
  }
});
Test- und CI-Umgebungen:
// Stellen Sie konsistentes Verhalten in CI sicher, indem Sie lokale Einstellungen ausschließen
const result = query({
  prompt: "Run tests",
  options: {
    settingSources: ["project"], // Nur teamweit gemeinsame Einstellungen
    permissionMode: "bypassPermissions"
  }
});
SDK-only-Anwendungen:
// Definieren Sie alles programmatisch.
// Übergeben Sie [], um sich von Dateisystem-Einstellungsquellen abzumelden.
const result = query({
  prompt: "Review this PR",
  options: {
    settingSources: [],
    agents: {
      /* ... */
    },
    mcpServers: {
      /* ... */
    },
    allowedTools: ["Read", "Grep", "Glob"]
  }
});
Laden von CLAUDE.md-Projektanweisungen:
// Laden Sie Projekteinstellungen, um CLAUDE.md-Dateien einzubeziehen
const result = query({
  prompt: "Add a new feature following project conventions",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code" // Verwenden Sie die Systemeingabeaufforderung von Claude Code
    },
    settingSources: ["project"], // Lädt CLAUDE.md aus dem Projektverzeichnis
    allowedTools: ["Read", "Write", "Edit"]
  }
});

Einstellungspriorität

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

PermissionMode

type PermissionMode =
  | "default" // Standardberechtigungsverhalten
  | "acceptEdits" // Dateibearbeitungen automatisch akzeptieren
  | "bypassPermissions" // Alle Berechtigungsprüfungen umgehen
  | "plan" // Planungsmodus - keine Ausführung
  | "dontAsk" // Fragen Sie nicht nach Berechtigungen, verweigern Sie, wenn nicht vorab genehmigt
  | "auto"; // Verwenden Sie einen Modell-Klassifizierer, um jeden Tool-Aufruf zu genehmigen oder zu verweigern

CanUseTool

Benutzerdefinierte Berechtigungsfunktionstyp zur Steuerung der Tool-Nutzung.
type CanUseTool = (
  toolName: string,
  input: Record<string, unknown>,
  options: {
    signal: AbortSignal;
    suggestions?: PermissionUpdate[];
    blockedPath?: string;
    decisionReason?: string;
    toolUseID: string;
    agentID?: string;
  }
) => Promise<PermissionResult>;
OptionTypBeschreibung
signalAbortSignalSignalisiert, wenn die Operation abgebrochen werden soll
suggestionsPermissionUpdate[]Vorgeschlagene Berechtigungsaktualisierungen, damit der Benutzer nicht erneut für dieses Tool aufgefordert wird
blockedPathstringDer Dateipfad, der die Berechtigungsanfrage ausgelöst hat, falls zutreffend
decisionReasonstringErklärt, warum diese Berechtigungsanfrage ausgelöst wurde
toolUseIDstringEindeutige ID für diesen spezifischen Tool-Aufruf innerhalb der Assistenten-Nachricht
agentIDstringWenn innerhalb eines Sub-Agenten ausgeführt, die ID des Sub-Agenten

PermissionResult

Ergebnis einer Berechtigungsprüfung.
type PermissionResult =
  | {
      behavior: "allow";
      updatedInput?: Record<string, unknown>;
      updatedPermissions?: PermissionUpdate[];
      toolUseID?: string;
    }
  | {
      behavior: "deny";
      message: string;
      interrupt?: boolean;
      toolUseID?: string;
    };

ToolConfig

Konfiguration für das Verhalten integrierter Tools.
type ToolConfig = {
  askUserQuestion?: {
    previewFormat?: "markdown" | "html";
  };
};
FeldTypBeschreibung
askUserQuestion.previewFormat'markdown' | 'html'Aktiviert das preview-Feld auf AskUserQuestion-Optionen und legt sein Inhaltsformat fest. Wenn nicht gesetzt, gibt Claude keine Vorschau aus

McpServerConfig

Konfiguration für MCP-Server.
type McpServerConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfigWithInstance;

McpStdioServerConfig

type McpStdioServerConfig = {
  type?: "stdio";
  command: string;
  args?: string[];
  env?: Record<string, string>;
};

McpSSEServerConfig

type McpSSEServerConfig = {
  type: "sse";
  url: string;
  headers?: Record<string, string>;
};

McpHttpServerConfig

type McpHttpServerConfig = {
  type: "http";
  url: string;
  headers?: Record<string, string>;
};

McpSdkServerConfigWithInstance

type McpSdkServerConfigWithInstance = {
  type: "sdk";
  name: string;
  instance: McpServer;
};

McpClaudeAIProxyServerConfig

type McpClaudeAIProxyServerConfig = {
  type: "claudeai-proxy";
  url: string;
  id: string;
};

SdkPluginConfig

Konfiguration zum Laden von Plugins im SDK.
type SdkPluginConfig = {
  type: "local";
  path: string;
};
FeldTypBeschreibung
type'local'Muss 'local' sein (derzeit nur lokale Plugins unterstützt)
pathstringAbsoluter oder relativer Pfad zum Plugin-Verzeichnis
Beispiel:
plugins: [
  { type: "local", path: "./my-plugin" },
  { type: "local", path: "/absolute/path/to/plugin" }
];
Vollständige Informationen zum Erstellen und Verwenden von Plugins finden Sie unter Plugins.

Nachrichtentypen

SDKMessage

Union-Typ aller möglichen Nachrichten, die von der Abfrage zurückgegeben werden.
type SDKMessage =
  | SDKAssistantMessage
  | SDKUserMessage
  | SDKUserMessageReplay
  | SDKResultMessage
  | SDKSystemMessage
  | SDKPartialAssistantMessage
  | SDKCompactBoundaryMessage
  | SDKStatusMessage
  | SDKLocalCommandOutputMessage
  | SDKHookStartedMessage
  | SDKHookProgressMessage
  | SDKHookResponseMessage
  | SDKPluginInstallMessage
  | SDKToolProgressMessage
  | SDKAuthStatusMessage
  | SDKTaskNotificationMessage
  | SDKTaskStartedMessage
  | SDKTaskProgressMessage
  | SDKFilesPersistedEvent
  | SDKToolUseSummaryMessage
  | SDKRateLimitEvent
  | SDKPromptSuggestionMessage;

SDKAssistantMessage

Assistenten-Antwortnachricht.
type SDKAssistantMessage = {
  type: "assistant";
  uuid: UUID;
  session_id: string;
  message: BetaMessage; // Aus Anthropic SDK
  parent_tool_use_id: string | null;
  error?: SDKAssistantMessageError;
};
Das 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', 'billing_error', 'rate_limit', 'invalid_request', 'server_error', 'max_output_tokens' oder 'unknown'.

SDKUserMessage

Benutzer-Eingabenachricht.
type SDKUserMessage = {
  type: "user";
  uuid?: UUID;
  session_id: string;
  message: MessageParam; // Aus Anthropic SDK
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  shouldQuery?: boolean;
  tool_use_result?: unknown;
};
Setzen Sie shouldQuery auf false, 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.

SDKUserMessageReplay

Wiedergegebene Benutzer-Nachricht mit erforderlicher UUID.
type SDKUserMessageReplay = {
  type: "user";
  uuid: UUID;
  session_id: string;
  message: MessageParam;
  parent_tool_use_id: string | null;
  isSynthetic?: boolean;
  tool_use_result?: unknown;
  isReplay: true;
};

SDKResultMessage

Endgültige Ergebnis-Nachricht.
type SDKResultMessage =
  | {
      type: "result";
      subtype: "success";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      num_turns: number;
      result: string;
      stop_reason: string | null;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      structured_output?: unknown;
    }
  | {
      type: "result";
      subtype:
        | "error_max_turns"
        | "error_during_execution"
        | "error_max_budget_usd"
        | "error_max_structured_output_retries";
      uuid: UUID;
      session_id: string;
      duration_ms: number;
      duration_api_ms: number;
      is_error: boolean;
      num_turns: number;
      stop_reason: string | null;
      total_cost_usd: number;
      usage: NonNullableUsage;
      modelUsage: { [modelName: string]: ModelUsage };
      permission_denials: SDKPermissionDenial[];
      errors: string[];
    };

SDKSystemMessage

System-Initialisierungsnachricht.
type SDKSystemMessage = {
  type: "system";
  subtype: "init";
  uuid: UUID;
  session_id: string;
  agents?: string[];
  apiKeySource: ApiKeySource;
  betas?: string[];
  claude_code_version: string;
  cwd: string;
  tools: string[];
  mcp_servers: {
    name: string;
    status: string;
  }[];
  model: string;
  permissionMode: PermissionMode;
  slash_commands: string[];
  output_style: string;
  skills: string[];
  plugins: { name: string; path: string }[];
};

SDKPartialAssistantMessage

Streaming-Teilnachricht (nur wenn includePartialMessages true ist).
type SDKPartialAssistantMessage = {
  type: "stream_event";
  event: BetaRawMessageStreamEvent; // Aus Anthropic SDK
  parent_tool_use_id: string | null;
  uuid: UUID;
  session_id: string;
};

SDKCompactBoundaryMessage

Nachricht, die eine Konversations-Komprimierungsgrenze anzeigt.
type SDKCompactBoundaryMessage = {
  type: "system";
  subtype: "compact_boundary";
  uuid: UUID;
  session_id: string;
  compact_metadata: {
    trigger: "manual" | "auto";
    pre_tokens: number;
  };
};

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.
type SDKPluginInstallMessage = {
  type: "system";
  subtype: "plugin_install";
  status: "started" | "installed" | "failed" | "completed";
  name?: string;
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKPermissionDenial

Informationen über einen verweigerten Tool-Einsatz.
type SDKPermissionDenial = {
  tool_name: string;
  tool_use_id: string;
  tool_input: Record<string, unknown>;
};

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.
type HookEvent =
  | "PreToolUse"
  | "PostToolUse"
  | "PostToolUseFailure"
  | "Notification"
  | "UserPromptSubmit"
  | "SessionStart"
  | "SessionEnd"
  | "Stop"
  | "SubagentStart"
  | "SubagentStop"
  | "PreCompact"
  | "PermissionRequest"
  | "Setup"
  | "TeammateIdle"
  | "TaskCompleted"
  | "ConfigChange"
  | "WorktreeCreate"
  | "WorktreeRemove";

HookCallback

Hook-Callback-Funktionstyp.
type HookCallback = (
  input: HookInput, // Union aller Hook-Eingabetypen
  toolUseID: string | undefined,
  options: { signal: AbortSignal }
) => Promise<HookJSONOutput>;

HookCallbackMatcher

Hook-Konfiguration mit optionalem Matcher.
interface HookCallbackMatcher {
  matcher?: string;
  hooks: HookCallback[];
  timeout?: number; // Timeout in Sekunden für alle Hooks in diesem Matcher
}

HookInput

Union-Typ aller Hook-Eingabetypen.
type HookInput =
  | PreToolUseHookInput
  | PostToolUseHookInput
  | PostToolUseFailureHookInput
  | NotificationHookInput
  | UserPromptSubmitHookInput
  | SessionStartHookInput
  | SessionEndHookInput
  | StopHookInput
  | SubagentStartHookInput
  | SubagentStopHookInput
  | PreCompactHookInput
  | PermissionRequestHookInput
  | SetupHookInput
  | TeammateIdleHookInput
  | TaskCompletedHookInput
  | ConfigChangeHookInput
  | WorktreeCreateHookInput
  | WorktreeRemoveHookInput;

BaseHookInput

Basis-Schnittstelle, die alle Hook-Eingabetypen erweitern.
type BaseHookInput = {
  session_id: string;
  transcript_path: string;
  cwd: string;
  permission_mode?: string;
  agent_id?: string;
  agent_type?: string;
};

PreToolUseHookInput

type PreToolUseHookInput = BaseHookInput & {
  hook_event_name: "PreToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
};

PostToolUseHookInput

type PostToolUseHookInput = BaseHookInput & {
  hook_event_name: "PostToolUse";
  tool_name: string;
  tool_input: unknown;
  tool_response: unknown;
  tool_use_id: string;
};

PostToolUseFailureHookInput

type PostToolUseFailureHookInput = BaseHookInput & {
  hook_event_name: "PostToolUseFailure";
  tool_name: string;
  tool_input: unknown;
  tool_use_id: string;
  error: string;
  is_interrupt?: boolean;
};

NotificationHookInput

type NotificationHookInput = BaseHookInput & {
  hook_event_name: "Notification";
  message: string;
  title?: string;
  notification_type: string;
};

UserPromptSubmitHookInput

type UserPromptSubmitHookInput = BaseHookInput & {
  hook_event_name: "UserPromptSubmit";
  prompt: string;
};

SessionStartHookInput

type SessionStartHookInput = BaseHookInput & {
  hook_event_name: "SessionStart";
  source: "startup" | "resume" | "clear" | "compact";
  agent_type?: string;
  model?: string;
};

SessionEndHookInput

type SessionEndHookInput = BaseHookInput & {
  hook_event_name: "SessionEnd";
  reason: ExitReason; // String aus EXIT_REASONS-Array
};

StopHookInput

type StopHookInput = BaseHookInput & {
  hook_event_name: "Stop";
  stop_hook_active: boolean;
  last_assistant_message?: string;
};

SubagentStartHookInput

type SubagentStartHookInput = BaseHookInput & {
  hook_event_name: "SubagentStart";
  agent_id: string;
  agent_type: string;
};

SubagentStopHookInput

type SubagentStopHookInput = BaseHookInput & {
  hook_event_name: "SubagentStop";
  stop_hook_active: boolean;
  agent_id: string;
  agent_transcript_path: string;
  agent_type: string;
  last_assistant_message?: string;
};

PreCompactHookInput

type PreCompactHookInput = BaseHookInput & {
  hook_event_name: "PreCompact";
  trigger: "manual" | "auto";
  custom_instructions: string | null;
};

PermissionRequestHookInput

type PermissionRequestHookInput = BaseHookInput & {
  hook_event_name: "PermissionRequest";
  tool_name: string;
  tool_input: unknown;
  permission_suggestions?: PermissionUpdate[];
};

SetupHookInput

type SetupHookInput = BaseHookInput & {
  hook_event_name: "Setup";
  trigger: "init" | "maintenance";
};

TeammateIdleHookInput

type TeammateIdleHookInput = BaseHookInput & {
  hook_event_name: "TeammateIdle";
  teammate_name: string;
  team_name: string;
};

TaskCompletedHookInput

type TaskCompletedHookInput = BaseHookInput & {
  hook_event_name: "TaskCompleted";
  task_id: string;
  task_subject: string;
  task_description?: string;
  teammate_name?: string;
  team_name?: string;
};

ConfigChangeHookInput

type ConfigChangeHookInput = BaseHookInput & {
  hook_event_name: "ConfigChange";
  source:
    | "user_settings"
    | "project_settings"
    | "local_settings"
    | "policy_settings"
    | "skills";
  file_path?: string;
};

WorktreeCreateHookInput

type WorktreeCreateHookInput = BaseHookInput & {
  hook_event_name: "WorktreeCreate";
  name: string;
};

WorktreeRemoveHookInput

type WorktreeRemoveHookInput = BaseHookInput & {
  hook_event_name: "WorktreeRemove";
  worktree_path: string;
};

HookJSONOutput

Hook-Rückgabewert.
type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

AsyncHookJSONOutput

type AsyncHookJSONOutput = {
  async: true;
  asyncTimeout?: number;
};

SyncHookJSONOutput

type SyncHookJSONOutput = {
  continue?: boolean;
  suppressOutput?: boolean;
  stopReason?: string;
  decision?: "approve" | "block";
  systemMessage?: string;
  reason?: string;
  hookSpecificOutput?:
    | {
        hookEventName: "PreToolUse";
        permissionDecision?: "allow" | "deny" | "ask";
        permissionDecisionReason?: string;
        updatedInput?: Record<string, unknown>;
        additionalContext?: string;
      }
    | {
        hookEventName: "UserPromptSubmit";
        additionalContext?: string;
      }
    | {
        hookEventName: "SessionStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "Setup";
        additionalContext?: string;
      }
    | {
        hookEventName: "SubagentStart";
        additionalContext?: string;
      }
    | {
        hookEventName: "PostToolUse";
        additionalContext?: string;
        updatedMCPToolOutput?: unknown;
      }
    | {
        hookEventName: "PostToolUseFailure";
        additionalContext?: string;
      }
    | {
        hookEventName: "Notification";
        additionalContext?: string;
      }
    | {
        hookEventName: "PermissionRequest";
        decision:
          | {
              behavior: "allow";
              updatedInput?: Record<string, unknown>;
              updatedPermissions?: PermissionUpdate[];
            }
          | {
              behavior: "deny";
              message?: string;
              interrupt?: boolean;
            };
      };
};

Tool-Eingabetypen

Dokumentation von Eingabeschemas für alle integrierten Claude Code-Tools. Diese Typen werden aus @anthropic-ai/claude-agent-sdk exportiert und können für typsichere Tool-Interaktionen verwendet werden.

ToolInputSchemas

Union aller Tool-Eingabetypen, exportiert aus @anthropic-ai/claude-agent-sdk.
type ToolInputSchemas =
  | AgentInput
  | AskUserQuestionInput
  | BashInput
  | TaskOutputInput
  | ConfigInput
  | EnterWorktreeInput
  | ExitPlanModeInput
  | FileEditInput
  | FileReadInput
  | FileWriteInput
  | GlobInput
  | GrepInput
  | ListMcpResourcesInput
  | McpInput
  | MonitorInput
  | NotebookEditInput
  | ReadMcpResourceInput
  | SubscribeMcpResourceInput
  | SubscribePollingInput
  | TaskStopInput
  | TodoWriteInput
  | UnsubscribeMcpResourceInput
  | UnsubscribePollingInput
  | WebFetchInput
  | WebSearchInput;

Agent

Tool-Name: Agent (zuvor Task, das immer noch als Alias akzeptiert wird)
type AgentInput = {
  description: string;
  prompt: string;
  subagent_type: string;
  model?: "sonnet" | "opus" | "haiku";
  resume?: string;
  run_in_background?: boolean;
  max_turns?: number;
  name?: string;
  team_name?: string;
  mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";
  isolation?: "worktree";
};
Startet einen neuen Agenten, um komplexe, mehrstufige Aufgaben autonom zu bewältigen.

AskUserQuestion

Tool-Name: AskUserQuestion
type AskUserQuestionInput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
};
Stellt dem Benutzer während der Ausführung Klärungsfragen. Siehe Genehmigungen und Benutzereingaben verarbeiten für Verwendungsdetails.

Bash

Tool-Name: Bash
type BashInput = {
  command: string;
  timeout?: number;
  description?: string;
  run_in_background?: boolean;
  dangerouslyDisableSandbox?: boolean;
};
Führt Bash-Befehle in einer persistenten Shell-Sitzung mit optionalem Timeout und Hintergrundausführung aus.

Monitor

Tool-Name: Monitor
type MonitorInput = {
  command: string;
  description: string;
  timeout_ms?: number;
  persistent?: boolean;
};
Führt ein Hintergrund-Skript aus und liefert jede Stdout-Zeile an Claude als Ereignis, damit es reagieren kann, ohne zu pollen. Setzen Sie persistent: true für Sitzungslängen-Watches wie Log-Tails. Monitor folgt den gleichen Berechtigungsregeln wie Bash. Siehe die Monitor-Tool-Referenz für Verhalten und Anbieter-Verfügbarkeit.

TaskOutput

Tool-Name: TaskOutput
type TaskOutputInput = {
  task_id: string;
  block: boolean;
  timeout: number;
};
Ruft die Ausgabe einer laufenden oder abgeschlossenen Hintergrund-Aufgabe ab.

Edit

Tool-Name: Edit
type FileEditInput = {
  file_path: string;
  old_string: string;
  new_string: string;
  replace_all?: boolean;
};
Führt exakte String-Ersetzungen in Dateien durch.

Read

Tool-Name: Read
type FileReadInput = {
  file_path: string;
  offset?: number;
  limit?: number;
  pages?: string;
};
Liest Dateien aus dem lokalen Dateisystem, einschließlich Text, Bilder, PDFs und Jupyter-Notebooks. Verwenden Sie pages für PDF-Seitenbereiche (z. B. "1-5").

Write

Tool-Name: Write
type FileWriteInput = {
  file_path: string;
  content: string;
};
Schreibt eine Datei in das lokale Dateisystem, überschreibt, falls vorhanden.

Glob

Tool-Name: Glob
type GlobInput = {
  pattern: string;
  path?: string;
};
Schnelle Datei-Musterabstimmung, die mit jeder Codebasis-Größe funktioniert.

Grep

Tool-Name: Grep
type GrepInput = {
  pattern: string;
  path?: string;
  glob?: string;
  type?: string;
  output_mode?: "content" | "files_with_matches" | "count";
  "-i"?: boolean;
  "-n"?: boolean;
  "-B"?: number;
  "-A"?: number;
  "-C"?: number;
  context?: number;
  head_limit?: number;
  offset?: number;
  multiline?: boolean;
};
Leistungsstarkes Suchtool, das auf ripgrep mit Regex-Unterstützung basiert.

TaskStop

Tool-Name: TaskStop
type TaskStopInput = {
  task_id?: string;
  shell_id?: string; // Veraltet: Verwenden Sie task_id
};
Beendet eine laufende Hintergrund-Aufgabe oder Shell nach ID.

NotebookEdit

Tool-Name: NotebookEdit
type NotebookEditInput = {
  notebook_path: string;
  cell_id?: string;
  new_source: string;
  cell_type?: "code" | "markdown";
  edit_mode?: "replace" | "insert" | "delete";
};
Bearbeitet Zellen in Jupyter-Notebook-Dateien.

WebFetch

Tool-Name: WebFetch
type WebFetchInput = {
  url: string;
  prompt: string;
};
Ruft Inhalte von einer URL ab und verarbeitet sie mit einem KI-Modell.

WebSearch

Tool-Name: WebSearch
type WebSearchInput = {
  query: string;
  allowed_domains?: string[];
  blocked_domains?: string[];
};
Durchsucht das Web und gibt formatierte Ergebnisse zurück.

TodoWrite

Tool-Name: TodoWrite
type TodoWriteInput = {
  todos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Erstellt und verwaltet eine strukturierte Aufgabenliste zum Verfolgen des Fortschritts.

ExitPlanMode

Tool-Name: ExitPlanMode
type ExitPlanModeInput = {
  allowedPrompts?: Array<{
    tool: "Bash";
    prompt: string;
  }>;
};
Beendet den Planungsmodus. Optional gibt Eingabeaufforderungsbasierte Berechtigungen an, die zur Implementierung des Plans erforderlich sind.

ListMcpResources

Tool-Name: ListMcpResources
type ListMcpResourcesInput = {
  server?: string;
};
Listet verfügbare MCP-Ressourcen von verbundenen Servern auf.

ReadMcpResource

Tool-Name: ReadMcpResource
type ReadMcpResourceInput = {
  server: string;
  uri: string;
};
Liest eine bestimmte MCP-Ressource von einem Server.

Config

Tool-Name: Config
type ConfigInput = {
  setting: string;
  value?: string | boolean | number;
};
Ruft einen Konfigurationswert ab oder setzt ihn.

EnterWorktree

Tool-Name: EnterWorktree
type EnterWorktreeInput = {
  name?: string;
  path?: string;
};
Erstellt und betritt einen temporären Git-Worktree für isolierte Arbeit. Übergeben Sie path, um stattdessen in einen vorhandenen Worktree des aktuellen Repositorys zu wechseln. name und path schließen sich gegenseitig aus.

Tool-Ausgabetypen

Dokumentation von Ausgabeschemas für alle integrierten Claude Code-Tools. Diese Typen werden aus @anthropic-ai/claude-agent-sdk exportiert und stellen die tatsächlichen Antwortdaten dar, die von jedem Tool zurückgegeben werden.

ToolOutputSchemas

Union aller Tool-Ausgabetypen.
type ToolOutputSchemas =
  | AgentOutput
  | AskUserQuestionOutput
  | BashOutput
  | ConfigOutput
  | EnterWorktreeOutput
  | ExitPlanModeOutput
  | FileEditOutput
  | FileReadOutput
  | FileWriteOutput
  | GlobOutput
  | GrepOutput
  | ListMcpResourcesOutput
  | MonitorOutput
  | NotebookEditOutput
  | ReadMcpResourceOutput
  | TaskStopOutput
  | TodoWriteOutput
  | WebFetchOutput
  | WebSearchOutput;

Agent

Tool-Name: Agent (zuvor Task, das immer noch als Alias akzeptiert wird)
type AgentOutput =
  | {
      status: "completed";
      agentId: string;
      content: Array<{ type: "text"; text: string }>;
      totalToolUseCount: number;
      totalDurationMs: number;
      totalTokens: number;
      usage: {
        input_tokens: number;
        output_tokens: number;
        cache_creation_input_tokens: number | null;
        cache_read_input_tokens: number | null;
        server_tool_use: {
          web_search_requests: number;
          web_fetch_requests: number;
        } | null;
        service_tier: ("standard" | "priority" | "batch") | null;
        cache_creation: {
          ephemeral_1h_input_tokens: number;
          ephemeral_5m_input_tokens: number;
        } | null;
      };
      prompt: string;
    }
  | {
      status: "async_launched";
      agentId: string;
      description: string;
      prompt: string;
      outputFile: string;
      canReadOutputFile?: boolean;
    }
  | {
      status: "sub_agent_entered";
      description: string;
      message: string;
    };
Gibt das Ergebnis vom Subagenten zurück. Diskriminiert nach dem status-Feld: "completed" für abgeschlossene Aufgaben, "async_launched" für Hintergrund-Aufgaben und "sub_agent_entered" für interaktive Subagenten.

AskUserQuestion

Tool-Name: AskUserQuestion
type AskUserQuestionOutput = {
  questions: Array<{
    question: string;
    header: string;
    options: Array<{ label: string; description: string; preview?: string }>;
    multiSelect: boolean;
  }>;
  answers: Record<string, string>;
};
Gibt die gestellten Fragen und die Antworten des Benutzers zurück.

Bash

Tool-Name: Bash
type BashOutput = {
  stdout: string;
  stderr: string;
  rawOutputPath?: string;
  interrupted: boolean;
  isImage?: boolean;
  backgroundTaskId?: string;
  backgroundedByUser?: boolean;
  dangerouslyDisableSandbox?: boolean;
  returnCodeInterpretation?: string;
  structuredContent?: unknown[];
  persistedOutputPath?: string;
  persistedOutputSize?: number;
};
Gibt Befehlsausgabe mit aufgeteiltem Stdout/Stderr zurück. Hintergrund-Befehle enthalten eine backgroundTaskId.

Monitor

Tool-Name: Monitor
type MonitorOutput = {
  taskId: string;
  timeoutMs: number;
  persistent?: boolean;
};
Gibt die Hintergrund-Aufgaben-ID für den laufenden Monitor zurück. Verwenden Sie diese ID mit TaskStop, um die Watch früh zu stornieren.

Edit

Tool-Name: Edit
type FileEditOutput = {
  filePath: string;
  oldString: string;
  newString: string;
  originalFile: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  userModified: boolean;
  replaceAll: boolean;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Gibt den strukturierten Diff der Bearbeitungsoperation zurück.

Read

Tool-Name: Read
type FileReadOutput =
  | {
      type: "text";
      file: {
        filePath: string;
        content: string;
        numLines: number;
        startLine: number;
        totalLines: number;
      };
    }
  | {
      type: "image";
      file: {
        base64: string;
        type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        originalSize: number;
        dimensions?: {
          originalWidth?: number;
          originalHeight?: number;
          displayWidth?: number;
          displayHeight?: number;
        };
      };
    }
  | {
      type: "notebook";
      file: {
        filePath: string;
        cells: unknown[];
      };
    }
  | {
      type: "pdf";
      file: {
        filePath: string;
        base64: string;
        originalSize: number;
      };
    }
  | {
      type: "parts";
      file: {
        filePath: string;
        originalSize: number;
        count: number;
        outputDir: string;
      };
    };
Gibt Dateiinhalte in einem Format zurück, das für den Dateityp geeignet ist. Diskriminiert nach dem type-Feld.

Write

Tool-Name: Write
type FileWriteOutput = {
  type: "create" | "update";
  filePath: string;
  content: string;
  structuredPatch: Array<{
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: string[];
  }>;
  originalFile: string | null;
  gitDiff?: {
    filename: string;
    status: "modified" | "added";
    additions: number;
    deletions: number;
    changes: number;
    patch: string;
  };
};
Gibt das Schreib-Ergebnis mit strukturierten Diff-Informationen zurück.

Glob

Tool-Name: Glob
type GlobOutput = {
  durationMs: number;
  numFiles: number;
  filenames: string[];
  truncated: boolean;
};
Gibt Dateipfade zurück, die dem Glob-Muster entsprechen, sortiert nach Änderungszeit.

Grep

Tool-Name: Grep
type GrepOutput = {
  mode?: "content" | "files_with_matches" | "count";
  numFiles: number;
  filenames: string[];
  content?: string;
  numLines?: number;
  numMatches?: number;
  appliedLimit?: number;
  appliedOffset?: number;
};
Gibt Suchergebnisse zurück. Die Form variiert je nach mode: Dateiliste, Inhalt mit Übereinstimmungen oder Übereinstimmungszahlen.

TaskStop

Tool-Name: TaskStop
type TaskStopOutput = {
  message: string;
  task_id: string;
  task_type: string;
  command?: string;
};
Gibt Bestätigung nach dem Stoppen der Hintergrund-Aufgabe zurück.

NotebookEdit

Tool-Name: NotebookEdit
type NotebookEditOutput = {
  new_source: string;
  cell_id?: string;
  cell_type: "code" | "markdown";
  language: string;
  edit_mode: string;
  error?: string;
  notebook_path: string;
  original_file: string;
  updated_file: string;
};
Gibt das Ergebnis der Notebook-Bearbeitung mit ursprünglichen und aktualisierten Dateiinhalten zurück.

WebFetch

Tool-Name: WebFetch
type WebFetchOutput = {
  bytes: number;
  code: number;
  codeText: string;
  result: string;
  durationMs: number;
  url: string;
};
Gibt den abgerufenen Inhalt mit HTTP-Status und Metadaten zurück.

WebSearch

Tool-Name: WebSearch
type WebSearchOutput = {
  query: string;
  results: Array<
    | {
        tool_use_id: string;
        content: Array<{ title: string; url: string }>;
      }
    | string
  >;
  durationSeconds: number;
};
Gibt Suchergebnisse aus dem Web zurück.

TodoWrite

Tool-Name: TodoWrite
type TodoWriteOutput = {
  oldTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
  newTodos: Array<{
    content: string;
    status: "pending" | "in_progress" | "completed";
    activeForm: string;
  }>;
};
Gibt die vorherigen und aktualisierten Aufgabenlisten zurück.

ExitPlanMode

Tool-Name: ExitPlanMode
type ExitPlanModeOutput = {
  plan: string | null;
  isAgent: boolean;
  filePath?: string;
  hasTaskTool?: boolean;
  awaitingLeaderApproval?: boolean;
  requestId?: string;
};
Gibt den Planzustand nach dem Beenden des Planungsmodus zurück.

ListMcpResources

Tool-Name: ListMcpResources
type ListMcpResourcesOutput = Array<{
  uri: string;
  name: string;
  mimeType?: string;
  description?: string;
  server: string;
}>;
Gibt ein Array verfügbarer MCP-Ressourcen zurück.

ReadMcpResource

Tool-Name: ReadMcpResource
type ReadMcpResourceOutput = {
  contents: Array<{
    uri: string;
    mimeType?: string;
    text?: string;
  }>;
};
Gibt die Inhalte der angeforderten MCP-Ressource zurück.

Config

Tool-Name: Config
type ConfigOutput = {
  success: boolean;
  operation?: "get" | "set";
  setting?: string;
  value?: unknown;
  previousValue?: unknown;
  newValue?: unknown;
  error?: string;
};
Gibt das Ergebnis einer Konfiguration-Get- oder Set-Operation zurück.

EnterWorktree

Tool-Name: EnterWorktree
type EnterWorktreeOutput = {
  worktreePath: string;
  worktreeBranch?: string;
  message: string;
};
Gibt Informationen über den Git-Worktree zurück.

Berechtigungstypen

PermissionUpdate

Operationen zum Aktualisieren von Berechtigungen.
type PermissionUpdate =
  | {
      type: "addRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "replaceRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeRules";
      rules: PermissionRuleValue[];
      behavior: PermissionBehavior;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "setMode";
      mode: PermissionMode;
      destination: PermissionUpdateDestination;
    }
  | {
      type: "addDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    }
  | {
      type: "removeDirectories";
      directories: string[];
      destination: PermissionUpdateDestination;
    };

PermissionBehavior

type PermissionBehavior = "allow" | "deny" | "ask";

PermissionUpdateDestination

type PermissionUpdateDestination =
  | "userSettings" // Globale Benutzereinstellungen
  | "projectSettings" // Pro-Verzeichnis-Projekteinstellungen
  | "localSettings" // Gitignorierte lokale Einstellungen
  | "session" // Nur aktuelle Sitzung
  | "cliArg"; // CLI-Argument

PermissionRuleValue

type PermissionRuleValue = {
  toolName: string;
  ruleContent?: string;
};

Andere Typen

ApiKeySource

type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

SdkBeta

Verfügbare Beta-Funktionen, die über die betas-Option aktiviert werden können. Siehe Beta-Header für weitere Informationen.
type SdkBeta = "context-1m-2025-08-07";
Das context-1m-2025-08-07-Beta ist ab dem 30. April 2026 veraltet. Das Übergeben dieses Wertes mit Claude Sonnet 4.5 oder Sonnet 4 hat keine Auswirkung, und Anfragen, die das Standard-200k-Token-Kontextfenster überschreiten, geben einen Fehler zurück. Um ein 1M-Token-Kontextfenster zu verwenden, migrieren Sie zu Claude Sonnet 4.6, Claude Opus 4.6 oder Claude Opus 4.7, die 1M-Kontext zu Standardpreisen ohne Beta-Header enthalten.

SlashCommand

Informationen über einen verfügbaren Slash-Befehl.
type SlashCommand = {
  name: string;
  description: string;
  argumentHint: string;
};

ModelInfo

Informationen über ein verfügbares Modell.
type ModelInfo = {
  value: string;
  displayName: string;
  description: string;
  supportsEffort?: boolean;
  supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];
  supportsAdaptiveThinking?: boolean;
  supportsFastMode?: boolean;
};

AgentInfo

Informationen über einen verfügbaren Subagenten, der über das Agent-Tool aufgerufen werden kann.
type AgentInfo = {
  name: string;
  description: string;
  model?: string;
};
FeldTypBeschreibung
namestringAgent-Typ-Identifikator (z. B. "Explore", "general-purpose")
descriptionstringBeschreibung, wann dieser Agent verwendet werden soll
modelstring | undefinedModell-Alias, den dieser Agent verwendet. Wenn weggelassen, erbt das übergeordnete Modell

McpServerStatus

Status eines verbundenen MCP-Servers.
type McpServerStatus = {
  name: string;
  status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";
  serverInfo?: {
    name: string;
    version: string;
  };
  error?: string;
  config?: McpServerStatusConfig;
  scope?: string;
  tools?: {
    name: string;
    description?: string;
    annotations?: {
      readOnly?: boolean;
      destructive?: boolean;
      openWorld?: boolean;
    };
  }[];
};

McpServerStatusConfig

Die Konfiguration eines MCP-Servers, wie von mcpServerStatus() gemeldet. Dies ist die Union aller MCP-Server-Transporttypen.
type McpServerStatusConfig =
  | McpStdioServerConfig
  | McpSSEServerConfig
  | McpHttpServerConfig
  | McpSdkServerConfig
  | McpClaudeAIProxyServerConfig;
Siehe McpServerConfig für Details zu jedem Transporttyp.

AccountInfo

Kontoinformationen für den authentifizierten Benutzer.
type AccountInfo = {
  email?: string;
  organization?: string;
  subscriptionType?: string;
  tokenSource?: string;
  apiKeySource?: string;
};

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 Abrechnungsvorbehalt.
type ModelUsage = {
  inputTokens: number;
  outputTokens: number;
  cacheReadInputTokens: number;
  cacheCreationInputTokens: number;
  webSearchRequests: number;
  costUSD: number;
  contextWindow: number;
  maxOutputTokens: number;
};

ConfigScope

type ConfigScope = "local" | "user" | "project";

NonNullableUsage

Eine Version von Usage mit allen nullable Feldern, die nicht nullable gemacht werden.
type NonNullableUsage = {
  [K in keyof Usage]: NonNullable<Usage[K]>;
};

Usage

Token-Nutzungsstatistiken (aus @anthropic-ai/sdk).
type Usage = {
  input_tokens: number | null;
  output_tokens: number | null;
  cache_creation_input_tokens?: number | null;
  cache_read_input_tokens?: number | null;
};

CallToolResult

MCP-Tool-Ergebnistyp (aus @modelcontextprotocol/sdk/types.js).
type CallToolResult = {
  content: Array<{
    type: "text" | "image" | "resource";
    // Zusätzliche Felder variieren je nach Typ
  }>;
  isError?: boolean;
};

ThinkingConfig

Steuert das Denk-/Reasoning-Verhalten von Claude. Hat Vorrang vor dem veralteten maxThinkingTokens.
type ThinkingConfig =
  | { type: "adaptive" } // Das Modell bestimmt, wann und wie viel zu denken ist (Opus 4.6+)
  | { type: "enabled"; budgetTokens?: number } // Festes Denk-Token-Budget
  | { type: "disabled" }; // Kein erweitertes Denken

SpawnedProcess

Schnittstelle für benutzerdefiniertes Process-Spawning (verwendet mit spawnClaudeCodeProcess-Option). ChildProcess erfüllt bereits diese Schnittstelle.
interface SpawnedProcess {
  stdin: Writable;
  stdout: Readable;
  readonly killed: boolean;
  readonly exitCode: number | null;
  kill(signal: NodeJS.Signals): boolean;
  on(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  on(event: "error", listener: (error: Error) => void): void;
  once(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  once(event: "error", listener: (error: Error) => void): void;
  off(
    event: "exit",
    listener: (code: number | null, signal: NodeJS.Signals | null) => void
  ): void;
  off(event: "error", listener: (error: Error) => void): void;
}

SpawnOptions

Optionen, die an die benutzerdefinierte Spawn-Funktion übergeben werden.
interface SpawnOptions {
  command: string;
  args: string[];
  cwd?: string;
  env: Record<string, string | undefined>;
  signal: AbortSignal;
}

McpSetServersResult

Ergebnis einer setMcpServers()-Operation.
type McpSetServersResult = {
  added: string[];
  removed: string[];
  errors: Record<string, string>;
};

RewindFilesResult

Ergebnis einer rewindFiles()-Operation.
type RewindFilesResult = {
  canRewind: boolean;
  error?: string;
  filesChanged?: string[];
  insertions?: number;
  deletions?: number;
};

SDKStatusMessage

Status-Update-Nachricht (z. B. Komprimierung).
type SDKStatusMessage = {
  type: "system";
  subtype: "status";
  status: "compacting" | null;
  permissionMode?: PermissionMode;
  uuid: UUID;
  session_id: string;
};

SDKTaskNotificationMessage

Benachrichtigung, wenn eine Hintergrund-Aufgabe abgeschlossen, fehlgeschlagen oder gestoppt wird. Hintergrund-Aufgaben umfassen run_in_background Bash-Befehle, Monitor-Watches und Hintergrund-Subagenten.
type SDKTaskNotificationMessage = {
  type: "system";
  subtype: "task_notification";
  task_id: string;
  tool_use_id?: string;
  status: "completed" | "failed" | "stopped";
  output_file: string;
  summary: string;
  usage?: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKToolUseSummaryMessage

Zusammenfassung der Tool-Nutzung in einer Konversation.
type SDKToolUseSummaryMessage = {
  type: "tool_use_summary";
  summary: string;
  preceding_tool_use_ids: string[];
  uuid: UUID;
  session_id: string;
};

SDKHookStartedMessage

Wird ausgegeben, wenn ein Hook mit der Ausführung beginnt.
type SDKHookStartedMessage = {
  type: "system";
  subtype: "hook_started";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  uuid: UUID;
  session_id: string;
};

SDKHookProgressMessage

Wird ausgegeben, während ein Hook läuft, mit Stdout/Stderr-Ausgabe.
type SDKHookProgressMessage = {
  type: "system";
  subtype: "hook_progress";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  stdout: string;
  stderr: string;
  output: string;
  uuid: UUID;
  session_id: string;
};

SDKHookResponseMessage

Wird ausgegeben, wenn ein Hook die Ausführung beendet.
type SDKHookResponseMessage = {
  type: "system";
  subtype: "hook_response";
  hook_id: string;
  hook_name: string;
  hook_event: string;
  output: string;
  stdout: string;
  stderr: string;
  exit_code?: number;
  outcome: "success" | "error" | "cancelled";
  uuid: UUID;
  session_id: string;
};

SDKToolProgressMessage

Wird regelmäßig ausgegeben, während ein Tool ausgeführt wird, um Fortschritt anzuzeigen.
type SDKToolProgressMessage = {
  type: "tool_progress";
  tool_use_id: string;
  tool_name: string;
  parent_tool_use_id: string | null;
  elapsed_time_seconds: number;
  task_id?: string;
  uuid: UUID;
  session_id: string;
};

SDKAuthStatusMessage

Wird während Authentifizierungsflüssen ausgegeben.
type SDKAuthStatusMessage = {
  type: "auth_status";
  isAuthenticating: boolean;
  output: string[];
  error?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskStartedMessage

Wird ausgegeben, wenn eine Hintergrund-Aufgabe beginnt. Das task_type-Feld ist "local_bash" für Hintergrund-Bash-Befehle und Monitor-Watches, "local_agent" für Subagenten oder "remote_agent".
type SDKTaskStartedMessage = {
  type: "system";
  subtype: "task_started";
  task_id: string;
  tool_use_id?: string;
  description: string;
  task_type?: string;
  uuid: UUID;
  session_id: string;
};

SDKTaskProgressMessage

Wird regelmäßig ausgegeben, während eine Hintergrund-Aufgabe läuft.
type SDKTaskProgressMessage = {
  type: "system";
  subtype: "task_progress";
  task_id: string;
  tool_use_id?: string;
  description: string;
  usage: {
    total_tokens: number;
    tool_uses: number;
    duration_ms: number;
  };
  last_tool_name?: string;
  uuid: UUID;
  session_id: string;
};

SDKFilesPersistedEvent

Wird ausgegeben, wenn Datei-Checkpoints auf der Festplatte persistiert werden.
type SDKFilesPersistedEvent = {
  type: "system";
  subtype: "files_persisted";
  files: { filename: string; file_id: string }[];
  failed: { filename: string; error: string }[];
  processed_at: string;
  uuid: UUID;
  session_id: string;
};

SDKRateLimitEvent

Wird ausgegeben, wenn die Sitzung auf ein Ratenlimit trifft.
type SDKRateLimitEvent = {
  type: "rate_limit_event";
  rate_limit_info: {
    status: "allowed" | "allowed_warning" | "rejected";
    resetsAt?: number;
    utilization?: number;
  };
  uuid: UUID;
  session_id: string;
};

SDKLocalCommandOutputMessage

Ausgabe aus einem lokalen Slash-Befehl (z. B. /voice oder /cost). Wird als Assistenten-ähnlicher Text im Transkript angezeigt.
type SDKLocalCommandOutputMessage = {
  type: "system";
  subtype: "local_command_output";
  content: string;
  uuid: UUID;
  session_id: string;
};

SDKPromptSuggestionMessage

Wird nach jedem Turn ausgegeben, wenn promptSuggestions aktiviert ist. Enthält eine vorhergesagte nächste Benutzer-Eingabeaufforderung.
type SDKPromptSuggestionMessage = {
  type: "prompt_suggestion";
  suggestion: string;
  uuid: UUID;
  session_id: string;
};

AbortError

Benutzerdefinierte Fehlerklasse für Abbruchoperationen.
class AbortError extends Error {}

Sandbox-Konfiguration

SandboxSettings

Konfiguration für Sandbox-Verhalten. Verwenden Sie dies, um Command-Sandboxing zu aktivieren und Netzwerkbeschränkungen programmatisch zu konfigurieren.
type SandboxSettings = {
  enabled?: boolean;
  autoAllowBashIfSandboxed?: boolean;
  excludedCommands?: string[];
  allowUnsandboxedCommands?: boolean;
  network?: SandboxNetworkConfig;
  filesystem?: SandboxFilesystemConfig;
  ignoreViolations?: Record<string, string[]>;
  enableWeakerNestedSandbox?: boolean;
  ripgrep?: { command: string; args?: string[] };
};
EigenschaftTypStandardBeschreibung
enabledbooleanfalseAktivieren Sie den Sandbox-Modus für die Befehlsausführung
autoAllowBashIfSandboxedbooleantrueBash-Befehle automatisch genehmigen, wenn Sandbox aktiviert ist
excludedCommandsstring[][]Befehle, die immer Sandbox-Beschränkungen umgehen (z. B. ['docker']). Diese werden automatisch ohne Modellbeteiligung unsandboxed ausgeführt
allowUnsandboxedCommandsbooleantrueErlauben Sie dem Modell, die Ausführung von Befehlen außerhalb der Sandbox anzufordern. Wenn true, kann das Modell dangerouslyDisableSandbox in der Tool-Eingabe setzen, was auf das Berechtigungssystem zurückfällt
networkSandboxNetworkConfigundefinedNetzwerkspezifische Sandbox-Konfiguration
filesystemSandboxFilesystemConfigundefinedDateisystemspezifische Sandbox-Konfiguration für Lese-/Schreibbeschränkungen
ignoreViolationsRecord<string, string[]>undefinedZuordnung von Verletzungskategorien zu Mustern zum Ignorieren (z. B. { file: ['/tmp/*'], network: ['localhost'] })
enableWeakerNestedSandboxbooleanfalseAktivieren Sie eine schwächere verschachtelte Sandbox für Kompatibilität
ripgrep{ command: string; args?: string[] }undefinedBenutzerdefinierte ripgrep-Binärkonfiguration für Sandbox-Umgebungen

Beispielverwendung

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Build and test my project",
  options: {
    sandbox: {
      enabled: true,
      autoAllowBashIfSandboxed: true,
      network: {
        allowLocalBinding: true
      }
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Unix-Socket-Sicherheit: Die allowUnixSockets-Option kann Zugriff auf leistungsstarke Systemdienste gewähren. Beispielsweise gewährt das Zulassen von /var/run/docker.sock effektiv vollständigen Host-Systemzugriff über die Docker-API und umgeht die Sandbox-Isolierung. Lassen Sie nur Unix-Sockets zu, die unbedingt erforderlich sind, und verstehen Sie die Sicherheitsauswirkungen jedes einzelnen.

SandboxNetworkConfig

Netzwerkspezifische Konfiguration für den Sandbox-Modus.
type SandboxNetworkConfig = {
  allowedDomains?: string[];
  deniedDomains?: string[];
  allowManagedDomainsOnly?: boolean;
  allowLocalBinding?: boolean;
  allowUnixSockets?: string[];
  allowAllUnixSockets?: boolean;
  httpProxyPort?: number;
  socksProxyPort?: number;
};
EigenschaftTypStandardBeschreibung
allowedDomainsstring[][]Domänennamen, auf die Sandbox-Prozesse zugreifen können
deniedDomainsstring[][]Domänennamen, auf die Sandbox-Prozesse nicht zugreifen können. Hat Vorrang vor allowedDomains
allowManagedDomainsOnlybooleanfalseBeschränken Sie den Netzwerkzugriff nur auf die Domänen in allowedDomains
allowLocalBindingbooleanfalseErlauben Sie Prozessen, sich an lokale Ports zu binden (z. B. für Dev-Server)
allowUnixSocketsstring[][]Unix-Socket-Pfade, auf die Prozesse zugreifen können (z. B. Docker-Socket)
allowAllUnixSocketsbooleanfalseErlauben Sie Zugriff auf alle Unix-Sockets
httpProxyPortnumberundefinedHTTP-Proxy-Port für Netzwerkanfragen
socksProxyPortnumberundefinedSOCKS-Proxy-Port für Netzwerkanfragen

SandboxFilesystemConfig

Dateisystemspezifische Konfiguration für den Sandbox-Modus.
type SandboxFilesystemConfig = {
  allowWrite?: string[];
  denyWrite?: string[];
  denyRead?: string[];
};
EigenschaftTypStandardBeschreibung
allowWritestring[][]Dateipfadmuster, um Schreibzugriff zu ermöglichen
denyWritestring[][]Dateipfadmuster, um Schreibzugriff zu verweigern
denyReadstring[][]Dateipfadmuster, um Lesezugriff zu verweigern

Berechtigungen-Fallback für Unsandboxed-Befehle

Wenn allowUnsandboxedCommands aktiviert ist, kann das Modell anfordern, Befehle außerhalb der Sandbox auszuführen, indem es dangerouslyDisableSandbox: true in der Tool-Eingabe setzt. Diese Anfragen fallen auf das bestehende Berechtigungssystem zurück, was bedeutet, dass Ihr canUseTool-Handler aufgerufen wird, sodass Sie benutzerdefinierte Autorisierungslogik implementieren können.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: Eine statische Liste von Befehlen, die immer automatisch die Sandbox umgehen (z. B. ['docker']). Das Modell hat keine Kontrolle darüber.
  • allowUnsandboxedCommands: Lässt das Modell zur Laufzeit entscheiden, ob es die Ausführung außerhalb der Sandbox anfordert, indem es dangerouslyDisableSandbox: true in der Tool-Eingabe setzt.
import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Deploy my application",
  options: {
    sandbox: {
      enabled: true,
      allowUnsandboxedCommands: true // Modell kann unsandboxed Ausführung anfordern
    },
    permissionMode: "default",
    canUseTool: async (tool, input) => {
      // Überprüfen Sie, ob das Modell die Sandbox umgehen möchte
      if (tool === "Bash" && input.dangerouslyDisableSandbox) {
        // Das Modell fordert an, diesen Befehl außerhalb der Sandbox auszuführen
        console.log(`Unsandboxed command requested: ${input.command}`);

        if (isCommandAuthorized(input.command)) {
          return { behavior: "allow" as const, updatedInput: input };
        }
        return {
          behavior: "deny" as const,
          message: "Command not authorized for unsandboxed execution"
        };
      }
      return { behavior: "allow" as const, updatedInput: input };
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}
Dieses Muster ermöglicht es Ihnen:
  • Modell-Anfragen prüfen: Protokollieren Sie, wenn das Modell unsandboxed Ausführung anfordert
  • Allowlists implementieren: Nur bestimmte Befehle dürfen unsandboxed ausgeführt werden
  • Genehmigungsworkflows hinzufügen: Erfordern Sie explizite Autorisierung für privilegierte Operationen
Befehle, die mit dangerouslyDisableSandbox: true ausgeführt werden, haben vollständigen Systemzugriff. Stellen Sie sicher, dass Ihr canUseTool-Handler diese Anfragen sorgfältig validiert.Wenn permissionMode auf bypassPermissions gesetzt ist und allowUnsandboxedCommands aktiviert ist, kann das Modell autonom Befehle außerhalb der Sandbox ausführen, ohne dass Genehmigungsaufforderungen erforderlich sind. Diese Kombination ermöglicht dem Modell effektiv, die Sandbox-Isolierung stillschweigend zu verlassen.

Siehe auch