WissenClaude Code & Vibe Coding
Claude Code Hooks einfach erklärt, wie du automatische Reaktionen einbaust
Eine Anweisung in der CLAUDE.md kann Claude ignorieren, wenn er es für sinnvoll hält. Ein Hook nicht. Wie du mit Hooks feste Regeln baust, die immer greifen.
Du sagst einem neuen Kollegen, er soll vor jedem Feierabend die Werkstatt aufräumen. Meistens klappt das, aber irgendwann vergisst er es, weil es nur eine Bitte war, keine automatische Schranke, die am Werkstatttor runtergeht. Ein Hook in Claude Code ist genau diese Schranke: eine Regel, die bei einem bestimmten Ereignis von selbst auslöst, egal was der Agent gerade vorhat.
Kurz gesagt
Ein Hook in Claude Code ist ein kleines Skript, das automatisch bei einem festgelegten Ereignis läuft, etwa bevor ein Befehl ausgeführt wird oder nachdem eine Datei geändert wurde. Anders als eine Anweisung in der CLAUDE.md, die Claude befolgen soll, führt das Programm selbst einen Hook zwingend aus. So lassen sich gefährliche Befehle hart blockieren, Formatierer automatisch nachlaufen lassen oder Aktionen protokollieren, unabhängig davon, was der Agent gerade entscheidet.
Was ein Hook technisch macht
Claude Code kennt über 30 verschiedene Ereignisse, bei denen ein Hook einhaken kann, von SessionStart beim Öffnen einer Session bis Stop, wenn Claude eine Antwort beendet. Die zwei wichtigsten im Alltag sind PreToolUse, das vor einer Aktion wie einem Bash-Befehl oder einer Dateiänderung läuft, und PostToolUse, das danach läuft. Ein PreToolUse-Hook kann eine Aktion noch verhindern, ein PostToolUse-Hook kommt zu spät dafür, eignet sich aber gut, um zum Beispiel automatisch einen Formatierer laufen zu lassen. Technisch entscheidet dabei ein Exit-Code: gibt dein Skript den Code 2 zurück, blockiert Claude Code die Aktion, jeder andere Code lässt sie normal weiterlaufen.
Wo du Hooks einträgst
Hooks stehen in einer settings.json. Für nur dich selbst kommt das in ~/.claude/settings.json, für ein Projekt, das dein ganzes Team teilen soll, in .claude/settings.json im Projektordner, das du ins Git-Repository einchecken kannst. Wichtig dabei: Hooks aus einem Projektordner laufen erst, nachdem du den Ordner einmal über den Sicherheitsdialog bestätigt hast. Das verhindert, dass ein fremdes, heruntergeladenes Projekt beim ersten Öffnen automatisch Befehle bei dir startet.
Ein Beispiel, das du direkt nachbauen kannst
Ein sehr verbreiteter Anwendungsfall ist, gefährliche Löschbefehle hart zu blockieren, egal was Claude gerade vorhat. Ein PreToolUse-Hook auf das Ereignis Bash prüft dafür den Befehl, bevor er läuft, und bricht mit Exit-Code 2 ab, wenn er zum Beispiel rm -rf erkennt. Genauso lässt sich nach jeder Dateiänderung automatisch ein Formatierer wie Prettier anstoßen, über einen PostToolUse-Hook, der nach jedem Edit-Ereignis feuert. Beides läuft unabhängig davon, ob Claude selbst daran gedacht hätte.
Warum das etwas anderes ist als die CLAUDE.md
In der CLAUDE.md stehen Anweisungen, die Claude als Kontext liest und versucht zu befolgen, mit hoher, aber nicht garantierter Treffsicherheit. Ein Hook läuft dagegen als eigenständiger Prozess außerhalb des Modells und wird vom Programm selbst durchgesetzt. Die offizielle Dokumentation ist an dieser Stelle eindeutig: wenn eine Regel an einem festen Punkt garantiert greifen muss, etwa vor jedem Commit, gehört sie in einen Hook, nicht in die CLAUDE.md.
Ich denke, genau dieser Unterschied wird am Anfang oft übersehen, weil beides sich wie eine Regel anfühlt. Eine CLAUDE.md-Zeile ist eher wie eine Teamregel, an die sich die meisten halten. Ein Hook ist die Schranke, die gar keine Wahl lässt. Für alles, wo ein einziges Übersehen teuer wird, etwa produktive Datenbanken oder Löschbefehle, würde ich immer den Hook nehmen und nicht auf die reine Anweisung vertrauen.
Quellen: Hooks reference (Claude Code Docs) · Claude Code Hooks: Complete Guide to All 30 Lifecycle Events (claudefa.st)
Häufige Fragen
Läuft ein Hook auch, wenn Claude etwas ablehnt oder abbricht?
Kommt auf das Ereignis an. Ein PreToolUse-Hook läuft, bevor die Aktion überhaupt startet, unabhängig davon was Claude vorhatte. Ein PostToolUse-Hook läuft nur, wenn die Aktion tatsächlich durchgelaufen ist.
Muss ich programmieren können, um einen Hook zu schreiben?
Ein einfacher Hook ist ein kurzes Shell-Skript, das eine Bedingung prüft und mit einem Exit-Code antwortet. Für die gängigen Fälle wie das Blockieren von rm-Befehlen reichen wenige Zeilen, die du dir auch von Claude selbst schreiben lassen kannst.
Läuft ein Hook automatisch bei jedem Projekt, das ich öffne?
Nein. Hooks in der projektweiten settings.json laufen erst, nachdem du den Ordner einmal über den Sicherheitsdialog als vertrauenswürdig bestätigt hast. Das schützt dich davor, dass ein fremdes Projekt heimlich Befehle bei dir ausführt.
Was ist der Unterschied zwischen einem Hook und einer Regel in der CLAUDE.md?
Die CLAUDE.md ist eine Empfehlung, die Claude befolgen soll, aber nicht muss. Ein Hook ist eine Regel, die das Programm selbst durchsetzt, egal was Claude gerade denkt.
Willst du das bei dir umsetzen?
In der Community zeige ich, was bei mir hält. Im Erstgespräch schauen wir uns dein Vorhaben konkret an.