Hooks und Permissions
Claudes Verhalten anpassen und Sicherheitsgrenzen setzen
⏱ ca. ~6 Min
01 · Lesen
Hooks lassen dich deinen eigenen Code an bestimmten Stellen im Ablauf von Claude ausführen. Vor einem Tool-Aufruf? Nach einem Edit? Beim Session-Start? Du kannst diese Events abfangen und eigene Logik einklinken — Auto-Format, Sicherheitschecks, Notifications, eigene Validierung.
Permissions steuern, was Claude darf. Standardmäßig fragt Claude, bevor er Befehle ausführt oder Dateien editiert. Aber du kannst sichere Aktionen vorab freigeben (wie npm test), gefährliche blockieren (wie git push --force) und Claude bei Routineaufgaben schneller laufen lassen, während riskante sicher bleiben.
💡 Stell dir das so vorHooks sind wie Prüfpunkte an einem Fließband. An jeder Station prüft ein Inspektor (dein Skript) die Arbeit und winkt sie durch (exit 0) oder schickt sie zurück (exit 2). Permissions sind wie ein Ausweissystem für die Sicherheit — manche Türen stehen immer offen (Dateien lesen), manche verlangen einen Ausweis (Befehle), manche sind abgeschlossen (gefährliche Operationen).
Kernpunkte
- Hooks: deinen Code an bestimmten Stellen in Claudes Ablauf ausführen
- Permissions: steuern, was Claude darf und was nicht
- Hooks fangen Events ab; Permissions setzen die übergreifenden Regeln
- Zusammen passen sie Claude an deinen Workflow an und schützen ihn
02 · Lesen
Hier sind die nützlichsten Hook-Events:- PreToolUse — wird ausgelöst, bevor Claude ein Tool nutzt (Read, Edit, Bash usw.). Du kannst prüfen, was er vorhat, und es blockieren. - PostToolUse — wird ausgelöst, nachdem ein Tool erfolgreich war. Ideal zum Auto-Formatieren editierter Dateien oder zum Loggen von Änderungen. - SessionStart — wird beim Start einer Session ausgelöst. Nutze ihn, um Context-Erinnerungen einzuspielen, besonders nach einer Kompaktierung. - Notification — wird ausgelöst, wenn Claude deine Aufmerksamkeit braucht. Gut für Desktop-Notifications. - Stop — wird ausgelöst, wenn Claude eine Antwort abgeschlossen hat.
Hooks kommunizieren über Exit Codes: exit 0 heißt, die Aktion ist erlaubt, exit 2 heißt, sie wird blockiert (deine Fehlermeldung auf stderr wird zu Claudes Feedback).
Kernpunkte
- PreToolUse: vor der Ausführung prüfen, optional blockieren
- PostToolUse: nach erfolgreichem Tool reagieren (Auto-Format, Log)
- SessionStart: Context beim Start oder nach Kompaktierung einspielen
- Exit 0 = erlaubt, Exit 2 = blockiert (stderr wird Feedback)
03 · Code-Beispiel
Hier ist ein PostToolUse-Hook, der Dateien automatisch formatiert, nachdem Claude sie editiert hat. Leg ihn in die .claude/settings.json deines Projekts.
.claude/settings.json — Auto-Format-Hook
{
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
}]
}]
}
}
Das Feld matcher nutzt eine Regex zum Abgleich mit Tool-Namen — Edit|Write bedeutet, dass dieser Hook nach jedem Edit- oder Write-Aufruf läuft. Der Befehl bekommt JSON mit den Tool-Aufrufdetails über stdin, extrahiert den Dateipfad und ruft Prettier darauf auf. Jede Datei, die Claude editiert, wird automatisch formatiert.
04 · Code-Beispiel
Hier ist ein PreToolUse-Hook, der gefährliche Bash-Befehle blockiert.
.claude/hooks/protect.sh
#!/bin/bash
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command')
if [[ "$CMD" =~ "rm -rf" ]]; then
echo "Blocked: rm -rf is not allowed" >&2
exit 2 # Block the action
fi
exit 0 # Allow everything else
.claude/settings.json
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": ".claude/hooks/protect.sh"
}]
}]
}
}
Dieser Hook fängt jeden Bash-Befehl ab, den Claude ausführen will. Er liest den Befehl von stdin (als JSON), prüft auf rm -rf und blockiert mit Exit Code 2. Die Fehlermeldung auf stderr sagt Claude, warum blockiert wurde, und Claude akzeptiert die Einschränkung.
05 · Lesen
Permissions geben dir übergreifende Allow-/Deny-Regeln, ohne dass du Skripte schreiben musst. Sie sind durch Wildcard-Matching flexibel.
Allow-Regeln geben Aktionen vorab frei, damit Claude nicht fragen muss:- Bash(npm run ) — jedes npm-Skript - Bash(git commit ) — Änderungen committen - Read(*.env) — env-Dateien lesen
Deny-Regeln blockieren Aktionen komplett:- Bash(git push --force ) — kein Force-Push - Edit(package-lock.json) — Lockfile nicht anfassen - Bash(rm -rf ) — kein rekursives Löschen
Deny-Regeln gewinnen immer gegen Allow-Regeln. Settings werden vom Spezifischen zum Allgemeinen geprüft: local project > project > user.
Kernpunkte
- Allow-Regeln: sichere Aktionen vorab freigeben (keine Permission-Abfrage)
- Deny-Regeln: Aktionen komplett blockieren
- Wildcards: Bash(npm *) matcht jeden npm-Befehl
- Deny gewinnt im Konflikt immer gegen Allow
- Lokale Settings überschreiben Projekt überschreibt User
06 · Quiz
Dein PreToolUse-Hook erkennt, dass Claude rm -rf /tmp/build ausführen will. Welchen Exit Code soll dein Hook-Skript zurückgeben, um die Aktion zu blockieren?
- Exit Code 0 — Erfolg
- Exit Code 2 — Aktion blockieren
- Exit Code 1 — allgemeiner Fehler
- Exit Code 255 — schwerer Fehler
07 · Zuordnen
Ordne jedes Hook-Event seinem besten Einsatz zu.
(Diese Sektion ist interaktiv — aktiviere JavaScript, um sie zu nutzen.)
Andere Lektionen aus diesem Kapitel
⚠ Das volle interaktive Erlebnis braucht JavaScript. Bitte aktiviere es und lade die Seite neu.
※ Diese Seite ist ein unabhängiges Bildungsprojekt — kein offizielles Anthropic-Produkt. Claude™ ist eine eingetragene Marke von Anthropic, PBC.