Zum Hauptinhalt springen
Jedes Hook-Ereignis wird an einem bestimmten Punkt im Lebenszyklus des Agenten ausgelöst. Verwende das Feld matcher (einen Regex-Ausdruck, der mit dem tool_name des Hook-Ereignisses abgeglichen wird), um zu filtern, welche Tool-Aufrufe den Hook auslösen.

PreToolUse

Wird vor der Ausführung eines Tools ausgelöst. Verwenden Sie dies, um Tool-Aufrufe zu blockieren, zu ändern oder mit zusätzlichem Kontext zu versehen. Stdin-Daten: Beispiel — Destruktive Befehle blockieren:
Beispiel — Bestätigung für Schreibvorgänge außerhalb von src/ anfordern: Verwende ein Skript, das die Tool-Eingabe prüft und eine Entscheidung zurückgibt:
Beispiel — Befehle vor der Ausführung umschreiben: Ein Hook kann die Tool-Eingabe transparent umschreiben, indem hookSpecificOutput.updatedInput auf stdout ausgegeben wird (siehe Output format). Zum Beispiel ein Hook-Skript, das Shell-Befehle über einen Wrapper leitet:
Die umgeschriebenen Argumente werden vor der Ausführung in den Tool-Aufruf eingefügt — der Agent führt den aktualisierten Befehl statt des ursprünglichen aus.

PostToolUse

Wird ausgelöst, nachdem ein Tool seine Ausführung beendet hat. Verwende dies zur Protokollierung, Validierung oder zum Auslösen von Folgeaktionen. Stdin-Daten: Beispiel — Alle Shell-Befehle protokollieren:

PermissionRequest

Wird ausgelöst, wenn der Agent eine Entscheidung über eine Berechtigung benötigt. Damit können Sie benutzerdefinierte Genehmigungslogik implementieren. Stdin-Daten: Beispiel — Git-Befehle automatisch genehmigen:

UserPromptSubmit

Wird ausgelöst, wenn der Nutzer eine Nachricht absendet. Verwenden Sie dies, um Kontext hinzuzufügen oder Workflows auszulösen. Stdin-Daten: Beispiel — Kontext bei jedem Prompt hinzufügen:
Der Befehl gibt additionalContext innerhalb eines hookSpecificOutput-Objekts auf stdout aus, versehen mit dem Ereignisnamen. Dieser Text wird in den Kontext des Agenten eingefügt:

Stop

Wird ausgelöst, wenn der Agent entscheidet, anzuhalten (seinen Zug zu beenden). Verwenden Sie dies, um nachfolgende Anweisungen hinzuzufügen oder ein vorzeitiges Anhalten zu verhindern. Stdin-Daten: Beispiel — Agenten daran erinnern, Tests auszuführen:
Vorsicht bei Stop-Hooks, die blockieren — sie können dazu führen, dass der Agent in eine Schleife gerät, wenn die Bedingung letztlich nicht erfüllt wird.

PostCompaction

Wird nach erfolgreichem Abschluss der Kontextkomprimierung ausgelöst. Verwenden Sie dies für die Protokollierung, das Auslösen nachgelagerter Aktionen oder das erneute Einfügen von Kontext, der während der Komprimierung verloren gegangen sein könnte. Stdin-Daten: Beispiel — Komprimierungsereignisse protokollieren:

SessionStart

Wird ausgelöst, wenn eine neue Sitzung beginnt. Verwenden Sie es zur Initialisierung, Protokollierung oder für das Environment-Setup. Stdin-Daten: Beispiel — Setup-Skript ausführen:
Ein SessionStart-Befehl kann auch Kontext hinzufügen, indem additionalContext in einem hookSpecificOutput-Objekt an stdout ausgegeben wird:

SessionEnd

Wird ausgelöst, wenn eine Sitzung endet. Verwenden Sie dieses Ereignis für Bereinigungen oder die abschließende Protokollierung. Stdin-Daten:

Mehrere Ereignisse abgleichen

In einer einzelnen Hooks-Datei können Hooks für mehrere Ereignisse definiert werden:

Den Matcher verwenden

Das Feld matcher ist ein Regex, das mit dem tool_name des Hook-Ereignisses abgeglichen wird. Es ist für toolbezogene Ereignisse verfügbar: PreToolUse, PostToolUse und PermissionRequest. Bei Nicht-Tool-Ereignissen (UserPromptSubmit, Stop, PostCompaction, SessionStart und SessionEnd) gibt es kein tool_name; verwende "" oder lasse den Matcher weg, um den Hook für jedes Ereignis dieses Typs auszuführen.
Der Matcher ist kein Berechtigungs-Glob. Muster wie mcp__github__* sind für Berechtigungen nützlich, Hook-Matcher sind jedoch Regexe. Verwende in einem Hook-Matcher mcp__github__.*.

Tool-Namen, die Sie abgleichen können

Hook-Matcher werden anhand derselben extern sichtbaren Tool-Namen ausgeführt, die Hook-Skripte über stdin als tool_name erhalten. Welche Tool-Namen genau verfügbar sind, kann je nach CLI-Modus, Modell und aktivierten Integrationen variieren. Die gängigsten öffentlichen Core-Tool-Namen sind:
  • read
  • edit
  • grep
  • glob
  • exec
Tools auf einem MCP-Server erscheinen als mcp__<server>__<tool>. Zum Beispiel erscheint ein github-Tool auf einem MCP-Server mit dem Namen create_issue als mcp__github__create_issue. Bei anderen Tools gleichen Sie den exakten tool_name ab, der in Hook-stdin angezeigt wird. Um den in Ihrer aktuellen Sitzung vollständig verfügbaren Satz zu bestätigen, fügen Sie einen temporären PostToolUse-Hook mit matcher: "" hinzu und protokollieren Sie die stdin-Payload.