Deepseek ArtifactsDeepseek Artifacts
Guide auf Basis des offiziellen Hooks-Videos

Claude Code Hooks: settings.json, die 5 Events & Exit-Code-Blocking

Hooks sind die deterministische Schicht von Claude Code: Sie laufen immer, ganz ohne Prompting. Dieser bebilderte Walkthrough nutzt Anthropics eigenes Hooks-Video für die Bilder – die fünf Events, ein PreToolUse-Block-Script, strukturiertes Deny-JSON und eine komplette PostToolUse-Formatting-Konfiguration.

TL;DR – was Claude-Code-Hooks sind

  • Hooks sind deterministisch: Sie laufen an festen Punkten im Lebenszyklus von Claude Code, jedes einzelne Mal. Eine CLAUDE.md-Anweisung wie „nach jeder Bearbeitung Prettier ausführen“ funktioniert meistens – ein Hook funktioniert immer.
  • Es gibt fünf Events: UserPromptSubmit (bevor dein Prompt verarbeitet wird), PreToolUse (vor einem Tool-Aufruf), PostToolUse (nach Abschluss eines Tools), Notification und Stop (wenn Claude mit der Antwort fertig ist).
  • Ein PreToolUse-Hook, der mit Exit Code 2 endet, blockiert den Tool-Aufruf, und die stderr-Meldung geht zurück an Claude, damit es weiß, warum. Exit Code 0 lässt den Aufruf durch.
  • Hooks leben in settings.json – ein Event, ein optionaler Tool-Matcher und ein Befehl. Leg sie in die .claude/settings.json des Projekts und committe sie, dann erbt dein ganzes Team dieselben Garantien.

Hooks in Claude Code

Kanal:Claude (official Anthropic channel)3:22

Ansehen

Claude Code Hooks, Explained Simply

Kanal:Agentic Lab8:32

Ansehen

Claude Code - Getting Started with Hooks

Kanal:Greg Baugues11:53

Ansehen

Hooks reference — Claude Code documentation

Doku:code.claude.com

Ansehen

Die Frames in diesem Guide stammen aus Anthropics offiziellem Hooks-Erklärvideo; der Walkthrough-Text wurde unabhängig geschrieben und mit der offiziellen Hooks-Referenz abgeglichen.

Screenshots bleiben Eigentum ihrer Ersteller und werden mit Quellenangabe als visuelle Dokumentation verwendet. Jeder Schritt verlinkt zurück auf die exakte Stelle im Quellvideo.

Claude-Code-Hooks einrichten, Schritt für Schritt

1 · Wie Hooks in freier Wildbahn aussehen

  1. 1

    Zusehen, wie ein Hook am Ende einer Antwort feuert

    Die Statuszeile zeigt „Running stop hook · 39s · 484 tokens“ – Claude Code führt einen Stop-Hook aus, bevor es den Turn an dich zurückgibt. Das ist die ganze Idee in einem Screenshot: Ein von dir registrierter Befehl läuft an einem festen Punkt im Lebenszyklus, bei jedem passenden Ereignis, ganz ohne das Vertrauen darauf, dass sich das Modell etwas merkt.

    Claude Code terminal showing a running Stop hook at 39 seconds with 484 tokens right after Claude finished composing an answer
    Ein Stop-Hook läuft nach Claudes Antwort – 39 Sekunden vergangen, 484 Tokens verbraucht.Ab 0:10 ansehen
  2. 2

    Die fünf Hook-Events kennenlernen

    UserPromptSubmit feuert, sobald du einen Prompt abschickst, bevor Claude ihn verarbeitet. PreToolUse läuft vor jedem Tool-Aufruf. PostToolUse läuft nach Abschluss eines Tool-Aufrufs. Notification feuert, wenn Claude eine Benachrichtigung sendet, und Stop läuft, wenn Claude mit der Antwort fertig ist. Jeder Hook, den du schreibst, hängt an genau einem dieser fünf Punkte.

    Slide listing the five Claude Code hook events UserPromptSubmit, PreToolUse, PostToolUse, Notification and Stop from Anthropic’s official hooks tutorial
    Die fünf Events aus Anthropics offiziellem Hooks-Video – alles andere hängt an dieser Liste.Ab 1:04 ansehen

