ANLEITUNG
Claude Code Hooks: Regeln, die Claude nicht vergessen kann
Hooks sind kleine Befehle, die Claude Code automatisch an bestimmten Stellen ausführt: bevor er eine Datei ändert, nachdem er sie geändert hat, wenn er fertig ist. Anders als eine Regel in der CLAUDE.md muss Claude sich nicht an einen Hook erinnern, er läuft einfach. Hier steht, wie Hooks funktionieren und drei Beispiele, die ich für jedes App-Projekt nehmen würde.
Das Wichtigste in Kürze
- Was ein Hook ist
- Ein Befehl oder Skript, das Claude Code bei einem bestimmten Ereignis ausführt, zum Beispiel vor oder nach jeder Dateiänderung.
- Wo du ihn einträgst
- In .claude/settings.json im Projekt, für alle Projekte in ~/.claude/settings.json. Mit /hooks siehst du, welche Hooks aktiv sind.
- Wie ein Hook etwas verhindert
- Mit exit 2. Bei Ereignissen wie PreToolUse stoppt das die Aktion, und Claude bekommt deine Fehlermeldung als Grund.
- Wofür ich sie nehme
- Für alles, was immer passieren muss: Code prüfen, Dateien formatieren, geheime Dateien schützen.
Hook oder CLAUDE.md: was ist der Unterschied?
In die CLAUDE.md schreibst du, wie Claude arbeiten soll. Das ist eine Bitte. Claude hält sich meistens daran, aber nicht immer, vor allem wenn die Datei lang ist. Ein Hook ist keine Bitte. Er läuft jedes Mal, egal was Claude gerade denkt.
Die Faustregel: Alles, was nie passieren darf oder immer passieren muss, gehört in einen Hook. Alles, was Erklärung und Urteilsvermögen braucht, in die CLAUDE.md.
Die wichtigsten Hook-Events
Claude Code kennt laut Doku über 30 Events. Für den Anfang reichen diese sechs:
- PreToolUse
- Bevor Claude ein Werkzeug benutzt, also zum Beispiel eine Datei schreibt oder einen Befehl ausführt. Kann die Aktion blockieren.
- PostToolUse
- Nachdem ein Werkzeug erfolgreich lief. Gut zum Prüfen und Formatieren.
- UserPromptSubmit
- Wenn du eine Nachricht abschickst, bevor Claude sie bearbeitet.
- Stop
- Wenn Claude mit seiner Antwort fertig ist.
- Notification
- Wenn Claude Code eine Benachrichtigung schickt, zum Beispiel weil er auf dich wartet.
- SessionStart
- Wenn eine Sitzung startet oder fortgesetzt wird.
So ist ein Hook aufgebaut
Ein Hook hat drei Ebenen: das Event, dann einen Matcher, der festlegt, für welche Werkzeuge er gilt (zum Beispiel Edit|Write für Dateiänderungen oder Bash für Befehle), und dann den eigentlichen Befehl. Claude Code schickt dem Befehl die Details als JSON über stdin, bei Dateiänderungen steht der Pfad in tool_input.file_path.
Wichtig sind die Exit-Codes. Exit 0 heißt: alles gut. Exit 2 heißt: blockieren, und was dein Skript auf stderr schreibt, bekommt Claude als Begründung. Jeder andere Code ist nur ein Hinweis, die Aktion läuft trotzdem. Exit 1 blockiert also nichts, darauf weist auch Anthropic ausdrücklich hin.
Beispiel 1: Typprüfung nach jeder Änderung
Das ist der Hook, den ich zuerst einrichten würde. Nach jeder Dateiänderung läuft die TypeScript-Prüfung. Findet sie Fehler, landen sie direkt bei Claude, und er repariert sie, bevor er weitermacht. Bei einem PostToolUse-Hook blockiert exit 2 nichts mehr, die Änderung ist ja schon passiert, aber Claude sieht die Fehlermeldung.
// .claude/settings.json
// Nach jeder Änderung prüft TypeScript das Projekt.
// Fehler gehen per exit 2 direkt zurück an Claude, der sie dann behebt.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "npx tsc --noEmit 1>&2 || exit 2" }
]
}
]
}
}Beispiel 2: die .env schützen
In der .env stehen deine Schlüssel und Passwörter. Mit diesem Hook kann Claude sie nicht mehr bearbeiten, egal was im Chat passiert. Das ist genau die Art Regel, die man nicht nur in die CLAUDE.md schreiben sollte.
// .claude/settings.json
// Bevor Claude eine Datei schreibt, läuft das Skript. Exit 2 blockiert die Änderung.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/env-schuetzen.sh" }
]
}
]
}
}#!/bin/bash
# .claude/hooks/env-schuetzen.sh (danach: chmod +x)
# Claude Code schickt die geplante Änderung als JSON über stdin.
datei=$(jq -r '.tool_input.file_path')
case "$datei" in
*.env*)
echo "Die .env darf Claude nicht bearbeiten." >&2
exit 2 ;;
esac
exit 0Beispiel 3: Code automatisch formatieren
Claude formatiert Code nicht immer so, wie dein Projekt es will. Statt ihn jedes Mal daran zu erinnern, formatiert dieser Hook jede geänderte Datei sofort.
// .claude/settings.json
// Nach jeder Änderung wird genau die geänderte Datei formatiert.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }
]
}
]
}
}Worauf du achten solltest
- Hooks laufen mit deinen Rechten
- Ein Hook ist ein Befehl auf deinem Rechner. Übernimm keine Hooks aus fremden Projekten, ohne sie zu lesen.
- Ein abgestürzter Hook blockiert nicht
- Fehlt das Skript oder stürzt es ab, läuft die Aktion standardmäßig trotzdem. Für harte Verbote gibt es zusätzlich die Berechtigungen in Claude Code.
- Hooks kurz halten
- Ein Hook nach jeder Änderung läuft oft. Eine Prüfung, die eine Minute dauert, bremst jede Sitzung aus.
- Alle Hooks auf einmal ausschalten
- Mit "disableAllHooks": true in den Einstellungen, zum Beispiel wenn etwas klemmt.
Wo finde ich meine Hooks?
Tipp /hooks in Claude Code. Du siehst alle aktiven Hooks und woher sie kommen: aus deinen Einstellungen, aus dem Projekt oder aus einem Plugin. Ändern oder löschen kannst du sie dort nicht, das machst du direkt in der settings.json.
Kann ein Hook Claude stoppen?
Ja, bei Events wie PreToolUse mit exit 2. Die Aktion wird dann nicht ausgeführt, und Claude bekommt deine Meldung als Grund. Bei PostToolUse ist die Aktion schon passiert, dort zeigt exit 2 Claude nur die Meldung.
Brauche ich Programmierkenntnisse für Hooks?
Für die drei Beispiele oben nicht, die kannst du kopieren. Für eigene Hooks hilft es, ein bisschen Shell zu verstehen. Du kannst Claude aber auch einfach bitten, dir einen Hook zu schreiben, und ihn dann lesen, bevor du ihn einträgst.
Der Kurs dazu, auf Deutsch
Wenn du es lieber gezeigt bekommst, als es zu lesen: einmal komplett von der Idee bis zur App auf deinem Handy, als Videokurs auf Deutsch und ohne Vorkenntnisse.
Weitere Anleitungen auf Deutsch
Zum Weiterlesen (englisch)
Wenn du mit einer Vorlage starten willst
NativeExpress kostet einmal 229 Dollar. Du bekommst den kompletten Code und jede künftige Version. Den Support mache ich selbst, per Discord oder E-Mail, gern auch auf Deutsch.

