421 421
422* **[Command-Hooks](#command-hook-fields)** (`type: "command"`): Führen einen Shell-Befehl aus. Ihr Skript empfängt die [JSON-Eingabe](#hook-input-and-output) des Ereignisses auf stdin und kommuniziert Ergebnisse über Exit-Codes und stdout zurück.422* **[Command-Hooks](#command-hook-fields)** (`type: "command"`): Führen einen Shell-Befehl aus. Ihr Skript empfängt die [JSON-Eingabe](#hook-input-and-output) des Ereignisses auf stdin und kommuniziert Ergebnisse über Exit-Codes und stdout zurück.
423* **[HTTP-Hooks](#http-hook-fields)** (`type: "http"`): Senden Sie die [JSON-Eingabe](#hook-input-and-output) des Ereignisses als HTTP-POST-Anfrage an eine URL. Der Endpunkt kommuniziert Ergebnisse über den Antwortkörper mit dem gleichen [JSON-Ausgabeformat](#json-output) wie Command-Hooks zurück.423* **[HTTP-Hooks](#http-hook-fields)** (`type: "http"`): Senden Sie die [JSON-Eingabe](#hook-input-and-output) des Ereignisses als HTTP-POST-Anfrage an eine URL. Der Endpunkt kommuniziert Ergebnisse über den Antwortkörper mit dem gleichen [JSON-Ausgabeformat](#json-output) wie Command-Hooks zurück.
424* **[MCP-Tool-Hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): Rufen Sie ein Tool auf einem bereits verbundenen [MCP-Server](/docs/de/mcp) auf. Die Textausgabe des Tools wird wie Command-Hook-stdout behandelt.424* **[MCP-Tool-Hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): Rufen Sie ein Tool auf einem konfigurierten [MCP-Server](/docs/de/mcp) auf. Die Textausgabe des Tools wird wie Command-Hook-stdout behandelt.
425* **[Prompt-Hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): Senden Sie einen Prompt an ein Claude-Modell zur Einzelturn-Bewertung. Das Modell gibt seine Entscheidung als JSON zurück. Siehe [Prompt-basierte Hooks](#prompt-based-hooks).425* **[Prompt-Hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): Senden Sie einen Prompt an ein Claude-Modell zur Einzelturn-Bewertung. Das Modell gibt seine Entscheidung als JSON zurück. Siehe [Prompt-basierte Hooks](#prompt-based-hooks).
426* **[Agent-Hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): Spawnen Sie einen Subagent, der Tools wie Read, Grep und Glob verwenden kann, um Bedingungen zu überprüfen, bevor er eine Entscheidung zurückgibt. Agent-Hooks sind experimentell und können sich ändern. Siehe [Agent-basierte Hooks](#agent-based-hooks).426* **[Agent-Hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): Spawnen Sie einen Subagent, der Tools wie Read, Grep und Glob verwenden kann, um Bedingungen zu überprüfen, bevor er eine Entscheidung zurückgibt. Agent-Hooks sind experimentell und können sich ändern. Siehe [Agent-basierte Hooks](#agent-based-hooks).
427 427
571 571
572| Feld | Erforderlich | Beschreibung |572| Feld | Erforderlich | Beschreibung |
573| :- | :- | :- |573| :- | :- | :- |
574| `server` | ja | Name eines konfigurierten MCP-Servers. Für einen [Plugin-gebündelten Server](/docs/de/mcp#plugin-provided-mcp-servers) ist dies der bereichsbezogene Name `plugin:<plugin-name>:<server-name>`, z. B. `plugin:my-plugin:db`, nicht der bloße Server-Schlüssel. Der Server muss bereits verbunden sein; der Hook löst nie einen OAuth- oder Verbindungsfluss aus |574| `server` | ja | Name eines konfigurierten MCP-Servers. Für einen [Plugin-gebündelten Server](/docs/de/mcp#plugin-provided-mcp-servers) ist dies der bereichsbezogene Name `plugin:<plugin-name>:<server-name>`, z. B. `plugin:my-plugin:db`, nicht der bloße Server-Schlüssel |
575| `tool` | ja | Name des Tools, das auf diesem Server aufgerufen werden soll |575| `tool` | ja | Name des Tools, das auf diesem Server aufgerufen werden soll |
576| `input` | nein | Argumente, die an das Tool übergeben werden. Zeichenkettenwerte unterstützen `${path}`-Ersetzung aus der [JSON-Eingabe](#hook-input-and-output) des Hooks, z. B. `"${tool_input.file_path}"` |576| `input` | nein | Argumente, die an das Tool übergeben werden. Zeichenkettenwerte unterstützen `${path}`-Ersetzung aus der [JSON-Eingabe](#hook-input-and-output) des Hooks, z. B. `"${tool_input.file_path}"` |
577 577
578Claude Code liest den Textinhalt des Tools auf die gleiche Weise wie Command-Hook-stdout und folgt der [Parsing-Regel unter Exit-Code 0](#exit-code-0). Wenn der benannte Server nicht verbunden ist oder das Tool `isError: true` zurückgibt, erzeugt der Hook einen nicht blockierenden Fehler und die Ausführung wird fortgesetzt.
579
580Dieses Beispiel ruft das Tool `security_scan` auf dem MCP-Server `my_server` nach jedem `Write` oder `Edit` auf und übergibt den Pfad der bearbeiteten Datei:578Dieses Beispiel ruft das Tool `security_scan` auf dem MCP-Server `my_server` nach jedem `Write` oder `Edit` auf und übergibt den Pfad der bearbeiteten Datei:
581 579
582```json theme={null}580```json theme={null}
599}597}
600```598```
601 599
602Ein `mcp_tool`-Hook kann nur ausgeführt werden, nachdem Claude Code die MCP-Server der Sitzung für Hooks verfügbar gemacht hat. `SessionStart` und `Setup` können vor diesem Punkt ausgelöst werden:600<h5 id="how-the-tool’s-result-is-read">
601 Wie das Ergebnis des Tools gelesen wird
602</h5>
603 603
604* **Beim Start**: `SessionStart` wird ausgelöst, bevor die Server verfügbar sind, auch wenn Sie mit `--continue` oder `--resume` starten. Claude Code überspringt die `mcp_tool`-Hooks des Ereignisses, ohne ihre Tools aufzurufen, und das [Debug-Log](#debug-hooks) zeichnet `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)` auf.604Claude Code liest den Textinhalt des Tools auf die gleiche Weise wie Command-Hook-stdout und folgt der [Parsing-Regel unter Exit-Code 0](#exit-code-0). Wenn das Tool `isError: true` zurückgibt, erzeugt der Hook einen nicht blockierenden Fehler und die Ausführung wird fortgesetzt.
605* **Später in einer laufenden Sitzung**: Nach `/clear` oder einer Komprimierung wird `SessionStart` erneut ausgelöst, wobei die Server bereits verfügbar sind, und seine `mcp_tool`-Hooks werden ausgeführt.
606* **Bei `Setup`**: `Setup` wird immer ausgelöst, bevor die Server verfügbar sind, sodass Claude Code seine `mcp_tool`-Hooks jedes Mal überspringt und die gleiche Nachricht aufzeichnet, die `Setup` benennt.
607 605
608Zum Beispiel ruft diese Konfiguration das Tool `load_context` auf dem MCP-Server `my_server` aus einem `SessionStart`-Hook ohne Matcher auf, sodass es auf jede `SessionStart`-Quelle angewendet wird:606<h5 id="when-the-server-is-still-connecting">
607 Wenn der Server noch verbunden wird
608</h5>
609 609
610```json theme={null}610Bei Ereignissen, bei denen ein Hook blockieren oder das Ergebnis ändern kann, z. B. `PreToolUse` oder `Stop`, wartet Claude Code auf einen verbindenden Server, bevor es das Tool aufruft, für höchstens [`MCP_TIMEOUT`](/docs/de/env-vars) und innerhalb des [`timeout`](#common-fields) des Hooks. Bei Beobachtungsereignissen, z. B. `Notification` oder `SessionEnd`, wartet es nicht.
611{611
612 "hooks": {612Ein Server mit dem [`cached`-Status](/docs/de/mcp#server-status-detail) verbindet sich, wenn der Hook sein Tool aufruft. Wenn der Server zu diesem Zeitpunkt nicht verbunden ist, erzeugt der Hook einen nicht blockierenden Fehler und die Ausführung wird fortgesetzt. Der Hook startet nie einen OAuth-Fluss, also [authentifizieren Sie den Server von `/mcp`](/docs/de/mcp#authenticate-with-remote-mcp-servers) zuerst.
613 "SessionStart": [613
614 {614<h5 id="events-that-fire-before-mcp-servers-are-available">
615 "hooks": [615 Ereignisse, die ausgelöst werden, bevor MCP-Server verfügbar sind
616 {616</h5>
617 "type": "mcp_tool",
618 "server": "my_server",
619 "tool": "load_context"
620 }
621 ]
622 }
623 ]
624 }
625}
626```
627 617
628Wenn Sie `claude` ausführen, überspringt Claude Code diesen Hook, ruft `load_context` nie auf und schreibt die Nachricht `no MCP client context` in das Debug-Log. Führen Sie `/clear` in dieser gleichen Sitzung aus und der Hook wird ausgeführt und ruft `load_context` auf. Ein `type: "command"`-Hook auf `SessionStart` wird beim Start ausgeführt, verwenden Sie also einen für alles, das die Sitzung von ihrem ersten Turn benötigt.618`SessionStart` beim Start, einschließlich mit `--continue` oder `--resume`, und jedes `Setup`-Ereignis werden ausgelöst, bevor die MCP-Server der Sitzung für Hooks verfügbar sind. Claude Code überspringt ihre `mcp_tool`-Hooks ohne Aufruf des Tools, und das [Debug-Log](#debug-hooks) zeichnet `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)` auf, oder die gleiche Nachricht, die `Setup` benennt. Wenn `SessionStart` später in der Sitzung erneut ausgelöst wird, nach `/clear` oder einer Komprimierung, werden seine `mcp_tool`-Hooks ausgeführt. Für alles, das die Sitzung beim Start benötigt, verwenden Sie stattdessen einen `type: "command"`-Hook auf `SessionStart`.
629 619
630<h4 id="prompt-and-agent-hook-fields">620<h4 id="prompt-and-agent-hook-fields">
631 Prompt- und Agent-Hook-Felder621 Prompt- und Agent-Hook-Felder
636| Feld | Erforderlich | Beschreibung |626| Feld | Erforderlich | Beschreibung |
637| :- | :- | :- |627| :- | :- | :- |
638| `prompt` | ja | Prompt-Text zum Senden an das Modell. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe-JSON. Mit einem Backslash escapen, um wörtlichen Text einzuschließen: `\$1.00` wird als `$1.00` gerendert |628| `prompt` | ja | Prompt-Text zum Senden an das Modell. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe-JSON. Mit einem Backslash escapen, um wörtlichen Text einzuschließen: `\$1.00` wird als `$1.00` gerendert |
639| `model` | nein | Modell, das für die Bewertung verwendet werden soll. Standardmäßig ein schnelles Modell |629| `model` | nein | Modell, das für die Bewertung verwendet werden soll. Standardmäßig das Modell, das Claude Code für [Hintergrundfunktionalität](/docs/de/costs#background-token-usage) verwendet |
640 630
641<h3 id="reference-scripts-by-path">631<h3 id="reference-scripts-by-path">
642 Skripte nach Pfad referenzieren632 Skripte nach Pfad referenzieren
791| `prompt_id` | UUID, die den aktuell verarbeiteten Benutzer-Prompt identifiziert. Stimmt mit dem [`prompt.id`-Attribut auf OpenTelemetry-Events](/docs/de/monitoring-usage#event-correlation-attributes) überein, sodass Sie Hook-Ausgabe mit Telemetrie für einen einzelnen Prompt korrelieren können. Nicht vorhanden bis zur ersten Benutzereingabe. Erfordert Claude Code v2.1.196 oder später |781| `prompt_id` | UUID, die den aktuell verarbeiteten Benutzer-Prompt identifiziert. Stimmt mit dem [`prompt.id`-Attribut auf OpenTelemetry-Events](/docs/de/monitoring-usage#event-correlation-attributes) überein, sodass Sie Hook-Ausgabe mit Telemetrie für einen einzelnen Prompt korrelieren können. Nicht vorhanden bis zur ersten Benutzereingabe. Erfordert Claude Code v2.1.196 oder später |
792| `transcript_path` | Pfad zur Konversations-JSON. Die Transkriptdatei wird asynchron geschrieben und kann der In-Memory-Konversation hinterherhinken, daher kann sie möglicherweise noch nicht die neuesten Nachrichten des aktuellen Turns enthalten, wenn ein Hook ausgelöst wird. Hooks, die den endgültigen Assistant-Text des aktuellen Turns benötigen, sollten `last_assistant_message` auf [Stop](#stop) und [SubagentStop](#subagentstop) verwenden, anstatt das Transkript zu lesen |782| `transcript_path` | Pfad zur Konversations-JSON. Die Transkriptdatei wird asynchron geschrieben und kann der In-Memory-Konversation hinterherhinken, daher kann sie möglicherweise noch nicht die neuesten Nachrichten des aktuellen Turns enthalten, wenn ein Hook ausgelöst wird. Hooks, die den endgültigen Assistant-Text des aktuellen Turns benötigen, sollten `last_assistant_message` auf [Stop](#stop) und [SubagentStop](#subagentstop) verwenden, anstatt das Transkript zu lesen |
793| `cwd` | Aktuelles Arbeitsverzeichnis, wenn der Hook aufgerufen wird |783| `cwd` | Aktuelles Arbeitsverzeichnis, wenn der Hook aufgerufen wird |
794| `scratchpad_dir` | Pfad zum Scratchpad-Verzeichnis der Session, in dem Claude temporäre Arbeitsdateien speichert. Nicht vorhanden, wenn die Session kein Scratchpad hat oder das Temp-Verzeichnis nicht verfügbar ist. Erfordert Claude Code v2.1.257 oder später |784| `scratchpad_dir` | Pfad zum [Scratchpad-Verzeichnis der Session](/docs/de/claude-directory#session-scratchpad-directory), in dem Claude temporäre Arbeitsdateien speichert. Nicht vorhanden, wenn die Session kein Scratchpad hat oder das Temp-Verzeichnis nicht verfügbar ist. Erfordert Claude Code v2.1.257 oder später |
795| `permission_mode` | Aktueller [Berechtigungsmodus](/docs/de/permissions#permission-modes): `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` oder `"bypassPermissions"`. Der als **Manuell** bezeichnete Modus kommt als `"default"` an, nie als `"manual"`, sodass Skripte, die `"default"` abgleichen, weiterhin funktionieren. Nicht alle Events erhalten dieses Feld. Überprüfen Sie das JSON-Beispiel in jedem [Hook-Event](#hook-events)-Abschnitt |785| `permission_mode` | Aktueller [Berechtigungsmodus](/docs/de/permissions#permission-modes): `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` oder `"bypassPermissions"`. Der als **Manuell** bezeichnete Modus kommt als `"default"` an, nie als `"manual"`, sodass Skripte, die `"default"` abgleichen, weiterhin funktionieren. Nicht alle Events erhalten dieses Feld. Überprüfen Sie das JSON-Beispiel in jedem [Hook-Event](#hook-events)-Abschnitt |
796| `effort` | Objekt mit einem `level`-Feld, das die [Effort-Stufe](/docs/de/model-config#adjust-effort-level) enthält, die wirksam ist, wenn der Hook ausgeführt wird: `"low"`, `"medium"`, `"high"`, `"xhigh"` oder `"max"`. Wenn Sie eine Stufe festlegen, die das aktive Modell nicht unterstützt, meldet `level` die Stufe, die Claude Code stattdessen ausgeführt hat; [Effort-Stufe anpassen](/docs/de/model-config#adjust-effort-level) sagt, wie es diese Stufe auswählt. Ultracode ist keine separate Stufe und wird als `"xhigh"` gemeldet. Das Objekt stimmt mit dem [Status-Feld](/docs/de/statusline#available-data) `effort`-Feld überein. Vorhanden für Events, die innerhalb eines Tool-Use-Kontexts ausgelöst werden, wie `PreToolUse`, `PostToolUse`, `Stop` und `SubagentStop`, wenn das aktuelle Modell den Effort-Parameter unterstützt. Die Stufe ist auch für Hook-Befehle und das Bash-Tool als die `$CLAUDE_EFFORT`-Umgebungsvariable verfügbar. |786| `effort` | Objekt mit einem `level`-Feld, das die [Effort-Stufe](/docs/de/model-config#adjust-effort-level) enthält, die wirksam ist, wenn der Hook ausgeführt wird: `"low"`, `"medium"`, `"high"`, `"xhigh"` oder `"max"`. Wenn Sie eine Stufe festlegen, die das aktive Modell nicht unterstützt, meldet `level` die Stufe, die Claude Code stattdessen ausgeführt hat; [Effort-Stufe anpassen](/docs/de/model-config#adjust-effort-level) sagt, wie es diese Stufe auswählt. Das Objekt stimmt mit dem [Status-Feld](/docs/de/statusline#available-data) `effort`-Feld überein. Vorhanden für Events, die innerhalb eines Tool-Use-Kontexts ausgelöst werden, wie `PreToolUse`, `PostToolUse`, `Stop` und `SubagentStop`, wenn das aktuelle Modell den Effort-Parameter unterstützt. Die Stufe ist auch für Hook-Befehle und das Bash-Tool als die `$CLAUDE_EFFORT`-Umgebungsvariable verfügbar. |
797| `hook_event_name` | Name des ausgelösten Events |787| `hook_event_name` | Name des ausgelösten Events |
798 788
799Bei Ausführung mit `--agent` oder innerhalb eines Subagenten sind zwei zusätzliche Felder enthalten:789Bei Ausführung mit `--agent` oder innerhalb eines Subagenten sind zwei zusätzliche Felder enthalten:
1057 Kontext für Claude hinzufügen1047 Kontext für Claude hinzufügen
1058</h4>1048</h4>
1059 1049
1060Das `additionalContext`-Feld übergibt einen String von Ihrem Hook in Claudes Kontextfenster. Claude Code umhüllt den String in eine Systemerinnerung und fügt ihn in die Konversation an dem Punkt ein, an dem der Hook ausgelöst wurde. Claude liest die Erinnerung bei der nächsten Modellanfrage, aber sie erscheint nicht als Chat-Nachricht in der Schnittstelle.1050Das `additionalContext`-Feld übergibt einen String von Ihrem Hook in Claudes Kontextfenster. Claude Code umhüllt den String in eine [Systemerinnerung](/docs/de/glossary#system-reminder) und fügt ihn in die Konversation an dem Punkt ein, an dem der Hook ausgelöst wurde. Claude liest die Erinnerung bei der nächsten Modellanfrage, aber sie erscheint nicht als Chat-Nachricht in der Schnittstelle.
1061 1051
1062Geben Sie `additionalContext` innerhalb von `hookSpecificOutput` neben dem Event-Namen zurück:1052Geben Sie `additionalContext` innerhalb von `hookSpecificOutput` neben dem Event-Namen zurück:
1063 1053
1189 1179
1190SessionStart wird bei jeder Sitzung ausgeführt, daher halten Sie diese Hooks schnell. Nur `type: "command"` und `type: "mcp_tool"` Hooks werden unterstützt. Siehe [MCP-Tool-Hook-Felder](#mcp-tool-hook-fields) für den Zeitpunkt der Ausführung von `mcp_tool` Hooks.1180SessionStart wird bei jeder Sitzung ausgeführt, daher halten Sie diese Hooks schnell. Nur `type: "command"` und `type: "mcp_tool"` Hooks werden unterstützt. Siehe [MCP-Tool-Hook-Felder](#mcp-tool-hook-fields) für den Zeitpunkt der Ausführung von `mcp_tool` Hooks.
1191 1181
1192Der Matcher-Wert entspricht der Art, wie die Sitzung eingeleitet wurde:1182Der Matcher-Wert entspricht der Art, wie die Sitzung initiiert wurde:
1193 1183
1194| Matcher | Wann wird es ausgelöst |1184| Matcher | Wann wird es ausgelöst |
1195| :- | :- |1185| :- | :- |
1201 1191
1202Vor v2.1.214 meldeten abgezweigte Sitzungen die Quelle `"resume"`.1192Vor v2.1.214 meldeten abgezweigte Sitzungen die Quelle `"resume"`.
1203 1193
1204Wenn Sie eine interaktive Sitzung starten, ein Gespräch beim Start mit `--continue` oder `--resume` fortsetzen oder `/clear` ausführen, werden SessionStart-Hooks im Hintergrund ausgeführt. Sie können sofort tippen, und ein fortgesetztes Gespräch wird angezeigt, ohne auf die Hooks zu warten. Claudes erste Antwort wartet immer noch darauf, dass die Hooks fertig sind, damit ihr Kontext Claude erreicht.1194Wenn Sie eine interaktive Sitzung starten, eine Konversation beim Start mit `--continue` oder `--resume` fortsetzen oder `/clear` ausführen, werden SessionStart-Hooks im Hintergrund ausgeführt. Sie können sofort tippen, und eine fortgesetzte Konversation wird angezeigt, ohne auf die Hooks zu warten. Claudes erste Antwort wartet immer noch darauf, dass die Hooks fertig sind, damit ihr Kontext Claude erreicht.
1205 1195
1206Wenn Sie mit `/resume` innerhalb einer Sitzung zu Gesprächen wechseln, wartet der Wechsel darauf, dass die Hooks fertig sind. Wenn Sie `/clear` ausführen oder zu einem anderen Gespräch wechseln, während Hintergrund-Hooks noch laufen, gilt nichts, was sie zurückgeben, für die Sitzung.1196Wenn Sie mit `/resume` innerhalb einer Sitzung zwischen Konversationen wechseln, wartet der Wechsel darauf, dass die Hooks fertig sind. Wenn Sie `/clear` ausführen oder zu einer anderen Konversation wechseln, während Hintergrund-Hooks noch laufen, gilt nichts, was sie zurückgeben, für die Sitzung.
1207 1197
1208Die gleiche Wartezeit gilt beim Start, einschließlich einer fortgesetzten Sitzung: eine Eingabeaufforderung, die Sie senden, während SessionStart-Hooks noch laufen, erreicht Claude nicht, bis sie fertig sind.1198Die gleiche Wartezeit gilt beim Start, einschließlich einer fortgesetzten Sitzung: eine Eingabeaufforderung, die Sie senden, während SessionStart-Hooks noch laufen, erreicht Claude nicht, bis sie fertig sind.
1209 1199
1210Während dieser Wartezeit drücken Sie `Esc`, um die Eingabeaufforderung zurück in die Eingabe zu nehmen, ohne sie zu senden. Die Hooks laufen weiter.1200Während einer dieser Wartezeiten können Sie `Esc` drücken, um die Eingabeaufforderung zurück in die Eingabe zu nehmen, ohne sie zu senden. Die Hooks laufen weiter.
1211 1201
1212<h4 id="sessionstart-input">1202<h4 id="sessionstart-input">
1213 SessionStart-Eingabe1203 SessionStart-Eingabe
1218| Feld | Beschreibung |1208| Feld | Beschreibung |
1219| :- | :- |1209| :- | :- |
1220| `source` | Wie die Sitzung gestartet wurde: `"startup"` für neue Sitzungen, `"resume"` für fortgesetzte Sitzungen, `"clear"` nach `/clear`, `"compact"` nach Komprimierung oder `"fork"` für eine neue Sitzung, die aus einer vorhandenen abgezweigt wurde |1210| `source` | Wie die Sitzung gestartet wurde: `"startup"` für neue Sitzungen, `"resume"` für fortgesetzte Sitzungen, `"clear"` nach `/clear`, `"compact"` nach Komprimierung oder `"fork"` für eine neue Sitzung, die aus einer vorhandenen abgezweigt wurde |
1221| `model` | Die aktive Modell-ID. Sie kann weggelassen werden, z. B. nach `/clear` oder wenn eine Sitzung durch Gesprächswiederherstellung wiederhergestellt wird, daher überprüfen Sie das Feld, bevor Sie es lesen |1211| `model` | Die aktive Modell-ID. Sie kann weggelassen werden, z. B. nach `/clear` oder wenn eine Sitzung durch Konversationswiederherstellung wiederhergestellt wird, daher überprüfen Sie das Feld, bevor Sie es lesen |
1222| `agent_type` | Der Agent-Name, vorhanden, wenn Sie Claude Code mit `claude --agent <name>` starten |1212| `agent_type` | Der Agent-Name, vorhanden, wenn Sie Claude Code mit `claude --agent <name>` starten |
1223| `session_title` | Der aktuelle Sitzungstitel, falls bereits gesetzt, z. B. über `--name` oder `/rename`. Ein Hook, der `sessionTitle` ausgibt, kann `session_title` zuerst überprüfen, um zu vermeiden, dass ein Titel überschrieben wird, den der Benutzer explizit gesetzt hat |1213| `session_title` | Der aktuelle Sitzungstitel, falls bereits gesetzt, z. B. über `--name` oder `/rename`. Ein Hook, der `sessionTitle` ausgibt, kann zuerst `session_title` überprüfen, um zu vermeiden, dass ein Titel überschrieben wird, den der Benutzer explizit gesetzt hat |
1224 1214
1225Wenn `source` `"resume"` oder `"fork"` ist und das Transkript mindestens eine Antwort von Claude enthält, erhalten SessionStart-Hooks auch die vier folgenden Felder. Ihr Hook kann sie verwenden, um zu melden, was das Fortsetzen eines veralteten Gesprächs kostet, bevor die erste Anfrage erfolgt, z. B. in einer [`systemMessage`](#json-output). Diese Felder erfordern Claude Code v2.1.251 oder später.1215Wenn `source` `"resume"` oder `"fork"` ist und das Transkript mindestens eine Antwort von Claude enthält, erhalten SessionStart-Hooks auch die vier folgenden Felder. Ihr Hook kann sie verwenden, um zu melden, was das Fortsetzen einer veralteten Konversation kostet, bevor die erste Anfrage erfolgt, z. B. in einer [`systemMessage`](#json-output). Diese Felder erfordern Claude Code v2.1.251 oder später.
1226 1216
1227| Feld | Beschreibung |1217| Feld | Beschreibung |
1228| :- | :- |1218| :- | :- |
1229| `seconds_since_last_response` | Wanduhr-Sekunden seit der letzten Antwort im fortgesetzten Transkript |1219| `seconds_since_last_response` | Wanduhr-Sekunden seit der letzten Antwort im fortgesetzten Transkript |
1230| `context_tokens` | Tokens, die die erste Anfrage der fortgesetzten Sitzung als ihre Eingabeaufforderung erneut sendet |1220| `context_tokens` | Token, die die erste Anfrage der fortgesetzten Sitzung als ihre Eingabeaufforderung erneut sendet |
1231| `prompt_cache_likely_expired` | `true`, wenn die letzte Antwort älter ist als die [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime) der Sitzung oder eine spätere Komprimierung das zwischengespeicherte Gespräch ersetzt hat |1221| `prompt_cache_likely_expired` | `true`, wenn die letzte Antwort älter ist als die [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime) der Sitzung oder eine spätere Komprimierung die zwischengespeicherte Konversation ersetzt hat |
1232| `estimated_cache_write_usd` | Geschätzte Kosten in US-Dollar für das Schreiben von `context_tokens` in den Prompt-Cache auf dem Modell der Sitzung, ohne die Antwort |1222| `estimated_cache_write_usd` | Geschätzte Kosten in US-Dollar für das Schreiben von `context_tokens` in den Prompt-Cache auf dem Modell der Sitzung, ohne die Antwort |
1233 1223
1234Dieses Beispiel zeigt die Eingabe für eine Sitzung, die 90 Minuten nach ihrer letzten Antwort fortgesetzt wurde:1224Dieses Beispiel zeigt die Eingabe für eine Sitzung, die 90 Minuten nach ihrer letzten Antwort fortgesetzt wurde:
1256 1246
1257| Feld | Beschreibung |1247| Feld | Beschreibung |
1258| :- | :- |1248| :- | :- |
1259| `additionalContext` | String, der zu Claudes Kontext am Anfang des Gesprächs hinzugefügt wird, vor der ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude), um zu erfahren, wie der Text bereitgestellt wird und was Sie darin einfügen sollten |1249| `additionalContext` | String, der zu Claudes Kontext am Anfang der Konversation hinzugefügt wird, vor der ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) für die Lieferweise des Textes und was darin enthalten sein sollte |
1260| `initialUserMessage` | String, der als erste Benutzernachricht der Sitzung verwendet wird. Gilt im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag, wo es zum ersten Zug wird, auch wenn keine Eingabeaufforderung bereitgestellt wird. Wenn eine Eingabeaufforderung bereitgestellt wird, folgt sie als nächster Zug. Im Gegensatz zu `additionalContext`, das an einen vorhandenen Zug angehängt wird, erstellt dies den Zug |1250| `initialUserMessage` | String, der als erste Benutzernachricht der Sitzung verwendet wird. Gilt im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag, wo es zum ersten Zug wird, auch wenn keine Eingabeaufforderung bereitgestellt wird. Wenn eine Eingabeaufforderung bereitgestellt wird, folgt sie als nächster Zug. Im Gegensatz zu `additionalContext`, das an einen vorhandenen Zug angehängt wird, erstellt dies den Zug |
1261| `sessionTitle` | Legt den Sitzungstitel fest, mit der gleichen Wirkung wie `/rename`. Verwenden Sie dies, um Sitzungen automatisch aus dem Start-Ordner, Git-Branch oder Worktree-Namen zu benennen. Gilt, wenn `source` `"startup"`, `"resume"` oder `"fork"` ist; wird bei `"clear"` und `"compact"` ignoriert |1251| `sessionTitle` | Legt den Sitzungstitel fest, mit der gleichen Wirkung wie `/rename`. Verwenden Sie dies, um Sitzungen automatisch aus dem Start-Ordner, Git-Branch oder Worktree-Namen zu benennen. Gilt, wenn `source` `"startup"`, `"resume"` oder `"fork"` ist; wird bei `"clear"` und `"compact"` ignoriert |
1262| `watchPaths` | Array von absoluten Pfaden zum Überwachen von [FileChanged](#filechanged) Ereignissen während dieser Sitzung |1252| `watchPaths` | Array von absoluten Pfaden zum Überwachen von [FileChanged](#filechanged) Ereignissen während dieser Sitzung |
1263| `reloadSkills` | Boolean. Wenn `true`, scannt Claude Code die [Skill](/docs/de/skills)- und Befehlsverzeichnisse erneut, nachdem die SessionStart-Hooks abgeschlossen sind, sodass Skills, die der Hook installiert hat, in der gleichen Sitzung verfügbar sind, beginnend mit der ersten Eingabeaufforderung |1253| `reloadSkills` | Boolean. Wenn `true`, scannt Claude Code die [Skill](/docs/de/skills) und Befehlsverzeichnisse erneut, nachdem die SessionStart-Hooks abgeschlossen sind, sodass Skills, die der Hook installiert hat, in der gleichen Sitzung verfügbar sind, beginnend mit der ersten Eingabeaufforderung |
1264 1254
1265```json theme={null}1255```json theme={null}
1266{1256{
1272}1262}
1273```1263```
1274 1264
1275Da Klartext-stdout bereits dieses Ereignis für Claude erreicht, kann ein Hook, der nur Kontext lädt, direkt zu stdout drucken, ohne JSON zu erstellen. Verwenden Sie die JSON-Form, wenn Sie Kontext mit anderen Feldern wie `sessionTitle` kombinieren müssen.1265Da Klartext-stdout bereits für dieses Ereignis Claude erreicht, kann ein Hook, der nur Kontext lädt, direkt zu stdout drucken, ohne JSON zu erstellen. Verwenden Sie die JSON-Form, wenn Sie Kontext mit anderen Feldern wie `sessionTitle` kombinieren müssen.
1276 1266
1277Verwenden Sie `reloadSkills`, wenn ein SessionStart-Hook Skills installiert oder aktualisiert. Die Skill-Erkennung wird normalerweise ausgeführt, bevor SessionStart-Hooks fertig sind, daher würden Dateien, die der Hook in `~/.claude/skills/` oder `.claude/skills/` schreibt, sonst erst in der nächsten Sitzung angezeigt. Dieses Beispiel synchronisiert ein gemeinsames Skills-Repository und fordert die erneute Überprüfung an:1267Verwenden Sie `reloadSkills`, wenn ein SessionStart-Hook Skills installiert oder aktualisiert. Die Skill-Erkennung wird normalerweise ausgeführt, bevor SessionStart-Hooks fertig sind, daher würden Dateien, die der Hook in `~/.claude/skills/` oder `.claude/skills/` schreibt, sonst erst in der nächsten Sitzung angezeigt. Dieses Beispiel synchronisiert ein gemeinsames Skills-Repository und fordert die erneute Überprüfung an:
1278 1268
1285echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1275echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'
1286```1276```
1287 1277
1288Die Repository-URL ist ein Platzhalter; ersetzen Sie sie durch Ihr eigenes Skills-Repository. Mit dem Platzhalter schlägt der Klon fehl und druckt eine `fatal:` Nachricht zu stderr. Stderr von einem SessionStart-Hook, der mit 0 beendet wird, ist nur informativ, daher gilt die `reloadSkills` Anfrage immer noch.1278Die Repository-URL ist ein Platzhalter; ersetzen Sie sie durch Ihr eigenes Skills-Repository. Mit dem Platzhalter schlägt der Klon fehl und gibt eine `fatal:` Nachricht zu stderr aus. Stderr von einem SessionStart-Hook, der mit 0 beendet wird, ist nur informativ, daher gilt die `reloadSkills` Anfrage trotzdem.
1289 1279
1290<h4 id="persist-environment-variables">1280<h4 id="persist-environment-variables">
1291 Umgebungsvariablen beibehalten1281 Umgebungsvariablen beibehalten
1334 Setup1324 Setup
1335</h3>1325</h3>
1336 1326
1337Wird nur ausgeführt, wenn Sie Claude Code mit `--init-only` starten oder mit `--init` oder `--maintenance` im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag. Es wird beim normalen Start nicht ausgeführt. Verwenden Sie es für einmalige Abhängigkeitsinstallation oder geplante Bereinigung, die Sie explizit von CI oder Skripten aus auslösen, getrennt vom normalen Sitzungsstart. Für die Initialisierung pro Sitzung verwenden Sie stattdessen [SessionStart](#sessionstart).1327Wird nur ausgeführt, wenn Sie Claude Code mit `--init-only` starten oder mit `--init` oder `--maintenance` im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag. Es wird nicht beim normalen Start ausgeführt. Verwenden Sie es für einmalige Abhängigkeitsinstallation oder geplante Bereinigung, die Sie explizit von CI oder Skripten aus auslösen, getrennt vom normalen Sitzungsstart. Für die Initialisierung pro Sitzung verwenden Sie stattdessen [SessionStart](#sessionstart).
1338 1328
1339Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:1329Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:
1340 1330
1343| `init` | `claude --init-only` oder `claude -p --init` |1333| `init` | `claude --init-only` oder `claude -p --init` |
1344| `maintenance` | `claude -p --maintenance` |1334| `maintenance` | `claude -p --maintenance` |
1345 1335
1346Wenn Sie `claude --init-only` ausführen, führt Claude Code Setup-Hooks und `SessionStart` Hooks mit dem `startup` Matcher aus und beendet sich dann, ohne ein Gespräch zu starten.1336Wenn Sie `claude --init-only` ausführen, führt Claude Code Setup-Hooks und `SessionStart` Hooks mit dem `startup` Matcher aus und beendet sich dann, ohne eine Konversation zu starten.
1347 1337
1348Wenn Sie ein Gespräch mit `-p` starten oder fortsetzen, müssen Sie auch eine Eingabeaufforderung bereitstellen, als Argument oder über stdin weitergeleitet. Sie können die Eingabeaufforderung überspringen, wenn ein `SessionStart` Hook [`initialUserMessage`](#sessionstart-decision-control) bereitstellt oder wenn Sie eine Sitzung mit einem [aufgeschobenen Tool-Aufruf](#defer-a-tool-call-for-later) fortsetzen.1338Wenn Sie eine Konversation mit `-p` starten oder fortsetzen, müssen Sie auch eine Eingabeaufforderung bereitstellen, als Argument oder über stdin weitergeleitet. Sie können die Eingabeaufforderung überspringen, wenn ein `SessionStart` Hook [`initialUserMessage`](#sessionstart-decision-control) bereitstellt oder wenn Sie eine Sitzung mit einem [aufgeschobenen Tool-Aufruf](#defer-a-tool-call-for-later) fortsetzen.
1349 1339
1350Bei Erfolg druckt `--init-only` nichts auf das Terminal. Um zu bestätigen, dass die Hooks ausgeführt wurden, starten Sie mit `claude --debug-file <path> --init-only`, ersetzen Sie `<path>` durch einen Protokolldateispeicherort, und überprüfen Sie das Protokoll auf die Setup- und SessionStart-Hook-Einträge.1340Bei Erfolg gibt `--init-only` nichts auf dem Terminal aus. Um zu bestätigen, dass die Hooks ausgeführt wurden, starten Sie mit `claude --debug-file <path> --init-only`, ersetzen Sie `<path>` durch einen Protokolldateispeicherort, und überprüfen Sie das Protokoll auf die Setup- und SessionStart-Hook-Einträge.
1351 1341
1352Da Setup nicht bei jedem Start ausgeführt wird, kann sich ein Plugin, das eine Abhängigkeit installiert benötigt, nicht nur auf Setup verlassen. Das praktische Muster ist, die Abhängigkeit bei der ersten Verwendung zu überprüfen und bei Fehlen zu installieren, z. B. ein Hook oder Skill, der auf `${CLAUDE_PLUGIN_DATA}/node_modules` testet und `npm install` ausführt, wenn nicht vorhanden. Siehe das [persistente Datenverzeichnis](/docs/de/plugins/components#path-variables-and-persistent-data), um zu erfahren, wo installierte Abhängigkeiten gespeichert werden. Wenn Sie Ihr Plugin über einen Marketplace verteilen, benötigen Sie möglicherweise dieses Muster nicht: Claude Code [installiert automatisch berechtigte Node.js-Paketabhängigkeiten](/docs/de/plugins/loading#node-js-package-dependencies), wenn es das Plugin zwischenspeichert.1342Da Setup nicht bei jedem Start ausgeführt wird, kann ein Plugin, das eine Abhängigkeit installiert benötigt, sich nicht nur auf Setup verlassen. Das praktische Muster ist, die Abhängigkeit bei der ersten Verwendung zu überprüfen und bei Fehlen zu installieren, z. B. ein Hook oder Skill, der auf `${CLAUDE_PLUGIN_DATA}/node_modules` testet und `npm install` ausführt, wenn nicht vorhanden. Siehe das [Verzeichnis für persistente Daten](/docs/de/plugins/components#path-variables-and-persistent-data) für den Speicherort installierter Abhängigkeiten. Wenn Sie Ihr Plugin über einen Marketplace verteilen, benötigen Sie möglicherweise dieses Muster nicht: Claude Code [installiert automatisch berechtigte Node.js-Paketabhängigkeiten](/docs/de/plugins/loading#node-js-package-dependencies), wenn es das Plugin zwischenspeichert.
1353 1343
1354<h4 id="setup-input">1344<h4 id="setup-input">
1355 Setup-Eingabe1345 Setup-Eingabe
1373 1363
1374Setup-Hooks können nicht blockieren; die Ausführung wird bei jedem Exit-Code fortgesetzt. Bei jedem Exit-Code verwirft Claude Code die [JSON-Ausgabefelder](#json-output) eines Setup-Hooks, wie `systemMessage`, `continue` und `hookSpecificOutput.additionalContext`. Mit `-p` werden stdout, stderr und Exit-Code eines Setup-Hooks in der Ausgabe des Laufs nur als [`hook_response` Ereignisse](/docs/de/headless#read-session-metadata) angezeigt, wenn Sie mit `--output-format stream-json --verbose` starten.1364Setup-Hooks können nicht blockieren; die Ausführung wird bei jedem Exit-Code fortgesetzt. Bei jedem Exit-Code verwirft Claude Code die [JSON-Ausgabefelder](#json-output) eines Setup-Hooks, wie `systemMessage`, `continue` und `hookSpecificOutput.additionalContext`. Mit `-p` werden stdout, stderr und Exit-Code eines Setup-Hooks in der Ausgabe des Laufs nur als [`hook_response` Ereignisse](/docs/de/headless#read-session-metadata) angezeigt, wenn Sie mit `--output-format stream-json --verbose` starten.
1375 1365
1376Setup-Hooks haben Zugriff auf `CLAUDE_ENV_FILE`. Variablen, die in diese Datei geschrieben werden, bleiben in nachfolgenden Bash-Befehlen für die Sitzung bestehen, genau wie in [SessionStart-Hooks](#persist-environment-variables). Nur `type: "command"` Hooks werden auf `Setup` ausgeführt. Ein `type: "mcp_tool"` Hook auf `Setup` wird immer übersprungen, wie unter [MCP-Tool-Hook-Felder](#mcp-tool-hook-fields) beschrieben.1366Setup-Hooks haben Zugriff auf `CLAUDE_ENV_FILE`. Variablen, die in diese Datei geschrieben werden, bleiben in nachfolgenden Bash-Befehlen für die Sitzung erhalten, genau wie in [SessionStart-Hooks](#persist-environment-variables). Nur `type: "command"` Hooks werden auf `Setup` ausgeführt. Ein `type: "mcp_tool"` Hook auf `Setup` wird immer übersprungen, wie unter [MCP-Tool-Hook-Felder](#mcp-tool-hook-fields) beschrieben.
1377 1367
1378<h3 id="instructionsloaded">1368<h3 id="instructionsloaded">
1379 InstructionsLoaded1369 InstructionsLoaded
1383 1373
1384Dieses Ereignis wird nicht ausgeführt, wenn Claude [direkt `AGENTS.md` liest](/docs/de/memory#agents-md) über die Einstellung **Projektanweisungen**. Es wird ausgeführt, wenn eine `CLAUDE.md` Ihre `AGENTS.md` importiert, mit `load_reason` auf `include` gesetzt wie für jede andere importierte Datei, und wenn `CLAUDE.md` ein Symlink zu ihr ist, als normales `CLAUDE.md` Laden.1374Dieses Ereignis wird nicht ausgeführt, wenn Claude [direkt `AGENTS.md` liest](/docs/de/memory#agents-md) über die Einstellung **Projektanweisungen**. Es wird ausgeführt, wenn eine `CLAUDE.md` Ihre `AGENTS.md` importiert, mit `load_reason` auf `include` gesetzt wie für jede andere importierte Datei, und wenn `CLAUDE.md` ein Symlink zu ihr ist, als normales `CLAUDE.md` Laden.
1385 1375
1386Der Matcher wird gegen `load_reason` ausgeführt. Verwenden Sie beispielsweise `"matcher": "session_start"`, um nur für Dateien zu aktivieren, die beim Sitzungsstart geladen werden, oder `"matcher": "path_glob_match|nested_traversal"`, um nur für träge Ladevorgänge zu aktivieren.1376Der Matcher wird gegen `load_reason` ausgeführt. Verwenden Sie beispielsweise `"matcher": "session_start"`, um nur für Dateien zu feuern, die beim Sitzungsstart geladen werden, oder `"matcher": "path_glob_match|nested_traversal"`, um nur für träge Lasten zu feuern.
1387 1377
1388<h4 id="instructionsloaded-input">1378<h4 id="instructionsloaded-input">
1389 InstructionsLoaded-Eingabe1379 InstructionsLoaded-Eingabe
1396| `file_path` | Absoluter Pfad zur Anweisungsdatei, die geladen wurde |1386| `file_path` | Absoluter Pfad zur Anweisungsdatei, die geladen wurde |
1397| `memory_type` | Umfang der Datei: `"User"`, `"Project"`, `"Local"` oder `"Managed"` |1387| `memory_type` | Umfang der Datei: `"User"`, `"Project"`, `"Local"` oder `"Managed"` |
1398| `load_reason` | Warum die Datei geladen wurde: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` oder `"compact"`. Der `"compact"` Wert wird ausgeführt, wenn Anweisungsdateien nach einem Komprimierungsereignis erneut geladen werden |1388| `load_reason` | Warum die Datei geladen wurde: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` oder `"compact"`. Der `"compact"` Wert wird ausgeführt, wenn Anweisungsdateien nach einem Komprimierungsereignis erneut geladen werden |
1399| `globs` | Pfad-Glob-Muster aus dem `paths:` Frontmatter der Datei, falls vorhanden. Nur für `path_glob_match` Ladevorgänge vorhanden |1389| `globs` | Pfad-Glob-Muster aus dem `paths:` Frontmatter der Datei, falls vorhanden. Nur für `path_glob_match` Lasten vorhanden |
1400| `trigger_file_path` | Pfad zur Datei, deren Zugriff diesen Ladevorgang ausgelöst hat, für träge Ladevorgänge |1390| `trigger_file_path` | Pfad zur Datei, deren Zugriff dieses Laden ausgelöst hat, für träge Lasten |
1401| `parent_file_path` | Pfad zur übergeordneten Anweisungsdatei, die diese eingebunden hat, für `include` Ladevorgänge |1391| `parent_file_path` | Pfad zur übergeordneten Anweisungsdatei, die diese eingebunden hat, für `include` Lasten |
1402 1392
1403```json theme={null}1393```json theme={null}
1404{1394{
1422 UserPromptSubmit1412 UserPromptSubmit
1423</h3>1413</h3>
1424 1414
1425Wird ausgeführt, wenn der Benutzer eine Eingabeaufforderung einreicht, bevor Claude sie verarbeitet. Dies ermöglicht es Ihnen, zusätzlichen Kontext basierend auf der Eingabeaufforderung/dem Gespräch hinzuzufügen, Eingabeaufforderungen zu validieren oder bestimmte Arten von Eingabeaufforderungen zu blockieren.1415Wird ausgeführt, wenn der Benutzer eine Eingabeaufforderung einreicht, bevor Claude sie verarbeitet. Dies ermöglicht es Ihnen, zusätzlichen Kontext basierend auf der Eingabeaufforderung/Konversation hinzuzufügen, Eingabeaufforderungen zu validieren oder bestimmte Arten von Eingabeaufforderungen zu blockieren.
1426 1416
1427`UserPromptSubmit` Hooks haben ein Standard-Timeout von 30 Sekunden für `command`, `http` und `mcp_tool` Typen, kürzer als das 600-Sekunden-Standard für diese Typen bei den meisten anderen Ereignissen. Da dieser Hook vor jeder Eingabeaufforderung ausgeführt wird und die Modellverarbeitung blockiert, bis er abgeschlossen ist, stellt ein feststeckender Hook die Sitzung still. Wenn Ihr Hook mehr Zeit benötigt, setzen Sie das `timeout` Feld im Hook-Eintrag.1417`UserPromptSubmit` Hooks haben ein Standard-Timeout von 30 Sekunden für `command`, `http` und `mcp_tool` Typen, kürzer als das 600-Sekunden-Standard für diese Typen bei den meisten anderen Ereignissen. Da dieser Hook vor jeder Eingabeaufforderung ausgeführt wird und die Modellverarbeitung blockiert, bis er abgeschlossen ist, stellt ein feststeckender Hook die Sitzung still. Wenn Ihr Hook mehr Zeit benötigt, setzen Sie das `timeout` Feld im Hook-Eintrag.
1428 1418
1429Abgesehen von einem Command-Hook, den Sie mit [`async: true`](#run-hooks-in-the-background) ausführen, wird ein `UserPromptSubmit` Command-, HTTP- oder MCP-Tool-Hook, der sein Timeout erreicht, abgebrochen und seine Ausgabe, einschließlich `additionalContext`, wird verworfen. Die Eingabeaufforderung erreicht Claude immer noch ohne diesen Kontext. Das Transkript zeigt einen Hinweis, der den Hook, das ausgelöste Timeout und dass die Ausgabe verworfen wurde, benennt.1419Abgesehen von einem Command-Hook, den Sie mit [`async: true`](#run-hooks-in-the-background) ausführen, wird ein `UserPromptSubmit` Command-, HTTP- oder MCP-Tool-Hook, der sein Timeout erreicht, abgebrochen und seine Ausgabe, einschließlich `additionalContext`, wird verworfen. Die Eingabeaufforderung erreicht Claude immer noch ohne diesen Kontext. Das Transkript zeigt einen Hinweis mit dem Hook-Namen, dem Timeout, das ausgelöst wurde, und dass die Ausgabe verworfen wurde.
1430 1420
1431Ein [Agent SDK Callback-Hook](/docs/de/agent-sdk/hooks) auf `UserPromptSubmit`, der sein Timeout erreicht, blockiert die Eingabeaufforderung mit einer Nachricht, die den Hook und das Timeout benennt, da ein Callback dort als Richtlinientor fungieren kann, das nicht offen fehlschlagen darf. Die Sitzung wird fortgesetzt. Vor v2.1.208 endete ein Callback-Timeout bei diesem Ereignis mit einem Ausführungsfehler.1421Ein [Agent SDK Callback-Hook](/docs/de/agent-sdk/hooks) auf `UserPromptSubmit`, der sein Timeout erreicht, blockiert die Eingabeaufforderung mit einer Nachricht, die den Hook und das Timeout benennt, da ein Callback dort als Richtlinien-Gate fungieren kann, das nicht offen fehlschlagen darf. Die Sitzung wird fortgesetzt. Vor v2.1.208 endete ein Callback-Timeout bei diesem Ereignis mit einem Ausführungsfehler.
1432 1422
1433<h4 id="userpromptsubmit-input">1423<h4 id="userpromptsubmit-input">
1434 UserPromptSubmit-Eingabe1424 UserPromptSubmit-Eingabe
1435</h4>1425</h4>
1436 1426
1437Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten UserPromptSubmit-Hooks das `prompt` Feld mit dem Text, den der Benutzer eingereicht hat. Eingefügter Inhalt, der zu einem `[Pasted text #N]` Platzhalter zusammengefallen ist, kommt erweitert an seiner Stelle an. In Sitzungen, in denen Claude Code [eingefügten Text für Claude markiert](/docs/de/terminal-config#how-claude-treats-pasted-text), sitzt dieser erweiterte Inhalt zwischen einer `<pasted_content id="…">` Zeile und einer `</pasted_content id="…">` Zeile, daher berücksichtigen Sie diese Zeilen, wenn Ihr Hook die Eingabeaufforderung analysiert.1427Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten UserPromptSubmit-Hooks das `prompt` Feld mit dem Text, den der Benutzer eingereicht hat. Eingefügter Inhalt, der zu einem `[Pasted text #N]` Platzhalter zusammengefallen ist, kommt erweitert an Ort und Stelle an. In Sitzungen, in denen Claude Code [eingefügten Text für Claude markiert](/docs/de/terminal-config#how-claude-treats-pasted-text), sitzt dieser erweiterte Inhalt zwischen einer `<pasted_content id="…">` Zeile und einer `</pasted_content id="…">` Zeile, daher berücksichtigen Sie diese Zeilen, wenn Ihr Hook die Eingabeaufforderung analysiert.
1438 1428
1439```json theme={null}1429```json theme={null}
1440{1430{
1453 1443
1454`UserPromptSubmit` Hooks können steuern, ob eine Benutzereingabeaufforderung verarbeitet wird und Kontext hinzufügen. Alle [JSON-Ausgabefelder](#json-output) sind verfügbar.1444`UserPromptSubmit` Hooks können steuern, ob eine Benutzereingabeaufforderung verarbeitet wird und Kontext hinzufügen. Alle [JSON-Ausgabefelder](#json-output) sind verfügbar.
1455 1445
1456Es gibt zwei Möglichkeiten, Kontext zum Gespräch bei Exit-Code 0 hinzuzufügen:1446Es gibt zwei Möglichkeiten, Kontext zur Konversation bei Exit-Code 0 hinzuzufügen:
1457 1447
1458* **Klartext-stdout**: Claude Code fügt stdout, das es [als Klartext behandelt](#exit-code-0), zu Claudes Kontext hinzu1448* **Klartext-stdout**: Claude Code fügt stdout, das es [als Klartext behandelt](#exit-code-0), zu Claudes Kontext hinzu
1459* **JSON mit `additionalContext`**: Verwenden Sie das JSON-Format unten für mehr Kontrolle. Das `additionalContext` Feld wird als Kontext hinzugefügt1449* **JSON mit `additionalContext`**: Verwenden Sie das JSON-Format unten für mehr Kontrolle. Das `additionalContext` Feld wird als Kontext hinzugefügt
1460 1450
1461Keiner der Kanäle erzeugt einen sichtbaren Transkript-Eintrag. Klartext-stdout und der `additionalContext` Wert werden jeweils als Systemerinnerung eingefügt, die mit dem Namen des Hooks beginnt; Claude liest beide. Um die Bereitstellung zu bestätigen, überprüfen Sie das [Debug-Protokoll](#debug-hooks).1451Keiner der Kanäle erzeugt einen sichtbaren Transkript-Eintrag. Klartext-stdout und der `additionalContext` Wert werden jeweils als Systemhinweis eingefügt, der mit dem Hook-Namen beginnt; Claude liest beide. Um die Lieferung zu bestätigen, überprüfen Sie das [Debug-Protokoll](#debug-hooks).
1462 1452
1463Um eine Eingabeaufforderung zu blockieren, geben Sie ein JSON-Objekt mit `decision` auf `"block"` zurück:1453Um eine Eingabeaufforderung zu blockieren, geben Sie ein JSON-Objekt mit `decision` auf `"block"` zurück:
1464 1454
1465| Feld | Beschreibung |1455| Feld | Beschreibung |
1466| :- | :- |1456| :- | :- |
1467| `decision` | `"block"` verhindert, dass die Eingabeaufforderung verarbeitet wird und löscht sie aus dem Kontext. Weglassen, um die Eingabeaufforderung fortzufahren |1457| `decision` | `"block"` verhindert, dass die Eingabeaufforderung verarbeitet wird und löscht sie aus dem Kontext. Weglassen, um die Eingabeaufforderung fortzusetzen |
1468| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist. Nicht zum Kontext hinzugefügt |1458| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist. Wird nicht zum Kontext hinzugefügt |
1469| `additionalContext` | String, der zu Claudes Kontext neben der eingereichten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |1459| `additionalContext` | String, der zu Claudes Kontext neben der eingereichten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
1470| `sessionTitle` | Legt den Sitzungstitel fest. Verwenden Sie dies, um Sitzungen automatisch basierend auf dem Inhalt der Eingabeaufforderung zu benennen |1460| `sessionTitle` | Legt den Sitzungstitel fest. Verwenden Sie dies, um Sitzungen automatisch basierend auf dem Inhalt der Eingabeaufforderung zu benennen |
1471| `suppressOriginalPrompt` | Wenn `true`, wenn `decision` `"block"` ist, wird der ursprüngliche Eingabeaufforderungstext aus der angezeigten Blockierungsmeldung weggelassen |1461| `suppressOriginalPrompt` | Wenn `true`, wenn `decision` `"block"` ist, wird der ursprüngliche Eingabeaufforderungstext aus der angezeigten Blockierungsnachricht weggelassen |
1472 1462
1473Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `reason` weitergeleitet: Die Blockierungsmeldung zeigt dem Benutzer den stderr-Text an, und er wird nicht zum Kontext hinzugefügt.1463Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `reason` weitergeleitet: Die Blockierungsnachricht zeigt dem Benutzer den stderr-Text an, und er wird nicht zum Kontext hinzugefügt.
1474 1464
1475```json theme={null}1465```json theme={null}
1476{1466{
1488 UserPromptExpansion1478 UserPromptExpansion
1489</h3>1479</h3>
1490 1480
1491Wird ausgeführt, wenn ein vom Benutzer eingegebener Befehl vor dem Erreichen von Claude in eine Eingabeaufforderung erweitert wird. Verwenden Sie dies, um bestimmte Befehle von direkter Aufrufen zu blockieren, Kontext für einen bestimmten Skill einzufügen oder zu protokollieren, welche Befehle Benutzer aufrufen. Beispielsweise kann ein Hook, der `deploy` abgleicht, `/deploy` blockieren, es sei denn, eine Genehmigungsdatei ist vorhanden, oder ein Hook, der einen Review-Skill abgleicht, kann die Review-Checkliste des Teams als `additionalContext` anhängen.1481Wird ausgeführt, wenn ein vom Benutzer eingegebener Befehl zu einer Eingabeaufforderung erweitert wird, bevor sie Claude erreicht. Verwenden Sie dies, um bestimmte Befehle von direkter Aufrufen zu blockieren, Kontext für einen bestimmten Skill einzufügen oder zu protokollieren, welche Befehle Benutzer aufrufen. Beispielsweise kann ein Hook, der `deploy` abgleicht, `/deploy` blockieren, es sei denn, eine Genehmigungsdatei ist vorhanden, oder ein Hook, der einen Review-Skill abgleicht, kann die Review-Checkliste des Teams als `additionalContext` anhängen.
1492 1482
1493Dieses Ereignis deckt den Pfad ab, den `PreToolUse` nicht abdeckt: Ein `PreToolUse` Hook, der das `Skill` Tool abgleicht, wird nur ausgeführt, wenn Claude das Tool aufruft, aber das direkte Eingeben von `/skillname` umgeht `PreToolUse`. `UserPromptExpansion` wird auf diesem direkten Pfad ausgeführt.1483Dieses Ereignis deckt den Pfad ab, den `PreToolUse` nicht abdeckt: Ein `PreToolUse` Hook, der das `Skill` Tool abgleicht, wird nur ausgeführt, wenn Claude das Tool aufruft, aber das direkte Eingeben von `/skillname` umgeht `PreToolUse`. `UserPromptExpansion` wird auf diesem direkten Pfad ausgeführt.
1494 1484
1495Gleicht `command_name` ab. Lassen Sie den Matcher leer, um bei jedem Eingabeaufforderungs-Typ-Befehl zu aktivieren.1485Gleicht `command_name` ab. Lassen Sie den Matcher leer, um bei jedem Eingabeaufforderungs-Befehl zu feuern.
1496 1486
1497<h4 id="userpromptexpansion-input">1487<h4 id="userpromptexpansion-input">
1498 UserPromptExpansion-Eingabe1488 UserPromptExpansion-Eingabe
1523 1513
1524| Feld | Beschreibung |1514| Feld | Beschreibung |
1525| :- | :- |1515| :- | :- |
1526| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um fortzufahren |1516| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um ihn fortzusetzen |
1527| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist |1517| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist |
1528| `additionalContext` | String, der zu Claudes Kontext neben der erweiterten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |1518| `additionalContext` | String, der zu Claudes Kontext neben der erweiterten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
1529 1519
1530Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `reason` weitergeleitet: Die Blockierungsmeldung zeigt dem Benutzer den stderr-Text an.1520Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `reason` weitergeleitet: Die Blockierungsnachricht zeigt dem Benutzer den stderr-Text an.
1531 1521
1532```json theme={null}1522```json theme={null}
1533{1523{
1552* Den Text transformieren, den eine Agent SDK Anwendung ihren Benutzern zeigt1542* Den Text transformieren, den eine Agent SDK Anwendung ihren Benutzern zeigt
1553* API-Schlüssel oder interne Hostnamen aus Claudes Antworten redigieren1543* API-Schlüssel oder interne Hostnamen aus Claudes Antworten redigieren
1554 1544
1555Claude Code hält jeden Batch, bis Ihr Hook zurückkommt, daher halten Sie den Hook schnell. Wenn der Hook fehlschlägt oder das Timeout überschreitet, zeigt Claude Code den ursprünglichen Text an. Das Standard-Timeout für dieses Ereignis beträgt 10 Sekunden; wenn Ihr Hook mehr Zeit benötigt, setzen Sie das `timeout` Feld im Hook-Eintrag.1545Claude Code hält jeden Batch, bis Ihr Hook zurückkehrt, daher halten Sie den Hook schnell. Wenn der Hook fehlschlägt oder das Timeout überschreitet, zeigt Claude Code den ursprünglichen Text an. Das Standard-Timeout für dieses Ereignis beträgt 10 Sekunden; wenn Ihr Hook mehr Zeit benötigt, setzen Sie das `timeout` Feld im Hook-Eintrag.
1556 1546
1557MessageDisplay ist nur für die Anzeige: Der Ersatztext ändert nur das, was auf dem Bildschirm gerendert wird. Das Transkript und das, was Claude sieht, behalten den ursprünglichen Text, daher sieht Claude den Ersatz nie, und der ausführliche Modus zeigt das Original. Der Hook empfängt nur Assistenten-Nachrichtentext, daher werden Tool-Ergebnisse und der Text, den Sie eingeben, unverändert gerendert.1547MessageDisplay ist nur für die Anzeige: Der Ersatztext ändert nur das, was auf dem Bildschirm gerendert wird. Das Transkript und was Claude sieht, behalten den ursprünglichen Text, daher sieht Claude den Ersatz nie, und der ausführliche Modus zeigt das Original. Der Hook empfängt nur Assistenten-Nachrichtentext, daher werden Tool-Ergebnisse und der Text, den Sie eingeben, unverändert gerendert.
1558 1548
1559MessageDisplay unterstützt keine Matcher und wird für jede Assistenten-Nachricht ausgeführt, die Text streamt; Nachrichten ohne Text, wie nur Tool-Aufrufe, lösen es nicht aus.1549MessageDisplay unterstützt keine Matcher und wird für jede Assistenten-Nachricht ausgeführt, die Text streamt; Nachrichten ohne Text, wie nur Tool-Aufrufe, lösen es nicht aus.
1560 1550
1564 MessageDisplay-Eingabe1554 MessageDisplay-Eingabe
1565</h4>1555</h4>
1566 1556
1567Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten MessageDisplay-Hooks Identifikatoren für den Zug und die Nachricht, die Position dieses Aufrufs innerhalb der Nachricht und den neuen Text in `delta`. Batch-Grenzen hängen davon ab, wie der Text streamt, daher verwenden Sie `index` und `final`, um den Fortschritt durch eine Nachricht zu verfolgen, anstatt zu erwarten, dass Zeilen auf eine bestimmte Weise gruppiert werden.1557Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten MessageDisplay-Hooks Bezeichner für den Zug und die Nachricht, die Position dieses Aufrufs innerhalb der Nachricht und den neuen Text in `delta`. Batch-Grenzen hängen davon ab, wie der Text streamt, daher verwenden Sie `index` und `final`, um den Fortschritt durch eine Nachricht zu verfolgen, anstatt zu erwarten, dass Zeilen auf eine bestimmte Weise gruppiert werden.
1568 1558
1569| Feld | Beschreibung |1559| Feld | Beschreibung |
1570| :- | :- |1560| :- | :- |
1571| `turn_id` | UUID des aktuellen Zugs |1561| `turn_id` | UUID des aktuellen Zugs |
1572| `message_id` | UUID der angezeigten Assistenten-Nachricht. Stabil über jeden Batch der gleichen Nachricht. Dies ist nicht die API `msg_…` ID, daher kann sie nicht mit Transkript-Nachrichten-IDs korreliert werden |1562| `message_id` | UUID der Assistenten-Nachricht, die angezeigt wird. Stabil über jeden Batch der gleichen Nachricht. Dies ist nicht die API `msg_…` ID, daher kann sie nicht mit Transkript-Nachrichten-IDs korreliert werden |
1573| `index` | Null-basierter Index dieses Batches innerhalb der Nachricht |1563| `index` | Null-basierter Index dieses Batches innerhalb der Nachricht |
1574| `final` | `true` beim letzten Batch der Nachricht. Jede Nachricht hat genau einen finalen Batch |1564| `final` | `true` beim letzten Batch der Nachricht. Jede Nachricht hat genau einen finalen Batch |
1575| `delta` | Die neu fertiggestellten Zeilen seit dem vorherigen Batch, einschließlich abschließender Zeilenumbrüche. Immer ganze Zeilen, außer dem finalen Batch, der in der Mitte einer Zeile enden kann. In interaktiven Läufen ist das Delta des finalen Batches leer, wenn die Nachricht mit einem Zeilenumbruch endet, daher behandeln Sie `final`, nicht ein nicht-leeres Delta, als das End-of-Message-Signal. In Agent SDK und `claude -p` Läufen trägt der einzelne Aufruf die gesamte Nachricht |1565| `delta` | Die neu fertiggestellten Zeilen seit dem vorherigen Batch, einschließlich abschließender Zeilenumbrüche. Immer ganze Zeilen, außer dem finalen Batch, der in der Mitte einer Zeile enden kann. In interaktiven Läufen ist das Delta des finalen Batches leer, wenn die Nachricht mit einem Zeilenumbruch endet, daher behandeln Sie `final`, nicht ein nicht-leeres Delta, als das End-of-Message-Signal. In Agent SDK und `claude -p` Läufen trägt der einzelne Aufruf die gesamte Nachricht |
1596 1586
1597| Feld | Beschreibung |1587| Feld | Beschreibung |
1598| :- | :- |1588| :- | :- |
1599| `displayContent` | Text, der anstelle des Delta angezeigt wird. Weglassen, um das Original anzuzeigen |1589| `displayContent` | Text, der an Stelle des Delta angezeigt wird. Weglassen, um das Original anzuzeigen |
1600 1590
1601MessageDisplay-Hooks haben keine Entscheidungskontrolle. Sie können die Nachricht nicht blockieren oder ändern, was im Transkript gespeichert oder an Claude gesendet wird. Claude Code handelt `displayContent` aus ihrer JSON-Ausgabe und verwirft `systemMessage` und `continue`.1591MessageDisplay-Hooks haben keine Entscheidungskontrolle. Sie können die Nachricht nicht blockieren oder ändern, was im Transkript gespeichert oder an Claude gesendet wird. Claude Code handelt `displayContent` aus ihrer JSON-Ausgabe und verwirft `systemMessage` und `continue`.
1602 1592
1682 PreToolUse1672 PreToolUse
1683</h3>1673</h3>
1684 1674
1685Wird ausgeführt, nachdem Claude Tool-Parameter erstellt hat und bevor der Tool-Aufruf verarbeitet wird. Gleicht jeden Tool-Namen außer `EndConversation` ab: integrierte Tools wie `Bash`, `PowerShell`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `Workflow`, `WebFetch`, `WebSearch`, `AskUserQuestion` und `ExitPlanMode` sowie alle [MCP-Tool-Namen](#match-mcp-tools).1675Wird ausgeführt, nachdem Claude Tool-Parameter erstellt hat und bevor der Tool-Aufruf verarbeitet wird. Gleicht jeden Tool-Namen außer `EndConversation` ab: integrierte Tools wie `Bash`, `PowerShell`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `Workflow`, `WebFetch`, `WebSearch`, `AskUserQuestion` und `ExitPlanMode`, und alle [MCP-Tool-Namen](#match-mcp-tools).
1686 1676
1687Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, wer sie schreibt, verwenden Sie stattdessen [FileChanged](#filechanged). Im Gegensatz zu PreToolUse führt Claude Code FileChanged-Hooks nach der Änderung aus, und sie haben keine Entscheidungskontrolle, daher können sie den Schreibvorgang nicht blockieren.1677Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, wer sie schreibt, verwenden Sie stattdessen [FileChanged](#filechanged). Im Gegensatz zu PreToolUse führt Claude Code FileChanged-Hooks nach der Änderung aus, und sie haben keine Entscheidungskontrolle, daher können sie den Schreibvorgang nicht blockieren.
1688 1678
1689<Warning>1679<Warning>
1690 PreToolUse wird nur ausgeführt, wenn Claude ein Tool aufruft. Dateien, die Sie [mit `@` in Ihrer Eingabeaufforderung referenzieren](/docs/de/common-workflows#reference-files-and-directories), werden hinzugefügt, ohne dass ein Tool-Aufruf erfolgt: Claude Code fügt ihren Inhalt beim Erstellen der Eingabeaufforderung ein, daher wird kein PreToolUse-Hook für sie ausgeführt, einschließlich Hooks, die `Read` abgleichen. Um bestimmte Pfade von `@` Referenzen zu blockieren, verwenden Sie stattdessen eine [`Read` Ablehnungsregel](/docs/de/permissions#read-and-edit).1680 PreToolUse wird nur ausgeführt, wenn Claude ein Tool aufruft. Dateien, die Sie [mit `@` in Ihrer Eingabeaufforderung referenzieren](/docs/de/common-workflows#reference-files-and-directories), werden ohne Tool-Aufruf hinzugefügt: Claude Code fügt ihren Inhalt beim Erstellen der Eingabeaufforderung ein, daher wird kein PreToolUse-Hook ausgeführt, einschließlich Hooks, die `Read` abgleichen. Um bestimmte Pfade von `@` Referenzen zu blockieren, verwenden Sie stattdessen eine [`Read` Ablehnungsregel](/docs/de/permissions#read-and-edit).
1691 1681
1692 PreToolUse wird auch nicht für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgeführt.1682 PreToolUse wird auch nicht für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgeführt.
1693</Warning>1683</Warning>
1702 1692
1703Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PreToolUse-Hooks `tool_name`, `tool_input` und `tool_use_id`.1693Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PreToolUse-Hooks `tool_name`, `tool_input` und `tool_use_id`.
1704 1694
1705Für ein [MCP-Tool](#match-mcp-tools) trägt die Eingabe auch `mcp_server`, ein Objekt mit dem Namen des Servers und einer `source`, die angibt, woher die Definition des Servers stammt. Die `source` Werte umfassen `plugin`, `sdk` und Konfigurationsbereiche wie `user` und `project`. [`McpServerProvenance`](/docs/de/agent-sdk/typescript#mcpserverprovenance) in der Agent SDK Referenz listet sie alle auf und sagt, wie man eine behandelt, die man nicht erkennt. Treffen Sie Vertrauensentscheidungen basierend auf `source` statt auf `name` oder dem `mcp__<server>__` Tool-Namen-Präfix. Das `mcp_server` Feld erfordert Claude Code v2.1.274 oder später.1695Für ein [MCP-Tool](#match-mcp-tools) trägt die Eingabe auch `mcp_server`, ein Objekt mit dem `name` des Servers und einer `source`, die angibt, woher die Definition des Servers kam. Die `source` Werte umfassen `plugin`, `sdk` und Konfigurationsbereiche wie `user` und `project`. [`McpServerProvenance`](/docs/de/agent-sdk/typescript#mcpserverprovenance) in der Agent SDK Referenz listet sie alle auf und sagt, wie man eine behandelt, die man nicht erkennt. Basieren Sie Vertrauensentscheidungen auf `source` statt auf `name` oder dem `mcp__<server>__` Tool-Namen-Präfix. Das `mcp_server` Feld erfordert Claude Code v2.1.274 oder später.
1706 1696
1707Für die Datei-Tools `Write`, `Edit` und `Read` ist `tool_input.file_path` immer absolut:1697Für die Datei-Tools `Write`, `Edit` und `Read` ist `tool_input.file_path` immer absolut:
1708 1698
1709* Claude Code erweitert `~` und relative Pfade, bevor Hooks ausgeführt werden, daher kann ein Hook, der auf Pfaden abgleicht, nicht durch `~` oder eine relative Schreibweise des gleichen Pfads umgangen werden1699* Claude Code erweitert `~` und relative Pfade, bevor Hooks ausgeführt werden, daher kann ein Hook, der auf Pfade abgleicht, nicht durch `~` oder eine relative Schreibweise des gleichen Pfads umgangen werden
1710* Unter Windows kommt der Pfad mit Backslash-Trennzeichen an, auch wenn Ihr Hook unter Git Bash läuft, wo `$PWD` wie `/c/project` aussieht1700* Unter Windows kommt der Pfad mit Backslash-Trennzeichen an, auch wenn Ihr Hook unter Git Bash läuft, wo `$PWD` wie `/c/project` aussieht
1711* Ein Vergleich mit Schrägstrichen, wie eine `/src/` Überprüfung, gleicht nie einen Backslash-Pfad ab, und der Tool-Aufruf wird fortgesetzt, als hätte der Hook nichts zu blockieren1701* Ein Vergleich mit Schrägstrichen, wie eine `/src/` Überprüfung, gleicht nie einen Backslash-Pfad ab, und der Tool-Aufruf wird fortgesetzt, als hätte der Hook nichts zu blockieren
1712* Normalisieren Sie Trennzeichen vor dem Vergleich: `FILE_PATH="${FILE_PATH//\\//}"` in Bash oder `file_path.replace("\\", "/")` in Python, dann gleichen Sie ein Pfad-Segment wie `/src/` ab, anstatt mit `^` zu verankern, da der Pfad absolut ist1702* Normalisieren Sie Trennzeichen vor dem Vergleich: `FILE_PATH="${FILE_PATH//\\//}"` in Bash oder `file_path.replace("\\", "/")` in Python, dann gleichen Sie ein Pfad-Segment wie `/src/` ab, anstatt mit `^` zu verankern, da der Pfad absolut ist
1747Ihr [PostToolUse-Hook](#posttooluse) empfängt dann die geänderten Dateien in `tool_response.bashEditDiff`. Die Liste deckt ab, was sich im Repository geändert hat, während der Befehl lief. Dateien, die Git ignoriert, und Dateien in Submodulen werden nicht aufgelistet. Erfordert Claude Code v2.1.269 oder später.1737Ihr [PostToolUse-Hook](#posttooluse) empfängt dann die geänderten Dateien in `tool_response.bashEditDiff`. Die Liste deckt ab, was sich im Repository geändert hat, während der Befehl lief. Dateien, die Git ignoriert, und Dateien in Submodulen werden nicht aufgelistet. Erfordert Claude Code v2.1.269 oder später.
1748 1738
1749<Note>1739<Note>
1750 Die Liste ist Best-Effort und in öffentlicher Beta. Claude Code kann eine Änderung verpassen, eine Datei einschließen, die ein anderer Prozess gleichzeitig geändert hat, oder bei seinen Größenlimits stoppen. Die Feldform kann sich ändern. Verwenden Sie die Liste, um zu finden, was zu überprüfen ist, nicht um eine Richtlinie durchzusetzen.1740 Die Liste ist Best-Effort und in öffentlicher Beta. Claude Code kann eine Änderung verpassen, eine Datei einbeziehen, die ein anderer Prozess zur gleichen Zeit geändert hat, oder bei seinen Größenlimits stoppen. Die Feldform kann sich ändern. Verwenden Sie die Liste, um zu finden, was zu überprüfen ist, nicht um eine Richtlinie durchzusetzen.
1751</Note>1741</Note>
1752 1742
1753`changedFiles` und `files` listen auf, was der Befehl geändert hat; die verbleibenden Felder sagen, wie vollständig und wie zuverlässig diese Liste ist.1743`changedFiles` und `files` listen auf, was der Befehl geändert hat; die verbleibenden Felder sagen, wie vollständig und wie zuverlässig diese Liste ist.
1759| `moreFiles` | number | `2` | Anzahl der geänderten Dateien ohne Diff in `files` |1749| `moreFiles` | number | `2` | Anzahl der geänderten Dateien ohne Diff in `files` |
1760| `unavailable` | boolean | `true` | Gesetzt, wenn der Diff unvollständig ist oder nicht genommen werden konnte |1750| `unavailable` | boolean | `true` | Gesetzt, wenn der Diff unvollständig ist oder nicht genommen werden konnte |
1761| `skipped` | boolean | `true` | Gesetzt für einen Git-Befehl, der den Arbeitsbaum bewegt, wie `git checkout` oder `git stash`, daher nimmt Claude Code keinen Diff |1751| `skipped` | boolean | `true` | Gesetzt für einen Git-Befehl, der den Arbeitsbaum bewegt, wie `git checkout` oder `git stash`, daher nimmt Claude Code keinen Diff |
1762| `shared` | boolean | `true` | Gesetzt, wenn ein anderer Bash-Tool-Aufruf, wie der eines Subagenten, im gleichen Repository zur gleichen Zeit lief, daher können einige aufgelistete Änderungen von diesem Befehl sein |1752| `shared` | boolean | `true` | Gesetzt, wenn ein anderer Bash-Tool-Aufruf, wie der eines Subagenten, zur gleichen Zeit im gleichen Repository lief, daher können einige aufgelistete Änderungen von diesem Befehl sein |
1763 1753
1764<a id="powershell" />1754<a id="powershell" />
1765 1755
1767 PowerShell1757 PowerShell
1768</h5>1758</h5>
1769 1759
1770Führt PowerShell-Befehle aus. Siehe das [PowerShell-Tool](/docs/de/tools-reference#powershell-tool) für Verfügbarkeit nach Plattform.1760Führt PowerShell-Befehle aus. Siehe das [PowerShell-Tool](/docs/de/tools-reference#powershell-tool) für die Verfügbarkeit nach Plattform.
1771 1761
1772Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:1762Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:
1773 1763
1780 1770
1781Gleichen Sie `Bash|PowerShell` in Hooks ab, die Shell-Befehle überprüfen, damit sie beide Tools abdecken:1771Gleichen Sie `Bash|PowerShell` in Hooks ab, die Shell-Befehle überprüfen, damit sie beide Tools abdecken:
1782 1772
1783* Unter Windows, überall wo das PowerShell-Tool aktiviert ist, behandelt Claude PowerShell als die primäre Shell und leitet Shell-Befehle durch sie.1773* Unter Windows, überall dort, wo das PowerShell-Tool aktiviert ist, behandelt Claude PowerShell als die primäre Shell und leitet Shell-Befehle durch sie.
1784* Unter Windows ohne Git Bash ist das Tool automatisch aktiviert und Claude Code registriert das Bash-Tool überhaupt nicht.1774* Unter Windows ohne Git Bash ist das Tool automatisch aktiviert und Claude Code registriert das Bash-Tool überhaupt nicht.
1785* Ein Hook, der nur `Bash` abgleicht, wird dort nie ausgeführt.1775* Ein Hook, der nur `Bash` abgleicht, wird dort nie ausgeführt.
1786 1776
1828 1818
1829| Feld | Typ | Beispiel | Beschreibung |1819| Feld | Typ | Beispiel | Beschreibung |
1830| :- | :- | :- | :- |1820| :- | :- | :- | :- |
1831| `pattern` | string | `"**/*.ts"` | Glob-Muster zum Abgleichen von Dateien |1821| `pattern` | string | `"**/*.ts"` | Glob-Muster zum Abgleich von Dateien |
1832| `path` | string | `"/path/to/dir"` | Optionales Verzeichnis zum Durchsuchen. Standardmäßig aktuelles Arbeitsverzeichnis |1822| `path` | string | `"/path/to/dir"` | Optionales Verzeichnis zum Durchsuchen. Standardmäßig das aktuelle Arbeitsverzeichnis |
1833 1823
1834<h5 id="grep">1824<h5 id="grep">
1835 Grep1825 Grep
1839 1829
1840| Feld | Typ | Beispiel | Beschreibung |1830| Feld | Typ | Beispiel | Beschreibung |
1841| :- | :- | :- | :- |1831| :- | :- | :- | :- |
1842| `pattern` | string | `"TODO.*fix"` | Muster für reguläre Ausdrücke zum Suchen |1832| `pattern` | string | `"TODO.*fix"` | Regex-Muster zum Suchen |
1843| `path` | string | `"/path/to/dir"` | Optionale Datei oder Verzeichnis zum Durchsuchen |1833| `path` | string | `"/path/to/dir"` | Optionale Datei oder Verzeichnis zum Durchsuchen |
1844| `glob` | string | `"*.ts"` | Optionales Glob-Muster zum Filtern von Dateien |1834| `glob` | string | `"*.ts"` | Optionales Glob-Muster zum Filtern von Dateien |
1845| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"` oder `"count"`. Standardmäßig `"files_with_matches"` |1835| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"` oder `"count"`. Standardmäßig `"files_with_matches"` |
1846| `-i` | boolean | `true` | Groß-/Kleinschreibung ignorieren |1836| `-i` | boolean | `true` | Suche ohne Berücksichtigung der Groß-/Kleinschreibung |
1847| `multiline` | boolean | `false` | Mehrzeilige Übereinstimmung aktivieren |1837| `multiline` | boolean | `false` | Mehrzeiliges Matching aktivieren |
1848 1838
1849<h5 id="webfetch">1839<h5 id="webfetch">
1850 WebFetch1840 WebFetch
1866| Feld | Typ | Beispiel | Beschreibung |1856| Feld | Typ | Beispiel | Beschreibung |
1867| :- | :- | :- | :- |1857| :- | :- | :- | :- |
1868| `query` | string | `"react hooks best practices"` | Suchanfrage |1858| `query` | string | `"react hooks best practices"` | Suchanfrage |
1869| `allowed_domains` | array | `["docs.example.com"]` | Optional: Nur Ergebnisse von diesen Domains einschließen |1859| `allowed_domains` | array | `["docs.example.com"]` | Optional: nur Ergebnisse von diesen Domains einbeziehen |
1870| `blocked_domains` | array | `["spam.example.com"]` | Optional: Ergebnisse von diesen Domains ausschließen |1860| `blocked_domains` | array | `["spam.example.com"]` | Optional: Ergebnisse von diesen Domains ausschließen |
1871 1861
1872<h5 id="agent">1862<h5 id="agent">
1887| Feld | Typ | Beispiel | Beschreibung |1877| Feld | Typ | Beispiel | Beschreibung |
1888| :- | :- | :- | :- |1878| :- | :- | :- | :- |
1889| `status` | string | `"completed"` | `"completed"` für Vordergrund-Subagenten, `"async_launched"` für Hintergrund-Subagenten. Ab v2.1.198 laufen Subagenten standardmäßig im Hintergrund, daher erzeugt ein weggelassenes `run_in_background` auch `"async_launched"` |1879| `status` | string | `"completed"` | `"completed"` für Vordergrund-Subagenten, `"async_launched"` für Hintergrund-Subagenten. Ab v2.1.198 laufen Subagenten standardmäßig im Hintergrund, daher erzeugt ein weggelassenes `run_in_background` auch `"async_launched"` |
1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identifikator für den Subagenten-Lauf |1880| `agentId` | string | `"a4d2c8f1e0b3a297"` | Bezeichner für den Subagenten-Lauf |
1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Die finalen Textblöcke des Subagenten oder, für einen Subagenten, dessen Bericht durch `SubagentHandback` geht, eine kurze Notiz über diesen Handback an ihrer Stelle |1881| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Die finalen Textblöcke des Subagenten oder, für einen Subagenten, dessen Bericht durch `SubagentHandback` geht, eine kurze Notiz über diesen Handback an ihrer Stelle |
1892| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modell, auf dem der Subagent gestartet wurde, das sich vom angeforderten Modell unterscheiden kann |1882| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modell, auf dem der Subagent gestartet wurde, das sich vom angeforderten Modell unterscheiden kann |
1893| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | Verwendete Modelle in Reihenfolge, mit aufeinanderfolgenden Wiederholungen zusammengefasst; nur gesetzt, wenn das Modell während des Laufs gewechselt wurde. Erfordert Claude Code v2.1.212 oder später |1883| `modelsUsed` | array | `["claude-sonnet-4-5", "claude-haiku-4-5"]` | Verwendete Modelle in Reihenfolge, mit aufeinanderfolgenden Wiederholungen zusammengefasst; nur gesetzt, wenn das Modell während des Laufs gewechselt wurde. Erfordert Claude Code v2.1.212 oder später |
1894| `totalTokens` | number | `12450` | Token-Anzahl aus der letzten API-Anfrage des Subagenten: Eingabe-, Ausgabe- und Cache-Tokens kombiniert. Dies ist keine Gesamtsumme über den ganzen Lauf |1884| `totalTokens` | number | `12450` | Token-Anzahl aus der letzten API-Anfrage des Subagenten: Eingabe-, Cache-Lese- und Cache-Erstellungs- und Ausgabe-Token kombiniert. Dies ist keine Gesamtsumme über den ganzen Lauf |
1895| `totalDurationMs` | number | `48211` | Wanduhr-Dauer des Subagenten-Laufs |1885| `totalDurationMs` | number | `48211` | Wanduhr-Dauer des Subagenten-Laufs |
1896| `totalToolUseCount` | number | `7` | Anzahl der Tool-Aufrufe, die der Subagent gemacht hat |1886| `totalToolUseCount` | number | `7` | Anzahl der Tool-Aufrufe, die der Subagent gemacht hat |
1897| `usage` | object | `{"input_tokens": 8320, ...}` | Pro-Typ Token-Aufschlüsselung der letzten API-Anfrage: `input_tokens`, `output_tokens`, `cache_creation_input_tokens`, `cache_read_input_tokens` |1887| `usage` | object | `{"input_tokens": 8320, ...}` | Pro-Typ Token-Aufschlüsselung der letzten API-Anfrage: `input_tokens`, `output_tokens`, `cache_creation_input_tokens`, `cache_read_input_tokens` |
1900 1890
1901Für Hintergrund-Subagenten gibt das Tool zurück, wenn die Aufgabe in den Hintergrund geht, daher trägt `tool_response` keine Nutzungsfelder: Ein Hintergrund-Start gibt sofort zurück, und eine Vordergrund-Aufgabe, die Claude Code während des Laufs in den Hintergrund verschiebt, gibt bei diesem Übergang zurück. Es hat `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile` und `resolvedModel`.1891Für Hintergrund-Subagenten gibt das Tool zurück, wenn die Aufgabe in den Hintergrund geht, daher trägt `tool_response` keine Nutzungsfelder: Ein Hintergrund-Start gibt sofort zurück, und eine Vordergrund-Aufgabe, die Claude Code während des Laufs in den Hintergrund verschiebt, gibt bei diesem Übergang zurück. Es hat `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile` und `resolvedModel`.
1902 1892
1903Bei einem `completed` Ergebnis benennt `resolvedModel` das Modell, auf dem der Subagent gestartet wurde, das sich vom `model` Wert in `tool_input` unterscheiden kann, wie wenn `availableModels` oder ein anderer Override gilt. Bei einem `async_launched` Ergebnis benennt `resolvedModel` das Modell in Gebrauch, wenn der Agent in den Hintergrund ging, daher wird ein Wechsel, der vor dem Hintergrund-Gehen stattfand, dort widergespiegelt. `modelsUsed` und das Hintergrund-Zeit-`resolvedModel` Verhalten erfordern Claude Code v2.1.212 oder später.1893Bei einem `completed` Ergebnis benennt `resolvedModel` das Modell, auf dem der Subagent gestartet wurde, das sich vom `model` Wert in `tool_input` unterscheiden kann, wie wenn `availableModels` oder ein anderes Override gilt. Bei einem `async_launched` Ergebnis benennt `resolvedModel` das Modell in Gebrauch, wenn der Agent in den Hintergrund ging, daher wird ein Wechsel, der vor dem Hintergrund-Gehen stattfand, dort widergespiegelt. `modelsUsed` und das Hintergrund-Gehen-Zeit `resolvedModel` Verhalten erfordern Claude Code v2.1.212 oder später.
1904 1894
1905<a id="askuserquestion" />1895<a id="askuserquestion" />
1906 1896
1912 1902
1913| Feld | Typ | Beispiel | Beschreibung |1903| Feld | Typ | Beispiel | Beschreibung |
1914| :- | :- | :- | :- |1904| :- | :- | :- | :- |
1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Zu stellende Fragen, jeweils mit einer `question` Zeichenkette, kurzem `header`, `options` Array und optionalem `multiSelect` Flag |1905| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Zu präsentierende Fragen, jeweils mit einer `question` Zeichenkette, kurzem `header`, `options` Array und optionalem `multiSelect` Flag |
1916| `answers` | object | `{"Which framework?": "React"}` | Optional. Ordnet Fragentext der ausgewählten Optionsbeschriftung zu. Multi-Select-Antworten verbinden Beschriftungen mit Kommas. Claude setzt dieses Feld nicht; liefern Sie es über `updatedInput`, um programmatisch zu antworten |1906| `answers` | object | `{"Which framework?": "React"}` | Optional. Ordnet Fragentext der ausgewählten Optionsbeschriftung zu. Multi-Select-Antworten verbinden Beschriftungen mit Kommas. Claude setzt dieses Feld nicht; liefern Sie es über `updatedInput`, um programmatisch zu antworten |
1917 1907
1918<h5 id="exitplanmode">1908<h5 id="exitplanmode">
1919 ExitPlanMode1909 ExitPlanMode
1920</h5>1910</h5>
1921 1911
1922Präsentiert einen Plan und fragt den Benutzer, ihn zu genehmigen, bevor Claude den [Plan-Modus](/docs/de/permission-modes#analyze-before-you-edit-with-plan-mode) verlässt. Claude schreibt den Plan vor dem Aufrufen des Tools in eine Datei auf der Festplatte, daher ist die wörtliche `tool_input` vom Modell typischerweise leer. Claude Code injiziert den Plan-Inhalt und Dateipfad, bevor die Eingabe an Hooks übergeben wird.1912Präsentiert einen Plan und fragt den Benutzer, ihn zu genehmigen, bevor Claude den [Plan-Modus](/docs/de/permission-modes#analyze-before-you-edit-with-plan-mode) verlässt. Claude schreibt den Plan vor dem Aufruf des Tools in eine Datei auf der Festplatte, daher ist die wörtliche `tool_input` vom Modell typischerweise leer. Claude Code injiziert den Plan-Inhalt und Dateipfad, bevor die Eingabe an Hooks übergeben wird.
1923 1913
1924| Feld | Typ | Beispiel | Beschreibung |1914| Feld | Typ | Beispiel | Beschreibung |
1925| :- | :- | :- | :- |1915| :- | :- | :- | :- |
1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Plan-Inhalt in Markdown. Injiziert aus der Plan-Datei auf der Festplatte |1916| `plan` | string | `"## Refactor auth\n1. Extract..."` | Plan-Inhalt in Markdown. Injiziert aus der Plan-Datei auf der Festplatte |
1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Pfad zur Plan-Datei. Injiziert |1917| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Pfad zur Plan-Datei. Injiziert |
1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Veraltet. Claude Code akzeptiert das Feld, ignoriert es aber. Vor v2.1.205 trug es eingabeaufforderungsbasierte Berechtigungen, die Claude anforderte, um den Plan zu implementieren |1918| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Veraltet. Claude Code akzeptiert das Feld, ignoriert es aber. Vor v2.1.205 trug es prompt-basierte Berechtigungen, die Claude anforderte, um den Plan zu implementieren |
1929 1919
1930In `PostToolUse` ist `tool_response` ein Objekt mit `plan` und `filePath` Feldern, die den genehmigten Plan enthalten, plus interne Status-Flags. Lesen Sie `tool_response.plan` für den Plan-Inhalt, anstatt die Datei von der Festplatte erneut zu lesen.1920In `PostToolUse` ist `tool_response` ein Objekt mit `plan` und `filePath` Feldern, die den genehmigten Plan enthalten, plus interne Status-Flags. Lesen Sie `tool_response.plan` für den Plan-Inhalt, anstatt die Datei von der Festplatte erneut zu lesen.
1931 1921
1933 PreToolUse-Entscheidungskontrolle1923 PreToolUse-Entscheidungskontrolle
1934</h4>1924</h4>
1935 1925
1936`PreToolUse` Hooks können steuern, ob ein Tool-Aufruf fortgesetzt wird. Im Gegensatz zu anderen Hooks, die ein Top-Level-`decision` Feld verwenden, gibt PreToolUse seine Entscheidung in einem `hookSpecificOutput` Objekt zurück. Dies gibt ihm reichere Kontrolle: vier Ergebnisse (erlauben, verweigern, fragen oder aufschieben) plus die Möglichkeit, Tool-Eingabe vor der Ausführung zu ändern.1926`PreToolUse` Hooks können steuern, ob ein Tool-Aufruf fortgesetzt wird. Im Gegensatz zu anderen Hooks, die ein Top-Level `decision` Feld verwenden, gibt PreToolUse seine Entscheidung in einem `hookSpecificOutput` Objekt zurück. Dies gibt ihm reichere Kontrolle: vier Ergebnisse (erlauben, verweigern, fragen oder aufschieben) plus die Möglichkeit, Tool-Eingabe vor der Ausführung zu ändern.
1937 1927
1938| Feld | Beschreibung |1928| Feld | Beschreibung |
1939| :- | :- |1929| :- | :- |
1940| `permissionDecision` | `"allow"` überspringt die Berechtigungsaufforderung, außer für die [Aktionen, die kein Modus automatisch genehmigt](/docs/de/permission-modes#actions-no-mode-auto-approves) und für `AskUserQuestion` und `ExitPlanMode`, die [`updatedInput` gepaart damit benötigen](#allow-with-updatedinput). `"deny"` verhindert den Tool-Aufruf. `"ask"` fordert den Benutzer zur Bestätigung auf. `"defer"` beendet sich elegant, damit das Tool später fortgesetzt werden kann. [Ablehnungs- und Frageregel](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, unabhängig davon, was der Hook zurückgibt |1930| `permissionDecision` | `"allow"` überspringt die Berechtigungsaufforderung, außer für die [Aktionen, die kein Modus automatisch genehmigt](/docs/de/permission-modes#actions-no-mode-auto-approves) und für `AskUserQuestion` und `ExitPlanMode`, die [`updatedInput` gepaart damit benötigen](#allow-with-updatedinput). `"deny"` verhindert den Tool-Aufruf. `"ask"` fordert den Benutzer zur Bestätigung auf. `"defer"` beendet sich elegant, damit das Tool später fortgesetzt werden kann. [Ablehnungs- und Frage-Regeln](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, unabhängig davon, was der Hook zurückgibt |
1941| `permissionDecisionReason` | Für `"allow"` und `"ask"`, dem Benutzer angezeigt, aber nicht Claude. Für `"deny"`, Claude angezeigt. Für `"defer"`, ignoriert |1931| `permissionDecisionReason` | Für `"ask"`, dem Benutzer angezeigt, aber nicht Claude. Für `"deny"`, Claude angezeigt. Für `"allow"` und `"defer"`, nur ins [Debug-Protokoll](#debug-hooks) geschrieben |
1942| `updatedInput` | Ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher schließen Sie unveränderte Felder neben geänderten ein. Claude Code wertet Berechtigungsregeln und die [Auto-Background-Berechtigung](/docs/de/tools-reference#background-commands) eines Bash-Befehls gegen die Eingabe aus, die Ihr Hook zurückgibt, nicht die Eingabe, die Claude gesendet hat. Kombinieren Sie mit `"allow"`, um automatisch zu genehmigen, oder mit `"ask"`, um die geänderte Eingabe dem Benutzer zu zeigen. Für `"defer"`, ignoriert |1932| `updatedInput` | Ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher beziehen Sie unveränderte Felder neben geänderten ein. Claude Code wertet Berechtigungsregeln und die [Auto-Hintergrund-Berechtigung](/docs/de/tools-reference#background-commands) eines Bash-Befehls gegen die Eingabe aus, die Ihr Hook zurückgibt, nicht die Eingabe, die Claude gesendet hat. Kombinieren Sie mit `"allow"`, um automatisch zu genehmigen, oder `"ask"`, um die geänderte Eingabe dem Benutzer zu zeigen. Für `"defer"`, ignoriert |
1943| `additionalContext` | String, der zu Claudes Kontext neben dem Tool-Ergebnis hinzugefügt wird. Ignoriert, wenn `permissionDecision` `"defer"` ist. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |1933| `additionalContext` | String, der zu Claudes Kontext neben dem Tool-Ergebnis hinzugefügt wird. Ignoriert, wenn `permissionDecision` `"defer"` ist. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
1944 1934
1945Wenn mehrere PreToolUse-Hooks unterschiedliche Entscheidungen zurückgeben, ist die Priorität `deny` > `defer` > `ask` > `allow`.1935Wenn mehrere PreToolUse-Hooks unterschiedliche Entscheidungen zurückgeben, ist die Priorität `deny` > `defer` > `ask` > `allow`.
1946 1936
1947Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `"deny"` weitergeleitet: Claude sieht die stderr-Nachricht als Ablehnungsgrund.1937Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `"deny"` weitergeleitet: Claude sieht die stderr-Nachricht als Ablehnungsgrund.
1948 1938
1949Wenn ein Hook `"ask"` zurückgibt, enthält die dem Benutzer angezeigte Berechtigungsaufforderung ein Label, das angibt, woher der Hook stammt: `[settings]` für einen Hook aus einer beliebigen Einstellungsdatei oder aus Agent-Frontmatter, `[plugin:<name>]` für einen Hook eines Plugins oder `[skill]` für einen Hook aus Skill-Frontmatter. Dies hilft Benutzern zu verstehen, welche Konfigurationsquelle eine Bestätigung anfordert.1939Wenn ein Hook `"ask"` zurückgibt, enthält die dem Benutzer angezeigte Berechtigungsaufforderung ein Label, das angibt, woher der Hook kam: `[settings]` für einen Hook aus einer beliebigen Einstellungsdatei oder Agent-Frontmatter, `[plugin:<name>]` für einen Plugin-Hook oder `[skill]` für einen Hook aus Skill-Frontmatter. Dies hilft Benutzern zu verstehen, welche Konfigurationsquelle Bestätigung anfordert.
1950 1940
1951Ein Hook-`"ask"` erzwingt auch eine Berechtigungsaufforderung im [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode): Der Klassifizierer kann den Tool-Aufruf immer noch verweigern, aber er kann den Aufruf nicht stillschweigend genehmigen. Vor v2.1.211 konnte der Klassifizierer einen Bash-Befehl, der außerhalb der [Sandbox](/docs/de/sandboxing) läuft, ohne die Aufforderung zu zeigen, die der Hook anforderte, genehmigen; der Klassifizierer wendete immer noch seine eigenen Sicherheitsregeln auf diesen Befehl an, und ein Hook `"deny"` wurde immer berücksichtigt.1941Ein Hook `"ask"` erzwingt auch eine Berechtigungsaufforderung im [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode): Der Klassifizierer kann den Tool-Aufruf immer noch verweigern, aber er kann den Aufruf nicht stillschweigend genehmigen. Vor v2.1.211 konnte der Klassifizierer einen Bash-Befehl, der außerhalb der [Sandbox](/docs/de/sandboxing) läuft, ohne die Aufforderung zu zeigen, die der Hook anforderte, genehmigen; der Klassifizierer wendete immer noch seine eigenen Sicherheitsregeln auf diesen Befehl an, und ein Hook `"deny"` wurde immer geehrt.
1952 1942
1953```json theme={null}1943```json theme={null}
1954{1944{
1966 1956
1967<span id="allow-with-updatedinput" />1957<span id="allow-with-updatedinput" />
1968 1958
1969Im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag bietet Claude Code `AskUserQuestion` und `ExitPlanMode` nur an, wenn der Lauf einen [Berechtigungshost](/docs/de/headless#turn-off-permission-prompts-in-unattended-runs) hat, um die Aufforderung zu empfangen, wie einen Agent SDK `canUseTool` Callback. Diese Tools erfordern Benutzerinteraktion. Das Zurückgeben von `permissionDecision: "allow"` zusammen mit `updatedInput` erfüllt diese Anforderung: Der Hook liest die Tool-Eingabe von stdin, sammelt die Antwort über Ihre eigene Benutzeroberfläche und gibt sie in `updatedInput` zurück, damit das Tool ohne Aufforderung ausgeführt wird. Das Zurückgeben von `"allow"` allein ist nicht ausreichend für diese Tools. Für `AskUserQuestion` geben Sie das ursprüngliche `questions` Array zurück und fügen ein [`answers`](#askuserquestion) Objekt hinzu, das jede Frage des Textes der gewählten Antwort zuordnet.1959Im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag bietet Claude Code `AskUserQuestion` und `ExitPlanMode` nur an, wenn der Lauf einen [Berechtigungshost](/docs/de/headless#turn-off-permission-prompts-in-unattended-runs) hat, um die Aufforderung zu empfangen, wie einen Agent SDK `canUseTool` Callback. Diese Tools erfordern Benutzerinteraktion. Das Zurückgeben von `permissionDecision: "allow"` zusammen mit `updatedInput` erfüllt diese Anforderung: Der Hook liest die Tool-Eingabe von stdin, sammelt die Antwort über Ihre eigene UI und gibt sie in `updatedInput` zurück, damit das Tool ohne Aufforderung läuft. Das Zurückgeben von `"allow"` allein ist nicht ausreichend für diese Tools. Für `AskUserQuestion` geben Sie das ursprüngliche `questions` Array zurück und fügen Sie ein [`answers`](#askuserquestion) Objekt hinzu, das jede Frage des Textes der gewählten Antwort zuordnet.
1970 1960
1971Ab v2.1.199 ist ein MCP-Tool, dessen Server es mit [`_meta["anthropic/requiresUserInteraction"]`](/docs/de/mcp#require-approval-for-a-specific-tool) markiert, strenger: Ein Hook kann seine Genehmigungsaufforderung nicht mit `"allow"` überspringen, mit oder ohne `updatedInput`, da Claude Code nicht bestätigen kann, dass der Hook die Interaktion sammelte, die das Tool benötigt.1961Ab v2.1.199 ist ein MCP-Tool, dessen Server es mit [`_meta["anthropic/requiresUserInteraction"]`](/docs/de/mcp#require-approval-for-a-specific-tool) markiert, strenger: Ein Hook kann seine Genehmigungsaufforderung nicht mit `"allow"` überspringen, mit oder ohne `updatedInput`, da Claude Code nicht bestätigen kann, dass der Hook die Interaktion sammelte, die das Tool benötigt.
1972 1962
1973<Note>1963<Note>
1974 PreToolUse verwendete zuvor Top-Level-`decision` und `reason` Felder, aber diese sind für dieses Ereignis veraltet. Verwenden Sie stattdessen `hookSpecificOutput.permissionDecision` und `hookSpecificOutput.permissionDecisionReason`. Die veralteten Werte `"approve"` und `"block"` ordnen sich `"allow"` und `"deny"` zu. Andere Ereignisse wie PostToolUse und Stop verwenden weiterhin Top-Level-`decision` und `reason` als ihr aktuelles Format.1964 PreToolUse verwendete zuvor Top-Level `decision` und `reason` Felder, aber diese sind für dieses Ereignis veraltet. Verwenden Sie stattdessen `hookSpecificOutput.permissionDecision` und `hookSpecificOutput.permissionDecisionReason`. Die veralteten Werte `"approve"` und `"block"` ordnen sich `"allow"` und `"deny"` zu. Andere Ereignisse wie PostToolUse und Stop verwenden weiterhin Top-Level `decision` und `reason` als ihr aktuelles Format.
1975</Note>1965</Note>
1976 1966
1977<h4 id="defer-a-tool-call-for-later">1967<h4 id="defer-a-tool-call-for-later">
1978 Einen Tool-Aufruf für später aufschieben1968 Einen Tool-Aufruf für später aufschieben
1979</h4>1969</h4>
1980 1970
1981`"defer"` ist für Integrationen, die `claude -p` als Unterprozess ausführen und seine JSON-Ausgabe lesen, wie eine Agent SDK App oder eine benutzerdefinierte Benutzeroberfläche, die auf Claude Code aufgebaut ist. Es ermöglicht diesem aufrufenden Prozess, Claude bei einem Tool-Aufruf zu pausieren, Eingabe über seine eigene Schnittstelle zu sammeln und dort fortzufahren, wo er aufgehört hat. Claude Code berücksichtigt diesen Wert nur im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag. In interaktiven Sitzungen protokolliert es eine Warnung und ignoriert das Hook-Ergebnis.1971`"defer"` ist für Integrationen, die `claude -p` als Unterprozess ausführen und seine JSON-Ausgabe lesen, wie eine Agent SDK App oder eine benutzerdefinierte UI, die auf Claude Code aufgebaut ist. Es ermöglicht diesem aufrufenden Prozess, Claude bei einem Tool-Aufruf zu pausieren, Eingabe über seine eigene Schnittstelle zu sammeln und dort fortzufahren, wo er aufgehört hat. Claude Code ehrt diesen Wert nur im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag. In interaktiven Sitzungen protokolliert es eine Warnung und ignoriert das Hook-Ergebnis.
1982 1972
1983Das `AskUserQuestion` Tool ist der typische Fall: Claude möchte den Benutzer etwas fragen, aber es gibt kein Terminal zum Antworten. Ein `-p` Lauf bietet `AskUserQuestion` nur an, wenn er einen [Berechtigungshost](/docs/de/headless#turn-off-permission-prompts-in-unattended-runs) hat, wie ein MCP-Tool, das Sie mit `--permission-prompt-tool` übergeben, daher starten Sie den Lauf mit einem. Der Roundtrip funktioniert so:1973Das `AskUserQuestion` Tool ist der typische Fall: Claude möchte den Benutzer etwas fragen, aber es gibt kein Terminal zum Antworten. Ein `-p` Lauf bietet `AskUserQuestion` nur an, wenn er einen [Berechtigungshost](/docs/de/headless#turn-off-permission-prompts-in-unattended-runs) hat, wie ein MCP-Tool, das Sie mit `--permission-prompt-tool` übergeben, daher starten Sie den Lauf mit einem. Die Rundreise funktioniert so:
1984 1974
19851. Claude ruft `AskUserQuestion` auf. Der `PreToolUse` Hook wird ausgeführt.19751. Claude ruft `AskUserQuestion` auf. Der `PreToolUse` Hook wird ausgeführt.
19862. Der Hook gibt `permissionDecision: "defer"` zurück. Das Tool wird nicht ausgeführt. Der Prozess beendet sich mit `stop_reason: "tool_deferred"` und dem ausstehenden Tool-Aufruf, der im Transkript erhalten bleibt.19762. Der Hook gibt `permissionDecision: "defer"` zurück. Das Tool wird nicht ausgeführt. Der Prozess beendet sich mit `stop_reason: "tool_deferred"` und dem ausstehenden Tool-Aufruf, der im Transkript erhalten bleibt.
19873. Der aufrufende Prozess liest `deferred_tool_use` aus dem SDK-Ergebnis, zeigt die Frage in seiner eigenen Benutzeroberfläche an und wartet auf eine Antwort.19773. Der aufrufende Prozess liest `deferred_tool_use` aus dem SDK-Ergebnis, zeigt die Frage in seiner eigenen UI an und wartet auf eine Antwort.
19884. Der aufrufende Prozess führt `claude -p --resume <session-id>` mit dem gleichen Berechtigungshost aus. Der gleiche Tool-Aufruf wird `PreToolUse` erneut ausgeführt.19784. Der aufrufende Prozess führt `claude -p --resume <session-id>` mit dem gleichen Berechtigungshost aus. Der gleiche Tool-Aufruf wird `PreToolUse` erneut ausgeführt.
19895. Der Hook gibt `permissionDecision: "allow"` mit der Antwort in `updatedInput` zurück. Das Tool wird ausgeführt und Claude setzt fort.19795. Der Hook gibt `permissionDecision: "allow"` mit der Antwort in `updatedInput` zurück. Das Tool wird ausgeführt und Claude setzt fort.
1990 1980
2004}1994}
2005```1995```
2006 1996
2007Es gibt kein Timeout oder Wiederholungslimit. Die Sitzung bleibt auf der Festplatte, bis Sie sie fortsetzen, unterliegt aber der [`cleanupPeriodDays`](/docs/de/settings-reference#cleanupperioddays) Aufbewahrungssweep, die Sitzungsdateien nach 30 Tagen standardmäßig löscht, nach den [Aufbewahrungssweep-Regeln](/docs/de/claude-directory#cleaned-up-automatically). Wenn die Antwort nicht bereit ist, wenn Sie fortsetzen, kann der Hook `"defer"` erneut zurückgeben und der Prozess beendet sich auf die gleiche Weise. Der aufrufende Prozess steuert, wann die Schleife unterbrochen wird, indem er schließlich `"allow"` oder `"deny"` vom Hook zurückgibt.1997Es gibt kein Timeout oder Wiederholungslimit. Die Sitzung bleibt auf der Festplatte, bis Sie sie fortsetzen, unterliegt der [`cleanupPeriodDays`](/docs/de/settings-reference#cleanupperioddays) Aufbewahrungssweep, die Sitzungsdateien nach 30 Tagen standardmäßig löscht, nach den [Aufbewahrungssweep-Regeln](/docs/de/claude-directory#cleaned-up-automatically). Wenn die Antwort nicht bereit ist, wenn Sie fortsetzen, kann der Hook erneut `"defer"` zurückgeben und der Prozess beendet sich auf die gleiche Weise. Der aufrufende Prozess steuert, wann die Schleife unterbrochen wird, indem er schließlich `"allow"` oder `"deny"` vom Hook zurückgibt.
2008 1998
2009`"defer"` funktioniert nur, wenn Claude einen einzelnen Tool-Aufruf im Zug macht. Wenn Claude mehrere Tool-Aufrufe gleichzeitig macht, wird `"defer"` mit einer Warnung ignoriert und das Tool wird durch den normalen Berechtigungsfluss fortgesetzt. Die Einschränkung existiert, weil Resume nur ein Tool erneut ausführen kann: Es gibt keine Möglichkeit, einen Aufruf aus einem Batch aufzuschieben, ohne die anderen ungelöst zu lassen.1999`"defer"` funktioniert nur, wenn Claude einen einzelnen Tool-Aufruf im Zug macht. Wenn Claude mehrere Tool-Aufrufe auf einmal macht, wird `"defer"` mit einer Warnung ignoriert und das Tool geht durch den normalen Berechtigungsfluss. Die Einschränkung existiert, weil Resume nur ein Tool erneut ausführen kann: Es gibt keine Möglichkeit, einen Aufruf aus einem Batch aufzuschieben, ohne die anderen ungelöst zu lassen.
2010 2000
2011Wenn das aufgeschobene Tool nicht mehr verfügbar ist, wenn Sie fortsetzen, beendet sich der Prozess mit `stop_reason: "tool_deferred_unavailable"` und `is_error: true` bevor der Hook ausgeführt wird. Dies geschieht, wenn ein MCP-Server, der das Tool bereitgestellt hat, für die fortgesetzte Sitzung nicht verbunden ist. Die `deferred_tool_use` Nutzlast ist immer noch enthalten, damit Sie identifizieren können, welches Tool fehlte.2001Wenn das aufgeschobene Tool nicht mehr verfügbar ist, wenn Sie fortsetzen, beendet sich der Prozess mit `stop_reason: "tool_deferred_unavailable"` und `is_error: true` bevor der Hook ausgeführt wird. Dies geschieht, wenn ein MCP-Server, der das Tool bereitgestellt hat, für die fortgesetzte Sitzung nicht verbunden ist. Die `deferred_tool_use` Nutzlast ist immer noch enthalten, damit Sie identifizieren können, welches Tool fehlte.
2012 2002
2013<Note>2003<Note>
2014 Um eine aufgeschobene Sitzung im Plan-Modus fortzusetzen, übergeben Sie [`--permission-prompt-tool`](/docs/de/cli-reference#cli-flags) zusammen mit `--resume`, damit Claude Code den Plan zur Genehmigung präsentieren kann. Ohne es stellt Claude Code den Plan-Modus nicht wieder her. Erfordert Claude Code v2.1.246 oder später.2004 Um eine aufgeschobene Sitzung im Plan-Modus fortzusetzen, übergeben Sie [`--permission-prompt-tool`](/docs/de/cli-reference#cli-flags) zusammen mit `--resume`, damit Claude Code den Plan zur Genehmigung präsentieren kann. Wenn Sie bestimmte andere Start-Flags übergeben, kehrt der fortgesetzte Lauf nicht zum Plan-Modus zurück; siehe [Im Plan-Modus mit `-p` fortsetzen](/docs/de/sessions#resume-in-plan-mode-with-p). Erfordert Claude Code v2.1.246 oder später.
2015 2005
2016 Wenn Sie mit `-p` fortsetzen, stellt Claude Code keinen anderen gespeicherten Berechtigungsmodus wieder her. Es startet den Lauf im Berechtigungsmodus, den ein neuer `claude -p` Lauf starten würde, daher übergeben Sie `--permission-mode` oder `--dangerously-skip-permissions` erneut, wenn die aufgeschobene Sitzung einen verwendet hat. Wenn Sie mit `claude --resume <session-id>` ohne `-p` fortsetzen, stellt Claude Code den gespeicherten Berechtigungsmodus wieder her, mit den Ausnahmen, die in [Berechtigungsmodus bei Fortsetzen](/docs/de/sessions#permission-mode-on-resume) aufgelistet sind.2006 Wenn Sie mit `-p` fortsetzen, stellt Claude Code keinen anderen gespeicherten Berechtigungsmodus wieder her. Es startet den Lauf im Berechtigungsmodus, den ein neuer `claude -p` Lauf starten würde, daher übergeben Sie `--permission-mode` oder `--dangerously-skip-permissions` erneut, wenn die aufgeschobene Sitzung einen verwendet hat. Wenn Sie mit `claude --resume <session-id>` ohne `-p` fortsetzen, stellt Claude Code den gespeicherten Berechtigungsmodus wieder her, mit den Ausnahmen, die in [Berechtigungsmodus bei Fortsetzen](/docs/de/sessions#permission-mode-on-resume) aufgelistet sind.
2017</Note>2007</Note>
2020 PermissionRequest2010 PermissionRequest
2021</h3>2011</h3>
2022 2012
2023Wird ausgeführt, wenn Claude Code Sie um Erlaubnis bitten möchte, ein Tool zu verwenden. In Sitzungen, die keine Aufforderung anzeigen können, wie Hintergrund-Subagenten im [nicht-interaktiven Modus](/docs/de/headless), führt Claude Code diese Hooks immer noch aus, und wenn kein Hook eine Entscheidung zurückgibt, verweigert es den Tool-Aufruf.2013Wird ausgeführt, wenn Claude Code Sie um Erlaubnis zur Verwendung eines Tools bitten möchte. In Sitzungen, die keine Aufforderung anzeigen können, wie Hintergrund-Subagenten im [nicht-interaktiven Modus](/docs/de/headless), führt Claude Code diese Hooks immer noch aus, und wenn kein Hook eine Entscheidung zurückgibt, verweigert es den Tool-Aufruf.
2024Verwenden Sie [PermissionRequest-Entscheidungskontrolle](#permissionrequest-decision-control), um im Namen des Benutzers zu erlauben oder zu verweigern.2014Verwenden Sie [PermissionRequest-Entscheidungskontrolle](#permissionrequest-decision-control), um im Namen des Benutzers zu erlauben oder zu verweigern.
2025 2015
2026Verwenden Sie dieses Ereignis, wenn Sie ein Signal benötigen, in dem Moment, in dem Claude um Erlaubnis bittet, ein Tool zu verwenden. Claude Code führt einen [Notification](#notification) Hook mit dem `permission_prompt` Typ nur aus, nachdem die Aufforderung etwa sechs Sekunden gewartet hat.2016Verwenden Sie dieses Ereignis, wenn Sie ein Signal benötigen, in dem Moment, in dem Claude um Erlaubnis zur Verwendung eines Tools fragt. Claude Code führt einen [Notification](#notification) Hook mit dem `permission_prompt` Typ nur aus, nachdem die Aufforderung etwa sechs Sekunden gewartet hat.
2027 2017
2028Claude Code führt PermissionRequest-Hooks nicht für eine Sandbox-Anfrage eines Befehls aus [Netzwerkanfrage](/docs/de/sandboxing#network-isolation). Um ein Signal für diese Aufforderung zu erhalten, verwenden Sie den `permission_prompt` Benachrichtigungstyp.2018Claude Code führt PermissionRequest-Hooks nicht für eine Sandbox-Anfrage eines Befehls aus [Netzwerkanfrage](/docs/de/sandboxing#network-isolation). Um ein Signal für diese Aufforderung zu erhalten, verwenden Sie den `permission_prompt` Benachrichtigungstyp.
2029 2019
2070 2060
2071| Feld | Beschreibung |2061| Feld | Beschreibung |
2072| :- | :- |2062| :- | :- |
2073| `behavior` | `"allow"` gewährt die Berechtigung, `"deny"` verweigert sie. [Ablehnungs- und Frageregel](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, daher überschreibt ein Hook, der `"allow"` zurückgibt, keine übereinstimmende Ablehnungsregel |2063| `behavior` | `"allow"` gewährt die Berechtigung, `"deny"` verweigert sie. [Ablehnungs- und Frage-Regeln](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, daher überschreibt ein Hook, der `"allow"` zurückgibt, keine übereinstimmende Ablehnungsregel |
2074| `updatedInput` | Nur für `"allow"`: ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher schließen Sie unveränderte Felder neben geänderten ein. Die geänderte Eingabe wird erneut gegen Ablehnungs- und Frageregel ausgewertet |2064| `updatedInput` | Nur für `"allow"`: ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher beziehen Sie unveränderte Felder neben geänderten ein. Die geänderte Eingabe wird erneut gegen Ablehnungs- und Frage-Regeln ausgewertet |
2075| `updatedPermissions` | Nur für `"allow"`: Array von [Berechtigungsaktualisierungseinträgen](#permission-update-entries) zum Anwenden, wie das Hinzufügen einer Erlaubnisregel oder das Ändern des Sitzungsberechtigungsmodus |2065| `updatedPermissions` | Nur für `"allow"`: Array von [Berechtigungsaktualisierungseinträgen](#permission-update-entries) zum Anwenden, wie das Hinzufügen einer Erlaubnisregel oder das Ändern des Sitzungsberechtigungsmodus |
2076| `message` | Nur für `"deny"`: sagt Claude, warum die Berechtigung verweigert wurde |2066| `message` | Nur für `"deny"`: sagt Claude, warum die Berechtigung verweigert wurde |
2077| `interrupt` | Nur für `"deny"`: wenn `true`, stoppt Claude |2067| `interrupt` | Nur für `"deny"`: wenn `true`, stoppt Claude |
2108| `removeDirectories` | `directories`, `destination` | Entfernt Arbeitsverzeichnisse |2098| `removeDirectories` | `directories`, `destination` | Entfernt Arbeitsverzeichnisse |
2109 2099
2110<Note>2100<Note>
2111 `setMode` mit `bypassPermissions` wird nur wirksam, wenn Sie die Sitzung mit Bypass-Modus bereits verfügbar gestartet haben: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` oder `permissions.defaultMode: "bypassPermissions"` in [Benutzer-, `--settings`- oder verwalteten Einstellungen](/docs/de/settings-reference#permissions-defaultmode). Andernfalls ist die Aktualisierung ein No-Op. Die Aktualisierung ist auch ein No-Op, wenn [`permissions.disableBypassPermissionsMode`](/docs/de/permissions#managed-settings) den Modus deaktiviert oder die Sitzung im [eingeschränkten Modus](/docs/de/cli-reference#cli-flags) startet.2101 `setMode` mit `bypassPermissions` tritt nur in Kraft, wenn Sie die Sitzung mit Bypass-Modus bereits verfügbar gestartet haben: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` oder `permissions.defaultMode: "bypassPermissions"` in [Benutzer-, `--settings`- oder verwalteten Einstellungen](/docs/de/settings-reference#permissions-defaultmode). Andernfalls ist die Aktualisierung ein No-Op. Die Aktualisierung ist auch ein No-Op, wenn [`permissions.disableBypassPermissionsMode`](/docs/de/permissions#managed-settings) den Modus deaktiviert oder wenn die Sitzung im [eingeschränkten Modus](/docs/de/cli-reference#cli-flags) startet.
2112 2102
2113 `bypassPermissions` wird niemals als `defaultMode` beibehalten, unabhängig von `destination`.2103 `bypassPermissions` wird niemals als `defaultMode` beibehalten, unabhängig von `destination`.
2114</Note>2104</Note>
2122| `projectSettings` | `.claude/settings.json` |2112| `projectSettings` | `.claude/settings.json` |
2123| `userSettings` | `~/.claude/settings.json` |2113| `userSettings` | `~/.claude/settings.json` |
2124 2114
2125Ein Hook kann eines der `permission_suggestions` widerspiegeln, die er als seine eigene `updatedPermissions` Ausgabe erhalten hat.2115Ein Hook kann eines der `permission_suggestions` widerspiegeln, die er als seine eigene `updatedPermissions` Ausgabe empfangen hat.
2126 2116
2127<h3 id="posttooluse">2117<h3 id="posttooluse">
2128 PostToolUse2118 PostToolUse
2129</h3>2119</h3>
2130 2120
2131Wird sofort nach erfolgreichem Abschluss eines Tools ausgeführt.2121Wird unmittelbar nach erfolgreichem Abschluss eines Tools ausgeführt.
2132 2122
2133Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2123Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2134 2124
2135Gleichen Sie breiter ab, wenn der Tool-Name nicht der richtige Filter ist:2125Gleichen Sie breiter ab, wenn der Tool-Name nicht der richtige Filter ist:
2136 2126
2137* Um einen Hook nach jedem erfolgreichen Tool-Abschluss auszuführen, weglassen Sie den `matcher` oder setzen Sie ihn auf `"*"`. Ihr Hook kann dann selbst entdecken, was sich geändert hat, z. B. durch Ausführung von `git status --porcelain`, das auch nicht verfolgte Dateien auflistet, die `git diff` verpasst. Für Tool-Aufrufe, die fehlschlagen, fügen Sie den gleichen Hook unter [PostToolUseFailure](#posttoolusefailure) hinzu.2127* Um einen Hook nach jedem erfolgreichen Tool-Abschluss auszuführen, weglassen Sie den `matcher` oder setzen Sie ihn auf `"*"`. Ihr Hook kann dann selbst entdecken, was sich geändert hat, z. B. durch Ausführung von `git status --porcelain`, das auch nicht verfolgte Dateien auflistet, die `git diff` verpasst. Für fehlgeschlagene Tool-Aufrufe fügen Sie den gleichen Hook unter [PostToolUseFailure](#posttoolusefailure) hinzu.
2138* Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, wer sie schreibt, verwenden Sie [FileChanged](#filechanged). Claude Code führt keinen `PostToolUse` Hook aus, der `Edit|Write` abgleicht, wenn ein `Bash` Befehl oder ein Prozess außerhalb von Claude Code die gleiche Datei umschreibt.2128* Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, wer sie schreibt, verwenden Sie [FileChanged](#filechanged). Claude Code führt keinen `PostToolUse` Hook aus, der `Edit|Write` abgleicht, wenn ein `Bash` Befehl oder ein Prozess außerhalb von Claude Code die gleiche Datei umschreibt.
2139 2129
2140<h4 id="posttooluse-input">2130<h4 id="posttooluse-input">
2141 PostToolUse-Eingabe2131 PostToolUse-Eingabe
2142</h4>2132</h4>
2143 2133
2144`PostToolUse` Hooks werden ausgeführt, nachdem ein Tool bereits erfolgreich ausgeführt wurde. Die Eingabe umfasst sowohl `tool_input`, die an das Tool gesendeten Argumente, als auch `tool_response`, das Ergebnis, das es zurückgegeben hat. Das genaue Schema für beide hängt vom Tool ab. Datei-Tool-`tool_input` Pfade kommen im gleichen Format wie für [PreToolUse](#pretooluse-input) an: immer absolut, mit den nativen Trennzeichen der Plattform, daher Backslashes unter Windows. Für ein MCP-Tool trägt die Eingabe auch das [`mcp_server`](#pretooluse-input) Objekt.2134`PostToolUse` Hooks werden ausgeführt, nachdem ein Tool bereits erfolgreich ausgeführt wurde. Die Eingabe umfasst sowohl `tool_input`, die an das Tool gesendeten Argumente, als auch `tool_response`, das Ergebnis, das es zurückgegeben hat. Das genaue Schema für beide hängt vom Tool ab. Datei-Tool `tool_input` Pfade kommen im gleichen Format wie für [PreToolUse](#pretooluse-input) an: immer absolut, mit den nativen Trennzeichen der Plattform, daher Backslashes unter Windows. Für ein MCP-Tool trägt die Eingabe auch das [`mcp_server`](#pretooluse-input) Objekt.
2145 2135
2146```json theme={null}2136```json theme={null}
2147{2137{
2179| `decision` | `"block"` fügt den `reason` neben dem Tool-Ergebnis hinzu. Claude sieht immer noch die ursprüngliche Ausgabe; um sie zu ersetzen, verwenden Sie `updatedToolOutput` |2169| `decision` | `"block"` fügt den `reason` neben dem Tool-Ergebnis hinzu. Claude sieht immer noch die ursprüngliche Ausgabe; um sie zu ersetzen, verwenden Sie `updatedToolOutput` |
2180| `reason` | Erklärung, die Claude angezeigt wird, wenn `decision` `"block"` ist |2170| `reason` | Erklärung, die Claude angezeigt wird, wenn `decision` `"block"` ist |
2181| `additionalContext` | String, der zu Claudes Kontext neben dem Tool-Ergebnis hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |2171| `additionalContext` | String, der zu Claudes Kontext neben dem Tool-Ergebnis hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
2182| `classifierContext` | Kurze Notiz über das Ergebnis dieses Aufrufs für den [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) Klassifizierer statt für Claude. Siehe [Ergebnis für den Auto-Modus Klassifizierer annotieren](#annotate-a-result-for-the-auto-mode-classifier). Erfordert Claude Code v2.1.236 oder später |2172| `classifierContext` | Kurze Notiz über das Ergebnis dieses Aufrufs für den [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) Klassifizierer statt für Claude. Siehe [Ein Ergebnis für den Auto-Modus Klassifizierer annotieren](#annotate-a-result-for-the-auto-mode-classifier). Erfordert Claude Code v2.1.236 oder später |
2183| `updatedToolOutput` | Ersetzt die Ausgabe des Tools mit dem bereitgestellten Wert, bevor er an Claude gesendet wird. Der Wert muss der Ausgabeform des Tools entsprechen |2173| `updatedToolOutput` | Ersetzt die Ausgabe des Tools mit dem bereitgestellten Wert, bevor er an Claude gesendet wird. Der Wert muss die Ausgabeform des Tools abgleichen |
2184| `updatedMCPToolOutput` | Ersetzt die Ausgabe nur für [MCP-Tools](#match-mcp-tools). Bevorzugen Sie `updatedToolOutput`, das für alle Tools funktioniert |2174| `updatedMCPToolOutput` | Ersetzt die Ausgabe nur für [MCP-Tools](#match-mcp-tools). Bevorzugen Sie `updatedToolOutput`, das für alle Tools funktioniert |
2185 2175
2186Das Beispiel unten ersetzt die Ausgabe eines `Bash` Aufrufs. Der Ersatzwert entspricht der Ausgabeform des `Bash` Tools:2176Das Beispiel unten ersetzt die Ausgabe eines `Bash` Aufrufs. Der Ersatzwert gleicht die Ausgabeform des `Bash` Tools ab:
2187 2177
2188```json theme={null}2178```json theme={null}
2189{2179{
2201```2191```
2202 2192
2203<Warning>2193<Warning>
2204 `updatedToolOutput` ändert nur das, was Claude sieht. Das Tool hat bereits ausgeführt, wenn der Hook ausgeführt wird, daher haben alle geschriebenen Dateien, ausgeführten Befehle oder gesendeten Netzwerkanfragen bereits Auswirkungen. Telemetrie wie OpenTelemetry-Tool-Spans und Analyseereignisse erfassen auch die ursprüngliche Ausgabe, bevor der Hook ausgeführt wird. Um einen Tool-Aufruf zu verhindern oder zu ändern, bevor er ausgeführt wird, verwenden Sie stattdessen einen [PreToolUse](#pretooluse) Hook.2194 `updatedToolOutput` ändert nur, was Claude sieht. Das Tool hat bereits gelaufen, wenn der Hook ausgeführt wird, daher haben alle geschriebenen Dateien, ausgeführten Befehle oder gesendeten Netzwerkanfragen bereits Auswirkungen. Telemetrie wie OpenTelemetry-Tool-Spans und Analyseereignisse erfassen auch die ursprüngliche Ausgabe, bevor der Hook ausgeführt wird. Um einen Tool-Aufruf zu verhindern oder zu ändern, bevor er läuft, verwenden Sie stattdessen einen [PreToolUse](#pretooluse) Hook.
2205 2195
2206 Der Ersatzwert muss der Ausgabeform des Tools entsprechen. Integrierte Tools geben strukturierte Objekte statt einfacher Zeichenketten zurück. Beispielsweise gibt `Bash` ein Objekt mit `stdout`, `stderr`, `interrupted` und `isImage` Feldern zurück. Für integrierte Tools wird ein Wert, der nicht dem Ausgabeschema des Tools entspricht, ignoriert und die ursprüngliche Ausgabe wird verwendet. MCP-Tool-Ausgabe wird ohne Schema-Validierung durchgelassen. Das Entfernen von Fehlerdetails, die Claude benötigt, kann dazu führen, dass er bei einer falschen Annahme fortfährt.2196 Der Ersatzwert muss die Ausgabeform des Tools abgleichen. Integrierte Tools geben strukturierte Objekte statt einfacher Zeichenketten zurück. Beispielsweise gibt `Bash` ein Objekt mit `stdout`, `stderr`, `interrupted` und `isImage` Feldern zurück. Für integrierte Tools wird ein Wert, der nicht dem Ausgabeschema des Tools entspricht, ignoriert und die ursprüngliche Ausgabe wird verwendet. MCP-Tool-Ausgabe wird ohne Schema-Validierung durchgelassen. Das Entfernen von Fehlerdetails, die Claude benötigt, kann dazu führen, dass er unter einer falschen Annahme fortfährt.
2207</Warning>2197</Warning>
2208 2198
2209<h4 id="annotate-a-result-for-the-auto-mode-classifier">2199<h4 id="annotate-a-result-for-the-auto-mode-classifier">
2210 Ergebnis für den Auto-Modus Klassifizierer annotieren2200 Ein Ergebnis für den Auto-Modus Klassifizierer annotieren
2211</h4>2201</h4>
2212 2202
2213Geben Sie `classifierContext` zurück, um eine kurze Notiz über das Ergebnis des Tool-Aufrufs an den [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) Klassifizierer statt an Claude zu senden. Der Klassifizierer [empfängt niemals Tool-Ergebnisse selbst](/docs/de/permission-modes#how-the-classifier-evaluates-actions), daher ist dieses Feld die unterstützte Methode, um ihm etwas über das, was ein Aufruf zurückgegeben hat, zu sagen, bevor er spätere Aktionen überprüft. Das Feld erfordert Claude Code v2.1.236 oder später.2203Geben Sie `classifierContext` zurück, um eine kurze Notiz über das Ergebnis des Tool-Aufrufs an den [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) Klassifizierer zu senden, anstatt an Claude. Der Klassifizierer [empfängt niemals Tool-Ergebnisse selbst](/docs/de/permission-modes#how-the-classifier-evaluates-actions), daher ist dieses Feld die unterstützte Methode, um ihm etwas über das, was ein Aufruf zurückgegeben hat, zu sagen, bevor er spätere Aktionen überprüft. Das Feld erfordert Claude Code v2.1.236 oder später.
2214 2204
2215Das Beispiel unten sagt dem Klassifizierer, woher die Ausgabe einer Abfrage stammt:2205Das Beispiel unten sagt dem Klassifizierer, woher die Ausgabe einer Abfrage kam:
2216 2206
2217```json theme={null}2207```json theme={null}
2218{2208{
2225 2215
2226Wie viel Gewicht der Klassifizierer der Notiz gibt, hängt davon ab, wo Sie den Hook konfiguriert haben:2216Wie viel Gewicht der Klassifizierer der Notiz gibt, hängt davon ab, wo Sie den Hook konfiguriert haben:
2227 2217
2228* **Hooks, die in Claude Code konfiguriert sind**: Für Hooks aus Einstellungsdateien, Plugins, Skills und Agent-Frontmatter behandelt der Klassifizierer die Notiz als nicht verifizierten, von der Anwendung bereitgestellten Kontext. Die Notiz stellt niemals Benutzerabsicht fest, und wenn sie behauptet, Sie hätten etwas genehmigt oder angefordert, überprüft der Klassifizierer diese Behauptung gegen Ihre eigenen Nachrichten im Gespräch2218* **Hooks, die in Claude Code konfiguriert sind**: Für Hooks aus Einstellungsdateien, Plugins, Skills und Agent-Frontmatter behandelt der Klassifizierer die Notiz als nicht verifizierten, anwendungsbereitgestellten Kontext. Die Notiz stellt niemals Benutzerabsicht fest, und wenn sie behauptet, Sie hätten etwas genehmigt oder angefordert, überprüft der Klassifizierer diese Behauptung gegen Ihre eigenen Nachrichten in der Konversation
2229* **In-Process Agent SDK Callbacks**: Wenn eine Anwendung, die Claude Code einbettet, den Hook als [TypeScript SDK Callback](/docs/de/agent-sdk/hooks) registriert und die Notiz während der Live-Sitzung zurückgibt, kann der Klassifizierer eine Benutzeraussage, die in der Notiz weitergeleitet wird, als Benutzerabsicht gewichten. Eine solche Aussage kann eine Zustimmungsanforderung erfüllen, die der Klassifizierer von einer Nachricht akzeptieren würde, die Sie senden, aber sie hebt niemals einen Block auf, den Ihre eigene Nachricht auch nicht heben könnte. Nach einer Sitzungsfortsetzung behandelt Claude Code wiederhergestellte Notizen als nicht verifizierten Kontext. Wenn Hooks aus beiden Gruppen den gleichen Aufruf annotieren, behandelt der Klassifizierer die kombinierte Notiz als nicht verifizierten Kontext2219* **In-Process Agent SDK Callbacks**: Wenn eine Anwendung, die Claude Code einbettet, den Hook als [TypeScript SDK Callback](/docs/de/agent-sdk/hooks) registriert und die Notiz während der Live-Sitzung zurückgibt, kann der Klassifizierer eine Benutzeraussage, die in der Notiz weitergeleitet wird, als Benutzerabsicht gewichten. Eine solche Aussage kann eine Zustimmungsanforderung erfüllen, die der Klassifizierer von einer Nachricht akzeptieren würde, die Sie senden, aber sie hebt niemals einen Block auf, den Ihre eigene Nachricht auch nicht heben könnte. Nach einer Sitzungsfortsetzung behandelt Claude Code wiederhergestellte Notizen als nicht verifizierten Kontext. Wenn Hooks aus beiden Gruppen den gleichen Aufruf annotieren, behandelt der Klassifizierer die kombinierte Notiz als nicht verifizierten Kontext
2230 2220
2231Claude Code wendet diese Grenzen an, wenn die Notiz bereitgestellt wird:2221Claude Code wendet diese Grenzen an, wenn die Notiz geliefert wird:
2232 2222
2233* **Länge**: Claude Code begrenzt die Notizen für einen Tool-Aufruf auf 2.000 Zeichen und schneidet den Rest ab. Die Grenze wird über jeden Hook geteilt, der auf diesen Aufruf antwortet2223* **Länge**: Claude Code begrenzt die Notizen für einen Tool-Aufruf auf 2.000 Zeichen und schneidet den Rest ab. Die Grenze wird über jeden Hook geteilt, der auf diesen Aufruf antwortet
2234* **Nur synchrone Antworten**: Claude Code ignoriert das Feld in der Antwort eines Hooks, der [im Hintergrund ausgeführt wird](#run-hooks-in-the-background), da diese Antwort nach der Aufzeichnung des Tool-Ergebnisses ankommt2224* **Nur synchrone Antworten**: Claude Code ignoriert das Feld in der Antwort eines Hooks, der [im Hintergrund läuft](#run-hooks-in-the-background), da diese Antwort nach der Aufzeichnung des Tool-Ergebnisses ankommt
2235* **Aufrufe, die der Klassifizierer nicht aufzeichnet**: Das Transkript des Klassifizierers lässt schreibgeschützte Lookups wie Dateilesevorgänge und Suchen aus. Claude Code verwirft eine Notiz, die an einen dieser Aufrufe angehängt ist2225* **Aufrufe, die der Klassifizierer nicht aufzeichnet**: Das Transkript des Klassifizierers lässt schreibgeschützte Lookups wie Dateilesevorgänge und Suchen aus. Claude Code verwirft eine Notiz, die an einen dieser Aufrufe angehängt ist
2236* **Interaktion mit Umschreibungen**: Wenn die Notiz Ausgabe beschreibt, die Sie mit `updatedToolOutput` ersetzen, geben Sie beide Felder in der gleichen Hook-Antwort zurück. Claude Code löscht die Notiz, wenn diese Umschreibung abgelehnt wird oder eine andere Hook-Umschreibung sie ersetzt. Claude Code liefert eine Notiz, die Sie ohne Umschreibung zurückgeben, auch wenn ein anderer Hook die Ausgabe umschreibt2226* **Interaktion mit Umschreibungen**: Wenn die Notiz Ausgabe beschreibt, die Sie mit `updatedToolOutput` ersetzen, geben Sie beide Felder in der gleichen Hook-Antwort zurück. Claude Code löscht die Notiz, wenn diese Umschreibung abgelehnt wird oder eine andere Hook-Umschreibung sie ersetzt. Claude Code liefert eine Notiz, die Sie ohne Umschreibung zurückgeben, auch wenn ein anderer Hook die Ausgabe umschreibt
2237 2227
2238<Warning>2228<Warning>
2239 Der Klassifizierer liest Inhalte, die Sie in `classifierContext` einfügen, als Informationen vom Anwendungshost der Sitzung, daher kopieren Sie nicht vertrauenswürdige Tool-Ausgabe oder Text von Drittanbietern hinein. Halten Sie die Notiz auf eine kurze Aussage über diesen einen Aufruf, wie eine Tatsache über seinen Ursprung oder eine Benutzeraussage darüber; verwenden Sie das Feld nicht, um nicht verwandte Nachrichten oder einen Strom von Ereignissen zu liefern.2229 Der Klassifizierer liest Inhalte, die Sie in `classifierContext` platzieren, als Informationen vom Anwendungshost der Sitzung, daher kopieren Sie nicht unvertrauten Tool-Output oder Text von Drittanbietern hinein. Halten Sie die Notiz auf eine kurze Aussage über diesen einen Aufruf, wie eine Tatsache über seinen Ursprung oder eine Benutzeraussage darüber; verwenden Sie das Feld nicht, um unabhängige Nachrichten oder einen Strom von Ereignissen zu liefern.
2240</Warning>2230</Warning>
2241 2231
2242<h3 id="posttoolusefailure">2232<h3 id="posttoolusefailure">
2248Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2238Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2249 2239
2250<Note>2240<Note>
2251 Dieses Ereignis wird nicht für Tool-Aufrufe ausgeführt, die vor der Ausführung abgelehnt werden: Ein unbekannter Tool-Name, Eingabe, die Schema- oder Tool-spezifische Validierung fehlschlägt, oder eine Berechtigungsverweigerung. Validierungsablehnungen werden als `tool_use_error` Ergebnisse zurückgegeben und treten auf, bevor Hooks ausgeführt werden, daher werden weder `PreToolUse` noch dieses Ereignis ausgeführt. Berechtigungsverweigerungen führen `PreToolUse` aus, aber nicht dieses Ereignis; siehe [PermissionDenied](#permissiondenied).2241 Dieses Ereignis wird nicht für Tool-Aufrufe ausgeführt, die vor der Ausführung abgelehnt werden: Ein unbekannter Tool-Name, Eingabe, die Schema oder Tool-spezifische Validierung nicht besteht, oder eine Berechtigungsverweigerung. Validierungsablehnungen werden als `tool_use_error` Ergebnisse zurückgegeben und treten auf, bevor Hooks ausgeführt werden, daher werden weder `PreToolUse` noch `PostToolUseFailure` ausgeführt. Berechtigungsablehnungen führen `PreToolUse` aus, aber nicht dieses Ereignis; siehe [PermissionDenied](#permissiondenied).
2252</Note>2242</Note>
2253 2243
2254<h4 id="posttoolusefailure-input">2244<h4 id="posttoolusefailure-input">
2279| Feld | Beschreibung |2269| Feld | Beschreibung |
2280| :- | :- |2270| :- | :- |
2281| `error` | Zeichenkette, die beschreibt, was schief gelaufen ist. Das Format hängt vom Tool ab, das fehlgeschlagen ist |2271| `error` | Zeichenkette, die beschreibt, was schief gelaufen ist. Das Format hängt vom Tool ab, das fehlgeschlagen ist |
2282| `is_interrupt` | Optionaler Boolean. True, wenn der Fehler Claude Code als Abbruch erreichte, anstatt als Fehler, den das Tool meldete. Das Abbrechen eines laufenden Tools führt nicht zu diesem Hook; das Tool-Ergebnis trägt stattdessen die Abbruchmeldung |2272| `is_interrupt` | Optionaler Boolean. True, wenn der Fehler Claude Code als Abbruch erreichte, anstatt als Fehler, den das Tool meldete. Das Abbrechen eines laufenden Tools führt nicht zu diesem Hook aus; das Tool-Ergebnis trägt die Abbruchnachricht statt |
2283| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |2273| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |
2284 2274
2285Die `error` Zeichenkette ist im Allgemeinen der gleiche Text, den Claude als Ergebnis des fehlgeschlagenen Tools empfängt. Sein Format variiert je nach Tool und Fehler. Schlüsseln Sie Ihren Hook auf `tool_name`, `is_interrupt` und die erste Zeile `Exit code N`; behandeln Sie den Rest der Zeichenkette als Anzeigetext, nicht als stabiles Format.2275Die `error` Zeichenkette ist im Allgemeinen der gleiche Text, den Claude als Ergebnis des fehlgeschlagenen Tools empfängt. Sein Format variiert je nach Tool und Fehler. Schlüsseln Sie Ihren Hook auf `tool_name`, `is_interrupt` und die erste Zeile `Exit code N`; behandeln Sie den Rest der Zeichenkette als Anzeigetext, nicht als stabiles Format.
2286 2276
2287* Für Bash und PowerShell erzeugt ein Befehl, der lief und beendet wurde, eine erste Zeile `Exit code N`, dann jede Ausgabe, die der Befehl als einen Block mit stdout und stderr vermischt erzeugte2277* Für Bash und PowerShell erzeugt ein Befehl, der lief und beendet wurde, eine erste Zeile `Exit code N`, dann jede Ausgabe, die der Befehl als einen Block mit stdout und stderr vermischt erzeugte
2288* Eine Nutzlast kann auch eine bloße Fehlermeldung ohne Exit-Code-Zeile tragen, wenn Claude Code den Shell-Prozess selbst nicht starten konnte2278* Eine Nutzlast kann auch eine bloße Fehlernachricht ohne Exit-Code-Zeile tragen, wenn Claude Code den Shell-Prozess selbst nicht starten konnte
2289* Claude Code schneidet lange Zeichenketten in der Mitte um einen `... [N characters truncated] ...` Marker ab und kann Zeilen von sich selbst einfügen, wie `Command timed out after 2m 0s`2279* Claude Code schneidet lange Zeichenketten in der Mitte um einen `... [N characters truncated] ...` Marker ab und kann Zeilen von sich selbst einfügen, wie `Command timed out after 2m 0s`
2290 2280
2291<h4 id="posttoolusefailure-decision-control">2281<h4 id="posttoolusefailure-decision-control">
2311 PostToolBatch2301 PostToolBatch
2312</h3>2302</h3>
2313 2303
2314Wird einmal ausgeführt, nachdem jeder Tool-Aufruf in einem Batch aufgelöst wurde, bevor Claude Code die nächste Anfrage an das Modell sendet. `PostToolUse` wird einmal pro Tool ausgeführt, was bedeutet, dass es gleichzeitig ausgeführt wird, wenn Claude parallele Tool-Aufrufe macht. `PostToolBatch` wird genau einmal mit dem vollständigen Batch ausgeführt, daher ist es der richtige Ort, um Kontext einzufügen, der vom Satz von Tools abhängt, die liefen, statt von einem einzelnen Tool. Es gibt keinen Matcher für dieses Ereignis.2304Wird einmal ausgeführt, nachdem jeder Tool-Aufruf in einem Batch aufgelöst wurde, bevor Claude Code die nächste Anfrage an das Modell sendet. `PostToolUse` wird einmal pro Tool ausgeführt, was bedeutet, dass es gleichzeitig ausgeführt wird, wenn Claude parallele Tool-Aufrufe macht. `PostToolBatch` wird genau einmal mit dem vollständigen Batch ausgeführt, daher ist es der richtige Ort, um Kontext einzufügen, der von der Menge der Tools abhängt, die gelaufen sind, anstatt von einem einzelnen Tool. Es gibt keinen Matcher für dieses Ereignis.
2315 2305
2316<h4 id="posttoolbatch-input">2306<h4 id="posttoolbatch-input">
2317 PostToolBatch-Eingabe2307 PostToolBatch-Eingabe
2331 "tool_name": "Read",2321 "tool_name": "Read",
2332 "tool_input": {"file_path": "/.../ledger/accounts.py"},2322 "tool_input": {"file_path": "/.../ledger/accounts.py"},
2333 "tool_use_id": "toolu_01...",2323 "tool_use_id": "toolu_01...",
2334 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."2324 "tool_response": "1\tfrom __future__ import annotations\n2\t..."
2335 },2325 },
2336 {2326 {
2337 "tool_name": "Read",2327 "tool_name": "Read",
2338 "tool_input": {"file_path": "/.../ledger/transactions.py"},2328 "tool_input": {"file_path": "/.../ledger/transactions.py"},
2339 "tool_use_id": "toolu_02...",2329 "tool_use_id": "toolu_02...",
2340 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."2330 "tool_response": "1\tfrom __future__ import annotations\n2\t..."
2341 }2331 }
2342 ]2332 ]
2343}2333}
2344```2334```
2345 2335
2346`tool_response` enthält den gleichen Inhalt, den das Modell im entsprechenden `tool_result` Block empfängt. Der Wert ist eine serialisierte Zeichenkette oder ein Content-Block-Array, genau wie das Tool es ausgegeben hat. Für `Read` bedeutet das Zeilennummern-Präfix-Text statt rohe Dateiinhalte. Antworten können groß sein, daher analysieren Sie nur die Felder, die Sie benötigen.2336`tool_response` enthält den gleichen Inhalt, den das Modell im entsprechenden `tool_result` Block empfängt. Der Wert ist eine serialisierte Zeichenkette oder ein Content-Block-Array, genau wie das Tool es ausgegeben hat. Für `Read` bedeutet das Zeilen-Nummer-Präfix-Text statt rohe Dateiinhalte. Antworten können groß sein, daher analysieren Sie nur die Felder, die Sie benötigen.
2347 2337
2348<Note>2338<Note>
2349 Die `tool_response` Form unterscheidet sich von der von `PostToolUse`. `PostToolUse` übergibt das strukturierte `Output` Objekt des Tools, wie `{filePath: "...", type: "create"}` für `Write`; `PostToolBatch` übergibt den serialisierten `tool_result` Inhalt, den das Modell sieht.2339 Die `tool_response` Form unterscheidet sich von `PostToolUse`. `PostToolUse` übergibt das strukturierte `Output` Objekt des Tools, wie `{filePath: "...", type: "create"}` für `Write`; `PostToolBatch` übergibt den serialisierten `tool_result` Inhalt, den das Modell sieht.
2350</Note>2340</Note>
2351 2341
2352<h4 id="posttoolbatch-decision-control">2342<h4 id="posttoolbatch-decision-control">
2357 2347
2358| Feld | Beschreibung |2348| Feld | Beschreibung |
2359| :- | :- |2349| :- | :- |
2360| `additionalContext` | Kontext-Zeichenkette, die einmal vor dem nächsten Modell-Aufruf eingefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) für Bereitstellungsdetails, was Sie darin einfügen sollten und wie fortgesetzte Sitzungen mit vergangenen Werten umgehen |2350| `additionalContext` | Kontext-String, der einmal vor dem nächsten Modell-Aufruf eingefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) für Lieferdetails, was darin enthalten sein sollte und wie fortgesetzte Sitzungen mit vergangenen Werten umgehen |
2361 2351
2362```json theme={null}2352```json theme={null}
2363{2353{
2368}2358}
2369```2359```
2370 2360
2371Das Zurückgeben von `decision: "block"` oder `continue: false` stoppt die agentengesteuerte Schleife vor dem nächsten Modell-Aufruf. Die Blockierungsmeldung kommt aus dem JSON `reason` oder `stopReason` oder aus stderr bei Beendigung mit 2. Sie sehen sie als Warnung im Transkript, und sie bleibt im Gespräch, daher sieht Claude sie, wenn das Gespräch fortgesetzt wird.2361Das Zurückgeben von `decision: "block"` oder `continue: false` stoppt die agentengesteuerte Schleife vor dem nächsten Modell-Aufruf. Die Blockierungsnachricht kommt aus dem JSON `reason` oder `stopReason` oder aus stderr bei Exit 2. Sie sehen sie als Warnung im Transkript, und sie bleibt in der Konversation, daher sieht Claude sie, wenn die Konversation fortgesetzt wird.
2372 2362
2373<h3 id="permissiondenied">2363<h3 id="permissiondenied">
2374 PermissionDenied2364 PermissionDenied
2375</h3>2365</h3>
2376 2366
2377Wird ausgeführt, wenn [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) einen Tool-Aufruf verweigert, einschließlich wenn er verweigert, ohne ein Klassifizierer-Urteil zu haben, weil [eine Sicherheitsprüfung, die vom Auto-Modus getrennt ist, die Anfrage des Klassifizierers selbst verweigerte](/docs/de/errors#auto-mode-cannot-determine-the-safety-of-an-action) oder seine Antwort nicht analysiert wurde. Dieser Hook wird nur im Auto-Modus ausgeführt: Er wird nicht ausgeführt, wenn Sie einen Berechtigungsdialog manuell verweigern, wenn ein `PreToolUse` Hook einen Aufruf blockiert oder wenn eine `deny` Regel übereinstimmt. Verwenden Sie ihn, um Verweigerungen zu protokollieren, die Konfiguration anzupassen oder dem Modell zu sagen, dass es den Tool-Aufruf möglicherweise erneut versuchen kann.2367Wird ausgeführt, wenn [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) einen Tool-Aufruf verweigert, einschließlich wenn er verweigert, ohne ein Klassifizierer-Urteil zu haben, weil [eine Sicherheitsprüfung, die vom Auto-Modus getrennt ist, die Anfrage des Klassifizierers selbst verweigerte](/docs/de/errors#auto-mode-cannot-determine-the-safety-of-an-action) oder seine Antwort nicht analysiert wurde. Dieser Hook wird nur im Auto-Modus ausgeführt: Er wird nicht ausgeführt, wenn Sie einen Berechtigungsdialog manuell verweigern, wenn ein `PreToolUse` Hook einen Aufruf blockiert oder wenn eine `deny` Regel übereinstimmt. Verwenden Sie ihn, um Ablehnungen zu protokollieren, die Konfiguration anzupassen oder dem Modell zu sagen, dass es den Tool-Aufruf möglicherweise erneut versuchen kann.
2378 2368
2379Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2369Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2380 2370
2403 2393
2404| Feld | Beschreibung |2394| Feld | Beschreibung |
2405| :- | :- |2395| :- | :- |
2406| `reason` | Der Verweigerungsgrund. Für ein Klassifizierer-Urteil benennt es in den meisten Sitzungen die übereinstimmende Regel in eckigen Klammern, wie `[Data Exfiltration]`; siehe [Verweigerungen überprüfen](/docs/de/auto-mode-config#review-denials) für die anderen Formen. Für eine [Verweigerung ohne Urteil](#permissiondenied-decision-control) beginnt sie mit `Auto mode could not evaluate this action and is blocking it for safety`. Für eine Verweigerung, weil das Klassifizierer-Modell nicht verfügbar war, ist es der feste Text `Classifier unavailable` |2396| `reason` | Der Ablehnungsgrund. Für ein Klassifizierer-Urteil benennt es in den meisten Sitzungen die übereinstimmende Regel in eckigen Klammern, wie `[Data Exfiltration]`; siehe [Ablehnungen überprüfen](/docs/de/auto-mode-config#review-denials) für die anderen Formen. Für eine [Urteil-Ablehnung](#permissiondenied-decision-control) beginnt sie mit `Auto mode could not evaluate this action and is blocking it for safety`. Für eine Ablehnung, weil das Klassifizierer-Modell nicht verfügbar war, ist es der feste Text `Classifier unavailable` |
2407 2397
2408<h4 id="permissiondenied-decision-control">2398<h4 id="permissiondenied-decision-control">
2409 PermissionDenied-Entscheidungskontrolle2399 PermissionDenied-Entscheidungskontrolle
2420}2410}
2421```2411```
2422 2412
2423Wenn `retry` `true` ist, fügt Claude Code eine Nachricht zum Gespräch hinzu, die dem Modell sagt, dass es den Tool-Aufruf möglicherweise erneut versuchen kann. Claude Code kehrt die Verweigerung selbst nicht um. Wenn Ihr Hook kein JSON zurückgibt oder `retry: false` zurückgibt, bleibt die Verweigerung bestehen und das Modell empfängt die ursprüngliche Ablehnungsmeldung.2413Wenn `retry` `true` ist, fügt Claude Code eine Nachricht zur Konversation hinzu, die dem Modell sagt, dass es den Tool-Aufruf möglicherweise erneut versuchen kann. Claude Code kehrt die Ablehnung selbst nicht um. Wenn Ihr Hook kein JSON zurückgibt oder `retry: false` zurückgibt, bleibt die Ablehnung bestehen und das Modell empfängt die ursprüngliche Ablehnungsnachricht.
2424 2414
2425Claude Code ignoriert `retry: true`, wenn der Klassifizierer [kein Urteil über die Aktion erzeugt hat](/docs/de/errors#auto-mode-cannot-determine-the-safety-of-an-action): Seine Antwort wurde nicht analysiert oder eine Sicherheitsprüfung, die vom Auto-Modus getrennt ist, verweigerte die Anfrage des Klassifizierers. Für diese Verweigerungen sagt Claude Code dem Modell in der Ablehnungsmeldung bereits, ob es später erneut versuchen oder weitermachen soll.2415Claude Code ignoriert `retry: true`, wenn der Klassifizierer [kein Urteil über die Aktion erzeugt hat](/docs/de/errors#auto-mode-cannot-determine-the-safety-of-an-action): Seine Antwort analysierte nicht oder eine Sicherheitsprüfung, die vom Auto-Modus getrennt ist, verweigerte die Anfrage des Klassifizierers. Für diese Ablehnungen sagt Claude Code dem Modell bereits in der Ablehnungsnachricht, ob es später erneut versuchen oder weitermachen soll.
2426 2416
2427<h3 id="notification">2417<h3 id="notification">
2428 Notification2418 Notification
2434 2424
2435| Matcher | Wann wird es ausgelöst |2425| Matcher | Wann wird es ausgelöst |
2436| :- | :- |2426| :- | :- |
2437| `permission_prompt` | Claude benötigt Ihre Genehmigung für einen Tool-Aufruf oder eine Netzwerkanfrage eines Sandbox-Befehls, und die Aufforderung hat etwa sechs Sekunden gewartet |2427| `permission_prompt` | Claude benötigt Ihre Genehmigung für einen Tool-Aufruf oder eine Sandbox-Anfrage eines Befehls [Netzwerkanfrage](/docs/de/sandboxing#network-isolation), und die Aufforderung hat etwa sechs Sekunden gewartet |
2438| `idle_prompt` | Claude hat vor etwa 60 Sekunden geantwortet und Sie haben seitdem nicht eingegeben |2428| `idle_prompt` | Claude hat vor etwa 60 Sekunden geantwortet und Sie haben seitdem nicht getippt |
2439| `auth_success` | Authentifizierung ist abgeschlossen |2429| `auth_success` | Authentifizierung abgeschlossen |
2440| `elicitation_dialog` | Ein MCP-Server öffnet ein Elicitierungsformular und Sie haben etwa sechs Sekunden nicht eingegeben |2430| `elicitation_dialog` | Ein MCP-Server öffnet ein Elicitation-Formular und Sie haben etwa sechs Sekunden nicht getippt |
2441| `elicitation_url_dialog` | Ein MCP-Server fordert Sie auf, eine Browser-URL zu öffnen und Sie haben etwa sechs Sekunden nicht eingegeben |2431| `elicitation_url_dialog` | Ein MCP-Server fordert Sie auf, eine Browser-URL zu öffnen und Sie haben etwa sechs Sekunden nicht getippt |
2442| `elicitation_complete` | Ein MCP-Server meldet, dass eine [URL-Modus-Elicitierung](#elicitation-input) abgeschlossen ist |2432| `elicitation_complete` | Ein MCP-Server meldet, dass eine [URL-Modus-Elicitation](#elicitation-input) abgeschlossen ist |
2443| `elicitation_response` | Eine MCP-Elicitierungs-Antwort wird an den Server zurückgesendet |2433| `elicitation_response` | Eine MCP-Elicitation-Antwort wird an den Server zurückgesendet |
2444| `agent_needs_input` | Eine Hintergrund-Sitzung beginnt, auf Ihre Eingabe zu warten, während [Agent-Ansicht](/docs/de/agent-view) in einem Terminal offen ist, oder die aktuelle Sitzung stellt Ihnen eine [Agent-Team-Teamkollegen-Terminal-Setup-Frage](/docs/de/agent-teams#choose-a-display-mode) und Sie haben etwa sechs Sekunden nicht eingegeben |2434| `agent_needs_input` | Eine Hintergrund-Sitzung beginnt, auf Ihre Eingabe zu warten, während [Agent-Ansicht](/docs/de/agent-view) in einem Terminal offen ist, oder die aktuelle Sitzung fragt Sie eine [Agent-Team-Teamkollegen-Terminal-Setup-Frage](/docs/de/agent-teams#choose-a-display-mode) und Sie haben etwa sechs Sekunden nicht getippt |
2445| `agent_completed` | Eine Hintergrund-Sitzung wird beendet oder schlägt fehl. Wird nur ausgeführt, während [Agent-Ansicht](/docs/de/agent-view) in einem Terminal offen ist |2435| `agent_completed` | Eine Hintergrund-Sitzung wird beendet oder schlägt fehl. Wird nur ausgeführt, während [Agent-Ansicht](/docs/de/agent-view) in einem Terminal offen ist |
2446| `quota_auto_resume_fired` | Claude Code setzt Ihre Aufgabe nach einer claude.ai Nutzungslimit-Pause fort: beim Reset oder früher, wenn Sie etwas in Claude Code tun, während Sie warten, wie das Hinzufügen von Nutzungsguthaben, das Upgrade Ihres Plans oder das Wechseln von Modellen, macht Nutzung wieder verfügbar, mit der [Modell-Einstellung Ausnahme](/docs/de/interactive-mode#wait-for-a-usage-limit-to-reset) |2436| `quota_auto_resume_fired` | Claude Code setzt Ihre Aufgabe fort, nachdem ein claude.ai Nutzungslimit sie pausiert hat: beim Reset oder früher, wenn Sie etwas in Claude Code tun, während Sie warten, wie das Hinzufügen von Nutzungsguthaben, das Upgrade Ihres Plans oder das Wechseln von Modellen, macht Nutzung wieder verfügbar, mit der [Modell-Einstellung Ausnahme](/docs/de/interactive-mode#wait-for-a-usage-limit-to-reset) |
2447| `quota_auto_resume_stale` | Ein claude.ai Nutzungslimit wurde zurückgesetzt, während Ihr Computer für mehr als etwa 30 Minuten schlief. Claude Code wartet darauf, dass Sie `Enter` drücken, anstatt fortzufahren. Nach einem kürzeren Schlaf wird es fortgesetzt und wird stattdessen `quota_auto_resume_fired` ausgeführt |2437| `quota_auto_resume_stale` | Ein claude.ai Nutzungslimit wurde zurückgesetzt, während Ihr Computer für mehr als etwa 30 Minuten schlief. Claude Code wartet darauf, dass Sie `Enter` drücken, anstatt fortzufahren. Nach einem kürzeren Schlaf wird es fortgesetzt und feuert stattdessen `quota_auto_resume_fired` |
2448| `quota_auto_resume_disabled` | Claude Code beendet sein Warten auf ein claude.ai Nutzungslimit, ohne Ihre Aufgabe fortzusetzen: [`autoContinueAtUsageLimit`](/docs/de/settings-reference#autocontinueatusagelimit) wurde ausgeschaltet oder der Reset rückte während eines Wartens, das Claude Code selbst gestartet hat, mehr als 24 Stunden in die Zukunft, die fortgesetzte Aufgabe traf immer wieder das Limit oder die Fortsetzung wurde blockiert, bevor sie das Modell erreichte. Wird nicht ausgeführt, wenn Sie `Esc` oder `Ctrl+C` drücken oder **Nicht automatisch fortsetzen** wählen |2438| `quota_auto_resume_disabled` | Claude Code beendet sein Warten auf ein claude.ai Nutzungslimit, ohne Ihre Aufgabe fortzusetzen: [`autoContinueAtUsageLimit`](/docs/de/settings-reference#autocontinueatusagelimit) wurde ausgeschaltet oder der Reset rückte während eines Wartens, das Claude Code selbst gestartet hat, mehr als 24 Stunden in die Zukunft, die fortgesetzte Aufgabe traf immer wieder das Limit oder die Fortsetzung wurde blockiert, bevor sie das Modell erreichte. Wird nicht ausgeführt, wenn Sie `Esc` oder `Ctrl+C` drücken oder **Nicht automatisch fortsetzen** wählen |
2449 2439
2450Die `agent_needs_input` und `agent_completed` Typen erfordern Claude Code v2.1.198 oder später.2440Die `agent_needs_input` und `agent_completed` Typen erfordern Claude Code v2.1.198 oder später.
2451 2441
2452Die `quota_auto_resume_fired`, `quota_auto_resume_stale` und `quota_auto_resume_disabled` Typen erfordern Claude Code v2.1.234 oder später.2442Die `quota_auto_resume_fired`, `quota_auto_resume_stale` und `quota_auto_resume_disabled` Typen erfordern Claude Code v2.1.234 oder später.
2453 2443
2454In Terminal-Sitzungen erfordert `permission_prompt` für eine Netzwerkanfrage eines Sandbox-Befehls Claude Code v2.1.246 oder später.2444In Terminal-Sitzungen erfordert `permission_prompt` für eine Sandbox-Anfrage eines Befehls Claude Code v2.1.246 oder später.
2455 2445
2456`agent_needs_input` für eine Teamkollegen-Terminal-Setup-Frage erfordert Claude Code v2.1.248 oder später.2446`agent_needs_input` für eine Teamkollegen-Terminal-Setup-Frage erfordert Claude Code v2.1.248 oder später.
2457 2447
2458<Note>2448<Note>
2459 Die `permission_prompt`, `idle_prompt`, `elicitation_dialog` und `elicitation_url_dialog` Typen teilen ihr Timing mit Desktop-Benachrichtigungen, daher sehen Sie sie in Terminal-Sitzungen nur, wenn Sie vom Terminal entfernt zu sein scheinen:2449 Die `permission_prompt`, `idle_prompt`, `elicitation_dialog` und `elicitation_url_dialog` Typen teilen ihr Timing mit Desktop-Benachrichtigungen, daher sehen Sie sie in Terminal-Sitzungen nur, wenn Sie vom Terminal entfernt zu sein scheinen:
2460 2450
2461 * Erwarten Sie `permission_prompt`, sobald Sie etwa sechs Sekunden nicht eingegeben haben. Der Timer startet, wenn die Berechtigungsaufforderung erscheint, und jeder Tastendruck verschiebt ihn. Um einen Hook sofort auszuführen, wenn Claude um Erlaubnis bittet, ein Tool zu verwenden, verwenden Sie stattdessen [PermissionRequest](#permissionrequest).2451 * Erwarten Sie `permission_prompt`, sobald Sie etwa sechs Sekunden nicht getippt haben. Der Timer startet, wenn die Berechtigungsaufforderung erscheint, und jeder Tastendruck verschiebt sie. Um einen Hook sofort auszuführen, wenn Claude um Erlaubnis zur Verwendung eines Tools fragt, verwenden Sie stattdessen [PermissionRequest](#permissionrequest).
2462 * Erwarten Sie `idle_prompt` etwa 60 Sekunden, nachdem Claude geantwortet hat, und nur wenn Sie seitdem nicht eingegeben haben. Claude Code sendet `idle_prompt` nicht, während es auf einen claude.ai Nutzungslimit-Reset wartet. Wenn das Warten von selbst endet, wird stattdessen einer der `quota_auto_resume_*` Typen ausgeführt.2452 * Erwarten Sie `idle_prompt` etwa 60 Sekunden, nachdem Claude geantwortet hat, und nur wenn Sie seitdem nicht getippt haben. Claude Code sendet `idle_prompt` nicht, während es auf einen claude.ai Nutzungslimit-Reset wartet. Wenn das Warten von selbst endet, wird einer der `quota_auto_resume_*` Typen statt ausgeführt.
2463 * Erwarten Sie `elicitation_dialog` für ein Elicitierungsformular oder `elicitation_url_dialog` für eine Browser-URL-Anfrage, sobald Sie etwa sechs Sekunden nicht eingegeben haben. Beide teilen das gleiche Sechs-Sekunden-Gate wie `permission_prompt`: Der Timer startet, wenn der Dialog erscheint, und jeder Tastendruck verschiebt ihn.2453 * Erwarten Sie `elicitation_dialog` für ein Elicitation-Formular oder `elicitation_url_dialog` für eine Browser-URL-Anfrage, sobald Sie etwa sechs Sekunden nicht getippt haben. Beide teilen das gleiche Sechs-Sekunden-Gate wie `permission_prompt`: Der Timer startet, wenn der Dialog erscheint, und jeder Tastendruck verschiebt ihn.
2464 2454
2465 Eine Berechtigungsanfrage oder Elicitierung, die ankommt, während ein anderer Dialog auf dem Bildschirm ist, behält das gleiche Sechs-Sekunden-Gate, zeitlich von wenn die Anfrage ankommt. Seine Benachrichtigung kann Sie erreichen, während die Anfrage immer noch hinter dem offenen Dialog wartet.2455 Eine Berechtigungsanfrage oder Elicitation, die ankommt, während ein anderer Dialog auf dem Bildschirm ist, behält das gleiche Sechs-Sekunden-Gate, zeitlich von wenn die Anfrage ankommt. Seine Benachrichtigung kann Sie erreichen, während die Anfrage immer noch hinter dem offenen Dialog wartet.
2466</Note>2456</Note>
2467 2457
2468Claude Code zeitlich `permission_prompt` unterschiedlich in Sitzungen, in denen es Berechtigungsanfragen an den Agent SDK [`canUseTool` Callback](/docs/de/agent-sdk/user-input) sendet, was ist, wie Claude Desktop und die VS Code Erweiterung Claude Code hosten:2458Claude Code zeitlich `permission_prompt` unterschiedlich in Sitzungen, in denen es Berechtigungsanfragen an den Agent SDK [`canUseTool` Callback](/docs/de/agent-sdk/user-input) sendet, das ist, wie Claude Desktop und die VS Code Erweiterung Claude Code hosten:
2469 2459
2470* Erwarten Sie `permission_prompt` etwa sechs Sekunden, nachdem Claude um Erlaubnis bittet. Claude Code verschiebt es nicht, während Sie eingeben.2460* Erwarten Sie `permission_prompt` etwa sechs Sekunden, nachdem Claude um Erlaubnis fragt. Claude Code verschiebt es nicht, während Sie tippen.
2471* Wenn Sie oder ein [PermissionRequest](#permissionrequest) Hook früher antworten, führt Claude Code `permission_prompt` nicht aus.2461* Wenn Sie oder ein [PermissionRequest](#permissionrequest) Hook früher antworten, führt Claude Code `permission_prompt` nicht aus.
2472* Setzen Sie [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/de/env-vars) auf `1`, um `permission_prompt` in diesen Sitzungen auszuschalten.2462* Setzen Sie [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/de/env-vars) auf `1`, um `permission_prompt` in diesen Sitzungen auszuschalten.
2473 2463
2474Vor v2.1.233 wurde `permission_prompt` in diesen Sitzungen nicht ausgeführt.2464Vor v2.1.233 wurde `permission_prompt` in diesen Sitzungen nicht ausgeführt.
2475 2465
2476Verwenden Sie separate Matcher, um verschiedene Handler je nach Benachrichtigungstyp auszuführen. Diese Konfiguration löst ein Berechtigungs-spezifisches Warnungsskript aus, wenn Claude Berechtigungsgenehmigung benötigt, und eine andere Benachrichtigung, wenn Claude untätig war:2466Verwenden Sie separate Matcher, um verschiedene Handler je nach Benachrichtigungstyp auszuführen. Diese Konfiguration löst ein Berechtigungs-spezifisches Warnungsskript aus, wenn Claude Genehmigung benötigt, und eine andere Benachrichtigung, wenn Claude untätig war:
2477 2467
2478```json theme={null}2468```json theme={null}
2479{2469{
2506 Notification-Eingabe2496 Notification-Eingabe
2507</h4>2497</h4>
2508 2498
2509Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten Notification-Hooks `message` mit dem Benachrichtigungstext, ein optionaler `title` und `notification_type`, das angibt, welcher Typ ausgeführt wurde.2499Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten Notification-Hooks `message` mit dem Benachrichtigungstext, einen optionalen `title` und `notification_type`, der angibt, welcher Typ ausgeführt wurde.
2510 2500
2511```json theme={null}2501```json theme={null}
2512{2502{
2520}2510}
2521```2511```
2522 2512
2523Notification-Hooks können Benachrichtigungen nicht blockieren oder ändern. Claude Code verwirft ihre `systemMessage` und `continue` Felder, gibt aber immer noch [`terminalSequence`](#emit-terminal-notifications) aus, auf das sich das Desktop-Benachrichtigungsbeispiel verlässt. Notification-Hooks sind für Nebenwirkungen wie das Weiterleiten der Benachrichtigung an einen externen Service gedacht.2513Notification-Hooks können Benachrichtigungen nicht blockieren oder ändern. Claude Code verwirft ihre `system Message` und `continue` Felder, gibt aber immer noch [`terminalSequence`](#emit-terminal-notifications) aus, auf das sich das Desktop-Benachrichtigungsbeispiel verlässt. Notification-Hooks sind für Nebenwirkungen wie das Weiterleiten der Benachrichtigung an einen externen Service gedacht.
2524 2514
2525<h3 id="subagentstart">2515<h3 id="subagentstart">
2526 SubagentStart2516 SubagentStart
2528 2518
2529Wird ausgeführt, wenn Claude einen Subagenten mit dem Agent-Tool spawnt, wenn Claude [einen Subagenten fortsetzt](/docs/de/sub-agents#resume-subagents) und jedes Mal, wenn ein In-Process [Agent-Team](/docs/de/agent-teams) Teamkollege eine neue Nachricht verarbeitet. Unterstützt Matcher zum Filtern nach Agent-Typ-Name. Für integrierte Agenten ist dies der Agent-Name wie `general-purpose`, `Explore` oder `Plan`. Für [benutzerdefinierte Subagenten](/docs/de/sub-agents) ist dies das `name` Feld aus dem Agent-Frontmatter, nicht der Dateiname.2519Wird ausgeführt, wenn Claude einen Subagenten mit dem Agent-Tool spawnt, wenn Claude [einen Subagenten fortsetzt](/docs/de/sub-agents#resume-subagents) und jedes Mal, wenn ein In-Process [Agent-Team](/docs/de/agent-teams) Teamkollege eine neue Nachricht verarbeitet. Unterstützt Matcher zum Filtern nach Agent-Typ-Name. Für integrierte Agenten ist dies der Agent-Name wie `general-purpose`, `Explore` oder `Plan`. Für [benutzerdefinierte Subagenten](/docs/de/sub-agents) ist dies das `name` Feld aus dem Agent-Frontmatter, nicht der Dateiname.
2530 2520
2531Für Subagenten, die von einem [Plugin](/docs/de/plugins/overview) versendet werden, ist der Agent-Typ der Plugin-scoped Identifikator wie `my-plugin:reviewer`, nicht der bloße Frontmatter-Name. Der Doppelpunkt platziert einen Plugin-scoped Namen auf dem regulären Ausdruckspfad, daher verankern Sie den Matcher mit `^` und `$` für einen genauen Treffer: `^my-plugin:reviewer$`.2521Für Subagenten, die von einem [Plugin](/docs/de/plugins/overview) versendet werden, ist der Agent-Typ die Plugin-scoped Kennung wie `my-plugin:reviewer`, nicht der bloße Frontmatter-Name. Der Doppelpunkt platziert einen Plugin-scoped Namen auf dem regulären Ausdruckspfad, daher verankern Sie den Matcher mit `^` und `$` für einen genauen Abgleich: `^my-plugin:reviewer$`.
2532 2522
2533<h4 id="subagentstart-input">2523<h4 id="subagentstart-input">
2534 SubagentStart-Eingabe2524 SubagentStart-Eingabe
2535</h4>2525</h4>
2536 2526
2537Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SubagentStart-Hooks `agent_id` mit dem eindeutigen Identifikator für den Subagenten und `agent_type` mit dem Agent-Namen, den der Matcher filtert.2527Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SubagentStart-Hooks `agent_id` mit der eindeutigen Kennung für den Subagenten und `agent_type` mit dem Agent-Namen, den der Matcher filtert.
2538 2528
2539```json theme={null}2529```json theme={null}
2540{2530{
2547}2537}
2548```2538```
2549 2539
2550SubagentStart-Hooks können die Erstellung von Subagenten nicht blockieren, aber sie können Kontext in den Subagenten einfügen. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:2540SubagentStart-Hooks können die Subagenten-Erstellung nicht blockieren, aber sie können Kontext in den Subagenten einfügen. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:
2551 2541
2552| Feld | Beschreibung |2542| Feld | Beschreibung |
2553| :- | :- |2543| :- | :- |
2554| `additionalContext` | String, der zu Claudes Kontext am Anfang des Gesprächs des Subagenten hinzugefügt wird, vor seiner ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |2544| `additionalContext` | String, der zu Claudes Kontext am Anfang der Subagenten-Konversation hinzugefügt wird, vor seiner ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
2555 2545
2556```json theme={null}2546```json theme={null}
2557{2547{
2562}2552}
2563```2553```
2564 2554
2565Wenn der Hook erneut für den gleichen Subagenten ausgeführt wird, injiziert Claude Code den zurückgegebenen Kontext nur, wenn der Kontext des Subagenten nicht bereits die Kopie aus einem früheren Lauf enthält. Die beim Start eingefügte Kopie bleibt bestehen, wobei der [Prompt-Cache](/docs/de/prompt-caching#subagents-and-the-cache) des Subagenten intakt bleibt. Nach [Auto-Komprimierung](/docs/de/sub-agents#auto-compaction) verwirft diese Kopie, injiziert Claude Code den Kontext des nächsten Laufs erneut.2555Wenn der Hook erneut für den gleichen Subagenten ausgeführt wird, injiziert Claude Code den zurückgegebenen Kontext nur, wenn der Kontext des Subagenten nicht bereits die Kopie aus einem früheren Lauf enthält. Die beim Start eingefügte Kopie bleibt an Ort und Stelle, wobei der [Prompt-Cache](/docs/de/prompt-caching#subagents-and-the-cache) des Subagenten intakt bleibt. Nach [Auto-Komprimierung](/docs/de/sub-agents#auto-compaction) verwirft diese Kopie, injiziert Claude Code den Kontext des nächsten Laufs erneut.
2566 2556
2567<h3 id="subagentstop">2557<h3 id="subagentstop">
2568 SubagentStop2558 SubagentStop
2576 2566
2577Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SubagentStop-Hooks `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path` und `last_assistant_message`. Das `agent_type` Feld ist der Wert, der zum Filtern des Matchers verwendet wird. Der `transcript_path` ist das Transkript der Hauptsitzung, während `agent_transcript_path` das eigene Transkript des Subagenten ist, das in einem verschachtelten `subagents/` Ordner gespeichert ist. Das `last_assistant_message` Feld enthält den Textinhalt der letzten Antwort des Subagenten, daher können Hooks darauf zugreifen, ohne die Transkript-Datei zu analysieren.2567Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SubagentStop-Hooks `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path` und `last_assistant_message`. Das `agent_type` Feld ist der Wert, der zum Filtern des Matchers verwendet wird. Der `transcript_path` ist das Transkript der Hauptsitzung, während `agent_transcript_path` das eigene Transkript des Subagenten ist, das in einem verschachtelten `subagents/` Ordner gespeichert ist. Das `last_assistant_message` Feld enthält den Textinhalt der letzten Antwort des Subagenten, daher können Hooks darauf zugreifen, ohne die Transkript-Datei zu analysieren.
2578 2568
2579Nicht jedes SubagentStop-Ereignis kommt von einem Subagenten, den Claude spawnt. Claude Code führt auch interne Agenten für einige seiner eigenen Funktionen aus, wie [Eingabeaufforderungsvorschläge](/docs/de/interactive-mode#prompt-suggestions) und [`/btw` Seitenfragen](/docs/de/interactive-mode#side-questions-with-%2Fbtw), und SubagentStop wird ausgeführt, wenn einer davon fertig ist. Für diese Ereignisse ist `agent_type` der Agent-Name, den die Sitzung selbst ausführt, wie einer, der mit [`--agent`](/docs/de/cli-reference#cli-flags) oder der [`agent` Einstellung](/docs/de/settings-reference#agent) gesetzt ist, und eine leere Zeichenkette, wenn die Sitzung ohne einen läuft.2569Nicht jedes SubagentStop-Ereignis kommt von einem Subagenten, den Claude spawnt. Claude Code führt auch interne Agenten für einige seiner eigenen Funktionen aus, wie [Eingabeaufforderungs-Vorschläge](/docs/de/interactive-mode#prompt-suggestions) und [`/btw` Seitenfragen](/docs/de/interactive-mode#side-questions-with-%2Fbtw), und SubagentStop wird ausgeführt, wenn einer davon fertig ist. Für diese Ereignisse ist `agent_type` der Agent-Name, den die Sitzung selbst ausführt, wie einer, der mit [`--agent`](/docs/de/cli-reference#cli-flags) oder der [`agent` Einstellung](/docs/de/settings-reference#agent) gesetzt ist, und eine leere Zeichenkette, wenn die Sitzung ohne einen läuft.
2580 2570
2581Ein `matcher`, der Agent-Typen benennt, gleicht keine leere `agent_type` ab. Ein Hook, dessen Matcher weggelassen, `""` oder `"*"` ist oder ein regulärer Ausdruck, der eine leere Zeichenkette abgleicht, wird auch für Ereignisse mit einer leeren `agent_type` ausgeführt.2571Ein `matcher`, der Agent-Typen benennt, gleicht keine leere `agent_type` ab. Ein Hook, dessen Matcher weggelassen, `""` oder `"*"` ist oder ein regulärer Ausdruck, der eine leere Zeichenkette abgleicht, wird auch für Ereignisse mit einer leeren `agent_type` ausgeführt.
2582 2572
2583Auf Claude Code v2.1.271 oder später liefert ein Subagent, der mit dem [`SubagentHandback`](/docs/de/tools-reference) Tool läuft, seinen Bericht durch dieses Tool, bevor er stoppt. Das `last_assistant_message` Feld enthält dann den Schließungstext des Subagenten, falls vorhanden, das ist nicht der gelieferte Bericht. Der Bericht ist die `message` Eingabe dieses Aufrufs, die ein `PreToolUse` oder `PostToolUse` Hook, der auf `SubagentHandback` abgleicht, als `tool_input.message` empfängt.2573Auf Claude Code v2.1.271 oder später liefert ein Subagent, der mit dem [`SubagentHandback`](/docs/de/tools-reference) Tool läuft, seinen Bericht durch dieses Tool, bevor er stoppt. Das `last_assistant_message` Feld enthält dann den Schließungstext des Subagenten, falls vorhanden, das ist nicht der gelieferte Bericht. Der Bericht ist die `message` Eingabe dieses Aufrufs, die ein `PreToolUse` oder `PostToolUse` Hook, der auf `SubagentHandback` abgleicht, als `tool_input.message` empfängt.
2584 2574
2585SubagentStop-Hooks erhalten auch die `background_tasks` und `session_crons` Arrays, die unter [Stop-Eingabe](#stop-input) beschrieben sind. Beide Arrays sind auf die Eltern-Sitzung scoped, nicht den Subagenten.2575SubagentStop-Hooks erhalten auch die `background_tasks` und `session_crons` Arrays, die unter [Stop-Eingabe](#stop-input) beschrieben sind. Beide Arrays sind auf die übergeordnete Sitzung begrenzt, nicht auf den Subagenten.
2586 2576
2587```json theme={null}2577```json theme={null}
2588{2578{
2601}2591}
2602```2592```
2603 2593
2604SubagentStop-Hooks verwenden das gleiche Entscheidungskontrollformat wie [Stop-Hooks](#stop-decision-control), einschließlich `hookSpecificOutput.additionalContext` mit `hookEventName` auf `"SubagentStop"` gesetzt, für Fehler-freies Feedback, das den Subagenten laufen lässt. Das Zurückgeben von `decision: "block"` mit einem `reason` lässt den Subagenten laufen und liefert `reason` an den Subagenten als seine nächste Anweisung. Ein Hook, der durch Beendigung mit 2 blockiert, liefert seine stderr-Nachricht auf die gleiche Weise. Um Kontext in die Eltern-Sitzung einzufügen, nachdem ein Subagent zurückkommt, verwenden Sie stattdessen einen [`PostToolUse`](#posttooluse) Hook auf dem `Agent` Tool.2594SubagentStop-Hooks verwenden das gleiche Entscheidungskontrollformat wie [Stop-Hooks](#stop-decision-control), einschließlich `hookSpecificOutput.additionalContext` mit `hookEventName` auf `"SubagentStop"` gesetzt, für Fehler-freies Feedback, das den Subagenten laufen lässt. Das Zurückgeben von `decision: "block"` mit einem `reason` lässt den Subagenten laufen und liefert `reason` an den Subagenten als seine nächste Anweisung. Ein Hook, der durch Beendigung mit 2 blockiert, liefert seine stderr-Nachricht auf die gleiche Weise. Um Kontext in die übergeordnete Sitzung nach der Rückkehr eines Subagenten einzufügen, verwenden Sie stattdessen einen [`PostToolUse`](#posttooluse) Hook auf dem `Agent` Tool.
2605 2595
2606<h3 id="taskcreated">2596<h3 id="taskcreated">
2607 TaskCreated2597 TaskCreated
2633 2623
2634| Feld | Beschreibung |2624| Feld | Beschreibung |
2635| :- | :- |2625| :- | :- |
2636| `task_id` | Identifikator der zu erstellenden Aufgabe |2626| `task_id` | Kennung der zu erstellenden Aufgabe |
2637| `task_subject` | Titel der Aufgabe |2627| `task_subject` | Titel der Aufgabe |
2638| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |2628| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |
2639| `teammate_name` | Name des Teamkollegen, der die Aufgabe erstellt. Kann fehlen |2629| `teammate_name` | Name des Teamkollegen, der die Aufgabe erstellt. Kann fehlen |
2648* **Exit-Code 2**: Claude Code gibt den stderr-Text als die Nachricht zurück.2638* **Exit-Code 2**: Claude Code gibt den stderr-Text als die Nachricht zurück.
2649* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code gibt `reason` als die Nachricht zurück.2639* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code gibt `reason` als die Nachricht zurück.
2650 2640
2651Dieses Beispiel blockiert Aufgaben, deren Betreff nicht dem erforderlichen Format folgt:2641Dieses Beispiel blockiert Aufgaben, deren Betreff nicht dem erforderlichen Format entspricht:
2652 2642
2653```bash theme={null}2643```bash theme={null}
2654#!/bin/bash2644#!/bin/bash
2667 TaskCompleted2657 TaskCompleted
2668</h3>2658</h3>
2669 2659
2670Wird ausgeführt, wenn eine Aufgabe als abgeschlossen markiert wird. Dies wird in zwei Situationen ausgeführt: wenn ein Agent eine Aufgabe explizit durch das TaskUpdate-Tool als abgeschlossen markiert oder wenn ein [Agent-Team](/docs/de/agent-teams) Teamkollege seinen Zug mit laufenden Aufgaben beendet. Verwenden Sie dies, um Abschluss-Kriterien wie bestandene Tests oder Lint-Überprüfungen durchzusetzen, bevor eine Aufgabe geschlossen werden kann.2660Wird ausgeführt, wenn eine Aufgabe als abgeschlossen markiert wird. Dies wird in zwei Situationen ausgeführt: wenn ein Agent eine Aufgabe explizit über das TaskUpdate-Tool als abgeschlossen markiert oder wenn ein [Agent-Team](/docs/de/agent-teams) Teamkollege seinen Zug mit laufenden Aufgaben beendet. Verwenden Sie dies, um Abschluss-Kriterien wie bestandene Tests oder Lint-Überprüfungen durchzusetzen, bevor eine Aufgabe geschlossen werden kann.
2671 2661
2672TaskCompleted-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgeführt.2662TaskCompleted-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgeführt.
2673 2663
2694 2684
2695| Feld | Beschreibung |2685| Feld | Beschreibung |
2696| :- | :- |2686| :- | :- |
2697| `task_id` | Identifikator der zu abschließenden Aufgabe |2687| `task_id` | Kennung der zu vervollständigenden Aufgabe |
2698| `task_subject` | Titel der Aufgabe |2688| `task_subject` | Titel der Aufgabe |
2699| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |2689| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |
2700| `teammate_name` | Name des Teamkollegen, der die Aufgabe abschließt. Kann fehlen |2690| `teammate_name` | Name des Teamkollegen, der die Aufgabe vervollständigt. Kann fehlen |
2701| `team_name` | Veraltet. Sitzungs-abgeleiteter Team-Name; wird in einer zukünftigen Version entfernt |2691| `team_name` | Veraltet. Sitzungs-abgeleiteter Team-Name; wird in einer zukünftigen Version entfernt |
2702 2692
2703<h4 id="taskcompleted-decision-control">2693<h4 id="taskcompleted-decision-control">
2704 TaskCompleted-Entscheidungskontrolle2694 TaskCompleted-Entscheidungskontrolle
2705</h4>2695</h4>
2706 2696
2707TaskCompleted-Hooks unterstützen zwei Wege zur Steuerung des Aufgaben-Abschlusses:2697TaskCompleted-Hooks unterstützen zwei Wege zur Steuerung der Aufgabenvervollständigung:
2708 2698
2709* **Exit-Code 2**: Die Aufgabe wird nicht als abgeschlossen markiert und die stderr-Nachricht wird an das Modell als Feedback zurückgesendet.2699* **Exit-Code 2**: Die Aufgabe wird nicht als abgeschlossen markiert und die stderr-Nachricht wird an das Modell als Feedback zurückgesendet.
2710* **JSON `{"continue": false, "stopReason": "..."}`**: Wenn ein Teamkollege, der seinen Zug beendet, das Ereignis ausgelöst hat, stoppt den Teamkollegen vollständig, was dem `Stop` Hook-Verhalten entspricht. Der `stopReason` wird dem Benutzer angezeigt. Wenn das `TaskUpdate` Tool das Ereignis ausgelöst hat, ignoriert Claude Code `continue: false`; Exit-Code 2 blockiert immer noch den Abschluss.2700* **JSON `{"continue": false, "stopReason": "..."}`**: Wenn ein Teamkollege, der seinen Zug beendet, das Ereignis ausgelöst hat, stoppt den Teamkollegen vollständig, was dem `Stop` Hook-Verhalten entspricht. Der `stopReason` wird dem Benutzer angezeigt. Wenn das `TaskUpdate` Tool das Ereignis ausgelöst hat, ignoriert Claude Code `continue: false`; Exit-Code 2 blockiert immer noch die Vervollständigung.
2711 2701
2712Dieses Beispiel führt Tests aus und blockiert den Aufgaben-Abschluss, wenn sie fehlschlagen:2702Dieses Beispiel führt Tests aus und blockiert die Aufgabenvervollständigung, wenn sie fehlschlagen:
2713 2703
2714```bash theme={null}2704```bash theme={null}
2715#!/bin/bash2705#!/bin/bash
2732Wird ausgeführt, wenn der Haupt-Claude Code Agent mit dem Antworten fertig ist. Wird nicht ausgeführt, wenn der Stopp aufgrund einer Benutzerunterbrechung auftrat. API-Fehler führen stattdessen [StopFailure](#stopfailure) aus.2722Wird ausgeführt, wenn der Haupt-Claude Code Agent mit dem Antworten fertig ist. Wird nicht ausgeführt, wenn der Stopp aufgrund einer Benutzerunterbrechung auftrat. API-Fehler führen stattdessen [StopFailure](#stopfailure) aus.
2733 2723
2734<Tip>2724<Tip>
2735 Der [`/goal`](/docs/de/goal) Befehl ist eine integrierte Abkürzung für einen Sitzungs-scoped Eingabeaufforderungs-basierten Stop-Hook. Verwenden Sie ihn, wenn Sie möchten, dass Claude auf eine Bedingung hinarbeitet, ohne Hook-Konfiguration zu schreiben.2725 Der [`/goal`](/docs/de/goal) Befehl ist eine integrierte Verknüpfung für einen Sitzungs-scoped Eingabeaufforderungs-basierten Stop-Hook. Verwenden Sie ihn, wenn Sie möchten, dass Claude auf eine Bedingung hinarbeitet, ohne Hook-Konfiguration zu schreiben.
2736</Tip>2726</Tip>
2737 2727
2738<h4 id="stop-input">2728<h4 id="stop-input">
2739 Stop-Eingabe2729 Stop-Eingabe
2740</h4>2730</h4>
2741 2731
2742Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten Stop-Hooks `stop_hook_active`, `last_assistant_message`, `background_tasks` und `session_crons`. Das `stop_hook_active` Feld ist `true`, wenn Claude Code bereits als Ergebnis eines Stop-Hooks fortgesetzt wird. Überprüfen Sie diesen Wert oder verarbeiten Sie das Transkript, um zu vermeiden, auf einer Bedingung zu blockieren, die sich nie auflösen wird. Claude Code überschreibt den Hook und beendet den Zug nach 8 aufeinanderfolgenden Blockierungen.2732Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten Stop-Hooks `stop_hook_active`, `last_assistant_message`, `background_tasks` und `session_crons`. Das `stop_hook_active` Feld ist `true`, wenn Claude Code bereits als Ergebnis eines Stop-Hooks fortgesetzt wird. Überprüfen Sie diesen Wert oder verarbeiten Sie das Transkript, um zu vermeiden, auf einer Bedingung zu blockieren, die sich nie auflöst. Claude Code wendet eine 8-aufeinanderfolgende-Fortsetzungs-Obergrenze an: Nach Stop-Hooks, die den Zug achtmal hintereinander fortgesetzt haben, überschreibt Claude Code den nächsten Block und beendet den Zug. Um die Obergrenze zu erhöhen, setzen Sie [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/de/env-vars).
2743 2733
2744Das `last_assistant_message` Feld enthält den Textinhalt von Claudes letzter Antwort, daher können Hooks darauf zugreifen, ohne die Transkript-Datei zu analysieren. Für Hooks, die auf dem gerade abgeschlossenen Zug handeln, wie Vorlesen oder Benachrichtigungs-Hooks, verwenden Sie dieses Feld statt `transcript_path` zu lesen: Die Transkript-Datei ist nicht garantiert, die letzte Nachricht bei Stop-Zeit auf allen Versionen einzuschließen.2734Das `last_assistant_message` Feld enthält den Textinhalt von Claudes letzter Antwort, daher können Hooks darauf zugreifen, ohne die Transkript-Datei zu analysieren. Für Hooks, die auf den gerade abgeschlossenen Zug einwirken, wie Read-Aloud- oder Benachrichtigungs-Hooks, verwenden Sie dieses Feld statt `transcript_path` zu lesen: Die Transkript-Datei ist nicht garantiert, die letzte Nachricht zur Stop-Zeit auf allen Versionen einzubeziehen.
2745 2735
2746Die `background_tasks` und `session_crons` Arrays ermöglichen es Hooks, "Sitzung ist fertig" von "Sitzung ist pausiert und wartet auf Hintergrund-Arbeit, um sie aufzuwecken" zu unterscheiden. Beide Arrays sind vorhanden, wenn die Task-Registry erreichbar ist und sind leer, wenn nichts in Flug oder geplant ist.2736Die `background_tasks` und `session_crons` Arrays ermöglichen es Hooks, "Sitzung ist fertig" von "Sitzung ist pausiert und wartet auf Hintergrund-Arbeit, um sie aufzuwecken" zu unterscheiden. Beide Arrays sind vorhanden, wenn die Task-Registry erreichbar ist und sind leer, wenn nichts in Flug oder geplant ist.
2747 2737
2749 2739
2750| Feld | Beschreibung |2740| Feld | Beschreibung |
2751| :- | :- |2741| :- | :- |
2752| `id` | Aufgaben-Identifikator |2742| `id` | Aufgaben-Kennung |
2753| `type` | Freundliche Aufgaben-Typ-Beschriftung wie `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` oder `MCP task`. Jede Beschriftung identifiziert, welche Claude Code Funktion die Aufgabe erstellt hat. Fällt auf den rohen Diskriminanten für unbekannte Typen zurück |2743| `type` | Freundliche Aufgaben-Typ-Beschriftung wie `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` oder `MCP task`. Jede Beschriftung identifiziert, welche Claude Code Funktion die Aufgabe erstellt hat. Fällt auf den rohen Diskriminanten für unbekannte Typen zurück |
2754| `status` | Aktueller Aufgaben-Status |2744| `status` | Aktueller Aufgaben-Status |
2755| `description` | Freitext-Beschreibung, begrenzt auf 1000 Zeichen mit einem In-String `… [+N chars]` Marker, wenn gekürzt |2745| `description` | Freier Text-Beschreibung, begrenzt auf 1000 Zeichen mit einem In-String `… [+N chars]` Marker, wenn gekürzt |
2756| `command` | Shell-Befehlszeile, begrenzt auf 1000 Zeichen. Nur für `shell` Aufgaben vorhanden |2746| `command` | Shell-Befehlszeile, begrenzt auf 1000 Zeichen. Nur für `shell` Aufgaben vorhanden |
2757| `agent_type` | Subagenten-Typ-Name. Nur für `subagent` Aufgaben vorhanden |2747| `agent_type` | Subagenten-Typ-Name. Nur für `subagent` Aufgaben vorhanden |
2758| `server` | MCP-Server-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |2748| `server` | MCP-Server-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |
2759| `tool` | MCP-Tool-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |2749| `tool` | MCP-Tool-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |
2760| `name` | Workflow-Name. Nur für `workflow` Aufgaben vorhanden |2750| `name` | Workflow-Name. Nur für `workflow` Aufgaben vorhanden |
2761 2751
2762Jeder Eintrag in `session_crons` beschreibt einen Sitzungs-scoped geplanten Aufweck, stammt von `CronCreate`, `ScheduleWakeup` und `/loop`:2752Jeder Eintrag in `session_crons` beschreibt einen Sitzungs-scoped geplanten Aufwach, stammt von `CronCreate`, `ScheduleWakeup` und `/loop`:
2763 2753
2764| Feld | Beschreibung |2754| Feld | Beschreibung |
2765| :- | :- |2755| :- | :- |
2766| `id` | Cron-Aufgaben-Identifikator |2756| `id` | Cron-Aufgaben-Kennung |
2767| `schedule` | Cron-Ausdruck, z. B. `0 9 * * 1-5` |2757| `schedule` | Cron-Ausdruck, z. B. `0 9 * * 1-5` |
2768| `recurring` | `false` für einmalige Aufwecke, deren Zeitplan eine einzelne Feuerzeit kodiert, `true` für Aufgaben, die bei jedem Treffer erneut feuern |2758| `recurring` | `false` für einmalige Aufwache, deren Zeitplan eine einzelne Feuerzeit kodiert, `true` für Aufgaben, die bei jedem Abgleich erneut feuern |
2769| `prompt` | Eingabeaufforderung, die eingereicht wird, wenn der Cron feuert, begrenzt auf 1000 Zeichen mit dem gleichen `… [+N chars]` Marker |2759| `prompt` | Eingabeaufforderung, die eingereicht wird, wenn der Cron feuert, begrenzt auf 1000 Zeichen mit dem gleichen `… [+N chars]` Marker |
2770 2760
2771Dieses Beispiel zeigt eine Stop-Eingabe mit einer laufenden Shell-Aufgabe und einem wiederkehrenden Cron:2761Dieses Beispiel zeigt eine Stop-Eingabe mit einer laufenden Shell-Aufgabe und einem wiederkehrenden Cron:
2809| :- | :- |2799| :- | :- |
2810| `decision` | `"block"` verhindert, dass Claude stoppt. Weglassen, um Claude zu stoppen |2800| `decision` | `"block"` verhindert, dass Claude stoppt. Weglassen, um Claude zu stoppen |
2811| `reason` | Erforderlich, wenn `decision` `"block"` ist. Sagt Claude, warum es fortgesetzt werden sollte |2801| `reason` | Erforderlich, wenn `decision` `"block"` ist. Sagt Claude, warum es fortgesetzt werden sollte |
2812| `hookSpecificOutput.additionalContext` | Fehler-freies Feedback für Claude. Das Gespräch wird fortgesetzt, damit Claude darauf handeln kann, aber im Gegensatz zu `decision: "block"` wird es im Transkript als Hook-Feedback statt als Hook-Fehler angezeigt |2802| `hookSpecificOutput.additionalContext` | Fehler-freies Feedback für Claude. Die Konversation wird fortgesetzt, damit Claude darauf einwirken kann, aber im Gegensatz zu `decision: "block"` wird es im Transkript als Hook-Feedback statt als Hook-Fehler angezeigt |
2813 2803
2814Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `reason` weitergeleitet: Claude empfängt die stderr-Nachricht als Erklärung, warum es fortgesetzt werden sollte.2804Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `reason` weitergeleitet: Claude empfängt die stderr-Nachricht als Erklärung, warum es fortgesetzt werden sollte.
2815 2805
2820}2810}
2821```2811```
2822 2812
2823Verwenden Sie `additionalContext`, wenn der Hook wie beabsichtigt funktioniert und Claude Anleitung gibt, wie "führe die Test-Suite vor dem Beenden aus". Es hält das Gespräch durch die gleichen Loop-Schutzmaßnahmen wie `decision: "block"` am Laufen, nämlich die `stop_hook_active` Eingabe und die 8-aufeinanderfolgende-Fortsetzungs-Kappe, aber das Transkript kennzeichnet es als `Stop hook feedback` und es wird keine Hook-Fehler-Benachrichtigung angezeigt:2813Verwenden Sie `additionalContext`, wenn der Hook wie beabsichtigt funktioniert und Claude Anleitung gibt, wie "Führen Sie die Test-Suite aus, bevor Sie fertig sind". Es hält die Konversation durch die gleichen Loop-Schutzmaßnahmen wie `decision: "block"` am Laufen, nämlich die `stop_hook_active` Eingabe und die 8-aufeinanderfolgende-Fortsetzungs-Obergrenze, aber das Transkript kennzeichnet es als `Stop hook feedback` und es wird keine Hook-Fehler-Benachrichtigung angezeigt:
2824 2814
2825```json theme={null}2815```json theme={null}
2826{2816{
2847| :- | :- |2837| :- | :- |
2848| `error` | Fehlertyp: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` oder `unknown` |2838| `error` | Fehlertyp: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` oder `unknown` |
2849| `error_details` | Zusätzliche Details zum Fehler, wenn verfügbar |2839| `error_details` | Zusätzliche Details zum Fehler, wenn verfügbar |
2850| `last_assistant_message` | Der gerenderte Fehlertext, der im Gespräch angezeigt wird. Im Gegensatz zu `Stop` und `SubagentStop`, wo dieses Feld Claudes Gesprächsausgabe enthält, enthält es für `StopFailure` die API-Fehler-Zeichenkette selbst, wie `"API Error: Rate limit reached"` |2840| `last_assistant_message` | Der gerenderte Fehlertext, der in der Konversation angezeigt wird. Im Gegensatz zu `Stop` und `SubagentStop`, wo dieses Feld Claudes Konversations-Ausgabe enthält, enthält es für `StopFailure` die API-Fehler-Zeichenkette selbst, wie `"API Error: Rate limit reached"` |
2851 2841
2852```json theme={null}2842```json theme={null}
2853{2843{
2867 TeammateIdle2857 TeammateIdle
2868</h3>2858</h3>
2869 2859
2870Wird ausgeführt, wenn ein [Agent-Team](/docs/de/agent-teams) Teamkollege nach Abschluss seines Zugs untätig wird. Verwenden Sie dies, um Qualitäts-Gates durchzusetzen, bevor ein Teamkollege die Arbeit einstellt, wie das Erfordern bestandener Lint-Überprüfungen oder das Überprüfen, dass Ausgabe-Dateien existieren.2860Wird ausgeführt, wenn ein [Agent-Team](/docs/de/agent-teams) Teamkollege nach Abschluss seines Zugs untätig wird. Verwenden Sie dies, um Qualitäts-Gates durchzusetzen, bevor ein Teamkollege mit der Arbeit aufhört, wie das Erfordern bestandener Lint-Überprüfungen oder das Überprüfen, dass Ausgabe-Dateien existieren.
2871 2861
2872TeammateIdle-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgeführt.2862TeammateIdle-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgeführt.
2873 2863
2922 2912
2923Wird ausgeführt, wenn sich eine Konfigurationsdatei während einer Sitzung ändert. Verwenden Sie dies, um Einstellungs-Änderungen zu überprüfen, Sicherheitsrichtlinien durchzusetzen oder nicht autorisierte Änderungen an Konfigurationsdateien zu blockieren.2913Wird ausgeführt, wenn sich eine Konfigurationsdatei während einer Sitzung ändert. Verwenden Sie dies, um Einstellungs-Änderungen zu überprüfen, Sicherheitsrichtlinien durchzusetzen oder nicht autorisierte Änderungen an Konfigurationsdateien zu blockieren.
2924 2914
2925Claude Code führt ConfigChange-Hooks aus, wenn sich eine Einstellungsdatei, eine verwaltete Richtlinien-Datei oder eine Skill-Datei ändert. Für verwaltete Richtlinien wird es nur ausgeführt, wenn `managed-settings.json` oder eine Datei in `managed-settings.d/` sich ändert. Es wendet [Server-verwaltete Einstellungen](/docs/de/server-managed-settings) und Änderungen an macOS verwalteten Einstellungen oder Windows Registry-Richtlinien ohne Ausführung an. Auf WSL mit [`wslInheritsWindowsSettings`](/docs/de/settings-reference#wslinheritswindowssettings) wendet es auch eine geänderte Windows-seitige verwaltete Einstellungsdatei bei seiner Richtlinien-Abfrage ohne Ausführung an.2915Claude Code führt ConfigChange-Hooks aus, wenn sich eine Einstellungsdatei, eine verwaltete Richtlinien-Datei oder eine Skill-Datei ändert. Für verwaltete Richtlinien führt es sie nur aus, wenn sich `managed-settings.json` oder eine Datei in `managed-settings.d/` ändert. Es wendet [Server-verwaltete Einstellungen](/docs/de/server-managed-settings) und Änderungen an macOS verwalteten Einstellungen oder Windows Registry-Richtlinien ohne Ausführung an. Auf WSL mit [`wslInheritsWindowsSettings`](/docs/de/settings-reference#wslinheritswindowssettings) wendet es auch eine geänderte Windows-seitige verwaltete Einstellungsdatei bei seiner Richtlinien-Abfrage ohne Ausführung an.
2926 2916
2927Der Matcher filtert auf die Konfigurationsquelle:2917Der Matcher filtert auf die Konfigurationsquelle:
2928 2918
2958 ConfigChange-Eingabe2948 ConfigChange-Eingabe
2959</h4>2949</h4>
2960 2950
2961Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ConfigChange-Hooks `source` und optional `file_path`. Das `source` Feld gibt an, welcher Konfigurationstyp sich geändert hat, und `file_path` stellt den Pfad zur spezifischen Datei bereit, die geändert wurde.2951Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ConfigChange-Hooks `source` und optional `file_path`. Das `source` Feld gibt an, welcher Konfigurationstyp sich geändert hat, und `file_path` gibt den Pfad zur spezifischen Datei an, die geändert wurde.
2962 2952
2963```json theme={null}2953```json theme={null}
2964{2954{
2991 2981
2992`policy_settings` Änderungen können nicht blockiert werden. Hooks werden immer noch für `policy_settings` Quellen ausgeführt, wenn sich eine verwaltete Einstellungsdatei auf der Maschine ändert, daher können Sie sie verwenden, um diese Bearbeitungen zu protokollieren, aber jede Blockierungs-Entscheidung wird ignoriert. Dies stellt sicher, dass unternehmens-verwaltete Einstellungen immer wirksam werden. Claude Code führt `ConfigChange` Hooks nicht aus, wenn [Server-verwaltete Einstellungen](/docs/de/server-managed-settings) ankommen oder aktualisiert werden.2982`policy_settings` Änderungen können nicht blockiert werden. Hooks werden immer noch für `policy_settings` Quellen ausgeführt, wenn sich eine verwaltete Einstellungsdatei auf der Maschine ändert, daher können Sie sie verwenden, um diese Bearbeitungen zu protokollieren, aber jede Blockierungs-Entscheidung wird ignoriert. Dies stellt sicher, dass unternehmens-verwaltete Einstellungen immer wirksam werden. Claude Code führt `ConfigChange` Hooks nicht aus, wenn [Server-verwaltete Einstellungen](/docs/de/server-managed-settings) ankommen oder aktualisiert werden.
2993 2983
2994Claude Code handelt die Blockierungs-Entscheidung aus der JSON-Ausgabe eines ConfigChange-Hooks und verwirft `systemMessage` und `continue`. Eine blockierte Änderung zeigt keine Nachricht für Sie oder Claude, ob Sie mit `reason` oder mit stderr bei Beendigung mit 2 blockieren. Claude Code schreibt nur eine Zeile in das Debug-Protokoll.2984Claude Code handelt die Blockierungs-Entscheidung aus der JSON-Ausgabe eines ConfigChange-Hooks und verwirft `systemMessage` und `continue`. Eine blockierte Änderung zeigt keine Nachricht für Sie oder Claude, ob Sie mit `reason` oder mit stderr bei Exit 2 blockieren. Claude Code schreibt nur eine Zeile ins Debug-Protokoll.
2995 2985
2996<h3 id="cwdchanged">2986<h3 id="cwdchanged">
2997 CwdChanged2987 CwdChanged
2998</h3>2988</h3>
2999 2989
3000Wird ausgeführt, wenn ein Shell-Befehl in der Hauptkonversation das Arbeitsverzeichnis ändert, z. B. wenn Claude einen `cd` Befehl ausführt. Verwenden Sie dies, um auf Verzeichniswechsel zu reagieren: Umgebungsvariablen neu laden, projektspezifische Toolchains aktivieren oder Setup-Skripte automatisch ausführen. Paart mit [FileChanged](#filechanged) für Tools wie [direnv](https://direnv.net/), die Pro-Verzeichnis-Umgebung verwalten.2990Wird ausgeführt, wenn ein Shell-Befehl in der Hauptkonversation das Arbeitsverzeichnis ändert, z. B. wenn Claude einen `cd` Befehl ausführt. Verwenden Sie dies, um auf Verzeichnis-Änderungen zu reagieren: Laden Sie Umgebungsvariablen erneut, aktivieren Sie projekt-spezifische Toolchains oder führen Sie Setup-Skripte automatisch aus. Paart mit [FileChanged](#filechanged) für Tools wie [direnv](https://direnv.net/), die pro-Verzeichnis-Umgebung verwalten.
3001 2991
3002CwdChanged-Hooks haben Zugriff auf [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variablen, die in diese Datei geschrieben werden, bleiben in nachfolgenden Bash-Befehlen bestehen, bis zum nächsten CwdChanged-Ereignis, wenn Claude Code sie löscht.2992CwdChanged-Hooks haben Zugriff auf [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variablen, die in diese Datei geschrieben werden, bleiben in nachfolgenden Bash-Befehlen bis zum nächsten CwdChanged-Ereignis erhalten, wenn Claude Code sie löscht.
3003 2993
3004CwdChanged unterstützt keine Matcher und wird bei jedem Vorkommen ausgeführt.2994CwdChanged unterstützt keine Matcher und wird bei jedem Vorkommen ausgeführt.
3005 2995
3030| :- | :- |3020| :- | :- |
3031| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Das Zurückgeben eines leeren Arrays löscht die dynamische Liste, was typisch ist, wenn ein neues Verzeichnis betreten wird |3021| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Das Zurückgeben eines leeren Arrays löscht die dynamische Liste, was typisch ist, wenn ein neues Verzeichnis betreten wird |
3032 3022
3033CwdChanged-Hooks haben keine Entscheidungskontrolle. Sie können den Verzeichniswechsel nicht blockieren.3023CwdChanged-Hooks haben keine Entscheidungskontrolle. Sie können die Verzeichnis-Änderung nicht blockieren.
3034 3024
3035Claude Code liest `watchPaths` und `systemMessage` aus ihrer JSON-Ausgabe und verwirft `continue`. In interaktiven Sitzungen zeigt es die `systemMessage` als kurze Terminal-Benachrichtigung. Die Nachricht erreicht nicht den SDK-Nachrichtenstrom.3025Claude Code liest `watchPaths` und `systemMessage` aus ihrer JSON-Ausgabe und verwirft `continue`. In interaktiven Sitzungen zeigt es die `systemMessage` als kurze Terminal-Benachrichtigung. Die Nachricht erreicht nicht den SDK-Nachrichtenstrom.
3036 3026
3040 3030
3041Wird ausgeführt, nachdem Sie ein Arbeitsverzeichnis während einer Sitzung mit dem `/add-dir` Befehl hinzufügen oder nachdem ein SDK-Client eines mit der `register_repo_root` Kontroll-Anfrage hinzufügt. Verwenden Sie dies, um ein neu hinzugefügtes Repository vorzubereiten, z. B. durch Installation seiner Abhängigkeiten.3031Wird ausgeführt, nachdem Sie ein Arbeitsverzeichnis während einer Sitzung mit dem `/add-dir` Befehl hinzufügen oder nachdem ein SDK-Client eines mit der `register_repo_root` Kontroll-Anfrage hinzufügt. Verwenden Sie dies, um ein neu hinzugefügtes Repository vorzubereiten, z. B. durch Installation seiner Abhängigkeiten.
3042 3032
3043Claude Code führt dieses Ereignis nicht aus, wenn:3033Claude Code feuert dieses Ereignis nicht aus, wenn:
3044 3034
3045* Sie ein Verzeichnis mit dem `--add-dir` Start-Flag übergeben; [SessionStart](#sessionstart) deckt diese Verzeichnisse ab3035* Sie ein Verzeichnis mit dem `--add-dir` Start-Flag übergeben; [SessionStart](#sessionstart) deckt diese Verzeichnisse ab
3046* Sie ein Verzeichnis auf der `/permissions` Workspace-Registerkarte hinzufügen3036* Sie ein Verzeichnis auf der `/permissions` Workspace-Registerkarte hinzufügen
3047* Sie ein Verzeichnis hinzufügen, das bereits ein Arbeitsverzeichnis ist oder in einem liegt3037* Sie ein Verzeichnis hinzufügen, das bereits ein Arbeitsverzeichnis ist oder in einem liegt
3048 3038
3049Claude Code führt DirectoryAdded aus, nachdem Sandbox- und Berechtigungsstatus aktualisiert wurden, daher sehen Sandbox-Tools das neue Verzeichnis bereits, wenn Ihr Hook ausgeführt wird. Hook-Befehle selbst werden unsandboxed ausgeführt.3039Claude Code feuert DirectoryAdded aus, nachdem Sandbox- und Berechtigungsstatus aktualisiert wurden, daher sehen Sandbox-Tools das neue Verzeichnis bereits, wenn Ihr Hook läuft. Hook-Befehle selbst laufen unsandboxed.
3050 3040
3051Claude Code wartet nicht auf den Hook: Das Hinzufügen wird sofort abgeschlossen und der Hook wird im Hintergrund mit dem 600-Sekunden-Standard-Timeout ausgeführt.3041Claude Code wartet nicht auf den Hook: Das Hinzufügen wird sofort abgeschlossen und der Hook läuft im Hintergrund mit dem 600-Sekunden-Standard-Timeout.
3052 3042
3053Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:3043Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:
3054 3044
3079}3069}
3080```3070```
3081 3071
3082DirectoryAdded-Hooks haben keine Entscheidungskontrolle. Sie können das Hinzufügen nicht blockieren, das bereits abgeschlossen ist, wenn der Hook ausgeführt wird. Claude Code verwirft das `continue` Feld aus ihrer JSON-Ausgabe und zeigt den Rest unterschiedlich pro Quelle:3072DirectoryAdded-Hooks haben keine Entscheidungskontrolle. Sie können das Hinzufügen nicht blockieren, das bereits abgeschlossen ist, wenn der Hook läuft. Claude Code verwirft das `continue` Feld aus ihrer JSON-Ausgabe und zeigt den Rest unterschiedlich je nach Quelle:
3083 3073
3084* `slash_command`: Claude Code liefert den `systemMessage` des Hooks an Claude als Kontext beim nächsten Gesprächszug, anstatt ihn Ihnen zu zeigen. Eine Anzahl fehlgeschlagener Hooks erscheint im Transkript. Vollständige Fehlerausgabe geht zum Debug-Protokoll3074* `slash_command`: Claude Code liefert die `systemMessage` des Hooks an Claude als Kontext beim nächsten Konversations-Zug, anstatt sie Ihnen zu zeigen. Eine Anzahl fehlgeschlagener Hooks erscheint im Transkript. Vollständige Fehler-Ausgabe geht ins Debug-Protokoll
3085* `register_repo_root`: Claude Code schreibt `systemMessage` Ausgabe und Fehlerausgabe nur zum Debug-Protokoll3075* `register_repo_root`: Claude Code schreibt `systemMessage` Ausgabe und Fehler-Ausgabe nur ins Debug-Protokoll
3086 3076
3087<h3 id="filechanged">3077<h3 id="filechanged">
3088 FileChanged3078 FileChanged
3089</h3>3079</h3>
3090 3080
3091Wird ausgeführt, wenn sich eine überwachte Datei auf der Festplatte ändert. Claude Code erkennt Änderungen mit einem Dateisystem-Watcher, nicht durch Überprüfung von Tool-Aufrufen, daher wird der Hook unabhängig davon ausgeführt, was die Datei geändert hat: ein `Edit` oder `Write` Tool-Aufruf, ein Skript, das Claude mit `Bash` ausführt, oder ein Prozess außerhalb von Claude Code. Ein häufiger Anwendungsfall ist das Neuladen von Umgebungsvariablen, wenn sich Projekt-Konfigurationsdateien ändern.3081Wird ausgeführt, wenn sich eine überwachte Datei auf der Festplatte ändert. Claude Code erkennt Änderungen mit einem Dateisystem-Watcher, nicht durch Überprüfung von Tool-Aufrufen, daher wird der Hook unabhängig davon ausgeführt, was die Datei geändert hat: Ein `Edit` oder `Write` Tool-Aufruf, ein Skript, das Claude mit `Bash` ausführt, oder ein Prozess außerhalb von Claude Code. Ein häufiger Anwendungsfall ist das Neuladen von Umgebungsvariablen, wenn sich Projekt-Konfigurationsdateien ändern.
3092 3082
3093Der `matcher` für dieses Ereignis dient zwei Rollen:3083Der `matcher` für dieses Ereignis dient zwei Zwecken:
3094 3084
3095* **Erstelle die Überwachungsliste**: Der Wert wird auf `|` aufgeteilt und jedes Segment wird als wörtlicher Dateiname im Arbeitsverzeichnis registriert, daher überwacht `".envrc|.env"` genau diese zwei Dateien. Regex-Muster sind hier nicht nützlich: Ein Wert wie `^\.env` würde eine Datei wörtlich namens `^\.env` überwachen.3085* **Erstelle die Überwachungsliste**: Der Wert wird auf `|` aufgeteilt und jedes Segment wird als wörtlicher Dateiname im Arbeitsverzeichnis registriert, daher überwacht `".envrc|.env"` genau diese zwei Dateien. Regex-Muster sind hier nicht nützlich: Ein Wert wie `^\.env` würde eine Datei wörtlich namens `^\.env` überwachen.
3096* **Filtere, welche Hooks ausgeführt werden**: Wenn sich eine überwachte Datei ändert, wird der gleiche Wert verwendet, um zu filtern, welche Hook-Gruppen mit den Standard-[Matcher-Regeln](#matcher-patterns) gegen den Dateinamen der geänderten Datei ausgeführt werden.3086* **Filtere, welche Hooks laufen**: Wenn sich eine überwachte Datei ändert, wird der gleiche Wert verwendet, um zu filtern, welche Hook-Gruppen mit den Standard-[Matcher-Regeln](#matcher-patterns) gegen den Baseinamen der geänderten Datei laufen.
3097 3087
3098Dieses Beispiel normalisiert Zeilenumbrüche in `data.csv` nach jeder Änderung, einschließlich eines `Bash` Befehls oder eines externen Skripts, das die Datei umschreibt:3088Dieses Beispiel normalisiert Zeilenumbrüche in `data.csv` nach jeder Änderung, einschließlich eines `Bash` Befehls oder eines externen Skripts, das die Datei umschreibt:
3099 3089
3115}3105}
3116```3106```
3117 3107
3118Der Hook liest den geänderten Dateipfad aus dem `file_path` Feld der [JSON-Eingabe](#filechanged-input) von stdin. Seine `grep` Wache testet auf das gleiche, das `perl` entfernt, einen CR am Ende einer Zeile, daher wird der Lauf nach einer Normalisierung beendet, ohne die Datei zu berühren. Eine lockere Wache schleift für immer, weil `perl -i` die Datei umschreibt, auch wenn es nichts ersetzt und Claude Code den Hook nach jedem Umschreiben erneut ausführt. Speichern Sie dieses Skript unter `/path/to/normalize-line-endings.sh` und machen Sie es ausführbar:3108Der Hook liest den Pfad der geänderten Datei aus dem `file_path` Feld der [JSON-Eingabe](#filechanged-input) von stdin. Seine `grep` Wache testet auf das gleiche, das `perl` entfernt, einen CR am Ende einer Zeile, daher beendet der Lauf nach einer Normalisierung ohne Berührung der Datei. Eine lockere Wache schleift für immer, weil `perl -i` die Datei umschreibt, auch wenn es nichts ersetzt und Claude Code den Hook nach jedem Umschreiben erneut ausführt. Speichern Sie dieses Skript unter `/path/to/normalize-line-endings.sh` und machen Sie es ausführbar:
3119 3109
3120```bash theme={null}3110```bash theme={null}
3121#!/bin/bash3111#!/bin/bash
3125fi3115fi
3126```3116```
3127 3117
3128Um zu bestätigen, dass der Hook funktioniert, bitten Sie Claude, eine CRLF-Zeile mit einem `Bash` Befehl zu `data.csv` anzuhängen. Claude Code führt den Hook aus und die Datei endet mit LF-Umbrüchen.3118Um zu bestätigen, dass der Hook funktioniert, bitten Sie Claude, eine CRLF-Zeile mit einem `Bash` Befehl an `data.csv` anzuhängen. Claude Code führt den Hook aus und die Datei endet mit LF-Umbrüchen.
3129 3119
3130Um Dateien zu überwachen, die Sie nicht im Voraus benennen können, geben Sie [`watchPaths`](#filechanged-output) von einem Hook zurück, um die Überwachungsliste dynamisch zu aktualisieren. Claude Code startet den Watcher nur, wenn etwas eine Datei zum Überwachen benennt, daher seeden Sie die Liste mit einer FileChanged-Gruppe, deren Matcher mindestens eine Datei benennt, oder mit einem [SessionStart](#sessionstart-decision-control) oder [CwdChanged](#cwdchanged) Hook, der `watchPaths` zurückgibt. Der Matcher filtert immer noch, welche Hook-Gruppen ausgeführt werden, wenn sich eine überwachte Datei ändert, daher geben Sie der Gruppe, die dynamische Pfade verarbeitet, einen weggelassenen Matcher, der jede überwachte Datei abgleicht und nichts zur Überwachungsliste hinzufügt. Ein `"*"` Matcher gleicht auch jede Datei ab, aber Claude Code registriert ihn in der Überwachungsliste wie jeden anderen Wert, als wörtliche Datei namens `*`.3120Um Dateien zu überwachen, die Sie nicht im Voraus benennen können, geben Sie [`watchPaths`](#filechanged-output) von einem Hook zurück, um die Überwachungsliste dynamisch zu aktualisieren. Claude Code startet den Watcher nur, wenn etwas eine Datei zum Überwachen benennt, daher seeden Sie die Liste mit einer FileChanged-Gruppe, deren Matcher mindestens eine Datei benennt, oder mit einem [SessionStart](#sessionstart-decision-control) oder [CwdChanged](#cwdchanged) Hook, der `watchPaths` zurückgibt. Der Matcher filtert immer noch, welche Hook-Gruppen laufen, wenn sich eine überwachte Datei ändert, daher geben Sie der Gruppe, die dynamische Pfade verarbeitet, einen weggelassenen Matcher, der jede überwachte Datei abgleicht und nichts zur Überwachungsliste hinzufügt. Ein `"*"` Matcher gleicht auch jede Datei ab, aber Claude Code registriert ihn in der Überwachungsliste wie jeden anderen Wert, als wörtliche Datei namens `*`.
3131 3121
3132FileChanged-Hooks haben Zugriff auf [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variablen, die in diese Datei geschrieben werden, bleiben in nachfolgenden Bash-Befehlen bestehen, bis zum nächsten [CwdChanged](#cwdchanged) Ereignis, wenn Claude Code sie löscht.3122FileChanged-Hooks haben Zugriff auf [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variablen, die in diese Datei geschrieben werden, bleiben in nachfolgenden Bash-Befehlen bis zum nächsten [CwdChanged](#cwdchanged) Ereignis erhalten, wenn Claude Code sie löscht.
3133 3123
3134<h4 id="filechanged-input">3124<h4 id="filechanged-input">
3135 FileChanged-Eingabe3125 FileChanged-Eingabe
3163| :- | :- |3153| :- | :- |
3164| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Verwenden Sie dies, wenn Ihr Hook-Skript basierend auf der geänderten Datei zusätzliche Dateien zum Überwachen entdeckt |3154| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Verwenden Sie dies, wenn Ihr Hook-Skript basierend auf der geänderten Datei zusätzliche Dateien zum Überwachen entdeckt |
3165 3155
3166FileChanged-Hooks haben keine Entscheidungskontrolle. Sie können die Dateiänderung nicht blockieren.3156FileChanged-Hooks haben keine Entscheidungskontrolle. Sie können die Datei-Änderung nicht blockieren.
3167 3157
3168Claude Code liest `watchPaths` und `systemMessage` aus ihrer JSON-Ausgabe und verwirft `continue`. In interaktiven Sitzungen zeigt es die `systemMessage` als kurze Terminal-Benachrichtigung. Die Nachricht erreicht nicht den SDK-Nachrichtenstrom.3158Claude Code liest `watchPaths` und `systemMessage` aus ihrer JSON-Ausgabe und verwirft `continue`. In interaktiven Sitzungen zeigt es die `systemMessage` als kurze Terminal-Benachrichtigung. Die Nachricht erreicht nicht den SDK-Nachrichtenstrom.
3169 3159
3171 WorktreeCreate3161 WorktreeCreate
3172</h3>3162</h3>
3173 3163
3174Wird ausgeführt, wenn ein Worktree erstellt wird, ob von `claude --worktree`, von einem [Subagenten mit `isolation: "worktree"`](/docs/de/sub-agents#choose-the-subagent-scope) oder für eine [Hintergrund-Sitzung](/docs/de/agent-view#how-file-edits-are-isolated), die Claude Code in ihrem eigenen Worktree isoliert. Standardmäßig erstellt Claude Code die isolierte Arbeitskopie mit `git worktree`. Das Konfigurieren eines WorktreeCreate-Hooks ersetzt dieses Standard-Git-Verhalten, sodass Sie ein anderes Versionskontrollsystem wie SVN, Perforce oder Mercurial verwenden können.3164Wird ausgeführt, wenn ein Worktree erstellt wird, ob von `claude --worktree`, von einem [Subagenten mit `isolation: "worktree"`](/docs/de/sub-agents#choose-the-subagent-scope) oder für eine [Hintergrund-Sitzung](/docs/de/agent-view#how-file-edits-are-isolated), die Claude Code in seinem eigenen Worktree isoliert. Standardmäßig erstellt Claude Code die isolierte Arbeitskopie mit `git worktree`. Das Konfigurieren eines WorktreeCreate-Hooks ersetzt dieses Standard-Git-Verhalten, sodass Sie ein anderes Versionskontrollsystem wie SVN, Perforce oder Mercurial verwenden können.
3175 3165
3176Da der Hook das Standard-Verhalten vollständig ersetzt, wird [`.worktreeinclude`](/docs/de/worktrees#copy-gitignored-files-into-worktrees) nicht verarbeitet. Wenn Sie lokale Konfigurationsdateien wie `.env` in den neuen Worktree kopieren müssen, tun Sie dies in Ihrem Hook-Skript.3166Da der Hook das Standard-Verhalten vollständig ersetzt, wird [`.worktreeinclude`](/docs/de/worktrees#copy-gitignored-files-into-worktrees) nicht verarbeitet. Wenn Sie lokale Konfigurationsdateien wie `.env` in den neuen Worktree kopieren müssen, tun Sie dies in Ihrem Hook-Skript.
3177 3167
3178Der Hook muss den Pfad zum erstellten Worktree-Verzeichnis zurückgeben. Claude Code verwendet diesen Pfad als Arbeitsverzeichnis für die isolierte Sitzung. Siehe [WorktreeCreate-Ausgabe](#worktreecreate-output), wie jeder Hook-Typ den Pfad zurückgibt.3168Der Hook muss den Pfad zum erstellten Worktree-Verzeichnis zurückgeben. Claude Code verwendet diesen Pfad als Arbeitsverzeichnis für die isolierte Sitzung. Siehe [WorktreeCreate-Ausgabe](#worktreecreate-output) für wie jeder Hook-Typ den Pfad zurückgibt.
3179 3169
3180Claude Code handelt den Erfolg des Hooks und den zurückgegebenen Pfad und verwirft `systemMessage` und `continue`.3170Claude Code handelt den Erfolg des Hooks und den zurückgegebenen Pfad und verwirft `systemMessage` und `continue`.
3181 3171
3182Dieses Beispiel erstellt eine SVN-Arbeitskopie und druckt den Pfad für Claude Code zur Verwendung. Ersetzen Sie die Repository-URL durch Ihre eigene:3172Dieses Beispiel erstellt eine SVN-Arbeitskopie und gibt den Pfad für Claude Code aus. Ersetzen Sie die Repository-URL durch Ihre eigene:
3183 3173
3184```json theme={null}3174```json theme={null}
3185{3175{
3198}3188}
3199```3189```
3200 3190
3201Der Hook liest den Worktree `name` aus der JSON-Eingabe von stdin, checkt eine frische Kopie in ein neues Verzeichnis aus und druckt den Verzeichnispath. Das `echo` auf der letzten Zeile ist das, was Claude Code als Worktree-Pfad liest. Leiten Sie jede andere Ausgabe zu stderr um, damit sie nicht mit dem Pfad interferiert.3191Der Hook liest den Worktree `name` aus der JSON-Eingabe von stdin, checkt eine frische Kopie in ein neues Verzeichnis aus und gibt den Verzeichnis-Pfad aus. Das `echo` auf der letzten Zeile ist das, was Claude Code als Worktree-Pfad liest. Leiten Sie jede andere Ausgabe zu stderr um, damit sie nicht mit dem Pfad interferiert.
3202 3192
3203<h4 id="worktreecreate-input">3193<h4 id="worktreecreate-input">
3204 WorktreeCreate-Eingabe3194 WorktreeCreate-Eingabe
3205</h4>3195</h4>
3206 3196
3207Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten WorktreeCreate-Hooks das `name` Feld. Dies ist ein Slug-Identifikator für den neuen Worktree, entweder vom Benutzer angegeben oder automatisch generiert, z. B. `bold-oak-a3f2`.3197Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten WorktreeCreate-Hooks das `name` Feld. Dies ist eine Slug-Kennung für den neuen Worktree, entweder vom Benutzer angegeben oder automatisch generiert, z. B. `bold-oak-a3f2`.
3208 3198
3209```json theme={null}3199```json theme={null}
3210{3200{
3222 3212
3223WorktreeCreate-Hooks verwenden nicht das Standard-Erlauben/Blockieren-Entscheidungsmodell. Stattdessen bestimmt der Erfolg oder Fehler des Hooks das Ergebnis. Der Hook muss den Pfad zum erstellten Worktree-Verzeichnis zurückgeben:3213WorktreeCreate-Hooks verwenden nicht das Standard-Erlauben/Blockieren-Entscheidungsmodell. Stattdessen bestimmt der Erfolg oder Fehler des Hooks das Ergebnis. Der Hook muss den Pfad zum erstellten Worktree-Verzeichnis zurückgeben:
3224 3214
3225* **Command-Hooks** (`type: "command"`): Drucken Sie den Pfad als letzte nicht-leere Zeile von stdout. Claude Code entfernt ANSI-Escape-Codes, bevor diese Zeile gelesen wird, daher werden Shell-Start-Banner, die vor Ihrem `echo` gedruckt werden, ignoriert. Leiten Sie jede andere Hook-Ausgabe zu stderr um.3215* **Command-Hooks** (`type: "command"`): Geben Sie den Pfad als letzte nicht-leere Zeile von stdout aus. Claude Code entfernt ANSI-Escape-Codes, bevor diese Zeile gelesen wird, daher werden Shell-Start-Banner, die vor Ihrem `echo` gedruckt werden, ignoriert. Leiten Sie jede andere Hook-Ausgabe zu stderr um.
3226* **HTTP-Hooks** (`type: "http"`): Geben Sie `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` im Antwort-Body zurück.3216* **HTTP-Hooks** (`type: "http"`): Geben Sie `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` im Antwort-Body zurück.
3227 3217
3228Wenn der Hook fehlschlägt oder keinen Pfad erzeugt, schlägt die Worktree-Erstellung mit einem Fehler fehl.3218Wenn der Hook fehlschlägt oder keinen Pfad erzeugt, schlägt die Worktree-Erstellung mit einem Fehler fehl.
3229 3219
3230Claude Code löst einen relativen Pfad gegen das Verzeichnis auf, in dem der Hook lief, und bricht alle `.` oder `..` Segmente darin zusammen. Wenn der resultierende Pfad kein Verzeichnis ist, das Claude Code betreten kann, druckt die Sitzung einen Fehler, der den Pfad benennt, und beendet sich mit Code 1.3220Claude Code löst einen relativen Pfad gegen das Verzeichnis auf, in dem der Hook lief, und bricht alle `.` oder `..` Segmente darin zusammen. Wenn der resultierende Pfad kein Verzeichnis ist, das Claude Code betreten kann, druckt die Sitzung einen Fehler, der den Pfad benennt und beendet sich mit Code 1.
3231 3221
3232Claude Code lehnt einen absoluten Pfad ab, der `.` oder `..` Segmente enthält, und jeden Pfad, der durch einen Symlink unterhalb der Repository-Root geht, da ein Symlink, der zum Repository committed ist, den Worktree außerhalb davon umleiten könnte. Der Fehler benennt die abgelehnte Komponente. Geben Sie einen normalisierten Pfad zurück, der nicht durch einen Symlink im Repository geht. Vor v2.1.216 folgte die Worktree-Erstellung dem Pfad des Hooks ohne diese Überprüfung.3222Claude Code verweigert einen absoluten Pfad, der `.` oder `..` Segmente enthält, und jeden Pfad, der durch einen Symlink unterhalb der Repository-Root geht, da ein Symlink, der im Repository committed ist, den Worktree außerhalb davon umleiten könnte. Der Fehler benennt die abgelehnte Komponente. Geben Sie einen normalisierten Pfad zurück, der nicht durch einen Symlink im Repository geht. Vor v2.1.216 folgte die Worktree-Erstellung dem Hook-Pfad ohne diese Überprüfung.
3233 3223
3234<h3 id="worktreeremove">3224<h3 id="worktreeremove">
3235 WorktreeRemove3225 WorktreeRemove
3236</h3>3226</h3>
3237 3227
3238Wird ausgeführt, wenn ein Worktree entfernt wird. Dies ist das Bereinigungsgegenüber zu [WorktreeCreate](#worktreecreate). Das Ereignis wird ausgeführt, wenn:3228Wird ausgeführt, wenn ein Worktree entfernt wird. Dies ist das Cleanup-Gegenstück zu [WorktreeCreate](#worktreecreate). Das Ereignis wird ausgeführt, wenn:
3239 3229
3240* Sie eine `--worktree` Sitzung beenden und wählen, sie zu entfernen3230* Sie eine `--worktree` Sitzung beenden und wählen, sie zu entfernen
3241* Ein Subagent mit `isolation: "worktree"` beendet3231* Ein Subagent mit `isolation: "worktree"` beendet
3242* Sie eine [Hintergrund-Sitzung](/docs/de/agent-view#what-deleting-a-session-removes) löschen, deren Worktree der Hook erstellt hat3232* Sie eine [Hintergrund-Sitzung](/docs/de/agent-view#what-deleting-a-session-removes) löschen, deren Worktree der Hook erstellt hat
3243 3233
3244Für Git-basierte Worktrees verarbeitet Claude Code die Bereinigung automatisch mit `git worktree remove`. Wenn Sie einen WorktreeCreate-Hook für ein nicht-Git-Versionskontrollsystem konfiguriert haben, paaren Sie ihn mit einem WorktreeRemove-Hook, um die Bereinigung zu verarbeiten. Ohne einen wird das Worktree-Verzeichnis auf der Festplatte gelassen.3234Für Git-basierte Worktrees verarbeitet Claude Code Cleanup automatisch mit `git worktree remove`. Wenn Sie einen WorktreeCreate-Hook für ein nicht-Git-Versionskontrollsystem konfiguriert haben, paaren Sie ihn mit einem WorktreeRemove-Hook, um Cleanup zu verarbeiten. Ohne einen bleibt das Worktree-Verzeichnis auf der Festplatte.
3245 3235
3246Claude Code verwirft die [JSON-Ausgabefelder](#json-output) eines WorktreeRemove-Hooks, wie `systemMessage` und `continue`.3236Claude Code verwirft die [JSON-Ausgabefelder](#json-output) eines WorktreeRemove-Hooks, wie `systemMessage` und `continue`.
3247 3237
3248Für einen Hintergrund-Sitzungs-Löschung überprüft Claude Code den gespeicherten Worktree-Pfad, bevor der Hook ausgeführt wird, und lehnt einen Pfad ab, der ein Symlink ist oder durch einen unterhalb der Repository-Root geht. Der Hook wird für einen Worktree, der immer noch Dateien enthält, nur ausgeführt, wenn Sie den Löschvorgang in [Agent-Ansicht](/docs/de/agent-view#what-deleting-a-session-removes) bestätigen; für einen solchen Worktree behält [`claude rm`](/docs/de/agent-view#manage-sessions-from-the-shell) die Sitzung und den Worktree statt. Vor v2.1.216 wurde der Hook auf dem gespeicherten Pfad ohne diese Überprüfungen ausgeführt.3238Für einen Hintergrund-Sitzungs-Löschung überprüft Claude Code den gespeicherten Worktree-Pfad, bevor der Hook ausgeführt wird und verweigert einen Pfad, der ein Symlink ist oder durch einen unterhalb der Repository-Root geht. Der Hook wird für einen Worktree, der immer noch Dateien enthält, nur ausgeführt, wenn Sie den Löschvorgang in [Agent-Ansicht](/docs/de/agent-view#what-deleting-a-session-removes) bestätigen; für einen solchen Worktree behält [`claude rm`](/docs/de/agent-view#manage-sessions-from-the-shell) die Sitzung und den Worktree statt. Vor v2.1.216 wurde der Hook auf dem gespeicherten Pfad ohne diese Überprüfungen ausgeführt.
3249 3239
3250Claude Code übergibt den von WorktreeCreate zurückgegebenen Pfad als `worktree_path` in der Hook-Eingabe. Dieses Beispiel liest diesen Pfad und entfernt das Verzeichnis:3240Claude Code gibt den von WorktreeCreate zurückgegebenen Pfad als `worktree_path` in der Hook-Eingabe weiter. Dieses Beispiel liest diesen Pfad und entfernt das Verzeichnis:
3251 3241
3252```json theme={null}3242```json theme={null}
3253{3243{
3282}3272}
3283```3273```
3284 3274
3285Der Exit-Code eines WorktreeRemove-Hooks entscheidet das Ergebnis. Wenn ein Hook mit nicht-Null beendet wird und das Verzeichnis bei `worktree_path` immer noch danach existiert, schlägt die Entfernung fehl:3275Der Exit-Code eines WorktreeRemove-Hooks entscheidet das Ergebnis. Wenn ein Hook mit nicht-Null beendet wird und das Verzeichnis unter `worktree_path` immer noch danach existiert, schlägt die Entfernung fehl:
3286 3276
3287* Der Worktree bleibt auf der Festplatte, und der Hook-Befehl und stderr gehen zum [Debug-Protokoll](#debug-hooks).3277* Der Worktree bleibt auf der Festplatte, und der Hook-Befehl und stderr gehen ins [Debug-Protokoll](#debug-hooks).
3288* Wenn Sie eine Hintergrund-Sitzung löschten, bleibt die Sitzung auch. Die Verweigerungsmeldung in [Agent-Ansicht](/docs/de/agent-view#what-deleting-a-session-removes) meldet, wie der Hook endete, wie `exited 1`, zitiert den Anfang seines stderr und sagt, ob das Löschen der Sitzung erneut das Verzeichnis trotzdem entfernt.3278* Wenn Sie eine Hintergrund-Sitzung löschten, bleibt die Sitzung auch. Die Verweigerungs-Nachricht in [Agent-Ansicht](/docs/de/agent-view#what-deleting-a-session-removes) meldet, wie der Hook endete, wie `exited 1`, zitiert den Anfang seines stderr und sagt, ob das Löschen der Sitzung erneut das Verzeichnis trotzdem entfernt.
3289 3279
3290<h3 id="precompact">3280<h3 id="precompact">
3291 PreCompact3281 PreCompact
3292</h3>3282</h3>
3293 3283
3294Wird ausgeführt, bevor Claude Code einen Komprimierungsvorgang ausführen möchte.3284Wird ausgeführt, bevor Claude Code einen Compact-Vorgang ausführen möchte.
3295 3285
3296Der Matcher-Wert gibt an, ob die Komprimierung manuell oder automatisch ausgelöst wurde:3286Der Matcher-Wert gibt an, ob Komprimierung manuell oder automatisch ausgelöst wurde:
3297 3287
3298| Matcher | Wann wird es ausgelöst |3288| Matcher | Wann wird es ausgelöst |
3299| :- | :- |3289| :- | :- |
3300| `manual` | `/compact` |3290| `manual` | `/compact` |
3301| `auto` | Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |3291| `auto` | Auto-Compact, wenn die Konversation das [Auto-Compact-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3302 3292
3303Beenden Sie mit Code 2, um die Komprimierung zu blockieren. Für ein manuelles `/compact` wird die stderr-Nachricht dem Benutzer angezeigt. Sie können auch blockieren, indem Sie JSON mit `"decision": "block"` zurückgeben.3293Beenden Sie mit Code 2, um Komprimierung zu blockieren. Für ein manuelles `/compact` wird die stderr-Nachricht dem Benutzer angezeigt. Sie können auch blockieren, indem Sie JSON mit `"decision": "block"` zurückgeben.
3304 3294
3305Das Blockieren der automatischen Komprimierung hat unterschiedliche Auswirkungen, je nachdem, wann es ausgeführt wird. Wenn die Komprimierung proaktiv ausgelöst wurde, bevor das Kontext-Limit erreicht wurde, überspringt Claude Code sie und das Gespräch wird unkomprimiert fortgesetzt. Wenn die Komprimierung ausgelöst wurde, um sich von einem Kontext-Limit-Fehler zu erholen, der bereits von der API zurückgegeben wurde, zeigt sich der zugrunde liegende Fehler und die aktuelle Anfrage schlägt fehl.3295Das Blockieren automatischer Komprimierung hat unterschiedliche Auswirkungen je nachdem, wann es ausgeführt wird. Wenn Komprimierung proaktiv ausgelöst wurde, bevor das Kontext-Limit erreicht wurde, überspringt Claude Code es und die Konversation wird unkomprimiert fortgesetzt. Wenn Komprimierung ausgelöst wurde, um sich von einem Kontext-Limit-Fehler zu erholen, der bereits von der API zurückgegeben wurde, zeigt sich der zugrunde liegende Fehler und die aktuelle Anfrage schlägt fehl.
3306 3296
3307Claude Code verwirft die `systemMessage` und `continue` Felder eines PreCompact-Hooks.3297Claude Code verwirft die `systemMessage` und `continue` Felder eines PreCompact-Hooks.
3308 3298
3327 PostCompact3317 PostCompact
3328</h3>3318</h3>
3329 3319
3330Wird ausgeführt, nachdem Claude Code einen Komprimierungsvorgang abgeschlossen hat. Verwenden Sie dieses Ereignis, um auf den neuen komprimierten Zustand zu reagieren, z. B. um die generierte Zusammenfassung zu protokollieren oder externen Zustand zu aktualisieren. Claude Code verwirft die `systemMessage` und `continue` Felder eines PostCompact-Hooks.3320Wird ausgeführt, nachdem Claude Code einen Compact-Vorgang abgeschlossen hat. Verwenden Sie dieses Ereignis, um auf den neuen komprimierten Zustand zu reagieren, z. B. um die generierte Zusammenfassung zu protokollieren oder externen Zustand zu aktualisieren. Claude Code verwirft die `systemMessage` und `continue` Felder eines PostCompact-Hooks.
3331 3321
3332Die gleichen Matcher-Werte gelten wie für `PreCompact`:3322Die gleichen Matcher-Werte gelten wie für `PreCompact`:
3333 3323
3334| Matcher | Wann wird es ausgelöst |3324| Matcher | Wann wird es ausgelöst |
3335| :- | :- |3325| :- | :- |
3336| `manual` | Nach `/compact` |3326| `manual` | Nach `/compact` |
3337| `auto` | Nach Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |3327| `auto` | Nach Auto-Compact, wenn die Konversation das [Auto-Compact-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3338 3328
3339<h4 id="postcompact-input">3329<h4 id="postcompact-input">
3340 PostCompact-Eingabe3330 PostCompact-Eingabe
3341</h4>3331</h4>
3342 3332
3343Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PostCompact-Hooks `trigger` und `compact_summary`. Das `compact_summary` Feld enthält die Gesprächs-Zusammenfassung, die vom Komprimierungsvorgang generiert wurde.3333Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PostCompact-Hooks `trigger` und `compact_summary`. Das `compact_summary` Feld enthält die Konversations-Zusammenfassung, die vom Compact-Vorgang generiert wurde.
3344 3334
3345```json theme={null}3335```json theme={null}
3346{3336{
3359 PreModelSwitch3349 PreModelSwitch
3360</h3>3350</h3>
3361 3351
3362Wird ausgeführt, bevor Claude Code einen Modell-Wechsel anwendet, den Sie oder ein Client angefordert haben. Verwenden Sie ihn, um einen Wechsel zu blockieren, eine Bestätigung zu erfordern oder zu zeigen, was der Wechsel kostet, bevor er passiert.3352Wird ausgeführt, bevor Claude Code einen Modell-Wechsel anwendet, den Sie oder ein Client angefordert haben. Verwenden Sie ihn, um einen Wechsel zu blockieren, Bestätigung zu erfordern oder zu zeigen, was der Wechsel kostet, bevor er passiert.
3363 3353
3364PreModelSwitch erfordert Claude Code v2.1.251 oder später. Claude Code führt ihn für diese Anfragen aus:3354PreModelSwitch erfordert Claude Code v2.1.251 oder später. Claude Code führt ihn für diese Anfragen aus:
3365 3355
3366* `/model <name>` und der `/model` Picker3356* `/model <name>` und der `/model` Picker
3367* Der `Option+P` oder `Alt+P` Modell-Picker3357* Der `Option+P` oder `Alt+P` Modell-Picker
3368* Die Modell-Einstellung in `/config`3358* Die Modell-Einstellung in `/config`
3369* Das Aktivieren des [Fast-Modus](/docs/de/fast-mode), wenn das das Modell der Sitzung ändert3359* Das Einschalten des [Fast-Modus](/docs/de/fast-mode), wenn das das Modell der Sitzung ändert
3370* Eine `set_model` Anfrage oder eine Modell-Änderung in einer `apply_flag_settings` Anfrage von einem [Agent SDK](/docs/de/agent-sdk/typescript#query-object) Host oder [Remote Control](/docs/de/remote-control)3360* Eine `set_model` Anfrage oder eine Modell-Änderung in einer `apply_flag_settings` Anfrage von einem [Agent SDK](/docs/de/agent-sdk/typescript#query-object) Host oder [Remote Control](/docs/de/remote-control)
3371 3361
3372Claude Code führt PreModelSwitch-Hooks nicht für Wechsel aus, die es selbst macht, wie ein [automatisches Modell-Fallback](/docs/de/model-config#automatic-model-fallback) oder das Wiederherstellen des Modells, wenn Sie eine Sitzung fortsetzen. Diese Änderungen erreichen [PostModelSwitch](#postmodelswitch) nur.3362Claude Code führt PreModelSwitch-Hooks nicht für Wechsel aus, die es selbst macht, wie ein [automatisches Modell-Fallback](/docs/de/model-config#automatic-model-fallback) oder das Wiederherstellen des Modells, wenn Sie eine Sitzung fortsetzen. Diese Änderungen erreichen [PostModelSwitch](#postmodelswitch) nur.
3373 3363
3374Claude Code vergleicht den Matcher gegen den kanonischen Namen des Modells, zu dem die Sitzung wechselt, und ignoriert jeden `[1m]` Suffix. Ein Alias wie `opus`, eine datierte Modell-ID und eine Provider-spezifische ID wie eine Amazon Bedrock Modell-ID gleichen alle den einen kanonischen Namen ab, den sie auflösen, daher deckt `claude-opus-5` jede Schreibweise von Opus 5 ab.3364Claude Code vergleicht den Matcher gegen den kanonischen Namen des Modells, zu dem die Sitzung wechselt, ignoriert jeden `[1m]` Suffix. Ein Alias wie `opus`, eine datierte Modell-ID und eine Provider-spezifische ID wie eine Amazon Bedrock Modell-ID gleichen alle den einen kanonischen Namen ab, den sie auflösen, daher deckt `claude-opus-5` jede Schreibweise von Opus 5 ab.
3375 3365
3376Wenn Claude Code einen kanonischen Namen für das Ziel nicht bestimmen kann, z. B. eine benutzerdefinierte Modell-ID, die nur Ihr [LLM-Gateway](/docs/de/llm-gateway) kennt, führt es jeden PreModelSwitch-Hook unabhängig vom Matcher aus. Ein Hook, der blockiert, sollte daher `to_model` aus seiner Eingabe überprüfen, anstatt sich nur auf den Matcher zu verlassen.3366Wenn Claude Code einen kanonischen Namen für das Ziel nicht bestimmen kann, z. B. eine benutzerdefinierte Modell-ID, die nur Ihr [LLM-Gateway](/docs/de/llm-gateway) kennt, führt es jeden PreModelSwitch-Hook unabhängig vom Matcher aus. Ein Hook, der blockiert, sollte daher `to_model` aus seiner Eingabe überprüfen, anstatt sich nur auf den Matcher zu verlassen.
3377 3367
3447 PreModelSwitch-Eingabe3437 PreModelSwitch-Eingabe
3448</h4>3438</h4>
3449 3439
3450Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PreModelSwitch-Hooks die Felder in dieser Tabelle. Die letzten fünf beschreiben, was das Erneut-Senden des Gesprächs zum neuen Modell kostet, daher kann ein Hook diese Zahl zeigen, bevor der Wechsel passiert.3440Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PreModelSwitch-Hooks die Felder in dieser Tabelle. Die letzten fünf beschreiben, was das Erneut-Senden der Konversation zum neuen Modell kostet, daher kann ein Hook diese Zahl zeigen, bevor der Wechsel passiert.
3451 3441
3452| Feld | Typ | Beschreibung |3442| Feld | Typ | Beschreibung |
3453| :- | :- | :- |3443| :- | :- | :- |
3454| `from_model` | string | Modell-ID, zu der der Wechsel wechselt |3444| `from_model` | string | Modell-ID, von der der Wechsel ändert |
3455| `to_model` | string | Modell-ID, zu der der Wechsel wechselt. Der Matcher vergleicht gegen den kanonischen Namen dieses Modells |3445| `to_model` | string | Modell-ID, zu der der Wechsel ändert. Der Matcher vergleicht gegen den kanonischen Namen dieses Modells |
3456| `requested_model` | string oder `null` | Das Modell, das die Anfrage benannt hat: ein Alias wie `opus`, eine vollständige Modell-ID oder `null`, wenn die Anfrage für das Standard-Modell war |3446| `requested_model` | string oder `null` | Das Modell, das die Anfrage benannt hat: ein Alias wie `opus`, eine vollständige Modell-ID oder `null`, wenn die Anfrage für das Standard-Modell war |
3457| `source` | string | Woher die Anfrage kam: `"command"` für `/model <name>`, die Modell-Einstellung in `/config` oder das Aktivieren des Fast-Modus; `"picker"` für einen Modell-Picker; `"sdk"` für eine `set_model` Anfrage oder eine Modell-Änderung in einer `apply_flag_settings` Anfrage von einem Agent SDK Host oder Remote Control |3447| `source` | string | Woher die Anfrage kam: `"command"` für `/model <name>`, die Modell-Einstellung in `/config` oder das Einschalten des Fast-Modus; `"picker"` für einen Modell-Picker; `"sdk"` für eine `set_model` Anfrage oder eine Modell-Änderung in einer `apply_flag_settings` Anfrage von einem Agent SDK Host oder Remote Control |
3458| `context_tokens` | number | Tokens, die die nächste Anfrage als ihre Eingabeaufforderung erneut sendet: die Eingabe-, Cache-Lese-, Cache-Erstellungs- und Ausgabe-Tokens der letzten Antwort im Hauptgespräch, kombiniert. `0` vor der ersten Antwort |3448| `context_tokens` | number | Token, die die nächste Anfrage erneut sendet als ihre Eingabeaufforderung: die Eingabe-, Cache-Lese-, Cache-Erstellungs- und Ausgabe-Token der letzten Antwort in der Hauptkonversation, kombiniert. `0` vor der ersten Antwort |
3459| `prompt_cache_warm` | boolean | Ob der Prompt-Cache des aktuellen Modells wahrscheinlich noch warm ist, was bedeutet, dass der Wechsel ihn aufgibt |3449| `prompt_cache_warm` | boolean | Ob der Prompt-Cache des aktuellen Modells wahrscheinlich noch warm ist, was bedeutet, dass der Wechsel ihn aufgibt |
3460| `cache_ttl` | string | [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime), die Claude Code für diese Sitzung anfordert: `"5m"` oder `"1h"` |3450| `cache_ttl` | string | [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime), die Claude Code für diese Sitzung anfordert: `"5m"` oder `"1h"` |
3461| `estimated_cache_write_usd` | number | Geschätzte Kosten in US-Dollar für das Schreiben von `context_tokens` in den Prompt-Cache auf `to_model` bei der `cache_ttl` Rate, ohne die nächste Antwort. Der Server muss möglicherweise nicht den ganzen Kontext erneut zwischenspeichern, daher behandeln Sie es als Schätzung |3451| `estimated_cache_write_usd` | number | Geschätzte Kosten in US-Dollar für das Schreiben von `context_tokens` in den Prompt-Cache auf `to_model` bei der `cache_ttl` Rate, ohne die nächste Antwort. Der Server muss möglicherweise nicht den ganzen Kontext erneut zwischenspeichern, daher behandeln Sie es als Schätzung |
3462| `pricing` | string | Wie Claude Code `estimated_cache_write_usd` bepreist: `"configured"` bei den Raten Ihrer Organisation, wenn sie konfiguriert hat, `"catalog"` bei Listenpreis oder `"default"`, wenn `to_model` keinen bekannten Preis hat und Claude Code einen Standard-Satz annahm |3452| `pricing` | string | Wie Claude Code `estimated_cache_write_usd` bepreist: `"configured"` bei den eigenen Sätzen Ihrer Organisation, wenn sie sie konfiguriert hat, `"catalog"` bei Listenpreis oder `"default"`, wenn `to_model` keinen bekannten Preis hat und Claude Code einen Standard-Satz annahm |
3463 3453
3464Dieses Beispiel zeigt die Eingabe für `/model opus` in einer Sitzung, die Sonnet 5 ausführt:3454Dieses Beispiel zeigt die Eingabe für `/model opus` in einer Sitzung, die Sonnet 5 ausführt:
3465 3455
3485 PreModelSwitch-Entscheidungskontrolle3475 PreModelSwitch-Entscheidungskontrolle
3486</h4>3476</h4>
3487 3477
3488`PreModelSwitch` Hooks können den Wechsel abbrechen, den Benutzer zur Bestätigung auffordern oder ihn fortgesetzt lassen. Exit-Code 2 oder ein Top-Level-`decision: "block"` bricht den Wechsel ab.3478`PreModelSwitch` Hooks können den Wechsel abbrechen, den Benutzer zur Bestätigung auffordern oder ihn fortgesetzt lassen. Exit-Code 2 oder ein Top-Level `decision: "block"` bricht den Wechsel ab.
3489 3479
3490Für feinere Kontrolle geben Sie `permissionDecision` und `permissionDecisionReason` in einem `hookSpecificOutput` Objekt zurück, wie auf [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` akzeptiert `"allow"`, `"deny"` und `"ask"`. Es akzeptiert nicht `"defer"`, `updatedInput` oder `additionalContext`. Die Tabelle unten beschreibt beide Felder:3480Für feinere Kontrolle geben Sie `permissionDecision` und `permissionDecisionReason` in einem `hookSpecificOutput` Objekt zurück, wie auf [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` akzeptiert `"allow"`, `"deny"` und `"ask"`. Es akzeptiert nicht `"defer"`, `updatedInput` oder `additionalContext`. Die Tabelle unten beschreibt beide Felder:
3491 3481
3492| Feld | Beschreibung |3482| Feld | Beschreibung |
3493| :- | :- |3483| :- | :- |
3494| `permissionDecision` | `"allow"` fährt fort und überspringt die [Bestätigung, die Claude Code zeigt, während der Prompt-Cache warm ist](/docs/de/prompt-caching#switching-models). `"deny"` bricht den Wechsel ab. `"ask"` fordert den Benutzer zur Bestätigung auf |3484| `permissionDecision` | `"allow"` fährt fort und überspringt die [Bestätigung, die Claude Code zeigt, während der Prompt-Cache warm ist](/docs/de/prompt-caching#switching-models). `"deny"` bricht den Wechsel ab. `"ask"` fordert den Benutzer zur Bestätigung auf |
3495| `permissionDecisionReason` | Für `"deny"`, dem Benutzer als Grund angezeigt, warum der Wechsel blockiert wurde, oder als Fehler für eine `set_model` Anfrage zurückgegeben. Für `"ask"`, in der Bestätigungs-Aufforderung angezeigt. Ignoriert für `"allow"` |3485| `permissionDecisionReason` | Für `"deny"`, dem Benutzer als Grund für die Blockierung des Wechsels angezeigt oder als Fehler für eine `set_model` Anfrage zurückgegeben. Für `"ask"`, in der Bestätigungs-Aufforderung angezeigt. Ignoriert für `"allow"` |
3496 3486
3497Nur `/model` in einer interaktiven Sitzung kann die `"ask"` Aufforderung anzeigen. Auf jeder anderen Oberfläche, einschließlich nicht-interaktivem Modus mit dem `-p` Flag, `/config` und `set_model` Anfragen, behandelt Claude Code `"ask"` als Verweigerung.3487Nur `/model` in einer interaktiven Sitzung kann die `"ask"` Aufforderung anzeigen. Auf jeder anderen Oberfläche, einschließlich nicht-interaktivem Modus mit dem `-p` Flag, `/config` und `set_model` Anfragen, behandelt Claude Code `"ask"` als Verweigerung.
3498 3488
3512 3502
3513Claude Code zeigt dem Benutzer jede `systemMessage`, die Ihr Hook zurückgibt, unabhängig von der Entscheidung, daher kann ein Kosten-Bericht-Hook `{"systemMessage": "..."}` zurückgeben und mit 0 beenden.3503Claude Code zeigt dem Benutzer jede `systemMessage`, die Ihr Hook zurückgibt, unabhängig von der Entscheidung, daher kann ein Kosten-Bericht-Hook `{"systemMessage": "..."}` zurückgeben und mit 0 beenden.
3514 3504
3515Ein PreModelSwitch-Hook, der nicht vor seinem Timeout antwortet, blockiert den Wechsel. Bei [PreToolUse](#timeouts) lässt ein Timeout-Command-Hook den Tool-Aufruf dagegen fortgesetzt. Das Standard-Timeout für dieses Ereignis beträgt 30 Sekunden. `PreModelSwitch` führt nur `command`, `http` und `mcp_tool` Hooks aus, daher gelten die `prompt` und `agent` Standards nicht.3505Ein PreModelSwitch-Hook, der nicht vor seinem Timeout antwortet, blockiert den Wechsel. Auf [PreToolUse](#timeouts) lässt ein Timeout-Command-Hook den Tool-Aufruf dagegen fortgesetzt. Das Standard-Timeout für dieses Ereignis beträgt 30 Sekunden. `PreModelSwitch` führt nur `command`, `http` und `mcp_tool` Hooks aus, daher gelten die `prompt` und `agent` Standards nicht.
3516 3506
3517Ein Hook, der mit einem Code anderen als 0 oder 2 beendet und keine JSON-Entscheidung druckt, blockiert nicht: Claude Code zeigt sein stderr und wendet den Wechsel an, wie unter [Andere Exit-Codes](#other-exit-codes) beschrieben.3507Ein Hook, der mit einem Code anderen als 0 oder 2 beendet und keine JSON-Entscheidung druckt, blockiert nicht: Claude Code zeigt sein stderr und wendet den Wechsel an, wie unter [Andere Exit-Codes](#other-exit-codes) beschrieben.
3518 3508
3559 PostModelSwitch-Eingabe3549 PostModelSwitch-Eingabe
3560</h4>3550</h4>
3561 3551
3562PostModelSwitch-Hooks erhalten die gleichen Felder wie [PreModelSwitch](#premodelswitch-input), mit `hook_event_name` auf `"PostModelSwitch"` gesetzt und zwei weitere `source` Werte: `"auto"` für ein automatisches Fallback oder eine andere Änderung, die Claude Code selbst gemacht hat, und `"resume"` für das Modell, das wiederhergestellt wird, wenn Sie eine Sitzung fortsetzen.3552PostModelSwitch-Hooks erhalten die gleichen Felder wie [PreModelSwitch](#premodelswitch-input), mit `hook_event_name` auf `"PostModelSwitch"` gesetzt und zwei weitere `source` Werte: `"auto"` für ein automatisches Fallback oder eine andere Änderung, die Claude Code selbst gemacht hat, und `"resume"` für das Modell, das wiederhergestellt wurde, wenn Sie eine Sitzung fortsetzen.
3563 3553
3564`requested_model` ist `null`, wenn `source` `"auto"` ist. Wenn `source` `"resume"` ist, ist es die gespeicherte Modell-Einstellung, die Claude Code wiederhergestellt hat.3554`requested_model` ist `null`, wenn `source` `"auto"` ist. Wenn `source` `"resume"` ist, ist es die gespeicherte Modell-Einstellung, die Claude Code wiederhergestellt hat.
3565 3555
3567 PostModelSwitch-Entscheidungskontrolle3557 PostModelSwitch-Entscheidungskontrolle
3568</h4>3558</h4>
3569 3559
3570Claude Code nimmt Ihren Hook-[Klartext-stdout](#exit-code-0) bei Beendigung mit 0 oder `additionalContext` aus JSON-Ausgabe und liefert es an Claude mit der nächsten Anfrage nach dem Wechsel. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:3560Claude Code nimmt Ihren Hook [Klartext-stdout](#exit-code-0) bei Exit 0 oder `additionalContext` aus JSON-Ausgabe und liefert es an Claude mit der nächsten Anfrage nach dem Wechsel. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:
3571 3561
3572| Feld | Beschreibung |3562| Feld | Beschreibung |
3573| :- | :- |3563| :- | :- |
3574| `additionalContext` | String, der zu Claudes Kontext mit der nächsten Anfrage hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |3564| `additionalContext` | String, der zu Claudes Kontext mit der nächsten Anfrage hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
3575 3565
3576Wenn der Hook nicht innerhalb von fünf Sekunden nach dem Senden der nächsten Eingabeaufforderung fertig ist, sendet Claude Code diese Anfrage ohne die Ausgabe und hängt sie stattdessen an die folgende Anfrage an. Wenn sich das Modell mehrmals ändert, bevor die nächste Anfrage erfolgt, liefert Claude Code nur die Ausgabe für den letzten Wechsel zum Ziel-Modell.3566Wenn der Hook nicht innerhalb von fünf Sekunden nach dem Senden der nächsten Eingabeaufforderung fertig wird, sendet Claude Code diese Anfrage ohne die Ausgabe und hängt sie stattdessen an die folgende Anfrage an. Wenn sich das Modell mehrmals ändert, bevor die nächste Anfrage erfolgt, liefert Claude Code nur die Ausgabe für den letzten Wechsel des Ziel-Modells.
3577 3567
3578<h3 id="sessionend">3568<h3 id="sessionend">
3579 SessionEnd3569 SessionEnd
3580</h3>3570</h3>
3581 3571
3582Wird ausgeführt, wenn eine Claude Code Sitzung endet. Nützlich für Bereinigungsaufgaben, Protokollierung von Sitzungs-Statistiken oder Speicherung des Sitzungs-Zustands. Unterstützt Matcher zum Filtern nach Exit-Grund.3572Wird ausgeführt, wenn eine Claude Code Sitzung endet. Nützlich für Cleanup-Aufgaben, Protokollierung von Sitzungs-Statistiken oder Speicherung von Sitzungs-Zustand. Unterstützt Matcher zum Filtern nach Exit-Grund.
3583 3573
3584Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:3574Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:
3585 3575
3608}3598}
3609```3599```
3610 3600
3611SessionEnd-Hooks haben keine Entscheidungskontrolle. Sie können die Sitzungs-Beendigung nicht blockieren, können aber Bereinigungsaufgaben ausführen. Claude Code verwirft ihre [JSON-Ausgabefelder](#json-output), wie `systemMessage`.3601SessionEnd-Hooks haben keine Entscheidungskontrolle. Sie können die Sitzungs-Beendigung nicht blockieren, können aber Cleanup-Aufgaben ausführen. Claude Code verwirft ihre [JSON-Ausgabefelder](#json-output), wie `systemMessage`.
3612 3602
3613SessionEnd-Hooks haben ein Standard-Timeout von 1,5 Sekunden. Es gilt, wenn Sie beenden, `/clear` ausführen oder mit interaktivem `/resume` zu Sitzungen wechseln. Sie können einem Hook auf zwei Wegen mehr Zeit geben:3603SessionEnd-Hooks haben ein Standard-Timeout von 1,5 Sekunden. Es gilt, wenn Sie beenden, `/clear` ausführen oder mit interaktivem `/resume` zwischen Sitzungen wechseln. Sie können einem Hook auf zwei Wegen mehr Zeit geben:
3614 3604
3615* **Pro-Hook `timeout`**: Setzen Sie `timeout` in der Konfiguration dieses Hooks. Das Gesamt-Budget steigt automatisch, um das höchste Pro-Hook-`timeout` in Ihren Einstellungsdateien zu entsprechen, bis zu 60 Sekunden. Wenn Sie das Budget auf diese Weise erhöhen, behält ein Hook ohne sein eigenes `timeout` immer noch den Standard. Timeouts, die auf Plugin-bereitgestellten Hooks gesetzt sind, erhöhen das Budget nicht.3605* **Pro-Hook `timeout`**: Setzen Sie `timeout` in der Konfiguration dieses Hooks. Das Gesamt-Budget steigt automatisch, um dem höchsten Pro-Hook `timeout` in Ihren Einstellungsdateien zu entsprechen, bis zu 60 Sekunden. Wenn Sie das Budget auf diese Weise erhöhen, behält ein Hook ohne seinen eigenen `timeout` immer noch den Standard. Timeouts, die auf Plugin-bereitgestellten Hooks gesetzt sind, erhöhen das Budget nicht.
3616* **`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS`**: Setzen Sie diese Umgebungsvariable in Millisekunden, um das Budget explizit zu überschreiben. Der Wert, den Sie setzen, wird auch zum Timeout für jeden Hook ohne sein eigenes `timeout`.3606* **`CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS`**: Setzen Sie diese Umgebungsvariable in Millisekunden, um das Budget explizit zu überschreiben. Der Wert, den Sie setzen, wird auch zum Timeout für jeden Hook ohne seinen eigenen `timeout`.
3617 3607
3618Dieses Beispiel setzt das Budget auf 5 Sekunden:3608Dieses Beispiel setzt das Budget auf 5 Sekunden:
3619 3609
3621CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude3611CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude
3622```3612```
3623 3613
3624Vor v2.1.268 erhöhte `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` nur das Gesamt-Budget, und ein Hook ohne sein eigenes `timeout` wurde immer noch nach 1,5 Sekunden abgebrochen.3614Vor v2.1.268 erhöhte `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` nur das Gesamt-Budget, und ein Hook ohne seinen eigenen `timeout` wurde immer noch nach 1,5 Sekunden abgebrochen.
3625 3615
3626<h3 id="elicitation">3616<h3 id="elicitation">
3627 Elicitation3617 Elicitation
3635 Elicitation-Eingabe3625 Elicitation-Eingabe
3636</h4>3626</h4>
3637 3627
3638Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten Elicitation-Hooks `mcp_server_name`, `message` und optionale `mode`, `url`, `elicitation_id` und `requested_schema` Felder.3628Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten Elicitation-Hooks `mcp_server_name`, `message` und optional `mode`, `url`, `elicitation_id` und `requested_schema` Felder.
3639 3629
3640Für Form-Modus-Elicitierung, der häufigste Fall:3630Für Form-Modus-Elicitation, der häufigste Fall:
3641 3631
3642```json theme={null}3632```json theme={null}
3643{3633{
3657}3647}
3658```3648```
3659 3649
3660Für URL-Modus-Elicitierung, verwendet für Browser-basierte Authentifizierung:3650Für URL-Modus-Elicitation, verwendet für Browser-basierte Authentifizierung:
3661 3651
3662```json theme={null}3652```json theme={null}
3663{3653{
3676 Elicitation-Ausgabe3666 Elicitation-Ausgabe
3677</h4>3667</h4>
3678 3668
3679Um programmatisch ohne Anzeige des Dialogs zu antworten, geben Sie ein JSON-Objekt mit `hookSpecificOutput` zurück:3669Um programmatisch zu antworten, ohne den Dialog zu zeigen, geben Sie ein JSON-Objekt mit `hookSpecificOutput` zurück:
3680 3670
3681```json theme={null}3671```json theme={null}
3682{3672{
3693| Feld | Werte | Beschreibung |3683| Feld | Werte | Beschreibung |
3694| :- | :- | :- |3684| :- | :- | :- |
3695| `action` | `accept`, `decline`, `cancel` | Ob die Anfrage akzeptiert, abgelehnt oder abgebrochen werden soll |3685| `action` | `accept`, `decline`, `cancel` | Ob die Anfrage akzeptiert, abgelehnt oder abgebrochen werden soll |
3696| `content` | object | Formular-Feldwerte zum Einreichen. Wird nur verwendet, wenn `action` `accept` ist |3686| `content` | object | Formular-Feldwerte zum Einreichen. Nur verwendet, wenn `action` `accept` ist |
3697 3687
3698Exit-Code 2 verweigert die Elicitierung. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.3688Exit-Code 2 verweigert die Elicitation. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.
3699 3689
3700Claude Code handelt `hookSpecificOutput` aus der JSON-Ausgabe eines Elicitation-Hooks und verwirft `systemMessage` und `continue`.3690Claude Code handelt `hookSpecificOutput` aus der JSON-Ausgabe eines Elicitation-Hooks und verwirft `systemMessage` und `continue`.
3701 3691
3703 ElicitationResult3693 ElicitationResult
3704</h3>3694</h3>
3705 3695
3706Wird ausgeführt, nachdem ein Benutzer auf eine MCP-Elicitierung antwortet. Hooks können die Antwort beobachten, ändern oder blockieren, bevor sie an den MCP-Server zurückgesendet wird.3696Wird ausgeführt, nachdem ein Benutzer auf eine MCP-Elicitation antwortet. Hooks können die Antwort beobachten, ändern oder blockieren, bevor sie an den MCP-Server zurückgesendet wird.
3707 3697
3708Das Matcher-Feld gleicht gegen den MCP-Server-Namen ab.3698Das Matcher-Feld gleicht gegen den MCP-Server-Namen ab.
3709 3699
3711 ElicitationResult-Eingabe3701 ElicitationResult-Eingabe
3712</h4>3702</h4>
3713 3703
3714Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ElicitationResult-Hooks `mcp_server_name`, `action` und optionale `mode`, `elicitation_id` und `content` Felder.3704Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ElicitationResult-Hooks `mcp_server_name`, `action` und optional `mode`, `elicitation_id` und `content` Felder.
3715 3705
3716```json theme={null}3706```json theme={null}
3717{3707{
3746| Feld | Werte | Beschreibung |3736| Feld | Werte | Beschreibung |
3747| :- | :- | :- |3737| :- | :- | :- |
3748| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |3738| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |
3749| `content` | object | Überschreibt Formular-Feldwerte. Nur sinnvoll, wenn `action` `accept` ist |3739| `content` | object | Überschreibt Formular-Feldwerte. Nur aussagekräftig, wenn `action` `accept` ist |
3750 3740
3751Exit-Code 2 blockiert die Antwort und ändert die effektive Aktion zu `decline`. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.3741Exit-Code 2 blockiert die Antwort und ändert die effektive Aktion zu `decline`. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.
3752 3742
3804 3794
3805Anstatt einen Bash-Befehl auszuführen, Prompt-basierte Hooks:3795Anstatt einen Bash-Befehl auszuführen, Prompt-basierte Hooks:
3806 3796
38071. Senden die Hook-Eingabe und Ihren Prompt an ein Claude-Modell, standardmäßig Haiku37971. Senden die Hook-Eingabe und Ihren Prompt an ein Claude-Modell, standardmäßig das Modell, das Claude Code für [Hintergrundfunktionalität](/docs/de/costs#background-token-usage) verwendet
38082. Das LLM antwortet mit strukturiertem JSON, das eine Entscheidung enthält37982. Das LLM antwortet mit strukturiertem JSON, das eine Entscheidung enthält
38093. Claude Code verarbeitet die Entscheidung automatisch37993. Claude Code verarbeitet die Entscheidung automatisch
3810 3800
3837| :- | :- | :- |3827| :- | :- | :- |
3838| `type` | ja | Muss `"prompt"` sein |3828| `type` | ja | Muss `"prompt"` sein |
3839| `prompt` | ja | Der Prompt-Text zum Senden an das LLM. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe JSON. Wenn `$ARGUMENTS` nicht vorhanden ist, wird die Eingabe JSON an den Prompt angehängt |3829| `prompt` | ja | Der Prompt-Text zum Senden an das LLM. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe JSON. Wenn `$ARGUMENTS` nicht vorhanden ist, wird die Eingabe JSON an den Prompt angehängt |
3840| `model` | nein | Modell zur Verwendung für die Evaluierung. Standardwert ist ein schnelles Modell |3830| `model` | nein | Modell zur Verwendung für die Evaluierung. Standardwert ist das Modell, das Claude Code für [Hintergrundfunktionalität](/docs/de/costs#background-token-usage) verwendet |
3841| `timeout` | nein | Timeout in Sekunden. Standard: 30 |3831| `timeout` | nein | Timeout in Sekunden. Standard: 30 |
3842| `continueOnBlock` | nein | Bei den Ereignissen, auf die es zutrifft, speist `true` einen `ok: false` Grund an Claude zurück und setzt den Turn fort, anstatt ihn zu beenden. Standard: `false`. Siehe [Response-Schema](#response-schema) für ereignisspezifisches Verhalten |3832| `continueOnBlock` | nein | Bei den Ereignissen, auf die es zutrifft, speist `true` einen `ok: false` Grund an Claude zurück und setzt den Turn fort, anstatt ihn zu beenden. Standard: `false`. Siehe [Response-Schema](#response-schema) für ereignisspezifisches Verhalten |
3843 3833