2 · Deine ersten Hooks schreiben

  1. 3

    Einen hooks-Block in settings.json ergänzen

    Ein Hook ist in settings.json ein Dreiklang: der Event-Name, ein optionaler Matcher, der eingrenzt, auf welches Tool er sich bezieht, und der auszuführende Befehl. Im Screenshot wird der PreToolUse-Matcher gerade mit Edit vervollständigt – dieser Hook feuert nur bei Datei-Bearbeitungen. Wer kein JSON anfassen will, editiert dieselbe Konfiguration interaktiv im /hooks-Menü.

    Claude Code settings.json with a PreToolUse hooks array open in VS Code while the matcher field autocompletes Edit for a tool-scoped hook
    Der Matcher vervollständigt sich zu Edit und schränkt den PreToolUse-Hook auf Datei-Edits ein.Ab 0:14 ansehen
  2. 4

    Gefährliche Befehle mit Exit Code 2 blockieren

    Ein PreToolUse-Hook erhält Toolname und Eingabe als JSON auf stdin. Dieses Script leitet es durch jq, um .tool_input.command zu greifen, sucht mit grep nach destruktiven Mustern – rm -rf, git push --force – und gibt bei einem Treffer den Grund auf stderr aus und beendet sich mit 2. Exit Code 2 blockiert den Aufruf; der stderr-Text geht als Feedback an Claude zurück, damit das Modell weiß, warum es blockiert wurde, und sich anpassen kann.

    Bash PreToolUse hook script using jq to read tool_input.command from stdin and exit 2 to block destructive rm -rf and git push --force commands in Claude Code
    jq liest den Befehl von stdin; ein Treffer auf rm -rf oder --force schreibt auf stderr und beendet mit 2.Ab 2:02 ansehen
  3. 5

    Eine strukturierte Ablehnung statt eines Exit Codes senden

    Für feinere Kontrolle kann ein Hook eine JSON-Entscheidung ausgeben, statt auf Exit Codes zu setzen. Hier fängt ein PreToolUse-Hook DROP TABLE ab, und hookSpecificOutput trägt permissionDecision „deny“ plus einen Grund – „nutze stattdessen eine Migration“ – der direkt in den Kontext des Modells landet. Dieselbe harte Garantie, aber mit einer umsetzbaren Anweisung angehängt.

    Claude Code PreToolUse hook denying a DROP TABLE SQL command with hookSpecificOutput permissionDecision deny JSON that tells the model to use a migration instead
    Ein permissionDecision von deny blockiert den SQL-Befehl und sagt dem Modell, was stattdessen zu tun ist.Ab 2:16 ansehen
  4. 6

    Hooks im Repo halten, damit das Team sie bekommt

    Hooks, die in der .claude/settings.json des Projekts konfiguriert sind, sind auf Projektebene und lassen sich committen. Jeder, der das Repo klont, läuft automatisch mit denselben Hooks – auch den blockierenden. Lege Hilfsscripts in .claude/hooks/ ab und referenziere sie über die Umgebungsvariable CLAUDE_PROJECT_DIR, damit die Pfade sich auflösen, egal wo Claudes aktuelles Arbeitsverzeichnis liegt.

    VS Code explorer showing a project .claude folder with a hooks directory and settings.json open next to CLAUDE.md for team-shared Claude Code hooks
    Der .claude-Ordner des Projekts enthält settings.json plus einen hooks/-Ordner mit geteilten Scripts.Ab 0:17 ansehen
  5. 7

    Eine komplette, echte Hooks-Konfiguration kopieren

    Diese Konfiguration erledigt zwei Jobs gleichzeitig. Der PostToolUse-Block matcht Edit|Write|MultiEdit und führt .claude/hooks/auto-format.sh mit 30 Sekunden Timeout aus – jede Datei, die Claude anfasst, wird formatiert. Darunter matcht ein zweiter Hook Bash und loggt jeden ausgeführten Befehl – das Compliance-Muster. Die Felder timeout und async verhindern, dass langsame Formatter die Sitzung blockieren.

    settings.json hooks block with a PostToolUse matcher of Edit|Write|MultiEdit running an auto-format.sh script at timeout 30 plus a Bash command logging hook
    PostToolUse-Autoformatierung mit 30s Timeout, dazu ein Bash-Hook, der jeden Befehl loggt.Ab 2:46 ansehen

