claude-code-notifier
so funktioniert's Guides faq
◐Deutsch
English العربية Deutsch Español Français עברית Italiano 日本語 한국어 Nederlands Polski Português (Brasil) Русский Türkçe Tiếng Việt 简体中文 繁體中文
Loslegen
Alle Guides

Claude Code-Hooks erklärt: alle Events und wofür sie gut sind

Aktualisiert am 31. Oktober 2026 · 7 Min. Lesezeit
Auf dieser Seite 01So ist ein Hook aufgebaut 02Wo Hooks liegen 03Handler-Typen 04Matcher 05Input: was dein Hook bekommt 06Output: Exit-Codes und JSON 07Alle Hook-Events 08Welche Events für Benachrichtigungen wichtig sind 09Wo Claude Code Notifier ins Spiel kommt 10FAQ

Claude Code-Hooks sind Befehle (oder HTTP-Aufrufe, Prompts und ein paar weitere Handler-Typen), die Claude Code an festen Punkten einer Session automatisch ausführt – etwa bevor ein Tool läuft, wenn eine Berechtigung nötig ist oder wenn Claude mit der Antwort fertig ist. Du definierst sie unter einem hooks-Key in einer Settings-Datei wie ~/.claude/settings.json. Jeder Hook bekommt JSON zum Event über stdin und kann über seinen Exit-Code oder ein JSON-Objekt auf stdout antworten. So kann er loggen, benachrichtigen, eine Aktion blockieren oder in deinem Namen antworten.

01So ist ein Hook aufgebaut

Eine Hook-Konfiguration hat drei Ebenen:

  1. Das Hook-Event, z. B. PreToolUse oder Stop.
  2. Eine Matcher-Gruppe, die filtert, wann er auslöst, z. B. „nur für das Bash-Tool“.
  3. Ein oder mehrere Hook-Handler – das, was tatsächlich ausgeführt wird.
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/lint-check.sh"
          }
        ]
      }
    ]
  }
}

Das führt ein Lint-Skript aus, nachdem Claude eine Datei geschrieben oder bearbeitet hat. Für ein zweites Event fügst du einfach einen weiteren Key im selben hooks-Objekt hinzu.

02Wo Hooks liegen

DateiGilt fürGeteilt?
~/.claude/settings.jsonAlle deine ProjekteNein, nur auf deinem Rechner
.claude/settings.jsonEin ProjektJa, kann committet werden
.claude/settings.local.jsonEin ProjektNein
Managed-Policy-SettingsDeine OrganisationVon Admins festgelegt
hooks/hooks.json eines PluginsSolange das Plugin aktiviert istJa

Hooks aus verschiedenen Dateien werden zusammengeführt, statt sich gegenseitig zu ersetzen. Gib /hooks in Claude Code ein, um alle aktiven Hooks und ihre Herkunft zu sehen.

In einer interaktiven Session hält Claude Code Hooks – auch deine eigenen – zurück, bis du den Workspace-Trust-Dialog für den Ordner bestätigt hast.

03Handler-Typen

Die meisten Hooks sind "type": "command" und führen einen Shell-Befehl aus. Es gibt vier weitere:

  • http: schickt das Event-JSON per POST an eine URL und liest den Response-Body.
  • mcp_tool: ruft ein Tool auf einem von dir konfigurierten MCP-Server auf.
  • prompt: stellt einem Claude-Modell eine einzelne Frage und liest eine JSON-Entscheidung aus.
  • agent: startet einen Subagent, der vor der Entscheidung Dateien lesen kann (experimentell).

Command-Hooks laufen mit deinen vollen Benutzerrechten, über sh -c auf macOS und Linux bzw. Git Bash (oder PowerShell) auf Windows. Mit "async": true läuft ein Hook im Hintergrund – dann kann er allerdings keine Entscheidungen mehr treffen.

04Matcher

Der matcher legt fest, bei welchen Vorkommen eines Events der Hook läuft. Womit verglichen wird, hängt vom Event ab: bei Tool-Events der Tool-Name, bei Notification der Benachrichtigungstyp, bei SessionStart die Art, wie die Session gestartet wurde, und so weiter.

  • "*", "" oder gar kein Matcher passt auf alles.
  • Buchstaben, Ziffern, _, -, Leerzeichen, | und , werden als exakte Namen behandelt. Edit|Write passt auf beide Tools.
  • Alles andere ist ein regulärer JavaScript-Ausdruck, d. h. mcp__memory__.* passt auf alle Tools eines MCP-Servers.

Matcher unterscheiden Groß- und Kleinschreibung. Manche Events, darunter Stop und UserPromptSubmit, ignorieren Matcher. Bei Tool-Events kannst du einen einzelnen Handler mit einem if-Feld und einer Berechtigungsregel wie "Bash(git *)" weiter einschränken.

05Input: was dein Hook bekommt

