Zum Hauptinhalt springen
Mit Hooks kannst du benutzerdefinierte Logik ausführen, wenn Ereignisse im Lebenszyklus des Agenten auftreten. Du kannst Hooks verwenden, um Richtlinien durchzusetzen, Kontext hinzuzufügen, Aktionen zu protokollieren, Berechtigungen zu ändern oder externe Systeme zu integrieren. Hooks werden im JSON-Format konfiguriert. Lege sie im .devin/-Verzeichnis deines Projekts ab (oder in einer Konfiguration auf Nutzerebene), und Devin CLI führt sie bei passenden Lifecycle-Ereignissen aus. Vorhandene Hooks in .claude/-Verzeichnissen werden ebenfalls automatisch erkannt — siehe Wo Hooks zu finden sind.

Was können Hooks tun?

Richtlinien durchsetzen

Gefährliche Befehle blockieren, für bestimmte Aktionen eine Bestätigung verlangen oder den Zugriff auf Dateien einschränken.

Kontext hinzufügen

Zusätzliche Anweisungen oder Informationen einfügen, wenn bestimmte Tools aufgerufen werden.

Folgeaktionen ausführen

Skripte ausführen, Benachrichtigungen senden oder Ereignisse protokollieren, wenn etwas geschieht.

Berechtigungen ändern

Berechtigungen je nach Situation dynamisch gewähren oder einschränken.

Kurzes Beispiel

Legen Sie .devin/hooks.v1.json in Ihrem Projekt an:
Dabei wird ./scripts/check-command.sh vor jeder Ausführung eines Shell-Befehls ausgeführt. Das Skript erhält Ereignisdaten über stdin und kann die Aktion blockieren, indem es einen Exit-Code ungleich null zurückgibt.

Hook-Ereignisse

Hooks können auf diese Ereignisse im Lebenszyklus reagieren: Unter Lifecycle Hooks finden Sie Details zu jedem Ereignis und den jeweils verfügbaren Daten.

Hook-Format

Jeder Hook hat einen Typ (command oder prompt), einen optionalen Matcher (Regex auf den tool_name des Hook-Ereignisses) und eine Konfiguration:

Befehls-Hooks

Befehls-Hooks führen einen Shell-Befehl aus. Ereignisdaten werden als JSON über stdin übergeben, und der Befehl kann über stdout JSON zurückgeben, um das Ergebnis zu steuern (siehe Ausgabeformat unten). Eingabe (stdin):
Die Umgebungsvariable DEVIN_PROJECT_DIR wird automatisch auf das Projektstammverzeichnis gesetzt. Unter Using the Matcher finden Sie die integrierten Tool-Namen und das MCP-Tool-Namensformat, nach denen Sie abgleichen können.

Ausgabeformat

Ein Command-Hook kann ein JSON-Objekt an stdout ausgeben, um das Ergebnis zu steuern. Um eine Aktion zu genehmigen oder zu blockieren, gib ein decision-Feld auf oberster Ebene zurück (mit einem optionalen reason):
Um Text in den Kontext des Agenten einzuschleusen, geben Sie additionalContext in einem hookSpecificOutput-Objekt zurück, das mit dem Ereignisnamen versehen ist:
Um die Eingabe eines Tools vor der Ausführung transparent umzuschreiben, geben Sie updatedInput innerhalb eines PreToolUse-hookSpecificOutput zurück. Felder in updatedInput werden in die Argumente des Tools zusammengeführt, sodass Sie eine Teilmenge aktualisieren können (z. B. nur command):

Exit-Codes


Wo Hooks zu finden sind

Devin CLI liest Hooks aus den folgenden Speicherorten. Alle verwenden dasselbe JSON-Format.

Auf Projektebene

Nutzerebene (global)

In .devin/hooks.v1.json ist das Hooks-Objekt die gesamte Datei (kein umschließender Schlüssel erforderlich). An allen anderen Speicherorten sind Hooks in einer Settings-Datei unter dem "hooks"-Schlüssel verschachtelt.
Hooks aus .claude/-Pfaden werden geladen, wenn read_config_from.claude aktiviert ist (Standardeinstellung). Bei Bedarf kannst du dies in deiner Nutzerkonfiguration deaktivieren.

Hooks überprüfen

Verwenden Sie den Slash-Befehl /hooks, um alle aktuell geladenen Hooks und ihre Quelldateien anzuzeigen:

Nächste Schritte

Lifecycle Hooks

Detaillierte Informationen zu jedem Ereignistyp und den verfügbaren Daten.

Konfiguration

Legen Sie fest, aus welchen Konfigurationsorten Devin CLI Hooks liest.