TypeScript
Erstellen Sie benutzerdefinierte KI-Agenten mit dem Claude Code TypeScript SDK
Voraussetzungen
- Node.js 18+
Installation
Installieren Sie @anthropic-ai/claude-code
von NPM:
Um den TypeScript SDK-Quellcode anzuzeigen, besuchen Sie die @anthropic-ai/claude-code
Seite auf NPM.
Grundlegende Verwendung
Die primäre Schnittstelle über das TypeScript SDK ist die query
Funktion, die einen asynchronen Iterator zurückgibt, der Nachrichten streamt, sobald sie eintreffen:
Konfigurationsoptionen
Argument | Typ | Beschreibung | Standard |
---|---|---|---|
abortController | AbortController | Abort-Controller zum Abbrechen von Operationen | new AbortController() |
additionalDirectories | string[] | Zusätzliche Verzeichnisse, die in die Sitzung einbezogen werden sollen | undefined |
allowedTools | string[] | Liste der Tools, die Claude verwenden darf | Alle Tools standardmäßig aktiviert |
appendSystemPrompt | string | Text, der an den Standard-System-Prompt angehängt wird | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | Benutzerdefinierte Berechtigungsfunktion für Tool-Verwendung | undefined |
continue | boolean | Die neueste Sitzung fortsetzen | false |
customSystemPrompt | string | Den Standard-System-Prompt vollständig ersetzen | undefined |
cwd | string | Aktuelles Arbeitsverzeichnis | process.cwd() |
disallowedTools | string[] | Liste der Tools, die Claude nicht verwenden darf | undefined |
env | Dict<string> | Umgebungsvariablen, die gesetzt werden sollen | undefined |
executable | 'bun' | 'deno' | 'node' | Welche JavaScript-Laufzeit verwendet werden soll | node beim Ausführen mit Node.js, bun beim Ausführen mit Bun |
executableArgs | string[] | Argumente, die an die ausführbare Datei übergeben werden | [] |
fallbackModel | string | Modell, das verwendet wird, wenn das primäre Modell fehlschlägt | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | Lebenszyklus-Hooks für Anpassungen | undefined |
includePartialMessages | boolean | Partielle Streaming-Ereignisse in den Nachrichtenstrom einbeziehen | false |
maxThinkingTokens | number | Maximale Token für Claudes Denkprozess | undefined |
maxTurns | number | Maximale Anzahl von Gesprächsrunden | undefined |
mcpServers | Record<string, McpServerConfig> | MCP-Server-Konfigurationen | undefined |
model | string | Zu verwendendes Claude-Modell | Verwendet Standard aus CLI-Konfiguration |
pathToClaudeCodeExecutable | string | Pfad zur Claude Code ausführbaren Datei | Ausführbare Datei, die mit @anthropic-ai/claude-code geliefert wird |
permissionMode | PermissionMode | Berechtigungsmodus für die Sitzung | "default" (Optionen: "default" , "acceptEdits" , "bypassPermissions" , "plan" ) |
resume | string | Sitzungs-ID zum Fortsetzen | undefined |
stderr | (data: string) => void | Callback für stderr-Ausgabe | undefined |
strictMcpConfig | boolean | Strikte MCP-Konfigurationsvalidierung durchsetzen | undefined |
Partielles Nachrichten-Streaming
Wenn includePartialMessages
aktiviert ist, sendet das SDK stream_event
Nachrichten, die rohe Streaming-Ereignisse von der Claude API enthalten. Dies ermöglicht es Ihnen, auf partielle Inhalte zuzugreifen, während sie generiert werden, was für die Implementierung von Echtzeit-UI-Updates oder Fortschrittsindikatoren nützlich ist.
Jede stream_event
Nachricht enthält:
event
: Das rohe Streaming-Ereignis von der APIsession_id
: Die aktuelle Sitzungskennungparent_tool_use_id
: Die ID des Tools, das ausgeführt wird (falls zutreffend)uuid
: Eine eindeutige Kennung für dieses Ereignis
Partielles Nachrichten-Streaming ist hauptsächlich für erweiterte Anwendungsfälle nützlich, bei denen Sie granulare Kontrolle über die Streaming-Antwort benötigen. Für die meisten Anwendungen ist das Standardverhalten (Warten auf vollständige Nachrichten) ausreichend.
Multi-Turn-Gespräche
Für Multi-Turn-Gespräche haben Sie zwei Optionen.
Sie können Antworten generieren und sie fortsetzen, oder Sie können den Streaming-Eingabemodus verwenden, der ein async/generator für ein Array von Nachrichten akzeptiert. Derzeit ist der Streaming-Eingabemodus die einzige Möglichkeit, Bilder über Nachrichten anzuhängen.
Fortsetzen mit Sitzungsverwaltung
Streaming-Eingabemodus
Der Streaming-Eingabemodus ermöglicht es Ihnen, Nachrichten als asynchrones Iterable anstatt als einzelnen String bereitzustellen. Dies ermöglicht Multi-Turn-Gespräche, Bildanhänge und dynamische Nachrichtengenerierung:
Streaming-Eingabe mit Bildern
Der Streaming-Eingabemodus ist die einzige Möglichkeit, Bilder über Nachrichten anzuhängen:
Benutzerdefinierte System-Prompts
System-Prompts definieren die Rolle, Expertise und das Verhalten Ihres Agenten:
MCP-Server-Integration
Das Model Context Protocol (MCP) ermöglicht es Ihnen, Ihren Agenten benutzerdefinierte Tools und Fähigkeiten zu geben:
Benutzerdefinierte Tools mit In-Process-MCP-Servern
SDK-MCP-Server ermöglichen es Ihnen, benutzerdefinierte Tools zu erstellen, die direkt in Ihrem Anwendungsprozess laufen und typsichere Tool-Ausführung ohne den Overhead separater Prozesse oder Netzwerkkommunikation bieten.
Benutzerdefinierte Tools erstellen
Verwenden Sie die createSdkMcpServer
und tool
Hilfsfunktionen, um typsichere benutzerdefinierte Tools zu definieren:
Typsicherheit mit Zod
Der tool
Helfer bietet vollständige TypeScript-Typinferenz aus Ihren Zod-Schemas:
Hooks
Hooks ermöglichen es Ihnen, das Verhalten von Claude Code anzupassen und zu erweitern, indem Sie benutzerdefinierte Callbacks an verschiedenen Punkten im Lebenszyklus des Agenten ausführen. Im Gegensatz zu CLI-Hooks, die Bash-Befehle ausführen, sind SDK-Hooks JavaScript/TypeScript-Funktionen, die im Prozess laufen.
Hooks definieren
Hooks sind nach Ereignistyp organisiert, mit optionalen Matchern, um zu filtern, wann sie ausgeführt werden:
Verfügbare Hook-Ereignisse
- PreToolUse: Läuft vor der Tool-Ausführung. Kann Tools blockieren oder Feedback geben.
- PostToolUse: Läuft nach erfolgreicher Tool-Ausführung.
- UserPromptSubmit: Läuft, wenn der Benutzer einen Prompt einreicht.
- SessionStart: Läuft, wenn eine Sitzung startet.
- SessionEnd: Läuft, wenn eine Sitzung endet.
- Stop: Läuft, wenn Claude aufhören wird zu antworten.
- SubagentStop: Läuft, wenn ein Subagent aufhören wird.
- PreCompact: Läuft vor der Gesprächskompaktierung.
- Notification: Läuft, wenn Benachrichtigungen gesendet werden.
Hook-Eingabetypen
Jeder Hook erhält typisierte Eingaben basierend auf dem Ereignis:
Hook-Ausgabe
Hooks geben Ausgaben zurück, die den Ausführungsfluss steuern:
Praktische Beispiele
Protokollierung und Überwachung
Dateioperations-Validierung
Automatische Code-Formatierung
Prompt-Verbesserung
Benutzerdefinierte Kompaktierungsanweisungen
Hook-Ausführungsverhalten
- Parallelisierung: Alle passenden Hooks laufen parallel
- Timeout: Hooks respektieren das Abort-Signal aus den Optionen
- Fehlerbehandlung: Hook-Fehler werden protokolliert, stoppen aber nicht die Ausführung
- Matcher: Unterstützen Regex-Muster (z.B.
"Write|Edit"
)
Hooks mit canUseTool kombinieren
Während canUseTool
Berechtigungskontrolle bietet, bieten Hooks eine breitere Lebenszyklus-Integration:
Berechtigungskontrolle mit canUseTool
Der canUseTool
Callback bietet feinkörnige Kontrolle über die Tool-Ausführung. Er wird vor jeder Tool-Verwendung aufgerufen und kann Tools erlauben, verweigern oder Tool-Eingaben ändern:
Anwendungsfälle für canUseTool
- Berechtigungsverwaltung: Benutzerberechtigungen vor der Tool-Ausführung prüfen
- Eingabevalidierung: Tool-Eingaben vor der Ausführung validieren oder bereinigen
- Rate-Limiting: Rate-Limits für teure Operationen implementieren
- Audit-Protokollierung: Tool-Verwendung für Compliance oder Debugging protokollieren
- Dynamische Berechtigungen: Tools basierend auf Laufzeitbedingungen aktivieren/deaktivieren
Ausgabeformate
Textausgabe (Standard)
JSON-Ausgabe
Eingabeformate
Agenten-Integrationsbeispiele
SRE-Incident-Response-Agent
Automatisierte Sicherheitsüberprüfung
Multi-Turn-Rechtsassistent
Nachrichtenschema
Nachrichten, die von der JSON-API zurückgegeben werden, sind streng typisiert gemäß dem folgenden Schema:
Zusätzliche unterstützende Typen:
Message
, MessageParam
und Usage
Typen sind im Anthropic TypeScript SDK verfügbar.
Verwandte Ressourcen
- CLI-Verwendung und -Steuerung - Vollständige CLI-Dokumentation
- GitHub Actions-Integration - Automatisieren Sie Ihren GitHub-Workflow mit Claude
- Häufige Workflows - Schritt-für-Schritt-Anleitungen für häufige Anwendungsfälle