Hooks
Mit Hooks kannst du Befehle an bestimmten Punkten im Lebenszyklus von Claude Code ausführen. Der entscheidende Unterschied zwischen Hooks und allem anderen, was in diesem Kurs behandelt wird, ist, dass Hooks deterministisch sind — sie laufen immer.
Warum Hooks verwenden
Du kannst Claude in deiner CLAUDE.md anweisen, nach jeder Dateibearbeitung Prettier auszuführen. Meistens wird es das auch tun. Aber manchmal eben nicht. Ein Hook sorgt dafür, dass es jedes einzelne Mal passiert, ohne Ausnahme.
Häufige Anwendungsfälle sind:
- Automatische Formatierung nach Dateibearbeitungen
- Protokollierung aller ausgeführten Befehle zu Compliance-Zwecken
- Blockieren gefährlicher Operationen wie das Ändern von Produktionsdateien
- Versenden von Benachrichtigungen an dich selbst, wenn Claude eine Aufgabe abgeschlossen hat
Wie sie funktionieren
Hooks werden in deiner settings.json konfiguriert. Du wählst ein Ereignis aus, legst optional einen Matcher fest, für welche Tools es gilt, und gibst einen auszuführenden Befehl an. Einige der häufigsten Ereignisse sind:
- PreToolUse — läuft vor einem Tool-Aufruf
- PostToolUse — läuft, nachdem ein Tool-Aufruf abgeschlossen ist
- UserPromptSubmit — läuft, wenn du einen Prompt absendest, bevor Claude ihn verarbeitet
- Stop — läuft, wenn Claude mit der Antwort fertig ist
- Notification — läuft, wenn Claude eine Benachrichtigung sendet
Das sind nur einige der Ereignisse, in die du dich einklinken kannst — Claude Code unterstützt noch viele weitere. Die vollständige Liste findest du in der Hooks-Referenz(öffnet in neuem Tab).
Du konfigurierst sie, indem du direkt die settings.json bearbeitest. Der Befehl /hooks innerhalb von Claude Code öffnet eine schreibgeschützte Liste deiner konfigurierten Hooks, sodass du prüfen kannst, ob ein neuer Hook auftaucht.

Ein praktisches Beispiel
Der häufigste Hook: automatische Formatierung nach Bearbeitungen. Richte einen PostToolUse-Hook mit einem Matcher von "Edit|Write" ein, sodass er ausgelöst wird, nachdem Claude das Edit- oder Write-Tool verwendet hat. Der Befehl prüft die Dateiendung und führt den passenden Formatter aus: Prettier für TypeScript, gofmt für Go, je nachdem, was dein Projekt verwendet.
Blockieren mit PreToolUse
PreToolUse-Hooks können Tool-Aufrufe blockieren, bevor sie ausgeführt werden. Dein Hook erhält den Tool-Namen und die Eingabe als JSON über stdin. Der Exit-Code bestimmt das Verhalten:
- Exit-Code 0 — normal fortfahren.
- Exit-Code 2 — die Aktion blockieren. Die stderr-Meldung wird an Claude zurückgegeben, damit es weiß, warum es blockiert wurde, und sich entsprechend anpassen kann.
- Jeder andere Exit-Code — ein nicht blockierender Fehler, der dir angezeigt wird, aber nichts stoppt.
So erzwingst du feste Regeln. Blockiere Schreibzugriffe auf ein Produktions-Konfigurationsverzeichnis. Blockiere Bash-Befehle, die rm -rf enthalten. Blockiere Commits auf main. Was auch immer dein Team garantiert haben muss, nicht nur vorgeschlagen.

Hooks mit deinem Team teilen
Hooks, die in .claude/settings.json konfiguriert sind, gelten auf Projektebene und können in dein Repo eingecheckt werden. Das bedeutet, dass dein gesamtes Team automatisch dieselben Hooks erhält. Verwende die Umgebungsvariable CLAUDE_PROJECT_DIR in deinen Befehlen, um auf Skripte zu verweisen, die in deinem Projekt gespeichert sind, damit sie unabhängig vom aktuellen Arbeitsverzeichnis von Claude funktionieren.
Zusammenfassung
Hooks geben dir deterministische Kontrolle über das Verhalten von Claude Code. Verwende PostToolUse für automatische Formatierung und Protokollierung. Verwende PreToolUse, um gefährliche Operationen zu blockieren. Konfiguriere sie in settings.json und sieh sie dir mit /hooks an. Und checke sie in dein Repo ein, damit auch dein Team sie erhält.
Wenn etwas jedes Mal ohne Ausnahme passieren muss, schreib es nicht in einen Prompt. Schreib es in einen Hook.