70 70
71> [tab] macOS/Linux71> [tab] macOS/Linux
72>72>
73> Der `matcher` grenzt auf Bash-Tool-Aufrufe ein und die `if`-Bedingung grenzt weiter auf Bash-Unterbefehle ein, die mit `rm *` übereinstimmen, daher wird `block-rm.sh` nur ausgeführt, wenn beide Filter passen:73> Der `matcher` grenzt auf Bash-Tool-Aufrufe und [Monitor-Befehle](#match-monitor-commands) ein, und die `if`-Bedingung grenzt weiter auf Bash-Unterbefehle ein, die mit `rm *` übereinstimmen, daher wird `block-rm.sh` nur ausgeführt, wenn beide Filter passen:
74>74>
75> ```json theme={null}75> ```json theme={null}
76> {76> {
116 116
117> [tab] Windows (PowerShell)117> [tab] Windows (PowerShell)
118>118>
119> Der Matcher `Bash|PowerShell` deckt das [PowerShell-Tool](#powershell) sowie Bash ab. Eine einzelne `if`-Regel passt nur zu den Aufrufen eines Tools, daher erhält jedes Tool seinen eigenen Handler: der erste grenzt auf Bash-Unterbefehle ein, die mit `rm *` übereinstimmen, der zweite auf PowerShell-Befehle, die mit `Remove-Item *` übereinstimmen. Beide führen das gleiche Skript über `powershell.exe` aus:119> Der Matcher `Bash|PowerShell` deckt das [PowerShell-Tool](#powershell) sowie Bash ab. Eine einzelne `if`-Regel benennt nur ein Tool, daher erhält jedes Tool seinen eigenen Handler: der erste grenzt auf Bash-Unterbefehle ein, die mit `rm *` übereinstimmen, der zweite auf PowerShell-Befehle, die mit `Remove-Item *` übereinstimmen. Beide führen das gleiche Skript über `powershell.exe` aus:
120>120>
121> ```json theme={null}121> ```json theme={null}
122> {122> {
225Hooks werden in JSON-Einstellungsdateien definiert. Die Konfiguration hat drei Verschachtelungsebenen:225Hooks werden in JSON-Einstellungsdateien definiert. Die Konfiguration hat drei Verschachtelungsebenen:
226 226
2271. Wählen Sie ein [Hook-Ereignis](#hook-events) aus, auf das reagiert werden soll, wie `PreToolUse` oder `Stop`2271. Wählen Sie ein [Hook-Ereignis](#hook-events) aus, auf das reagiert werden soll, wie `PreToolUse` oder `Stop`
2282. Fügen Sie eine [Matcher-Gruppe](#matcher-patterns) hinzu, um zu filtern, wann es ausgelöst wird, z. B. „nur für das Bash-Tool“2282. Fügen Sie eine [Matcher-Gruppe](#matcher-patterns) hinzu, um festzulegen, wann er ausgelöst wird, z. B. „für das Bash-Tool“
2293. Definieren Sie einen oder mehrere [Hook-Handler](#hook-handler-fields), die ausgeführt werden, wenn eine Übereinstimmung gefunden wird2293. Definieren Sie einen oder mehrere [Hook-Handler](#hook-handler-fields), die ausgeführt werden, wenn eine Übereinstimmung gefunden wird
230 230
231Siehe [Wie ein Hook aufgelöst wird](#how-a-hook-resolves) oben für eine vollständige Anleitung mit einem kommentierten Beispiel.231Siehe [Wie ein Hook aufgelöst wird](#how-a-hook-resolves) oben für eine vollständige Anleitung mit einem kommentierten Beispiel.
277| Matcher-Wert | Ausgewertet als | Beispiel |277| Matcher-Wert | Ausgewertet als | Beispiel |
278| :- | :- | :- |278| :- | :- | :- |
279| `"*"`, `""` oder weggelassen | Alle abgleichen | wird bei jedem Auftreten des Ereignisses ausgelöst |279| `"*"`, `""` oder weggelassen | Alle abgleichen | wird bei jedem Auftreten des Ereignisses ausgelöst |
280| Nur Buchstaben, Ziffern, `_`, `-`, Leerzeichen, `,` und `\|` | Exakte Zeichenkette oder Liste exakter Zeichenketten, getrennt durch `\|` oder `,` mit optionalem umgebendem Leerzeichen | `Bash` passt nur auf das Bash-Tool; `Edit\|Write` und `Edit, Write` passen jeweils auf eines der beiden Tools genau; `code-reviewer` passt nur auf diesen Agent-Typ |280| Nur Buchstaben, Ziffern, `_`, `-`, Leerzeichen, `,` und `\|` | Exakte Zeichenkette oder Liste exakter Zeichenketten, getrennt durch `\|` oder `,` mit optionalem umgebendem Leerzeichen | `Bash` passt auf das Bash-Tool und bei `PreToolUse` und `PermissionRequest` auch auf [Monitor-Befehle](#match-monitor-commands); `Edit\|Write` und `Edit, Write` passen jeweils auf eines der beiden Tools genau; `code-reviewer` passt nur auf diesen Agent-Typ |
281| Enthält ein anderes Zeichen | JavaScript-Regulärer Ausdruck, nicht verankert | `^Notebook` passt auf jedes Tool, dessen Name mit `Notebook` beginnt; `mcp__memory__.*` passt auf jedes Tool vom `memory`-Server |281| Enthält ein anderes Zeichen | JavaScript-Regulärer Ausdruck, nicht verankert | `^Notebook` passt auf jedes Tool, dessen Name mit `Notebook` beginnt; `mcp__memory__.*` passt auf jedes Tool vom `memory`-Server |
282 282
283Ein Matcher auf dem Pfad des regulären Ausdrucks wird mit `RegExp.prototype.test` von JavaScript getestet, was bei einer Übereinstimmung an einer beliebigen Stelle im Wert erfolgreich ist. `Edit.*` passt sowohl auf `Edit` als auch auf `NotebookEdit`; umgeben Sie das Muster mit `^` und `$`, wie in `^Edit$`, wenn Sie eine Übereinstimmung mit der gesamten Zeichenkette benötigen.283Ein Matcher auf dem Pfad des regulären Ausdrucks wird mit `RegExp.prototype.test` von JavaScript getestet, was bei einer Übereinstimmung an einer beliebigen Stelle im Wert erfolgreich ist. `Edit.*` passt sowohl auf `Edit` als auch auf `NotebookEdit`; umgeben Sie das Muster mit `^` und `$`, wie in `^Edit$`, wenn Sie eine Übereinstimmung mit der gesamten Zeichenkette benötigen.
294| `SessionStart` | wie die Sitzung gestartet wurde | `startup`, `resume`, `clear`, `compact`, `fork` |294| `SessionStart` | wie die Sitzung gestartet wurde | `startup`, `resume`, `clear`, `compact`, `fork` |
295| `Setup` | welches CLI-Flag Setup ausgelöst hat | `init`, `maintenance` |295| `Setup` | welches CLI-Flag Setup ausgelöst hat | `init`, `maintenance` |
296| `SessionEnd` | warum die Sitzung endete | `clear`, `resume`, `logout`, `prompt_input_exit`, `other` |296| `SessionEnd` | warum die Sitzung endete | `clear`, `resume`, `logout`, `prompt_input_exit`, `other` |
297| `Notification` | Benachrichtigungstyp | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_url_dialog`, `elicitation_complete`, `elicitation_response`, `agent_needs_input`, `agent_completed`, `quota_auto_resume_fired`, `quota_auto_resume_stale`, `quota_auto_resume_disabled`, `plugin_notification` |297| `Notification` | Benachrichtigungstyp | `permission_prompt`, `idle_prompt`, `auth_success`, `auth_storage_failure`, `elicitation_dialog`, `elicitation_url_dialog`, `elicitation_complete`, `elicitation_response`, `agent_needs_input`, `agent_completed`, `quota_auto_resume_fired`, `quota_auto_resume_stale`, `quota_auto_resume_disabled`, `plugin_notification` |
298| `SubagentStart` | Agent-Typ | `general-purpose`, `Explore`, `Plan`, benutzerdefinierte Agent-Namen oder Plugin-bezogene Namen wie `^my-plugin:reviewer$` |298| `SubagentStart` | Agent-Typ | `general-purpose`, `Explore`, `Plan`, benutzerdefinierte Agent-Namen oder Plugin-bezogene Namen wie `^my-plugin:reviewer$` |
299| `PreCompact`, `PostCompact` | was Komprimierung ausgelöst hat | `manual`, `auto` |299| `PreCompact`, `PostCompact` | was Komprimierung ausgelöst hat | `manual`, `auto` |
300| `PreModelSwitch`, `PostModelSwitch` | kanonischer Name des Modells, zu dem die Sitzung wechselt, wie unter [PreModelSwitch](#premodelswitch) beschrieben | `claude-opus-5`, `claude-opus-4-6\|claude-opus-5`, `.*opus.*` |300| `PreModelSwitch`, `PostModelSwitch` | kanonischer Name des Modells, zu dem die Sitzung wechselt, wie unter [PreModelSwitch](#premodelswitch) beschrieben | `claude-opus-5`, `claude-opus-4-6\|claude-opus-5`, `.*opus.*` |
385}385}
386```386```
387 387
388#### Monitor-Befehle abgleichen
389
390Ein [`PreToolUse`](#pretooluse)- oder [`PermissionRequest`](#permissionrequest)-Hook mit einem `Bash`-Matcher wird auch bei Shell-Befehlen ausgeführt, die Claude mit dem [Monitor-Tool](https://code.claude.com/docs/de/tools-reference.md#monitor-tool) startet, aber sein `allow` und [`updatedInput`](#pretooluse-decision-control) haben keine Wirkung auf sie. Erfordert Claude Code v2.1.314 oder später. Matcher wie `Bash|PowerShell`, `^Bash$` und `Bash.*` sind ebenfalls `Bash`-Matcher. Ein Hook mit einem `Bash`-Matcher wird für eine [WebSocket-Überwachung](https://code.claude.com/docs/de/tools-reference.md#websocket-source) nicht ausgeführt, und ein `PostToolUse`-Hook mit einem solchen Matcher wird für Monitor nicht ausgeführt.
391
392Ein Hook, der für einen Monitor-Befehl ausgeführt wird, kann ihn verweigern oder Claude Code veranlassen, Sie dazu um Bestätigung zu bitten. Um den Befehl zuzulassen oder umzuschreiben, wechseln Sie von einem `Bash`-Matcher zu einem Matcher, der Monitor einschließt:
393
394* **Matcher, der Monitor einschließt**: Mit einem Matcher wie `Bash|Monitor` oder `.*` oder ohne Matcher erhält der Hook die eigene Eingabe des Monitor-Aufrufs, und `allow` und `updatedInput` greifen. Nennen Sie in [`if`](#common-fields) Monitor, wie in `Monitor(tail *)`, das nach [den Regeln abgleicht, denen `Bash(tail *)` folgt](#bash-if-matching). Wenn sein `if` Bash nennt, erhält der Hook trotzdem die Eingabe des Monitor-Aufrufs, aber `allow` und `updatedInput` haben keine Wirkung
395* **`Bash`-Matcher**: Der Hook erhält einen Bash-Aufruf. Nennen Sie in `if` Bash, wie in `Bash(tail *)`. Der Hook wird nicht ausgeführt, wenn sein `if` Monitor nennt
396
388### Hook-Handler-Felder397### Hook-Handler-Felder
389 398
390Jedes Objekt im inneren `hooks`-Array ist ein Hook-Handler: der Shell-Befehl, HTTP-Endpunkt, MCP-Tool, LLM-Prompt oder Agent, der ausgeführt wird, wenn der Matcher passt. Es gibt fünf Typen:399Jedes Objekt im inneren `hooks`-Array ist ein Hook-Handler: der Shell-Befehl, HTTP-Endpunkt, MCP-Tool, LLM-Prompt oder Agent, der ausgeführt wird, wenn der Matcher passt. Es gibt fünf Typen:
811* **Zwei oder mehr Zeilen, die jeweils für sich als JSON geparst werden, wobei die erste mit `{` beginnt und die letzte mit `}` endet**: einfacher Text, wenn keine Zeile ein JSON-Ausgabe-Objekt ist, das ein Feld setzt. Ist eine Zeile ein solches Objekt, ist die Ausgabe ein Parse-Fehler; geben Sie dieses Objekt also ohne weiteren Inhalt auf stdout aus.820* **Zwei oder mehr Zeilen, die jeweils für sich als JSON geparst werden, wobei die erste mit `{` beginnt und die letzte mit `}` endet**: einfacher Text, wenn keine Zeile ein JSON-Ausgabe-Objekt ist, das ein Feld setzt. Ist eine Zeile ein solches Objekt, ist die Ausgabe ein Parse-Fehler; geben Sie dieses Objekt also ohne weiteren Inhalt auf stdout aus.
812* **Alles andere, das mit `{` beginnt und mit `}` endet, aber kein gültiges JSON ist**: ein Parse-Fehler.821* **Alles andere, das mit `{` beginnt und mit `}` endet, aber kein gültiges JSON ist**: ein Parse-Fehler.
813 822
814Für die meisten Events schreibt Claude Code stdout in das Debug-Log und zeigt es nicht im Transkript an. Die Ausnahmen sind `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` und `PostModelSwitch`, wo Claude Code einfachen Text-stdout als Kontext hinzufügt, den Claude sehen und bearbeiten kann. Bei diesen Events fügt Claude Code stdout, den es nicht parsen konnte, nicht hinzu.823Für die meisten Events schreibt Claude Code stdout in das Debug-Log und zeigt es nicht im Transkript an. Bei diesen Events erreicht Ihr stdout Claude oder die Zusammenfassung der Komprimierung:
824
825* **`UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` und `PostModelSwitch`**: Claude Code fügt einfachen Text-stdout als Kontext hinzu, den Claude sehen und bearbeiten kann. stdout, den es nicht parsen konnte, fügt es nicht hinzu.
826* **`PreCompact`**: Ihr stdout wird zu [Anweisungen für die Komprimierungszusammenfassung](#precompact-output)
815 827
816Claude sieht stderr von einem Hook, der mit 0 beendet wird, nie. Um ihn bei Events wie `PreToolUse` selbst zu lesen, aktivieren Sie [Debug-Logging](#debug-hooks). Um eine Warnung an Claude von einem `PostToolUse`- oder `PostToolUseFailure`-Hook zu übermitteln, beenden Sie stattdessen mit 2, damit [Claude den stderr sieht](#exit-code-2-behavior-per-event), obwohl das Tool bereits ausgeführt wurde.828Claude sieht stderr von einem Hook, der mit 0 beendet wird, nie. Um ihn bei Events wie `PreToolUse` selbst zu lesen, aktivieren Sie [Debug-Logging](#debug-hooks). Um eine Warnung an Claude von einem `PostToolUse`- oder `PostToolUseFailure`-Hook zu übermitteln, beenden Sie stattdessen mit 2, damit [Claude den stderr sieht](#exit-code-2-behavior-per-event), obwohl das Tool bereits ausgeführt wurde.
817 829
1050Die Strings `additionalContext`, `systemMessage` und `initialUserMessage` eines Hooks sowie sein einfacher stdout sind auf 10.000 Zeichen begrenzt:1062Die Strings `additionalContext`, `systemMessage` und `initialUserMessage` eines Hooks sowie sein einfacher stdout sind auf 10.000 Zeichen begrenzt:
1051 1063
1052* **Umfang**: Claude Code misst jeden String für sich, auch wenn mehrere Hooks für den gleichen Event ausgeführt werden. Für JSON-Ausgabe wird jedes Feld separat gemessen; einfacher stdout wird als Ganzes gemessen.1064* **Umfang**: Claude Code misst jeden String für sich, auch wenn mehrere Hooks für den gleichen Event ausgeführt werden. Für JSON-Ausgabe wird jedes Feld separat gemessen; einfacher stdout wird als Ganzes gemessen.
1053* **Über dem Limit**: Claude Code speichert die Ausgabe in einer Datei im Session-Verzeichnis und ersetzt sie durch den Dateipfad und eine Vorschau von bis zu den ersten 2.000 Zeichen. Ein großes gültiges Bash-Ergebnis wird auf die gleiche Weise behandelt, beschrieben unter [Ausgabelimits](https://code.claude.com/docs/de/tools-reference.md#output-limits). Im Gegensatz zu dieser Bash-Obergrenze hat diese Obergrenze keine Einstellung oder Umgebungsvariable, um sie zu erhöhen.1065* **Über dem Limit**: Außer bei [PreCompact-stdout](#precompact-output) speichert Claude Code die Ausgabe in einer Datei im Session-Verzeichnis. Es ersetzt die Ausgabe durch den Dateipfad und eine Vorschau von bis zu den ersten 2.000 Zeichen. Ein großes gültiges Bash-Ergebnis wird auf die gleiche Weise behandelt, beschrieben unter [Ausgabelimits](https://code.claude.com/docs/de/tools-reference.md#output-limits). Im Gegensatz zu dieser Bash-Obergrenze hat diese Obergrenze keine Einstellung oder Umgebungsvariable, um sie zu erhöhen.
1054* **Datei lesen**: Claude Code bittet Claude nicht, die Datei zu lesen, daher halten Sie alles, das Claude immer sehen muss, innerhalb der Obergrenze.1066* **Datei lesen**: Claude Code bittet Claude nicht, die Datei zu lesen, daher halten Sie alles, das Claude immer sehen muss, innerhalb der Obergrenze.
1055 1067
1056Das JSON-Objekt unterstützt drei Arten von Feldern:1068Das JSON-Objekt unterstützt drei Arten von Feldern:
1954 1966
1955#### PreToolUse-Entscheidungssteuerung1967#### PreToolUse-Entscheidungssteuerung
1956 1968
1957`PreToolUse`-Hooks können steuern, ob ein Tool-Aufruf fortgesetzt wird. Anders als andere Hooks, die ein `decision`-Feld auf oberster Ebene verwenden, gibt PreToolUse seine Entscheidung innerhalb eines `hookSpecificOutput`-Objekts zurück. Das ermöglicht eine umfassendere Steuerung: vier Ergebnisse (allow, deny, ask oder defer) sowie die Möglichkeit, die Tool-Eingabe vor der Ausführung zu ändern.1969`PreToolUse`-Hooks können steuern, ob ein Tool-Aufruf fortgesetzt wird. Anders als andere Hooks, die ein Feld `decision` auf oberster Ebene verwenden, gibt PreToolUse seine Entscheidung innerhalb eines Objekts `hookSpecificOutput` zurück. Das ermöglicht eine umfassendere Steuerung: vier Ergebnisse (allow, deny, ask oder defer) sowie die Möglichkeit, die Tool-Eingabe vor der Ausführung zu ändern. Wie Sie einen Monitor-Befehl erlauben oder umschreiben, erfahren Sie unter [Monitor-Befehle matchen](#match-monitor-commands).
1958 1970
1959| Feld | Beschreibung |1971| Feld | Beschreibung |
1960| :- | :- |1972| :- | :- |
2051 2063
2052#### Einen Tool-Aufruf zurückstellen2064#### Einen Tool-Aufruf zurückstellen
2053 2065
2054`"defer"` ist für Integrationen gedacht, die `claude -p` als Unterprozess ausführen und dessen JSON-Ausgabe lesen, etwa eine Agent SDK-App oder eine benutzerdefinierte Benutzeroberfläche, die auf Claude Code aufbaut. Es ermöglicht dem aufrufenden Prozess, Claude bei einem Tool-Aufruf anzuhalten, Eingaben über die eigene Oberfläche zu sammeln und an derselben Stelle fortzufahren. Claude Code berücksichtigt diesen Wert nur im [nicht interaktiven Modus](https://code.claude.com/docs/de/headless.md) mit dem Flag `-p`. In interaktiven Sitzungen protokolliert es eine Warnung und ignoriert das Hook-Ergebnis.2066`"defer"` ist für Integrationen gedacht, die `claude -p` als Unterprozess ausführen und dessen JSON-Ausgabe lesen, etwa eine Agent-SDK-App oder eine eigene Benutzeroberfläche, die auf Claude Code aufsetzt. Damit kann der aufrufende Prozess Claude bei einem Tool-Aufruf anhalten, Eingaben über seine eigene Oberfläche erfassen und an der Stelle fortfahren, an der er aufgehört hat.
2067
2068Claude Code berücksichtigt `"defer"` nur im [nicht interaktiven Modus](https://code.claude.com/docs/de/headless.md) mit dem Flag `-p` und nur dann, wenn Claude im Turn einen einzigen Tool-Aufruf ausführt:
2069
2070* **In interaktiven Sitzungen**: Claude Code protokolliert eine Warnung und ignoriert das Hook-Ergebnis
2071* **Mehrere Tool-Aufrufe gleichzeitig**: `"defer"` wird mit einer Warnung ignoriert, und das Tool durchläuft den normalen Berechtigungsablauf
2055 2072
2056Das Tool `AskUserQuestion` ist der typische Fall: Claude möchte dem Benutzer eine Frage stellen, aber es gibt kein Terminal, in dem geantwortet werden könnte. Ein `-p`-Lauf bietet `AskUserQuestion` nur an, wenn er einen [Berechtigungs-Host](https://code.claude.com/docs/de/headless.md#turn-off-permission-prompts-in-unattended-runs) hat, etwa ein MCP-Tool, das Sie mit `--permission-prompt-tool` übergeben. Starten Sie den Lauf daher mit einem solchen. Der Ablauf funktioniert so:2073Das Tool `AskUserQuestion` ist der typische Fall: Claude möchte dem Benutzer eine Frage stellen, aber es gibt kein Terminal, in dem geantwortet werden könnte. Ein `-p`-Lauf bietet `AskUserQuestion` nur an, wenn er einen [Berechtigungs-Host](https://code.claude.com/docs/de/headless.md#turn-off-permission-prompts-in-unattended-runs) hat, etwa ein MCP-Tool, das Sie mit `--permission-prompt-tool` übergeben. Starten Sie den Lauf daher mit einem solchen. Der Ablauf funktioniert so:
2057 2074
20614. Der aufrufende Prozess führt `claude -p --resume <session-id>` mit demselben Berechtigungs-Host aus. Derselbe Tool-Aufruf löst `PreToolUse` erneut aus.20784. Der aufrufende Prozess führt `claude -p --resume <session-id>` mit demselben Berechtigungs-Host aus. Derselbe Tool-Aufruf löst `PreToolUse` erneut aus.
20625. Der Hook gibt `permissionDecision: "allow"` mit der Antwort in `updatedInput` zurück. Das Tool wird ausgeführt, und Claude fährt fort.20795. Der Hook gibt `permissionDecision: "allow"` mit der Antwort in `updatedInput` zurück. Das Tool wird ausgeführt, und Claude fährt fort.
2063 2080
2064Das Feld `deferred_tool_use` enthält `id`, `name` und `input` des Tools. `input` sind die Parameter, die Claude für den Tool-Aufruf generiert hat, erfasst vor der Ausführung:2081Das Feld `deferred_tool_use` enthält `id`, `name` und `input` des Tools:
2065 2082
2066```json theme={null}2083```json theme={null}
2067{2084{
2077}2094}
2078```2095```
2079 2096
2080Es gibt keinen Timeout und keine Begrenzung für Wiederholungsversuche. Die Sitzung bleibt auf dem Datenträger, bis Sie sie fortsetzen, vorbehaltlich der Aufbewahrungsbereinigung über [`cleanupPeriodDays`](https://code.claude.com/docs/de/settings-reference#cleanupperioddays), die Sitzungsdateien standardmäßig nach 30 Tagen löscht, gemäß den [Regeln der Aufbewahrungsbereinigung](https://code.claude.com/docs/de/claude-directory.md#cleaned-up-automatically).2097Es gibt keinen Timeout und keine Begrenzung für Wiederholungsversuche. Die Sitzung bleibt auf der Festplatte, bis die [Aufbewahrungsbereinigung](https://code.claude.com/docs/de/claude-directory.md#cleaned-up-automatically) gemäß [`cleanupPeriodDays`](https://code.claude.com/docs/de/settings-reference#cleanupperioddays) sie löscht, standardmäßig nach 30 Tagen.
2081
2082Wenn das zurückgestellte Tool beim Fortsetzen nicht mehr verfügbar ist, hat das erste Ergebnis der Fortsetzung `stop_reason: "tool_deferred_unavailable"` und `is_error: true`, und der Hook wird nicht ausgelöst. Das passiert, wenn ein MCP-Server, der das Tool bereitgestellt hat, für die fortgesetzte Sitzung nicht verbunden ist. Die Payload `deferred_tool_use` ist trotzdem enthalten, damit Sie erkennen können, welches Tool fehlt.
2083
2084* **Wenn Sie weder mit der Fortsetzung noch danach einen Prompt gesendet haben**, ist der Aufruf weiterhin ausstehend. Setzen Sie erneut fort, wenn das Tool verfügbar ist, und es wird zuerst ausgeführt.
2085* **Wenn Sie mit der Fortsetzung oder danach einen Prompt gesendet haben**, beantwortet Claude Code diesen ohne das Ergebnis des Tools und verwirft den zurückgestellten Aufruf. Senden Sie einen neuen Prompt, sobald das Tool verfügbar ist, falls es weiterhin aufgerufen werden soll.
2086 2098
2087Wenn die Antwort, auf die Sie warten, beim Fortsetzen ohne Prompt noch nicht bereit ist, kann der Hook erneut `"defer"` zurückgeben. Wenn Sie einen Prompt gesendet haben und der Hook erneut zurückstellt, behandelt Claude Code den Prompt genauso: Es antwortet ohne das Ergebnis des Tools und verwirft den Aufruf. Setzen Sie ohne Prompt fort, bis der Hook `"allow"` oder `"deny"` zurückgibt; so durchbricht der aufrufende Prozess die Schleife.2099Wenn die Antwort beim Fortsetzen noch nicht bereitsteht, kann der Hook erneut `"defer"` zurückgeben. Wenn Sie beim Fortsetzen einen Prompt mitgesendet haben, beantwortet Claude ihn ohne das Ergebnis des Tools und führt den Aufruf nicht aus. Setzen Sie ohne Prompt fort, bis der Hook `"allow"` oder `"deny"` zurückgibt.
2088
2089`"defer"` funktioniert nur, wenn Claude im Turn einen einzigen Tool-Aufruf ausführt. Wenn Claude mehrere Tool-Aufrufe gleichzeitig ausführt, wird `"defer"` mit einer Warnung ignoriert, und das Tool durchläuft den normalen Berechtigungsablauf. Diese Einschränkung besteht, weil beim Fortsetzen nur ein Tool erneut ausgeführt werden kann: Es gibt keine Möglichkeit, einen Aufruf aus einem Stapel zurückzustellen, ohne die anderen ungelöst zu lassen.
2090 2100
2091> [!NOTE]2101> [!NOTE]
2092>2102>
2093> Um eine zurückgestellte Sitzung im Plan-Modus fortzusetzen, übergeben Sie [`--permission-prompt-tool`](https://code.claude.com/docs/de/cli-reference#cli-flags) zusammen mit `--resume`, damit Claude Code den Plan zur Genehmigung vorlegen kann. Die weiteren Bedingungen finden Sie unter [Im Plan-Modus mit `-p` fortsetzen](https://code.claude.com/docs/de/sessions#resume-in-plan-mode-with-p). Erfordert Claude Code v2.1.246 oder höher.2103> Um eine zurückgestellte Sitzung im Plan-Modus fortzusetzen, übergeben Sie [`--permission-prompt-tool`](https://code.claude.com/docs/de/cli-reference#cli-flags) zusammen mit `--resume`, damit Claude Code den Plan zur Genehmigung vorlegen kann. Die weiteren Bedingungen finden Sie unter [Im Plan-Modus mit `-p` fortsetzen](https://code.claude.com/docs/de/sessions#resume-in-plan-mode-with-p). Erfordert Claude Code v2.1.246 oder höher.
2094>2104>
2095> Wenn Sie mit `-p` fortsetzen, stellt Claude Code keinen anderen gespeicherten Berechtigungsmodus wieder her. Es startet den Lauf in dem Berechtigungsmodus, in dem ein neuer `claude -p`-Lauf starten würde. Übergeben Sie daher `--permission-mode` oder `--dangerously-skip-permissions` erneut, falls die zurückgestellte Sitzung eines davon verwendet hat. Wenn Sie mit `claude --resume <session-id>` ohne `-p` fortsetzen, stellt Claude Code den gespeicherten Berechtigungsmodus wieder her, mit den unter [Berechtigungsmodus beim Fortsetzen](https://code.claude.com/docs/de/sessions.md#permission-mode-on-resume) aufgeführten Ausnahmen.2105> Wenn Sie mit `-p` fortsetzen, stellt Claude Code keinen anderen gespeicherten Berechtigungsmodus wieder her. Der Lauf startet in dem Berechtigungsmodus, in dem ein neuer `claude -p`-Lauf starten würde. Übergeben Sie daher `--permission-mode` oder `--dangerously-skip-permissions` erneut, wenn die zurückgestellte Sitzung eine dieser Optionen verwendet hat.
2106
2107##### Fortsetzen, wenn ein zurückgestelltes Tool nicht verfügbar ist
2108
2109Ein Ergebnis mit `stop_reason: "tool_deferred_unavailable"` bedeutet, dass das Tool eines zurückgestellten Aufrufs in der fortgesetzten Sitzung nicht verfügbar ist, zum Beispiel weil sein MCP-Server nicht verbunden ist. Ihr `PreToolUse`-Hook wird nicht ausgelöst, und das Feld `deferred_tool_use` des Ergebnisses nennt das Tool.
2110
2111Solange der Aufruf aussteht, erreicht kein von Ihnen gesendeter Prompt Claude, und der Lauf endet mit Exit-Code 1. Das Feld `result` beginnt mit `<tool> isn't available, so its deferred call didn't run.` Führen Sie den Aufruf aus, oder verwerfen Sie ihn, damit er nicht ausgeführt wird:
2112
2113* **Um den Aufruf auszuführen**: Machen Sie das Tool verfügbar und setzen Sie erneut fort.
2114* **Um den Aufruf zu verwerfen**: Setzen Sie mit einem Prompt fort und setzen Sie [`CLAUDE_CODE_DROP_UNAVAILABLE_DEFERRED_TOOL`](https://code.claude.com/docs/de/env-vars#variables) auf `1`. Claude erhält einen Fehler als Ergebnis des Aufrufs und beantwortet Ihren Prompt. Wenn Sie später fortsetzen, steht kein Aufruf mehr aus.
2115
2116Wenn Sie den Aufruf verwerfen, schreibt der Lauf das Ergebnis `tool_deferred_unavailable` mit einem leeren Feld `result` und danach Claudes Antwort in einem zweiten Ergebnis. Er endet mit Exit-Code 0, sofern diese Antwort kein Fehler ist. Wenn Sie die Variable setzen und keinen Prompt senden, verwirft der Lauf den Aufruf trotzdem und endet mit Exit-Code 1.
2117
2118Vor v2.1.319 beantwortete Claude Code einen Prompt ohne das Ergebnis des Tools und verwarf den Aufruf. Senden Sie bei diesen Versionen einen neuen Prompt, sobald das Tool verfügbar ist.
2096 2119
2097### PermissionRequest2120### PermissionRequest
2098 2121
2148| `message` | Nur für `"deny"`: Teilt Claude mit, warum die Berechtigung abgelehnt wurde |2171| `message` | Nur für `"deny"`: Teilt Claude mit, warum die Berechtigung abgelehnt wurde |
2149| `interrupt` | Nur für `"deny"`: Bei `true` wird Claude gestoppt |2172| `interrupt` | Nur für `"deny"`: Bei `true` wird Claude gestoppt |
2150 2173
2174Informationen zum Erlauben oder Umschreiben eines Monitor-Befehls finden Sie unter [Monitor-Befehle abgleichen](#match-monitor-commands).
2175
2151Ein Hook, der ohne `decision`-Objekt mit Exit-Code 2 beendet wird, lässt den Berechtigungsablauf unverändert, und seine stderr-Ausgabe wird verworfen. Um die Anfrage zu erlauben oder abzulehnen, geben Sie das `decision`-Objekt zurück.2176Ein Hook, der ohne `decision`-Objekt mit Exit-Code 2 beendet wird, lässt den Berechtigungsablauf unverändert, und seine stderr-Ausgabe wird verworfen. Um die Anfrage zu erlauben oder abzulehnen, geben Sie das `decision`-Objekt zurück.
2152 2177
2153```json theme={null}2178```json theme={null}
2205* Um einen Hook nach jedem erfolgreich abgeschlossenen Tool auszuführen, lassen Sie den `matcher` weg oder setzen Sie ihn auf `"*"`. Ihr Hook kann dann selbst ermitteln, was sich geändert hat, etwa durch Ausführen von `git status --porcelain`, das auch nicht verfolgte Dateien auflistet, die `git diff` übersieht. Für fehlgeschlagene Tool-Aufrufe fügen Sie denselben Hook unter [PostToolUseFailure](#posttoolusefailure) hinzu.2230* Um einen Hook nach jedem erfolgreich abgeschlossenen Tool auszuführen, lassen Sie den `matcher` weg oder setzen Sie ihn auf `"*"`. Ihr Hook kann dann selbst ermitteln, was sich geändert hat, etwa durch Ausführen von `git status --porcelain`, das auch nicht verfolgte Dateien auflistet, die `git diff` übersieht. Für fehlgeschlagene Tool-Aufrufe fügen Sie denselben Hook unter [PostToolUseFailure](#posttoolusefailure) hinzu.
2206* Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, wer sie geschrieben hat, verwenden Sie [FileChanged](#filechanged). Claude Code führt keinen `PostToolUse`-Hook mit dem Matcher `Edit|Write` aus, wenn ein `Bash`-Befehl oder ein Prozess außerhalb von Claude Code dieselbe Datei neu schreibt.2231* Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, wer sie geschrieben hat, verwenden Sie [FileChanged](#filechanged). Claude Code führt keinen `PostToolUse`-Hook mit dem Matcher `Edit|Write` aus, wenn ein `Bash`-Befehl oder ein Prozess außerhalb von Claude Code dieselbe Datei neu schreibt.
2207 2232
2233#### PostToolUse nach einer Unterbrechung
2234
2235Wenn ein `PostToolUse`-Hook vorzeitig endet, nachdem Sie während eines Tool-Aufrufs eine Nachricht gesendet oder unterbrochen haben, prüfen Sie, ob Sie `Ctrl+Enter`, `Enter` oder `Esc` gedrückt haben:
2236
2237* **`Ctrl+Enter`**: Wenn das Drücken den Turn [beendet](https://code.claude.com/docs/de/interactive-mode.md#when-claude-code-sends-what-you-queued), während ein Tool läuft, und das Tool abgeschlossen wird, laufen Ihre `PostToolUse`-Hooks auf dessen Ergebnis und haben 10 Sekunden Zeit, um fertig zu werden. Die Taste wirkt wie `Esc`, wenn Sie vor Ihren Nachrichten einen `!`-Befehl in die Warteschlange gestellt haben oder Hintergrundaufgaben deaktiviert sind, zum Beispiel mit [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/de/env-vars#variables).
2238* **`Enter`**: Eine Nachricht, die Sie mit `Enter` in die Warteschlange stellen, unterbricht den Turn nicht, sodass die Hooks ihren üblichen `timeout` behalten.
2239* **`Esc`**: Sie brechen die Hooks sofort ab. Senden Sie die Nachricht daher mit `Enter` oder `Ctrl+Enter`, wenn die Hooks laufen müssen.
2240
2241Wenn die 10 Sekunden abgelaufen sind, beendet Claude Code einen noch laufenden Befehls-Hook, unabhängig von seinem [`timeout`](#common-fields). Damit ein länger laufender Befehls-Hook fertig werden kann, führen Sie ihn mit [`async: true`](#run-hooks-in-the-background) aus. Das bedeutet, dass der Hook das Ergebnis weder blockieren noch umschreiben kann.
2242
2243Vor v2.1.319 starteten die Hooks nicht, nachdem Sie den Turn mit einer Nachricht unterbrochen hatten, und ein laufender Hook wurde angehalten.
2244
2208#### PostToolUse-Eingabe2245#### PostToolUse-Eingabe
2209 2246
2210`PostToolUse`-Hooks werden ausgelöst, nachdem ein Tool bereits erfolgreich ausgeführt wurde. Die Eingabe enthält sowohl `tool_input`, die an das Tool gesendeten Argumente, als auch `tool_response`, das zurückgegebene Ergebnis. Das genaue Schema beider hängt vom Tool ab. Pfade in `tool_input` von Datei-Tools kommen im selben Format an wie bei [PreToolUse](#pretooluse-input): immer absolut, mit den nativen Trennzeichen der Plattform, unter Windows also mit Backslashes. Bei einem MCP-Tool enthält die Eingabe außerdem das Objekt [`mcp_server`](#pretooluse-input).2247`PostToolUse`-Hooks werden ausgelöst, nachdem ein Tool bereits erfolgreich ausgeführt wurde. Die Eingabe enthält sowohl `tool_input`, die an das Tool gesendeten Argumente, als auch `tool_response`, das zurückgegebene Ergebnis. Das genaue Schema beider hängt vom Tool ab. Pfade in `tool_input` von Datei-Tools kommen im selben Format an wie bei [PreToolUse](#pretooluse-input): immer absolut, mit den nativen Trennzeichen der Plattform, unter Windows also mit Backslashes. Bei einem MCP-Tool enthält die Eingabe außerdem das Objekt [`mcp_server`](#pretooluse-input).
2479| `permission_prompt` | Claude benötigt Ihre Genehmigung für eine Tool-Nutzung oder die [Netzwerkanfrage](https://code.claude.com/docs/de/sandboxing.md#network-isolation) eines in einer Sandbox ausgeführten Befehls, und die Abfrage wartet seit etwa sechs Sekunden |2516| `permission_prompt` | Claude benötigt Ihre Genehmigung für eine Tool-Nutzung oder die [Netzwerkanfrage](https://code.claude.com/docs/de/sandboxing.md#network-isolation) eines in einer Sandbox ausgeführten Befehls, und die Abfrage wartet seit etwa sechs Sekunden |
2480| `idle_prompt` | Claude hat vor etwa 60 Sekunden seine Antwort beendet, und Sie haben seitdem nichts eingegeben |2517| `idle_prompt` | Claude hat vor etwa 60 Sekunden seine Antwort beendet, und Sie haben seitdem nichts eingegeben |
2481| `auth_success` | Die Authentifizierung ist abgeschlossen |2518| `auth_success` | Die Authentifizierung ist abgeschlossen |
2519| `auth_storage_failure` | Ihre Anmeldung ist abgeschlossen, aber Claude Code kann die neuen Anmeldedaten nicht in seinem [Anmeldedatenspeicher](https://code.claude.com/docs/de/authentication.md#credential-management) speichern. Wird anstelle von `auth_success` ausgelöst |
2482| `elicitation_dialog` | Ein MCP-Server öffnet ein Elicitation-Formular, und Sie haben seit etwa sechs Sekunden nichts eingegeben |2520| `elicitation_dialog` | Ein MCP-Server öffnet ein Elicitation-Formular, und Sie haben seit etwa sechs Sekunden nichts eingegeben |
2483| `elicitation_url_dialog` | Ein MCP-Server bittet Sie, eine Browser-URL zu öffnen, und Sie haben seit etwa sechs Sekunden nichts eingegeben |2521| `elicitation_url_dialog` | Ein MCP-Server bittet Sie, eine Browser-URL zu öffnen, und Sie haben seit etwa sechs Sekunden nichts eingegeben |
2484| `elicitation_complete` | Ein MCP-Server meldet, dass eine [Elicitation im URL-Modus](#elicitation-input) abgeschlossen ist |2522| `elicitation_complete` | Ein MCP-Server meldet, dass eine [Elicitation im URL-Modus](#elicitation-input) abgeschlossen ist |
2490| `quota_auto_resume_disabled` | Claude Code beendet das Warten auf ein claude.ai-Nutzungslimit, ohne Ihre Aufgabe fortzusetzen: [`autoContinueAtUsageLimit`](https://code.claude.com/docs/de/settings-reference#autocontinueatusagelimit) wurde ausgeschaltet oder das Zurücksetzen hat sich während einer Wartezeit, die Claude Code selbst begonnen hat, um mehr als 24 Stunden verschoben, die fortgesetzte Aufgabe ist wiederholt an das Limit gestoßen, oder die Fortsetzung wurde blockiert, bevor sie das Modell erreichte. Wird nicht ausgelöst, wenn Sie `Esc` oder `Ctrl+C` drücken oder **Don't continue automatically** wählen |2528| `quota_auto_resume_disabled` | Claude Code beendet das Warten auf ein claude.ai-Nutzungslimit, ohne Ihre Aufgabe fortzusetzen: [`autoContinueAtUsageLimit`](https://code.claude.com/docs/de/settings-reference#autocontinueatusagelimit) wurde ausgeschaltet oder das Zurücksetzen hat sich während einer Wartezeit, die Claude Code selbst begonnen hat, um mehr als 24 Stunden verschoben, die fortgesetzte Aufgabe ist wiederholt an das Limit gestoßen, oder die Fortsetzung wurde blockiert, bevor sie das Modell erreichte. Wird nicht ausgelöst, wenn Sie `Esc` oder `Ctrl+C` drücken oder **Don't continue automatically** wählen |
2491| `plugin_notification` | Ein [Mod](https://code.claude.com/docs/de/plugins/mods/api.md#show-something-without-starting-a-turn) löst mit `$.ui.notify` eine Benachrichtigung aus. Der `title` des Hooks ist der Name des Mods, sofern der Mod keinen festgelegt hat |2529| `plugin_notification` | Ein [Mod](https://code.claude.com/docs/de/plugins/mods/api.md#show-something-without-starting-a-turn) löst mit `$.ui.notify` eine Benachrichtigung aus. Der `title` des Hooks ist der Name des Mods, sofern der Mod keinen festgelegt hat |
2492 2530
2493Die Typen `quota_auto_resume_fired`, `quota_auto_resume_stale` und `quota_auto_resume_disabled` erfordern Claude Code v2.1.234 oder höher.2531Die Typen `quota_auto_resume_fired`, `quota_auto_resume_stale` und `quota_auto_resume_disabled` erfordern Claude Code v2.1.234 oder höher. Der Typ `auth_storage_failure` erfordert v2.1.288 oder höher.
2494 2532
2495In Terminalsitzungen erfordert `permission_prompt` für die Netzwerkanfrage eines in einer Sandbox ausgeführten Befehls Claude Code v2.1.246 oder höher.2533In Terminalsitzungen erfordert `permission_prompt` für die Netzwerkanfrage eines in einer Sandbox ausgeführten Befehls Claude Code v2.1.246 oder höher.
2496 2534
3326}3364}
3327```3365```
3328 3366
3367#### PreCompact-Ausgabe
3368
3369Wenn ein PreCompact-Hook mit 0 beendet wird und nicht blockiert, verwendet Claude Code seine stdout-Ausgabe als Anweisungen für die Zusammenfassung der Komprimierung. Halten Sie diese stdout-Ausgabe pro Hook unter 10.000 Zeichen. Claude Code schneidet längere Ausgabe an dieser Grenze ab und hängt eine Markierung an.
3370
3329### PostCompact3371### PostCompact
3330 3372
3331Wird ausgeführt, nachdem Claude Code eine Komprimierung abgeschlossen hat. Verwenden Sie dieses Ereignis, um auf den neuen komprimierten Zustand zu reagieren, etwa um die generierte Zusammenfassung zu protokollieren oder externen Zustand zu aktualisieren. Claude Code verwirft die Felder `systemMessage` und `continue` eines PostCompact-Hooks.3373Wird ausgeführt, nachdem Claude Code eine Komprimierung abgeschlossen hat. Verwenden Sie dieses Ereignis, um auf den neuen komprimierten Zustand zu reagieren, etwa um die generierte Zusammenfassung zu protokollieren oder externen Zustand zu aktualisieren. Claude Code verwirft die Felder `systemMessage` und `continue` eines PostCompact-Hooks.