3 · Sie wie ein Team betreiben

  1. 8

    Den Exit-Code-Vertrag auswendig können

    Exit Code 0 heißt: weitermachen. Exit Code 2 heißt: blockieren – und stderr geht als Feedback an Claude, das damit arbeiten kann. Jeder andere Exit Code zeigt dir als Nutzer stderr, aber der Tool-Aufruf läuft weiter; nutz das für Warnungen, die du sehen willst, ohne den Agenten hart zu blockieren.

  2. 9

    Hooks über das /hooks-Menü registrieren und Rezepte wählen

    Der Befehl /hooks öffnet dieselbe Konfiguration interaktiv – praktisch, um zu prüfen, welche Hooks in welchem Scope registriert sind. Von hier zu den vier Arbeitstier-Rezepten: nach Edits automatisch formatieren (PostToolUse), alle ausgeführten Befehle loggen (PostToolUse auf Bash), gefährliche Operationen blockieren (PreToolUse mit Exit 2) und sich benachrichtigen lassen, wenn Claude fertig ist (Stop). Wenn etwas jedes Mal ohne Ausnahme passieren muss, gehört es nicht in einen Prompt – sondern in einen Hook.

Der Exit-Code-Vertrag in einer Tabelle

Jeder Hook-Befehl kommuniziert über seinen Exit Code. Drei Fälle decken alles ab, was du brauchst:

  • exit 0Weitermachen. Der Tool-Aufruf läuft normal. stdout vom Hook ist im Transcript-Modus sichtbar (Ctrl-R).
  • exit 2Blockieren. Der Tool-Aufruf wird abgelehnt und die stderr-Ausgabe des Hooks geht als Feedback an Claude zurück, sodass das Modell korrigieren kann – das macht Exit-2-Hooks lehrreich statt nur fatal.
  • exit 1Jeder andere Code: warnen statt blockieren. stderr wird dir gezeigt, aber der Aufruf läuft weiter. Nutze das für Hinweis-Hooks – „diese Datei ist normalerweise generiert, bist du sicher?“

Ein weiterer Upgrade-Weg: Statt Exit Codes kann ein Hook eine JSON-Entscheidung ausgeben (hookSpecificOutput mit permissionDecision), um mit strukturiertem Grund zu blockieren, wie in Schritt 5. Exit Codes sind der einfache Vertrag; JSON-Entscheidungen sind der typisierte.

Vier Rezepte, die sich heute zu committen lohnen

Das offizielle Video nennt vier Use Cases; hier sind sie als Copy-Paste-Absicht:

  1. 1Nach Edits automatisch formatieren – ein PostToolUse-Hook matcht Edit|MultiEdit, prüft die Dateiendung und ruft den richtigen Formatter auf: Prettier für TypeScript, gofmt für Go, Ruff für Python.
  2. 2Jeden ausgeführten Befehl loggen – ein PostToolUse-Hook auf Bash hängt jeden Befehl an eine Datei an. Compliance-Teams lieben das; dein zukünftiges Ich beim Debuggen vom letzten Dienstag auch.
  3. 3Gefährliche Operationen blockieren – ein PreToolUse-Hook mit Exit 2 bewacht Produktiv-Konfigverzeichnisse, rm -rf-Muster oder Commits auf main. Daraus werden Garantien, keine Vorschläge.
  4. 4Benachrichtigen, wenn die Aufgabe fertig ist – ein Stop- oder Notification-Hook löst eine Desktop-Benachrichtigung oder einen Sound aus, damit lange Agent-Läufe kein Babysitting brauchen.

Alle vier passen in eine .claude/settings.json. Fang mit dem Formatter an – das ist der Hook, den du bei jedem einzelnen Speichern spürst.

Claude Code Hooks FAQ

Verwandte Guides