.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:
./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 sich mit Code 2 beendet (oder indem es ein JSON-Objekt mit "decision": "block" ausgibt); jeder andere Exit-Code ungleich null wird als Fehler protokolliert und blockiert nicht – siehe Exit-Codes.
Hook-Ereignisse
Hooks können auf diese Lifecycle-Ereignisse 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:
Command-Hooks
Command-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 eindecision-Feld auf oberster Ebene zurück (mit einem optionalen reason):
additionalContext in einem hookSpecificOutput-Objekt zurück, das mit dem Ereignisnamen versehen ist:
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. Hook-Dateien auf Projektebene werden im Arbeitsverzeichnis und in dessen übergeordneten Verzeichnissen bis zum Root-Verzeichnis des Repositorys erkannt – entsprechend der Art und Weise, wie Skills und Rules geladen werden.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.