Jeder Hook bekommt über stdin JSON mit ein paar gemeinsamen Feldern, darunter session_id, transcript_path, cwd und hook_event_name, plus eventspezifische Felder. Ein PreToolUse-Hook für einen Bash-Aufruf bekommt z. B. zusätzlich tool_name und tool_input.command. Lies es mit jq oder einem beliebigen JSON-Parser aus:

#!/bin/bash
input=$(cat)
cmd=$(jq -r '.tool_input.command // empty' <<<"$input")
echo "Claude wants to run: $cmd" >> ~/claude-commands.log
exit 0

06Output: Exit-Codes und JSON

Ein Hook kann auf zwei Arten antworten.

Exit-Codes. 0 bedeutet Erfolg. 2 ist ein blockierender Fehler: Bei Events, die blockieren können, wird die Aktion gestoppt und dein stderr wird als Begründung verwendet. Jeder andere Code, auch das übliche 1, ist ein nicht blockierender Fehler – die Aktion läuft also weiter und du siehst einen Hinweis auf einen Hook-Fehler. Wenn ein Hook eine Regel durchsetzen soll, beende ihn mit 2, nicht mit 1.

JSON auf stdout. Für feinere Kontrolle beendest du mit 0 und gibst ein einzelnes JSON-Objekt aus. Manche Felder funktionieren überall, etwa continue: false, um Claude komplett zu stoppen. Andere sind eventspezifisch: Stop nutzt decision: "block" mit einem reason, während PreToolUse und PermissionRequest ihre Entscheidung in hookSpecificOutput angeben. Gib sonst nichts auf stdout aus: Schon eine verirrte Zeile aus deinem Shell-Profil verhindert, dass Claude Code das JSON lesen kann.

07Alle Hook-Events

