- Gefährliche Operationen blockieren, bevor sie ausgeführt werden, z. B. destruktive Shell-Befehle oder nicht autorisierter Dateizugriff
- Tool-Aufrufe protokollieren und überprüfen für Compliance, Debugging oder Analytik
- Eingaben und Ausgaben transformieren, um Daten zu bereinigen, Anmeldedaten einzufügen oder Dateipfade umzuleiten
- Menschliche Genehmigung anfordern für sensible Aktionen wie Datenbankschreibvorgänge oder API-Aufrufe
- Sitzungslebenszyklus verfolgen, um den Status zu verwalten, Ressourcen freizugeben oder Benachrichtigungen zu senden
Funktionsweise von Hooks
1
Ein Ereignis wird ausgelöst
Während der Agent-Ausführung passiert etwas und das SDK löst ein Ereignis aus: Ein Tool wird aufgerufen (
PreToolUse), ein Tool gibt ein Ergebnis zurück (PostToolUse), ein Subagent startet oder stoppt, der Agent ist untätig oder die Ausführung ist beendet. Siehe die vollständige Liste der Ereignisse.2
Das SDK sammelt registrierte Hooks
Das SDK prüft auf Hooks, die für diesen Ereignistyp registriert sind. Dies umfasst Callback-Hooks, die Sie in
options.hooks übergeben, und Shell-Befehls-Hooks aus Einstellungsdateien, wenn der entsprechende settingSources oder setting_sources Eintrag aktiviert ist, was für Standard-query()-Optionen der Fall ist.3
Matcher filtern, welche Hooks ausgeführt werden
Wenn ein Hook ein
matcher Muster hat (z. B. "Write|Edit"), testet das SDK es gegen das Ziel des Ereignisses (z. B. den Tool-Namen). Hooks ohne Matcher werden für jedes Ereignis dieses Typs ausgeführt.4
Callback-Funktionen werden ausgeführt
Jede übereinstimmende Hook-Callback-Funktion erhält Eingaben über das, was passiert: den Tool-Namen, seine Argumente, die Sitzungs-ID und andere ereignisspezifische Details.
5
Ihr Callback gibt eine Entscheidung zurück
Nach dem Ausführen von Operationen (Protokollierung, API-Aufrufe, Validierung) gibt Ihr Callback ein Ausgabeobjekt zurück, das dem Agenten mitteilt, was zu tun ist: die Operation zulassen, blockieren, die Eingabe ändern oder Kontext in die Konversation einfügen.
PreToolUse Hook (Schritt 1) mit einem "Write|Edit" Matcher (Schritt 3), sodass der Callback für die Tools Write und Edit ausgelöst wird. Wenn ausgelöst, erhält der Callback die Eingabe des Tools (Schritt 4), prüft, ob der Dateipfad auf eine .env-Datei abzielt, und gibt permissionDecision: "deny" zurück, um die Operation zu blockieren (Schritt 5):
file_path auf /.env endet, unabhängig von Groß- und Kleinschreibung. Unter Windows verwendet file_path umgekehrte Schrägstriche, etwa C:\project\.env, und dieser Hook lässt einen Write- oder Edit-Aufruf für C:\project\.env zu.
Verfügbare Hooks
Das SDK bietet Hooks für verschiedene Phasen der Agent-Ausführung. Einige Hooks sind in beiden SDKs verfügbar, während andere nur für TypeScript verfügbar sind.Hooks konfigurieren
Um einen Hook zu konfigurieren, übergeben Sie ihn imhooks Feld Ihrer Agent-Optionen (ClaudeAgentOptions in Python, das options Objekt in TypeScript). Dieser Ausschnitt setzt voraus, dass Sie bereits einen Hook-Callback definiert haben, wie protect_env_files in Python oder protectEnvFiles in TypeScript aus dem obigen Beispiel:
hooks Option ist ein Wörterbuch in Python oder ein Objekt in TypeScript, wobei:
- Schlüssel: Hook-Ereignisnamen wie
'PreToolUse','PostToolUse'und'Stop' - Werte: Arrays von Matchern, die jeweils ein optionales Filtermuster und Ihre Callback-Funktionen enthalten
Matcher
Verwenden Sie Matcher, um zu filtern, wann Ihre Callbacks ausgelöst werden. Dasmatcher Feld wird gegen einen anderen Wert abgeglichen, je nach Hook-Ereignistyp. Beispielsweise werden Tool-basierte Hooks gegen den Tool-Namen abgeglichen, während Notification Hooks gegen den Benachrichtigungstyp abgeglichen werden.
SDK-Matcher folgen den gleichen Regeln wie Matcher in Einstellungsdateien. Dieser Abschnitt dokumentiert die Pfade für exakte Zeichenketten- und reguläre Ausdrucksbewertung, ihre Versionsanforderungen und die Matcher-Werte für jeden Ereignistyp.
Verwenden Sie das
matcher Muster, um nach Möglichkeit spezifische Tools anzusteuern. Ein Matcher mit 'Bash' wird nur für Bash-Befehle ausgeführt, während das Weglassen des Musters Ihre Callbacks für jedes Vorkommen des Ereignisses ausführt.
Callback-Funktionen
Eingaben
Jeder Hook-Callback erhält drei Argumente:- Eingabedaten: ein typisiertes Objekt mit Ereignisdetails. Jeder Hook-Typ hat seine eigene Eingabeform. Beispielsweise enthält
PreToolUseHookInputtool_nameundtool_input, währendNotificationHookInputmessageenthält. Siehe die vollständigen Typdefinitionen in den TypeScript und Python SDK-Referenzen.- Alle Hook-Eingaben teilen
session_id,cwdundhook_event_name. agent_idundagent_typewerden ausgefüllt, wenn der Hook in einem Subagenten ausgelöst wird. In TypeScript befinden sich diese in der Basis-Hook-Eingabe und sind für alle Hook-Typen verfügbar. In Python sind sie optionale Felder aufPreToolUse,PostToolUse,PostToolUseFailureundPermissionRequest, und erforderliche Felder aufSubagentStartundSubagentStop.
- Alle Hook-Eingaben teilen
- Tool-Verwendungs-ID (
str | None/string | undefined): korreliertPreToolUseundPostToolUseEreignisse für denselben Tool-Aufruf. - Kontext: In TypeScript enthält eine
signalEigenschaft (AbortSignal) für Abbruch. In Python ist dieses Argument für zukünftige Verwendung reserviert.
Ausgaben
Ihr Callback gibt ein Objekt mit zwei Kategorien von Feldern zurück:- Top-Level-Felder werden bei jedem Ereignis akzeptiert:
systemMessagezeigt eine Nachricht für den Benutzer an, undcontinue(continue_in Python) bestimmt, ob der Agent nach diesem Hook weiterläuft. Einige Ereignisse verwerfen sie oder liefern sie an anderer Stelle. Jeder Abschnitt des Ereignisses auf der Hooks-Seite sagt, wo sie landen. hookSpecificOutputsteuert die aktuelle Operation. Die Felder, die Sie darin setzen, hängen vom Hook-Ereignistyp ab:- Für
PreToolUseHooks ist dies der Ort, an dem SiepermissionDecision("allow","deny","ask"oder"defer"),permissionDecisionReasonundupdatedInputsetzen. Wenn Sie"defer"zurückgeben, endet der Turn mit einer Ergebnisnachricht, derenstop_reason"tool_deferred"ist, sodass Sie den Aufruf später fortsetzen können. - Für
PostToolUseHooks können SieadditionalContextsetzen, um Informationen zum Tool-Ergebnis anzuhängen. Um die Ausgabe des Tools zu ersetzen, bevor Claude sie sieht, setzen SieupdatedToolOutput, das für jedes Tool in beiden SDKs funktioniert. Das ältereupdatedMCPToolOutputFeld ersetzt nur MCP-Tool-Ausgabe. - Im TypeScript SDK kann ein
PostToolUseCallback auchclassifierContextzurückgeben, eine kurze Notiz über das Ergebnis des Tool-Aufrufs für den Berechtigungsklassifikator des Auto-Modus. Da Ihr Callback in Ihrem eigenen Anwendungsprozess ausgeführt wird, kann der Klassifikator eine Benutzeraussage, die Sie in der Notiz weitergeben, als Benutzerabsicht gewichten. Das Feld erfordert TypeScript Agent SDK v0.3.236 oder später. Ein Ergebnis für den Auto-Modus-Klassifikator annotieren behandelt die Längenbegrenzung, die Nur-Synchron-Regel und was nicht in die Notiz gehört.
- Für
{} zurück, um die Operation ohne Änderungen zuzulassen. SDK-Callback-Hooks verwenden das gleiche JSON-Ausgabeformat wie Claude Code Shell-Befehls-Hooks, das jedes Feld und ereignisspezifische Option dokumentiert. Für die SDK-Typdefinitionen siehe die TypeScript und Python SDK-Referenzen.
Wenn mehrere
PreToolUse Hooks unterschiedliche Entscheidungen zurückgeben, hat deny Vorrang vor defer, was Vorrang vor ask hat, was Vorrang vor allow hat.Asynchrone Ausgabe
Standardmäßig wartet der Agent darauf, dass Ihr Hook zurückkommt, bevor er fortfährt. Wenn Ihr Hook einen Nebeneffekt ausführt, wie Protokollierung oder Webhook-Versand, und das Verhalten des Agenten nicht beeinflussen muss, können Sie stattdessen eine asynchrone Ausgabe zurückgeben. Dies teilt dem Agenten mit, dass er sofort fortfahren soll, ohne auf die Fertigstellung des Hooks zu warten. In diesem Ausschnitt stehensend_to_logging_service in Python und sendToLoggingService in TypeScript für jede Protokollierungsfunktion, die Sie definieren:
Asynchrone Ausgaben können nicht blockieren, ändern oder Kontext in die Operation einfügen, da der Agent bereits weitergegangen ist. Verwenden Sie sie nur für Nebeneffekte wie Protokollierung, Metriken oder Benachrichtigungen.
Beispiele
Mehrere Beispiele in diesem Abschnitt zeigen nur die Callback-Funktion. Um eines auszuführen, registrieren Sie den Callback unter dem entsprechenden Ereignis imhooks Feld Ihrer Optionen, wie in Hooks konfigurieren gezeigt.
Tool-Eingabe ändern
Dieses Beispiel fängt Write-Tool-Aufrufe ab und schreibt dasfile_path Argument um, um /sandbox voranzustellen. Der Callback gibt updatedInput mit dem geänderten Pfad und permissionDecision: 'allow' zurück, um die umgeschriebene Operation automatisch zu genehmigen:
Kombinieren Sie
updatedInput mit permissionDecision: 'allow', um die geänderte Eingabe automatisch zu genehmigen, oder permissionDecision: 'ask', um sie dem Benutzer anzuzeigen. Wenn Sie permissionDecision weglassen, wird die geänderte Eingabe trotzdem angewendet und durchläuft die normale Berechtigungsprüfung. Mit 'defer' wird updatedInput ignoriert. Geben Sie immer ein neues Objekt zurück, anstatt das ursprüngliche tool_input zu mutieren../sandbox oder /tmp/sandbox (macOS erlaubt nicht das Erstellen eines Root-Level /sandbox Verzeichnisses), und bitten Sie dann den Agent, eine Datei zu schreiben: Das Ergebnis des Write-Tools im Nachrichtenstrom nennt den Pfad mit Ihrem Sandbox-Präfix anstelle des von Claude angeforderten.
Kontext hinzufügen und ein Tool blockieren
Dieses Beispiel lehnt Tool-Aufrufe ab, derenfile_path mit /etc beginnt, und erklärt den Grund sowohl dem Modell als auch dem Benutzer:
permissionDecision: 'deny'stoppt den Tool-Aufruf.permissionDecisionReasonteilt dem Modell mit, warum.systemMessagezeigt dem Benutzer, was passiert ist.
PreToolUse mit einem Write|Edit Matcher und bitten Sie den Agent, eine Datei unter /etc zu erstellen: Das Ergebnis des Write-Tools im Nachrichtenstrom enthält Writing to /etc is not allowed, und es wird keine Datei erstellt.
Spezifische Tools automatisch genehmigen
Standardmäßig kann der Agent vor der Verwendung bestimmter Tools um Erlaubnis fragen. Dieses Beispiel genehmigt nur lesende Dateisystem-Tools (Read, Glob, Grep) automatisch, indempermissionDecision: 'allow' zurückgegeben wird, sodass sie ohne Benutzerbestätigung ausgeführt werden, mit Ausnahme von Lesevorgängen aus Netzwerkpfaden, während alle anderen Tools normalen Berechtigungsprüfungen unterliegen:
Mehrere Hooks registrieren
Wenn ein Ereignis ausgelöst wird, werden die übereinstimmenden Hooks parallel ausgeführt. Bei Berechtigungsentscheidungen gilt das restriktivste Ergebnis. Eindeny eines einzelnen Hooks blockiert den Tool-Aufruf. Da die Abschlussreihenfolge nicht deterministisch ist, schreiben Sie jeden Hook so, dass er unabhängig agiert, anstatt sich darauf zu verlassen, dass ein anderer Hook zuerst ausgeführt wurde.
Das folgende Beispiel registriert drei unabhängige Prüfungen, jeweils mit einem weggelassenen Matcher. Die Hook-Namen darin, wie audit_logger in Python oder auditLogger in TypeScript, stehen für Callbacks, die Sie definieren:
Mit Multi-Tool-Matchern filtern
Verwenden Sie Multi-Tool-Matcher, um einen Callback über verwandte Tools hinweg zu teilen. Dieses Beispiel registriert drei Matcher mit unterschiedlichen Bereichen, und jeder Hook, den es nennt, steht für einen Callback, den Sie definieren:- Eine durch Pipe getrennte exakte Liste (
Write|Edit|NotebookEdit) löstfile_security_hookfür die Tools Write, Edit und NotebookEdit aus. - Ein Regex (
^mcp__) löstmcp_audit_hookfür alle MCP-Tools aus, deren Namen mitmcp__beginnen. - Ein weggelassener Matcher löst
global_loggerohne Filterung nach Tool-Namen aus.
Subagent-Aktivität verfolgen
Verwenden SieSubagentStop Hooks, um zu überwachen, wenn Subagents ihre Arbeit beenden. Siehe den vollständigen Eingabetyp in den TypeScript und Python SDK-Referenzen. Dieses Beispiel protokolliert eine Zusammenfassung jedes Mal, wenn ein Subagent abgeschlossen wird:
[SUBAGENT] Completed: Zeilen mit der ID und dem Transkriptpfad des Subagents.
HTTP-Anfragen von Hooks aus stellen
Hooks können asynchrone Operationen wie HTTP-Anfragen ausführen. Fangen Sie Fehler in Ihrem Hook ab, anstatt sie zu propagieren. Dieses Beispiel sendet einen Webhook nach jeder Tool-Fertigstellung und protokolliert, welches Tool ausgeführt wurde und wann. Der Hook fängt Fehler von einem fehlgeschlagenen Webhook ab:Benachrichtigungen an Slack weiterleiten
Verwenden SieNotification Hooks, um Systembenachrichtigungen vom Agent zu empfangen und sie an externe Dienste weiterzuleiten. In SDK-Sitzungen führt Claude Code diesen Hook für die folgenden Benachrichtigungstypen aus:
permission_promptsobald eine Berechtigungsanfrage etwa sechs Sekunden auf IhremcanUseToolCallback gewartet hat. Erfordert TypeScript Agent SDK v0.3.233 oder später oder Python Agent SDK v0.2.139 oder späterelicitation_completeundelicitation_responsefür Benutzer-Abfrage-Flows
idle_prompt, auth_success und elicitation_dialog, aus interaktiver Benutzeroberfläche, die SDK-Sitzungen nicht ausführen.
Jede Benachrichtigung enthält ein message Feld mit einer für Menschen lesbaren Beschreibung und optional einen title.
Dieses Beispiel leitet jede Benachrichtigung an einen Slack-Kanal weiter. Es erfordert eine Slack Incoming Webhook URL, die Sie erstellen, indem Sie eine App zu Ihrem Slack-Workspace hinzufügen und Incoming Webhooks aktivieren:
Notification Ereignis ausgelöst wird, sendet der Hook die message der Benachrichtigung, mit dem Präfix Agent status:, an den Kanal, auf den Ihr Webhook abzielt.
Häufige Probleme beheben
Hook wird nicht ausgelöst
- Überprüfen Sie, ob der Hook-Ereignisname korrekt und case-sensitiv ist (
PreToolUse, nichtpreToolUse) - Überprüfen Sie, ob Ihr Matcher-Muster den Tool-Namen genau abgleicht
- Stellen Sie sicher, dass der Hook unter dem richtigen Ereignistyp in
options.hooksist - Für Nicht-Tool-Hooks, die Matcher unterstützen, wie
NotificationundSubagentStop, gleichen Matcher gegen verschiedene Felder ab, undStopignoriert Matcher vollständig (siehe Matcher-Muster) - Hooks werden möglicherweise nicht ausgelöst, wenn der Agent das
max_turnsLimit erreicht, da die Sitzung endet, bevor Hooks ausgeführt werden können
Matcher filtert nicht wie erwartet
Matcher gleichen nur Tool-Namen ab, nicht Dateipfade oder andere Argumente. Um nach Dateipfad zu filtern, prüfen Sietool_input.file_path in Ihrem Hook:
Hook-Timeout
Claude Code führt jeden Callback mit einem Timeout aus, den Sie in Sekunden mit dem Feldtimeout auf seinem HookMatcher festlegen. Wenn Sie keinen festlegen, verwendet Claude Code den Standard des Ereignisses: 600 Sekunden für die meisten Ereignisse, 30 Sekunden für UserPromptSubmit, PreModelSwitch und PostModelSwitch, und 10 Sekunden für MessageDisplay. Claude Code führt SessionEnd Callbacks während des Herunterfahrens unter dem kürzeren SessionEnd-Timeout-Budget aus, standardmäßig 1,5 Sekunden.
Wenn ein Callback sein Timeout überschreitet, bricht Claude Code es ab und verwirft seine Ausgabe, und die Sitzung wird fortgesetzt, anstatt zu hängen. Was danach passiert, hängt vom Ereignis ab:
PreToolUse: Claude Code blockiert den Tool-Aufruf. Stattdessen erhält Claude ein Tool-Ergebnis, das besagt, dass der Hook nicht vor seinem Timeout geantwortet hat, und der Turn wird fortgesetzt. Vor v2.1.210 meldete Claude Code das Timeout an Claude als Benutzerabweisung, was unbeaufsichtigte Sitzungen zum Stoppen und Warten auf Eingabe führte.PostToolUseundPostToolUseFailure: Claude Code behält das Tool-Ergebnis bei und der Turn wird fortgesetzt.UserPromptSubmitundUserPromptExpansion: Claude Code blockiert den Prompt mit einer Nachricht, die den Hook und das Timeout benennt, und die Sitzung wird fortgesetzt. Vor v2.1.208 beendete Claude Code die Abfrage miterror_during_execution, wenn ein Callback bei diesen Ereignissen abgelaufen ist.StopundSubagentStop: der abgelaufene Callback zählt als Rückgabe ohne Entscheidung. Der Agent oder Subagent stoppt, als hätte dieser Callback es erlaubt, und eine Entscheidung von Ihren anderen Hooks bei dem Ereignis wird immer noch angewendet. Vor Claude Code v2.1.273 zählte ein abgelaufenerStopoderSubagentStopCallback als fehlgeschlagener Hook-Lauf, und Claude Code verwarf die Entscheidungen Ihrer anderen Hooks bei dem Ereignis.SessionStart: der abgelaufene Callback zählt als Rückgabe ohne Ausgabe, und die Sitzung wird mit der Ausgabe Ihrer anderenSessionStartHooks fortgesetzt.PreModelSwitch: Claude Code blockiert den Modellwechsel. Ein Hook, der nicht antwortet, hat den Wechsel nicht genehmigt.- Andere Ereignisse, wie
Notification,PreCompactundPostModelSwitch: Claude Code protokolliert den Fehler und wird fortgesetzt.
Stop oder SessionStart Callback in der Hauptsitzung abläuft, fügt Claude Code auch eine SDKInformationalMessage zum Nachrichtenstrom hinzu, die besagt, dass die App, die die Sitzung steuert, nicht geantwortet hat. Spätere Timeouts wiederholen diese Nachricht nicht, während Ihre App nicht reagiert.
Wenn Sie die Abfrage unterbrechen, während ein Callback ausstehend ist, bricht Claude Code den ausstehenden Tool-Aufruf ab. Vor v2.1.208 konnte der Tool-Aufruf noch fortfahren, wenn Sie während eines ausstehenden PreToolUse Callbacks unterbrochen haben.
Wenn Ihr Callback mehr Zeit benötigt, legen Sie einen höheren timeout auf seinem HookMatcher fest. In TypeScript verwenden Sie das AbortSignal aus dem dritten Callback-Argument, um Abbruch elegant zu behandeln, wenn das Timeout abläuft.
Tool wird unerwartet blockiert
- Überprüfen Sie alle
PreToolUseHooks aufpermissionDecision: 'deny'Rückgaben - Fügen Sie Logging zu Ihren Hooks hinzu, um zu sehen, welche
permissionDecisionReasonsie zurückgeben - Überprüfen Sie, ob Matcher-Muster nicht zu breit sind: ein leerer Matcher gleicht alle Tools ab
Geänderte Eingabe wird nicht angewendet
-
Stellen Sie sicher, dass
updatedInputinhookSpecificOutputist, nicht auf der obersten Ebene: -
Kombinieren Sie
updatedInputnicht mitpermissionDecision: 'defer', das die geänderte Eingabe verwirft. Das Weglassen vonpermissionDecisionist in Ordnung: die geänderte Eingabe wird immer noch durch die normale Berechtigungsevaluierung angewendet. Sie können auch'allow'zurückgeben, um die geänderte Eingabe automatisch zu genehmigen, oder'ask', um sie dem Benutzer zur Genehmigung anzuzeigen -
Schließen Sie
hookEventNameinhookSpecificOutputein, um zu identifizieren, für welchen Hook-Typ die Ausgabe bestimmt ist
Sitzungs-Hooks nicht in Python verfügbar
SessionStart und SessionEnd können als SDK-Callback-Hooks in TypeScript registriert werden, sind aber im Python SDK nicht verfügbar, da sein HookEvent Typ sie auslässt. In Python sind sie nur als Shell-Befehls-Hooks verfügbar, die in Einstellungsdateien wie .claude/settings.json definiert sind. Welche Einstellungsdateien Ihre SDK-Anwendung lädt, hängt von setting_sources bzw. settingSources ab. Wenn Sie diese Option festlegen, schließen Sie die Quelle ein, die die Hooks enthält:
client.receive_response() als Auslöser.
Berechtigungsabfragen von Subagenten vervielfachen sich
Beim Starten mehrerer Subagenten kann jeder einzelne für seine eigenen Tool-Aufrufe separat Berechtigungen anfordern. Um wiederholte Abfragen zu vermeiden, verwenden SiePreToolUse Hooks, um spezifische Tools automatisch zu genehmigen, oder konfigurieren Sie Berechtigungsregeln, die Subagenten von der übergeordneten Konversation erben.
Rekursive Hook-Schleifen mit Subagenten
EinUserPromptSubmit Hook, der Subagenten startet, kann unendliche Schleifen erzeugen, wenn diese Subagenten denselben Hook auslösen. Um dies zu verhindern:
- Verwenden Sie eine gemeinsame Variable oder Sitzungsstatus, um zu verfolgen, ob Sie sich bereits in einem Subagenten befinden
- Beschränken Sie Hooks so, dass sie nur für die Top-Level-Agent-Sitzung ausgeführt werden
systemMessage wird nicht in der Ausgabe angezeigt
DassystemMessage Feld zeigt eine Nachricht für den Benutzer an, nicht für das Modell. Auf Claude Code v2.1.227 oder später kann die systemMessage eines Hooks in dem Nachrichtenstrom als SDKInformationalMessage auftauchen. Ob dies der Fall ist, hängt vom Ereignis ab. Der Abschnitt jedes Ereignisses auf der Hooks-Seite sagt, wie die Ausgabe auftaucht. Um stattdessen Kontext an das Modell zu übergeben, geben Sie additionalContext zurück.
Vor v2.1.227 gab das SDK Hook-Ausgaben im Nachrichtenstrom nur für SessionStart und Setup Hooks aus. Für jedes andere Ereignis erschien die Ausgabe nur in den Lebenszyklusereignissen, die includeHookEvents (include_hook_events in Python) hinzufügt. Der Eintrag dieser Option behandelt, welche Lebenszyklusereignisse jedes Hook-Ereignis erzeugt.
Wenn Sie Hook-Entscheidungen für Ihre Anwendung zuverlässig sichtbar machen müssen, protokollieren Sie sie separat oder verwenden Sie einen dedizierten Ausgabekanal.
Verwandte Ressourcen
- Claude Code Hooks-Referenz: vollständige JSON-Eingabe-/Ausgabeschemas, Ereignisdokumentation und Matcher-Muster
- Claude Code Hooks-Leitfaden: Shell-Befehls-Hook-Beispiele und Walkthroughs
- TypeScript SDK-Referenz: Hook-Typen, Eingabe-/Ausgabedefinitionen und Konfigurationsoptionen
- Python SDK-Referenz: Hook-Typen, Eingabe-/Ausgabedefinitionen und Konfigurationsoptionen
- Berechtigungen: Steuern Sie, was Ihr Agent tun kann
- Benutzerdefinierte Tools: Erstellen Sie Tools, um Agent-Funktionen zu erweitern