EventWann er feuertKann blockieren?
SessionStartEine Session startet oder wird fortgesetztNein (fügt Kontext hinzu)
SetupGestartet mit --init-only oder mit --init / --maintenance zusammen mit -pNein
InstructionsLoadedEine CLAUDE.md- oder .claude/rules/*.md-Datei wird geladenNein
UserPromptSubmitDu schickst einen Prompt ab, bevor Claude ihn siehtJa
UserPromptExpansionEin eingegebener Befehl wird zu einem Prompt erweitertJa
PreToolUseVor jedem Tool-AufrufJa
PermissionRequestEin Tool-Aufruf braucht eine BerechtigungsentscheidungErlaubt oder verweigert per JSON
PermissionDeniedDer Auto-Modus verweigert einen Tool-AufrufNein
PostToolUseNach einem erfolgreichen Tool-AufrufNein (Tool ist schon gelaufen)
PostToolUseFailureNach einem fehlgeschlagenen Tool-AufrufNein
PostToolBatchNach einem Batch paralleler Tool-Aufrufe, vor dem nächsten ModellaufrufJa
NotificationClaude Code sendet eine BenachrichtigungNein
MessageDisplayWährend der Antworttext von Claude angezeigt wirdNein (kann ändern, was angezeigt wird)
SubagentStart / SubagentStopEin Subagent startet oder ist fertigNur SubagentStop
TaskCreated / TaskCompletedEin Task wird erstellt oder als erledigt markiertJa
StopClaude ist mit der Antwort fertigJa (lässt Claude weitermachen)
StopFailureDer Turn endet mit einem API-FehlerNein
TeammateIdleEin Teammate im Agent-Team wird gleich inaktivJa
ConfigChangeEine Settings-Datei ändert sich während einer SessionJa
CwdChangedDas Arbeitsverzeichnis ändert sichNein
DirectoryAddedEin Verzeichnis wird mit /add-dir hinzugefügtNein
FileChangedEine überwachte Datei ändert sich auf der FestplatteNein
WorktreeCreate / WorktreeRemoveEin Worktree wird erstellt oder entferntJa
PreCompact / PostCompactVor und nach der Kontext-KomprimierungNur PreCompact
PreModelSwitch / PostModelSwitchVor und nach dem ModellwechselNur PreModelSwitch
Elicitation / ElicitationResultEin MCP-Server fragt nach einer Eingabe, und nachdem du geantwortet hastJa
SessionEndEine Session endetNein

Anthropic fügt hin und wieder neue Events hinzu. Die aktuelle Liste und die Eingabefelder der einzelnen Events findest du in der Hooks-Referenz.

08Welche Events für Benachrichtigungen wichtig sind

Vier Events decken fast alles ab, worüber man informiert werden will:

  • Stop für „Claude ist fertig“. Siehe den Guide zum Stop hook.
  • Notification für „Claude wartet auf dich“, mit Typen wie permission_prompt und idle_prompt. Siehe den Guide zum Notification hook.
  • PermissionRequest, um sofort informiert zu werden oder zu antworten, sobald eine Berechtigung nötig ist. Siehe den Guide zu PermissionRequest.
  • PreToolUse auf dem Tool AskUserQuestion, um die Multiple-Choice-Fragen von Claude zu sehen oder zu beantworten. Siehe Fragen vom Handy aus beantworten.

Für ein Desktop-Setup zum direkten Einfügen fängst du am besten mit So bekommst du eine Benachrichtigung, wenn Claude Code fertig ist an.

09Wo Claude Code Notifier ins Spiel kommt

Claude Code Notifier baut komplett auf diesen Hooks auf. Das kostenlose Kommandozeilentool ccn läuft auf Mac, Windows und Linux. Bei der Installation fügt es sieben Hook-Einträge in ~/.claude/settings.json ein, die jeweils ccn hook ausführen, und legt einmalig ein Backup der Datei an. ccn läuft pro Event nur ein paar Millisekunden und beendet sich dann – es bleibt also nichts im Hintergrund aktiv.

Allein zeigt es Desktop-Benachrichtigungen an. Mit gekoppelter iPhone- oder Android-App bringen dieselben Hooks deine Antworten zurück: Berechtigungen erlauben oder ablehnen, Fragen beantworten oder die nächste Anweisung schicken, nachdem Claude aufgehört hat. Das Tool ist unabhängig und nicht von Anthropic. Wenn du nur ein Log oder einen Lint-Schritt brauchst, sind ein paar eigene Zeilen einfacher. Details findest du auf der ccn-Seite.

10FAQ

Wie teste ich einen Hook, ohne auf Claude zu warten?

Pipe Beispiel-JSON in das Skript und prüf den Exit-Code: echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh; echo $?. Führ dann /hooks in Claude Code aus, um zu prüfen, ob er beim richtigen Event registriert ist.

Warum läuft mein Hook nicht?

Die üblichen Ursachen sind ungültiges JSON in settings.json (abschließende Kommas, Kommentare), ein Matcher, der nicht exakt passt (Groß-/Kleinschreibung zählt), ein Skript ohne Ausführungsrechte oder ein Ordner, dem du noch nicht vertraut hast. Starte Claude Code mit claude --debug und schau im Debug-Log nach, was gelaufen ist. Die vollständige Liste steht in der Troubleshooting-Checkliste.

Wie schalte ich alle Hooks vorübergehend ab?

Setz "disableAllHooks": true in einer Settings-Datei. Um sie nur für einen Lauf zu überspringen, starte Claude Code mit --settings '{"disableAllHooks": true}'. Einen Schalter für einzelne Hooks gibt es nicht; da entfernst du stattdessen den Eintrag. Hooks, die deine Organisation in den Managed Settings festgelegt hat, lassen sich auf keinem der beiden Wege abschalten.

Was ist der Standard-Timeout für Hooks?

Zehn Minuten (600 Sekunden) für Command-, HTTP- und MCP-Tool-Hooks, 30 Sekunden für Prompt-Hooks und 60 für Agent-Hooks. Einige Events haben kürzere Standardwerte, und du kannst bei jedem Handler timeout in Sekunden setzen.

Claude Code Notifier Bekomm einen Push aufs Handy, wenn Claude Code fertig ist oder dich braucht, und genehmige, lehne ab oder antworte direkt von dort. Das Kommandozeilentool ccn ist kostenlos für Mac, Windows und Linux.
Für iOS laden Für Android laden ccn installieren

Ähnliche Guides

  • So bekommst du eine Benachrichtigung, wenn Claude Code fertig istNimm einen Stop hook für „fertig“ und einen Notification hook für „braucht Eingabe“. Setups zum Kopieren für Mac, Windows und Linux, plus Alerts aufs Handy.
  • Der Notification hook in Claude Code: wann er feuert und wie du ihn nutztWann der Notification hook von Claude Code feuert, was permission_prompt und idle_prompt bedeuten, welche Eingabe er bekommt und warum er vor dem Auslösen wartet.
  • Der Claude Code Stop hook: etwas ausführen, wenn Claude fertig istWie der Stop hook von Claude Code funktioniert, welchen Input er bekommt, wie du einen Befehl ausführst, wenn Claude fertig ist, und wie du Claude sicher weiterarbeiten lässt.
  • Berechtigungsanfragen per Hook beantworten (PermissionRequest)Wie der PermissionRequest-Hook von Claude Code funktioniert, wie du per Skript erlaubst oder ablehnst und warum Permission-Regeln oft das bessere Werkzeug sind.
claude-code-notifier

Claude Code Notifier ist eine unabhängige Drittanbieter-Anwendung. Sie steht in keiner Verbindung zu Anthropic, PBC und wird von Anthropic, PBC weder unterstützt noch gesponsert. „Claude“ und „Claude Code“ sind Marken von Anthropic, PBC.

apps iOS-App Android-App ccn für macOS, Windows & Linux Alle Guides
rechtliches Datenschutzerklärung Nutzungsbedingungen Weitere Sprachen © 2026 touchtap. Alle Rechte vorbehalten. TouchTap Ltd ist in England und Wales eingetragen, Registernummer 13942589.