274 274
275Hooks aus Einstellungsdateien, verwalteten Richtlinieneinstellungen und Plugins werden auch in [Subagents](/docs/de/sub-agents) ausgeführt. Wenn ein Subagent ein Tool aufruft, werden Tool-Ereignisse wie `PreToolUse` und `PostToolUse` die gleichen konfigurierten Hooks wie im Hauptgespräch ausgelöst, und die Eingabe enthält die [gemeinsamen Eingabefelder](#common-input-fields) `agent_id` und `agent_type`, die den Subagent identifizieren.275Hooks aus Einstellungsdateien, verwalteten Richtlinieneinstellungen und Plugins werden auch in [Subagents](/docs/de/sub-agents) ausgeführt. Wenn ein Subagent ein Tool aufruft, werden Tool-Ereignisse wie `PreToolUse` und `PostToolUse` die gleichen konfigurierten Hooks wie im Hauptgespräch ausgelöst, und die Eingabe enthält die [gemeinsamen Eingabefelder](#common-input-fields) `agent_id` und `agent_type`, die den Subagent identifizieren.
276 276
277Unternehmensadministratoren können `allowManagedHooksOnly` verwenden, um einzuschränken, welche Hooks ausgeführt werden:277Unternehmensadministratoren können [`allowManagedHooksOnly`](/docs/de/settings-reference#allowmanagedhooksonly) in [verwalteten Einstellungen](/docs/de/managed-settings) verwenden, um einzuschränken, welche Hooks ausgeführt werden:
278 278
279* Ihre Benutzer-, Projekt-, lokalen und Plugin-Hooks werden blockiert. Hooks aus Plugins, die in verwalteten Einstellungen `enabledPlugins` erzwungen aktiviert sind, sind ausgenommen279* Ihre Benutzer-, Projekt-, lokalen und Plugin-Hooks werden blockiert. Hooks aus Plugins, die in verwalteten Einstellungen `enabledPlugins` erzwungen aktiviert sind, sind ausgenommen
280* Claude Code schränkt auch Ihre [`statusLine`](/docs/de/statusline), [`fileSuggestion`](/docs/de/settings-reference#filesuggestion) und [`subagentStatusLine`](/docs/de/statusline#subagent-status-lines) Einstellungen auf verwaltete Einstellungen ein280* Claude Code schränkt auch Ihre [`statusLine`](/docs/de/statusline), [`fileSuggestion`](/docs/de/settings-reference#filesuggestion) und [`subagentStatusLine`](/docs/de/statusline#subagent-status-lines) Einstellungen auf verwaltete Einstellungen ein
304 304
305Ein Matcher auf dem Pfad des regulären Ausdrucks wird mit `RegExp.prototype.test` von JavaScript getestet, was bei einer Übereinstimmung an einer beliebigen Stelle im Wert erfolgreich ist. `Edit.*` passt sowohl auf `Edit` als auch auf `NotebookEdit`; umgeben Sie das Muster mit `^` und `$`, wie in `^Edit$`, wenn Sie eine Übereinstimmung mit der gesamten Zeichenkette benötigen.305Ein Matcher auf dem Pfad des regulären Ausdrucks wird mit `RegExp.prototype.test` von JavaScript getestet, was bei einer Übereinstimmung an einer beliebigen Stelle im Wert erfolgreich ist. `Edit.*` passt sowohl auf `Edit` als auch auf `NotebookEdit`; umgeben Sie das Muster mit `^` und `$`, wie in `^Edit$`, wenn Sie eine Übereinstimmung mit der gesamten Zeichenkette benötigen.
306 306
307Bindestriche in der exakten Übereinstimmungsmenge erfordern Claude Code v2.1.195 oder später. In früheren Versionen wird ein Name mit Bindestrich wie `code-reviewer` als nicht verankerter regulärer Ausdruck ausgewertet, sodass er auch für `senior-code-reviewer` ausgelöst wird; verankern Sie ihn als `^code-reviewer$` in diesen Versionen, um nur diesen Namen abzugleichen.
308
309`FileChanged` und `StopFailure` verwenden einen engeren exakten Übereinstimmungssatz von nur Buchstaben, Ziffern, `_` und `|`. Ein Bindestrich, Leerzeichen oder Komma in einem Matcher für diese beiden Ereignisse hält ihn auf dem Pfad des regulären Ausdrucks, und nur `|` trennt Alternativen. Jedes andere Ereignis mit Matcher-Unterstützung in der folgenden Tabelle akzeptiert `|` oder `,`.307`FileChanged` und `StopFailure` verwenden einen engeren exakten Übereinstimmungssatz von nur Buchstaben, Ziffern, `_` und `|`. Ein Bindestrich, Leerzeichen oder Komma in einem Matcher für diese beiden Ereignisse hält ihn auf dem Pfad des regulären Ausdrucks, und nur `|` trennt Alternativen. Jedes andere Ereignis mit Matcher-Unterstützung in der folgenden Tabelle akzeptiert `|` oder `,`.
310 308
311Das Ereignis `FileChanged` folgt diesen Regeln nicht, wenn es seine Beobachtungsliste erstellt. Siehe [FileChanged](#filechanged).309Das Ereignis `FileChanged` folgt diesen Regeln nicht, wenn es seine Beobachtungsliste erstellt. Siehe [FileChanged](#filechanged).
380* `mcp__brave-search__.*` passt auf alle Tools von einem Server, dessen Name einen Bindestrich enthält378* `mcp__brave-search__.*` passt auf alle Tools von einem Server, dessen Name einen Bindestrich enthält
381* `mcp__.*__write.*` passt auf jedes Tool, dessen Name mit `write` beginnt, von jedem Server379* `mcp__.*__write.*` passt auf jedes Tool, dessen Name mit `write` beginnt, von jedem Server
382 380
383Bindestriche in der exakten Übereinstimmungsmenge erfordern Claude Code v2.1.195 oder später. In früheren Versionen wird ein bloßes Präfix mit Bindestrich wie `mcp__brave-search` als nicht verankerter regulärer Ausdruck ausgewertet und passt auf jedes Tool von diesem Server. Die Form `mcp__brave-search__.*` funktioniert auf jeder Version.
384
385Tools von einem [Plugin-gebündelten MCP-Server](/docs/de/mcp#plugin-provided-mcp-servers) verwenden ein bereichsbezogenes Server-Segment, das den Plugin-Namen enthält: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Ein Matcher, der gegen den bloßen Server-Schlüssel geschrieben wird, wird nie für diese Tools ausgelöst. Für ein Plugin namens `my-plugin`, das einen Server unter dem Schlüssel `db` bündelt, erscheint ein `query`-Tool als `mcp__plugin_my-plugin_db__query`, sodass der Matcher für jedes Tool von diesem Server `mcp__plugin_my-plugin_db__.*` ist. Verwenden Sie denselben bereichsbezogenen Tool-Namen im Feld [`if`](#common-fields) eines Handlers. Siehe [Plugin-bereitgestellte MCP-Server](/docs/de/mcp#plugin-provided-mcp-servers) für die Erstellung des bereichsbezogenen Namens.381Tools von einem [Plugin-gebündelten MCP-Server](/docs/de/mcp#plugin-provided-mcp-servers) verwenden ein bereichsbezogenes Server-Segment, das den Plugin-Namen enthält: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Ein Matcher, der gegen den bloßen Server-Schlüssel geschrieben wird, wird nie für diese Tools ausgelöst. Für ein Plugin namens `my-plugin`, das einen Server unter dem Schlüssel `db` bündelt, erscheint ein `query`-Tool als `mcp__plugin_my-plugin_db__query`, sodass der Matcher für jedes Tool von diesem Server `mcp__plugin_my-plugin_db__.*` ist. Verwenden Sie denselben bereichsbezogenen Tool-Namen im Feld [`if`](#common-fields) eines Handlers. Siehe [Plugin-bereitgestellte MCP-Server](/docs/de/mcp#plugin-provided-mcp-servers) für die Erstellung des bereichsbezogenen Namens.
386 382
387Dieses Beispiel protokolliert alle Memory-Server-Operationen und validiert Schreibvorgänge von jedem MCP-Server:383Dieses Beispiel protokolliert alle Memory-Server-Operationen und validiert Schreibvorgänge von jedem MCP-Server:
919| :- | :- | :- |915| :- | :- | :- |
920| `PreToolUse` | Ja | Blockiert den Tool-Aufruf |916| `PreToolUse` | Ja | Blockiert den Tool-Aufruf |
921| `PermissionRequest` | Nein | Exit-Code 2 wird für diesen Event nicht berücksichtigt und der Berechtigungsfluss wird unverändert fortgesetzt. Verweigern Sie stattdessen durch das [`decision`-Objekt](#permissionrequest-decision-control) |917| `PermissionRequest` | Nein | Exit-Code 2 wird für diesen Event nicht berücksichtigt und der Berechtigungsfluss wird unverändert fortgesetzt. Verweigern Sie stattdessen durch das [`decision`-Objekt](#permissionrequest-decision-control) |
922| `UserPromptSubmit` | Ja | Blockiert die Prompt-Verarbeitung und löscht den Prompt |918| `UserPromptSubmit` | Ja | Blockiert den Prompt, sodass er Claude nie erreicht. Siehe [Was ein blockierter Prompt hinterlässt](#what-a-blocked-prompt-leaves-behind) |
923| `UserPromptExpansion` | Ja | Blockiert die Erweiterung |919| `UserPromptExpansion` | Ja | Blockiert die Erweiterung |
924| `Stop` | Ja | Verhindert, dass Claude stoppt, setzt die Konversation fort |920| `Stop` | Ja | Verhindert, dass Claude stoppt, setzt die Konversation fort |
925| `SubagentStop` | Ja | Verhindert, dass der Subagent stoppt |921| `SubagentStop` | Ja | Verhindert, dass der Subagent stoppt |
1177 1173
1178Wird ausgeführt, wenn Claude Code eine neue Sitzung startet oder eine vorhandene Sitzung fortsetzt. Nützlich zum Laden von Entwicklungskontext wie vorhandenen Problemen oder kürzlichen Änderungen an Ihrer Codebasis oder zum Einrichten von Umgebungsvariablen. Für statischen Kontext, der kein Skript erfordert, verwenden Sie stattdessen [CLAUDE.md](/docs/de/memory).1174Wird ausgeführt, wenn Claude Code eine neue Sitzung startet oder eine vorhandene Sitzung fortsetzt. Nützlich zum Laden von Entwicklungskontext wie vorhandenen Problemen oder kürzlichen Änderungen an Ihrer Codebasis oder zum Einrichten von Umgebungsvariablen. Für statischen Kontext, der kein Skript erfordert, verwenden Sie stattdessen [CLAUDE.md](/docs/de/memory).
1179 1175
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.1176SessionStart 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 Fall, dass `mcp_tool` Hooks ausgeführt werden.
1181 1177
1182Der Matcher-Wert entspricht der Art, wie die Sitzung initiiert wurde:1178Der Matcher-Wert entspricht der Art, wie die Sitzung initiiert wurde:
1183 1179
1187| `resume` | `--resume`, `--continue` oder `/resume` |1183| `resume` | `--resume`, `--continue` oder `/resume` |
1188| `clear` | `/clear` |1184| `clear` | `/clear` |
1189| `compact` | Automatische oder manuelle Komprimierung |1185| `compact` | Automatische oder manuelle Komprimierung |
1190| `fork` | Eine neue Sitzung, die aus einer vorhandenen abgezweigt wurde: `--fork-session` mit `--resume` oder `--continue`, die `/fork` Hintergrundkopie oder `/branch` |1186| `fork` | Eine neue Sitzung, die aus einer vorhandenen abgezweigt wurde: `--fork-session` mit `--resume` oder `--continue`, die `/fork` Hintergrundkopie, `/branch` oder eine Konversation, die Sie [in den Hintergrund verschieben](/docs/de/agent-view#from-inside-a-session) |
1191 1187
1192Vor v2.1.214 meldeten abgezweigte Sitzungen die Quelle `"resume"`.1188Vor v2.1.214 meldeten abgezweigte Sitzungen die Quelle `"resume"`.
1193 1189
1194Wenn 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.1190Wenn 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 Konversation, die Sie fortgesetzt haben, 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.
1195 1191
1196Wenn Sie ein Gespräch mit `/resume` innerhalb einer Sitzung 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.1192Wenn Sie Konversationen mit `/resume` innerhalb einer Sitzung 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 ausgeführt werden, gilt nichts, was sie zurückgeben, für die Sitzung.
1197 1193
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.1194Die gleiche Wartezeit gilt beim Start, einschließlich einer fortgesetzten Sitzung: eine Eingabeaufforderung, die Sie senden, während SessionStart-Hooks noch ausgeführt werden, erreicht Claude erst, wenn sie fertig sind.
1199 1195
1200Während des Wartens drücken Sie `Esc`, um die Eingabeaufforderung ohne Senden zurück in die Eingabe zu nehmen. Die Hooks laufen weiter.1196Während einer dieser Wartezeiten können Sie `Esc` drücken, um die Eingabeaufforderung ohne Senden zurück in die Eingabe zu nehmen. Die Hooks werden weiterhin ausgeführt.
1201 1197
1202<h4 id="sessionstart-input">1198<h4 id="sessionstart-input">
1203 SessionStart-Eingabe1199 SessionStart-Eingabe
1208| Feld | Beschreibung |1204| Feld | Beschreibung |
1209| :- | :- |1205| :- | :- |
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 |1206| `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 |
1211| `model` | Der aktive Modellbezeichner. Er kann weggelassen werden, z. B. nach `/clear` oder wenn eine Sitzung durch Gesprächswiederherstellung wiederhergestellt wird, daher überprüfen Sie das Feld vor dem Lesen |1207| `model` | Der aktive Modellbezeichner. Er 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 |
1212| `agent_type` | Der Agent-Name, vorhanden, wenn Sie Claude Code mit `claude --agent <name>` starten |1208| `agent_type` | Der Agent-Name, vorhanden, wenn Sie Claude Code mit `claude --agent <name>` starten |
1213| `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 |1209| `session_title` | Der aktuelle Sitzungstitel, falls bereits gesetzt, z. B. über `--name`, `/rename`, einen Hook-`sessionTitle` oder das Agent SDK `renameSession()`. 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 |
1214 1210
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 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.1211Eine Sitzung, die Sie nicht benannt haben, kann immer noch einen [generierten Titel](/docs/de/sessions#name-your-sessions) haben. Dieser Titel ist kein benutzerdefinierter Titel und erscheint nicht in `session_title`.
1212
1213Wenn `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, welche Kosten das Fortsetzen einer veralteten Konversation vor der ersten Anfrage verursacht, z. B. in einer [`systemMessage`](#json-output). Diese Felder erfordern Claude Code v2.1.251 oder später.
1216 1214
1217| Feld | Beschreibung |1215| Feld | Beschreibung |
1218| :- | :- |1216| :- | :- |
1219| `seconds_since_last_response` | Wanduhr-Sekunden seit der letzten Antwort im fortgesetzten Transkript |1217| `seconds_since_last_response` | Echtzeit-Sekunden seit der letzten Antwort im fortgesetzten Transkript |
1220| `context_tokens` | Token, die die erste Anfrage der fortgesetzten Sitzung als ihre Eingabeaufforderung erneut sendet |1218| `context_tokens` | Token, die die erste Anfrage der fortgesetzten Sitzung als ihre Eingabeaufforderung erneut sendet |
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 das zwischengespeicherte Gespräch ersetzt hat |1219| `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 |
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 |1220| `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 |
1223 1221
1224Dieses Beispiel zeigt die Eingabe für eine Sitzung, die 90 Minuten nach ihrer letzten Antwort fortgesetzt wurde:1222Dieses Beispiel zeigt die Eingabe für eine Sitzung, die 90 Minuten nach ihrer letzten Antwort fortgesetzt wurde:
1246 1244
1247| Feld | Beschreibung |1245| Feld | Beschreibung |
1248| :- | :- |1246| :- | :- |
1249| `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) für die Lieferung des Textes und was darin enthalten sein sollte |1247| `additionalContext` | String, der zu Claudes Kontext am Anfang der Konversation vor der ersten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) für die Lieferweise und was Sie darin einfügen sollten |
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 |1248| `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 |
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 |1249| `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 |
1252| `watchPaths` | Array von absoluten Pfaden zum Überwachen von [FileChanged](#filechanged) Ereignissen während dieser Sitzung |1250| `watchPaths` | Array von absoluten Pfaden zum Überwachen von [FileChanged](#filechanged) Ereignissen während dieser Sitzung |
1324 Setup1322 Setup
1325</h3>1323</h3>
1326 1324
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 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).1325Wird 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 Initialisierung pro Sitzung verwenden Sie stattdessen [SessionStart](#sessionstart).
1328 1326
1329Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:1327Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:
1330 1328
1333| `init` | `claude --init-only` oder `claude -p --init` |1331| `init` | `claude --init-only` oder `claude -p --init` |
1334| `maintenance` | `claude -p --maintenance` |1332| `maintenance` | `claude -p --maintenance` |
1335 1333
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 ein Gespräch zu starten.1334Wenn 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.
1337 1335
1338Wenn 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.1336Wenn 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.
1339 1337
1340Bei Erfolg druckt `--init-only` nichts auf dem 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.1338Bei 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.
1341 1339
1342Da Setup nicht bei jedem Start ausgeführt wird, kann sich ein Plugin, das eine Abhängigkeit installiert haben muss, 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.1340Da Setup nicht bei jedem Start ausgeführt wird, kann sich ein Plugin, das eine Abhängigkeit installiert haben muss, 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) 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.
1343 1341
1344<h4 id="setup-input">1342<h4 id="setup-input">
1345 Setup-Eingabe1343 Setup-Eingabe
1361 Setup-Entscheidungskontrolle1359 Setup-Entscheidungskontrolle
1362</h4>1360</h4>
1363 1361
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.1362Setup-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` erscheinen stdout, stderr und Exit-Code eines Setup-Hooks in der Ausgabe des Laufs nur als [`hook_response` Ereignisse](/docs/de/headless#read-session-metadata), wenn Sie mit `--output-format stream-json --verbose` starten.
1365 1363
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.1364Setup-Hooks haben Zugriff auf `CLAUDE_ENV_FILE`. Variablen, die in diese Datei geschrieben werden, bleiben für nachfolgende Bash-Befehle 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.
1367 1365
1368<h3 id="instructionsloaded">1366<h3 id="instructionsloaded">
1369 InstructionsLoaded1367 InstructionsLoaded
1388| `load_reason` | Warum die Datei geladen wurde: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` oder `"compact"`. Der `"compact"` Wert wird ausgelöst, wenn Anweisungsdateien nach einem Komprimierungsereignis erneut geladen werden |1386| `load_reason` | Warum die Datei geladen wurde: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` oder `"compact"`. Der `"compact"` Wert wird ausgelöst, wenn Anweisungsdateien nach einem Komprimierungsereignis erneut geladen werden |
1389| `globs` | Pfad-Glob-Muster aus dem `paths:` Frontmatter der Datei, falls vorhanden. Nur für `path_glob_match` Ladevorgänge vorhanden |1387| `globs` | Pfad-Glob-Muster aus dem `paths:` Frontmatter der Datei, falls vorhanden. Nur für `path_glob_match` Ladevorgänge vorhanden |
1390| `trigger_file_path` | Pfad zur Datei, deren Zugriff diesen Ladevorgang ausgelöst hat, für träge Ladevorgänge |1388| `trigger_file_path` | Pfad zur Datei, deren Zugriff diesen Ladevorgang ausgelöst hat, für träge Ladevorgänge |
1391| `parent_file_path` | Pfad zur übergeordneten Anweisungsdatei, die diese eingebunden hat, für `include` Ladevorgänge |1389| `parent_file_path` | Pfad zur übergeordneten Anweisungsdatei, die diese importiert hat, für `include` Ladevorgänge |
1392 1390
1393```json theme={null}1391```json theme={null}
1394{1392{
1412 UserPromptSubmit1410 UserPromptSubmit
1413</h3>1411</h3>
1414 1412
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/dem Gespräch hinzuzufügen, Eingabeaufforderungen zu validieren oder bestimmte Arten von Eingabeaufforderungen zu blockieren.1413Wird 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.
1416 1414
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.1415`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.
1418 1416
1426 1424
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.1425Zusä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.
1428 1426
1427UserPromptSubmit-Hooks erhalten auch `session_title`, wenn die Sitzung einen benutzerdefinierten Titel hat, mit der gleichen Bedeutung wie das [SessionStart `session_title` Feld](#sessionstart-input).
1428
1429```json theme={null}1429```json theme={null}
1430{1430{
1431 "session_id": "abc123",1431 "session_id": "abc123",
1443 1443
1444`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.
1445 1445
1446Es gibt zwei Möglichkeiten, Kontext zum Gespräch beim Exit-Code 0 hinzuzufügen:1446Es gibt zwei Möglichkeiten, Kontext zur Konversation beim Exit-Code 0 hinzuzufügen:
1447 1447
1448* **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
1449* **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
1454 1454
1455| Feld | Beschreibung |1455| Feld | Beschreibung |
1456| :- | :- |1456| :- | :- |
1457| `decision` | `"block"` verhindert, dass die Eingabeaufforderung verarbeitet wird und löscht sie aus dem Kontext. Weglassen, um die Eingabeaufforderung fortzusetzen |1457| `decision` | `"block"` verhindert, dass die Eingabeaufforderung verarbeitet wird. Weglassen, um die Eingabeaufforderung fortzufahren |
1458| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist. Wird nicht zum Kontext hinzugefügt |1458| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist. Nicht zum Kontext hinzugefügt |
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) |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) |
1460| `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 |
1461| `suppressOriginalPrompt` | Wenn `true`, wenn `decision` `"block"` ist, wird der ursprüngliche Eingabeaufforderungstext aus der angezeigten Blockierungsnachricht weggelassen |1461| `suppressOriginalPrompt` | Wenn `true`, wenn der Hook die Eingabeaufforderung blockiert, wird der ursprüngliche Eingabeaufforderungstext aus der Blockierungsmeldung weggelassen. Siehe [Was eine blockierte Eingabeaufforderung hinterlässt](#what-a-blocked-prompt-leaves-behind) |
1462 1462
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 wird nicht zum Kontext hinzugefügt.1463Ein Hook, der durch Beendigung mit 2 blockiert, leitet auf die gleiche Weise wie `reason` weiter: Die Blockierungsmeldung zeigt dem Benutzer den stderr-Text an und wird nicht zum Kontext hinzugefügt.
1464 1464
1465```json theme={null}1465```json theme={null}
1466{1466{
1469 "hookSpecificOutput": {1469 "hookSpecificOutput": {
1470 "hookEventName": "UserPromptSubmit",1470 "hookEventName": "UserPromptSubmit",
1471 "additionalContext": "My additional context here",1471 "additionalContext": "My additional context here",
1472 "sessionTitle": "My session title"1472 "sessionTitle": "My session title",
1473 "suppressOriginalPrompt": true
1473 }1474 }
1474}1475}
1475```1476```
1476 1477
1478<h4 id="what-a-blocked-prompt-leaves-behind">
1479 Was eine blockierte Eingabeaufforderung hinterlässt
1480</h4>
1481
1482Eine blockierte Eingabeaufforderung erreicht Claude nie, aber ihr Text wird nicht überall entfernt. Standardmäßig endet die Blockierungsmeldung, die dem Benutzer angezeigt wird, mit `Original prompt:` gefolgt vom eingereichten Text, und Claude Code schreibt diese Nachricht in die Transkript-Datei der Sitzung auf der Festplatte. Um den Text aus der Nachricht wegzulassen, drucken Sie JSON mit `"suppressOriginalPrompt": true` in `hookSpecificOutput`. Dies funktioniert, ob der Hook mit `decision: "block"` oder durch Beendigung mit 2 blockiert. Ein Exit-2-Hook, der kein JSON druckt, erhält immer den Eingabeaufforderungstext in seiner Blockierungsmeldung.
1483
1484`suppressOriginalPrompt` ändert nur die Blockierungsmeldung. Der eingereichte Text kann immer noch in lokalen Dateien wie der Sitzungs-Transkript und Ihrer Eingabeaufforderungs-Historie angezeigt werden, daher ist ein blockierender Hook keine Möglichkeit, ein Geheimnis von der Festplatte zu halten. Um diese Dateien zu begrenzen oder zu entfernen, siehe [Klartext-Speicherung](/docs/de/claude-directory#plaintext-storage) und [Lokale Daten löschen](/docs/de/claude-directory#clear-local-data).
1485
1477<h3 id="userpromptexpansion">1486<h3 id="userpromptexpansion">
1478 UserPromptExpansion1487 UserPromptExpansion
1479</h3>1488</h3>
1480 1489
1481Wird 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 Aufrufe 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.1490Wird 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.
1482 1491
1483Dieses Ereignis deckt den Pfad ab, den `PreToolUse` nicht abdeckt: Ein `PreToolUse` Hook, der das `Skill` Tool abgleicht, wird nur ausgelöst, wenn Claude das Tool aufruft, aber das direkte Eingeben von `/skillname` umgeht `PreToolUse`. `UserPromptExpansion` wird auf diesem direkten Pfad ausgelöst.1492Dieses Ereignis deckt den Pfad ab, den `PreToolUse` nicht abdeckt: Ein `PreToolUse` Hook, der das `Skill` Tool abgleicht, wird nur ausgelöst, wenn Claude das Tool aufruft, aber das direkte Eingeben von `/skillname` umgeht `PreToolUse`. `UserPromptExpansion` wird auf diesem direkten Pfad ausgelöst.
1484 1493
1485Gleicht `command_name` ab. Lassen Sie den Matcher leer, um bei jedem Eingabeaufforderungs-Befehl zu aktivieren.1494Gleicht `command_name` ab. Lassen Sie den Matcher leer, um bei jeder Eingabeaufforderungs-Typ-Befehl ausgelöst zu werden.
1486 1495
1487<h4 id="userpromptexpansion-input">1496<h4 id="userpromptexpansion-input">
1488 UserPromptExpansion-Eingabe1497 UserPromptExpansion-Eingabe
1513 1522
1514| Feld | Beschreibung |1523| Feld | Beschreibung |
1515| :- | :- |1524| :- | :- |
1516| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um ihn fortzusetzen |1525| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um ihn fortzufahren |
1517| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist |1526| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist |
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) |1527| `additionalContext` | String, der zu Claudes Kontext neben der erweiterten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
1519 1528
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.1529Ein Hook, der durch Beendigung mit 2 blockiert, leitet auf die gleiche Weise wie `reason` weiter: Die Blockierungsmeldung zeigt dem Benutzer den stderr-Text an.
1521 1530
1522```json theme={null}1531```json theme={null}
1523{1532{
1534 MessageDisplay1543 MessageDisplay
1535</h3>1544</h3>
1536 1545
1537Wird ausgeführt, während eine Assistenten-Nachricht auf den Bildschirm gestreamt wird. Claude Code zeigt die Nachricht in Schritten an: Jedes Mal, wenn ein Batch neu fertiggestellter Zeilen zum Rendern bereit ist, wird der Hook einmal mit diesen Zeilen ausgeführt und Claude Code rendert den Ersatztext des Hooks an ihrer Stelle. Eine lange Nachricht erzeugt mehrere Aufrufe; eine kurze Nachricht kann nur einen erzeugen.1546Wird ausgeführt, während eine Assistenten-Nachricht auf den Bildschirm gestreamt wird. Claude Code zeigt die Nachricht in Inkrementen an: Jedes Mal, wenn ein Batch neu abgeschlossener Zeilen zum Rendern bereit ist, wird der Hook einmal mit diesen Zeilen ausgeführt und Claude Code rendert den Ersatztext des Hooks an ihrer Stelle. Eine lange Nachricht erzeugt mehrere Aufrufe; eine kurze Nachricht kann nur einen erzeugen.
1538 1547
1539Verwenden Sie MessageDisplay für:1548Verwenden Sie MessageDisplay für:
1540 1549
1546 1555
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.1556MessageDisplay 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.
1548 1557
1549MessageDisplay unterstützt keine Matcher und wird für jede Assistenten-Nachricht ausgelöst, die Text streamt; Nachrichten ohne Text, wie nur Tool-Aufrufe, lösen es nicht aus.1558MessageDisplay unterstützt keine Matcher und wird für jede Assistenten-Nachricht ausgelöst, die Text streamt; Nachrichten ohne Text, wie nur Tool-Aufruf-Antworten, lösen es nicht aus.
1550 1559
1551In nicht-interaktiven Läufen, einschließlich Agent SDK Abfragen und `claude -p`, wird MessageDisplay einmal pro Assistenten-Nachricht statt einmal pro Batch von Zeilen ausgeführt. Der einzelne Aufruf kommt an, nachdem die Nachricht abgeschlossen ist und trägt den vollständigen Nachrichtentext: `index` ist `0`, `final` ist `true` und `delta` hält die gesamte Nachricht. Ein Hook, der den `delta` Text für jede Nachricht sammelt, empfängt den gleichen Gesamttext in beiden Modi.1560In nicht-interaktiven Läufen, einschließlich Agent SDK Abfragen und `claude -p`, wird MessageDisplay einmal pro Assistenten-Nachricht statt einmal pro Batch von Zeilen ausgeführt. Der einzelne Aufruf kommt nach Abschluss der Nachricht und trägt den vollständigen Nachrichtentext: `index` ist `0`, `final` ist `true` und `delta` enthält die gesamte Nachricht. Ein Hook, der den `delta` Text für jede Nachricht sammelt, empfängt den gleichen Gesamttext in beiden Modi.
1552 1561
1553<h4 id="messagedisplay-input">1562<h4 id="messagedisplay-input">
1554 MessageDisplay-Eingabe1563 MessageDisplay-Eingabe
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 |1571| `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 |
1563| `index` | Nullbasierter Index dieses Batches innerhalb der Nachricht |1572| `index` | Nullbasierter Index dieses Batches innerhalb der Nachricht |
1564| `final` | `true` beim letzten Batch der Nachricht. Jede Nachricht hat genau einen finalen Batch |1573| `final` | `true` beim letzten Batch der Nachricht. Jede Nachricht hat genau einen finalen Batch |
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 möglicherweise mitten in einer Zeile endet. In interaktiven Läufen ist das Delta des finalen Batches leer, wenn die Nachricht auf 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 |1574| `delta` | Die neu abgeschlossenen Zeilen seit dem vorherigen Batch, einschließlich Zeilenumbrüchen. Immer ganze Zeilen, außer dem finalen Batch, der möglicherweise mitten in einer Zeile endet. 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 |
1566 1575
1567```json theme={null}1576```json theme={null}
1568{1577{
1623 </Tab>1632 </Tab>
1624 1633
1625 <Tab title="Windows (PowerShell)">1634 <Tab title="Windows (PowerShell)">
1626 Registrieren Sie einen Command-Hook, der das Skript über PowerShell ausführt:1635 Registrieren Sie einen Command-Hook, der das Skript durch PowerShell ausführt:
1627 1636
1628 ```json theme={null}1637 ```json theme={null}
1629 {1638 {
1672 PreToolUse1681 PreToolUse
1673</h3>1682</h3>
1674 1683
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` sowie alle [MCP-Tool-Namen](#match-mcp-tools).1684Wird 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).
1676 1685
1677Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, was sie geschrieben hat, 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.1686Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, verwenden Sie stattdessen [FileChanged](#filechanged), unabhängig davon, was sie geschrieben hat. 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.
1678 1687
1679<Warning>1688<Warning>
1680 PreToolUse wird nur ausgeführt, wenn Claude ein Tool aufruft. Dateien, auf die Sie [mit `@` in Ihrer Eingabeaufforderung verweisen](/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 ausgelöst, einschließlich Hooks, die `Read` abgleichen. Um bestimmte Pfade von `@` Verweisen zu blockieren, verwenden Sie stattdessen eine [`Read` Ablehnungsregel](/docs/de/permissions#read-and-edit).1689 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 ausgelöst, 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).
1681 1690
1682 PreToolUse wird auch nicht für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgelöst.1691 PreToolUse wird auch nicht für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgelöst.
1683</Warning>1692</Warning>
1696 1705
1697Für die Datei-Tools `Write`, `Edit` und `Read` ist `tool_input.file_path` immer absolut:1706Für die Datei-Tools `Write`, `Edit` und `Read` ist `tool_input.file_path` immer absolut:
1698 1707
1699* 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 werden1708* 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
1700* Unter Windows kommt der Pfad mit Backslash-Trennzeichen an, auch wenn Ihr Hook unter Git Bash läuft, wo `$PWD` wie `/c/project` aussieht1709* Unter Windows kommt der Pfad mit Backslash-Trennzeichen an, auch wenn Ihr Hook unter Git Bash ausgeführt wird, wo `$PWD` wie `/c/project` aussieht
1701* Ein Vergleich mit Schrägstrichen, wie eine `/src/` Überprüfung, gleicht niemals einen Backslash-Pfad ab, und der Tool-Aufruf wird fortgesetzt, als hätte der Hook nichts zu blockieren1710* Ein Vergleich mit Schrägstrichen, wie eine `/src/` Überprüfung, gleicht niemals einen Backslash-Pfad ab, und der Tool-Aufruf wird fortgesetzt, als hätte der Hook nichts zu blockieren
1702* 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 ist1711* 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
1703 1712
1732| `timeout` | number | `120000` | Optionales Timeout in Millisekunden. Werte über dem [Maximum](/docs/de/tools-reference#bash-tool-behavior) werden auf das Maximum reduziert, anstatt abgelehnt zu werden |1741| `timeout` | number | `120000` | Optionales Timeout in Millisekunden. Werte über dem [Maximum](/docs/de/tools-reference#bash-tool-behavior) werden auf das Maximum reduziert, anstatt abgelehnt zu werden |
1733| `run_in_background` | boolean | `false` | Ob der Befehl im Hintergrund ausgeführt werden soll |1742| `run_in_background` | boolean | `false` | Ob der Befehl im Hintergrund ausgeführt werden soll |
1734 1743
1735Wenn ein Bash-Befehl Dateien in einem Git-Repository ändert, kann Claude Code aufzeichnen, was sich geändert hat. Es zeichnet die Änderungen in jedem Berechtigungsmodus auf, wenn die [`bashEditDiffEnabled`](/docs/de/settings-reference#basheditdiffenabled) Einstellung die Aufzeichnung aktiviert; der Eintrag dieser Einstellung sagt, welche Dateien sie setzen können. Andernfalls zeichnet es sie nur im Auto-Modus und `bypassPermissions` Modus auf und nur, wenn Claude Code Claude anweist, Dateien über Bash zu bearbeiten. Setzen Sie `bashEditDiffEnabled` auf `false`, um die Aufzeichnung auszuschalten. Hintergrund-Befehle und schreibgeschützte Befehle tragen keinen Diff.1744Wenn ein Bash-Befehl Dateien in einem Git-Repository ändert, kann Claude Code aufzeichnen, was sich geändert hat. Es zeichnet die Änderungen in jedem Berechtigungsmodus auf, wenn die [`bashEditDiffEnabled`](/docs/de/settings-reference#basheditdiffenabled) Einstellung die Aufzeichnung aktiviert; der Eintrag dieser Einstellung sagt, welche Dateien sie setzen können. Andernfalls zeichnet es sie nur im Auto-Modus und `bypassPermissions` Modus auf und nur, wenn Claude Code Claude anweist, Dateien über Bash zu bearbeiten. Hintergrund-Befehle und schreibgeschützte Befehle tragen keinen Diff.
1736 1745
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.1746Ihr [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 ausgeführt wurde. Dateien, die Git ignoriert, und Dateien in Submodulen werden nicht aufgelistet. Erfordert Claude Code v2.1.269 oder später.
1738 1747
1739<Note>1748<Note>
1740 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.1749 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.
1744 1753
1745| Feld | Typ | Beispiel | Beschreibung |1754| Feld | Typ | Beispiel | Beschreibung |
1746| :- | :- | :- | :- |1755| :- | :- | :- | :- |
1747| `changedFiles` | array | `["/path/to/src/app.ts"]` | Absolute Pfade der Dateien, die der Befehl geändert hat, höchstens 200. Vorhanden, wenn `files` einen Diff hält oder `moreFiles` über Null liegt |1756| `changedFiles` | array | `["/path/to/src/app.ts"]` | Absolute Pfade der Dateien, die der Befehl geändert hat, maximal 200. Vorhanden, wenn `files` einen Diff enthält oder `moreFiles` über Null liegt |
1748| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs von bis zu 5 geänderten Dateien zur Anzeige. `created` oder `deleted` ist `true` für eine Datei, die der Befehl hinzugefügt oder entfernt hat |1757| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs von bis zu 5 geänderten Dateien zur Anzeige. `created` oder `deleted` ist `true` für eine Datei, die der Befehl hinzugefügt oder entfernt hat |
1749| `moreFiles` | number | `2` | Anzahl der geänderten Dateien ohne Diff in `files` |1758| `moreFiles` | number | `2` | Anzahl der geänderten Dateien ohne Diff in `files` |
1750| `unavailable` | boolean | `true` | Gesetzt, wenn der Diff unvollständig ist oder nicht genommen werden konnte |1759| `unavailable` | boolean | `true` | Gesetzt, wenn der Diff unvollständig ist oder nicht genommen werden konnte |
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 |1760| `skipped` | boolean | `true` | Gesetzt für einen Git-Befehl, der den Arbeitsbaum verschiebt, wie `git checkout` oder `git stash`, daher nimmt Claude Code keinen Diff |
1752| `shared` | boolean | `true` | Gesetzt, wenn ein anderer Bash-Tool-Aufruf, wie ein Subagent, im gleichen Repository zur gleichen Zeit lief, daher können einige aufgelistete Änderungen von diesem Befehl sein |1761| `shared` | boolean | `true` | Gesetzt, wenn ein anderer Bash-Tool-Aufruf, wie der eines Subagenten, im gleichen Repository zur gleichen Zeit ausgeführt wurde, daher können einige aufgelistete Änderungen von diesem Befehl sein |
1753 1762
1754<a id="powershell" />1763<a id="powershell" />
1755 1764
1757 PowerShell1766 PowerShell
1758</h5>1767</h5>
1759 1768
1760Führt PowerShell-Befehle aus. Siehe das [PowerShell-Tool](/docs/de/tools-reference#powershell-tool) für die Verfügbarkeit nach Plattform.1769Führt PowerShell-Befehle aus. Siehe das [PowerShell-Tool](/docs/de/tools-reference#powershell-tool) für Verfügbarkeit nach Plattform.
1761 1770
1762Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:1771Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:
1763 1772
1856| Feld | Typ | Beispiel | Beschreibung |1865| Feld | Typ | Beispiel | Beschreibung |
1857| :- | :- | :- | :- |1866| :- | :- | :- | :- |
1858| `query` | string | `"react hooks best practices"` | Suchanfrage |1867| `query` | string | `"react hooks best practices"` | Suchanfrage |
1859| `allowed_domains` | array | `["docs.example.com"]` | Optional: nur Ergebnisse von diesen Domains einschließen |1868| `allowed_domains` | array | `["docs.example.com"]` | Optional: Nur Ergebnisse von diesen Domains einschließen |
1860| `blocked_domains` | array | `["spam.example.com"]` | Optional: Ergebnisse von diesen Domains ausschließen |1869| `blocked_domains` | array | `["spam.example.com"]` | Optional: Ergebnisse von diesen Domains ausschließen |
1861 1870
1862<h5 id="agent">1871<h5 id="agent">
1863 Agent1872 Agent
1864</h5>1873</h5>
1865 1874
1866Erzeugt einen [Subagent](/docs/de/sub-agents).1875Erzeugt einen [Subagenten](/docs/de/sub-agents).
1867 1876
1868| Feld | Typ | Beispiel | Beschreibung |1877| Feld | Typ | Beispiel | Beschreibung |
1869| :- | :- | :- | :- |1878| :- | :- | :- | :- |
1870| `prompt` | string | `"Find all API endpoints"` | Die Aufgabe für den Agent |1879| `prompt` | string | `"Find all API endpoints"` | Die Aufgabe für den Agenten |
1871| `description` | string | `"Find API endpoints"` | Kurze Beschreibung der Aufgabe |1880| `description` | string | `"Find API endpoints"` | Kurze Beschreibung der Aufgabe |
1872| `subagent_type` | string | `"Explore"` | Typ des zu verwendenden spezialisierten Agenten |1881| `subagent_type` | string | `"Explore"` | Typ des zu verwendenden spezialisierten Agenten |
1873| `model` | string | `"sonnet"` | Optionaler Modellalias zum Überschreiben des Standards |1882| `model` | string | `"sonnet"` | Optionaler Modellalias zum Überschreiben des Standards |
1874 1883
1875Wenn ein Vordergrund-Agent-Aufruf abgeschlossen ist, empfängt Ihr [PostToolUse-Hook](#posttooluse) das Ergebnis des Subagenten und die Telemetrie des Laufs in `tool_response`. Lesen Sie diese Felder, um den Lauf zu überprüfen; für Token- und Kosten-Rollups über Subagenten verwenden Sie die [Token- und Kosten-Zähler](/docs/de/monitoring-usage#token-counter), gefiltert nach `query_source` `"subagent"`, da `totalTokens` und `usage` nur die letzte Anfrage abdecken:1884Wenn ein Vordergrund-Agent-Aufruf abgeschlossen ist, empfängt Ihr [PostToolUse-Hook](#posttooluse) das Ergebnis des Subagenten und die Telemetrie des Laufs in `tool_response`. Lesen Sie diese Felder, um den Lauf zu überprüfen; für Token- und Kostenrollups über Subagenten verwenden Sie die [Token- und Kostenzähler](/docs/de/monitoring-usage#token-counter), gefiltert nach `query_source` `"subagent"`, da `totalTokens` und `usage` nur die letzte Anfrage abdecken:
1876 1885
1877| Feld | Typ | Beispiel | Beschreibung |1886| Feld | Typ | Beispiel | Beschreibung |
1878| :- | :- | :- | :- |1887| :- | :- | :- | :- |
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"` |1888| `status` | string | `"completed"` | `"completed"` für Vordergrund-Subagenten, `"async_launched"` für Hintergrund-Subagenten. Ab v2.1.198 werden Subagenten standardmäßig im Hintergrund ausgeführt, daher erzeugt ein weggelassenes `run_in_background` auch `"async_launched"` |
1880| `agentId` | string | `"a4d2c8f1e0b3a297"` | Bezeichner für den Subagenten-Lauf |1889| `agentId` | string | `"a4d2c8f1e0b3a297"` | Bezeichner für den Subagenten-Lauf |
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 |1890| `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 |
1882| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modell, auf dem der Subagent gestartet wurde, das sich vom angeforderten Modell unterscheiden kann |1891| `resolvedModel` | string | `"claude-sonnet-4-5"` | Modell, auf dem der Subagent gestartet wurde, das sich vom angeforderten Modell unterscheiden kann |
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 |1892| `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 |
1884| `totalTokens` | number | `12450` | Token-Anzahl aus der letzten API-Anfrage des Subagenten: Eingabe-, Ausgabe- und Cache-Token kombiniert. Dies ist keine Summe über den ganzen Lauf |1893| `totalTokens` | number | `12450` | Token-Anzahl aus der letzten API-Anfrage des Subagenten: Eingabe-, Ausgabe- und Cache-Token kombiniert. Dies ist keine Gesamtsumme über den gesamten Lauf |
1885| `totalDurationMs` | number | `48211` | Wanduhr-Dauer des Subagenten-Laufs |1894| `totalDurationMs` | number | `48211` | Echtzeit-Dauer des Subagenten-Laufs |
1886| `totalToolUseCount` | number | `7` | Anzahl der Tool-Aufrufe, die der Subagent gemacht hat |1895| `totalToolUseCount` | number | `7` | Anzahl der Tool-Aufrufe, die der Subagent gemacht hat |
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` |1896| `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` |
1888 1897
1889Auf Claude Code v2.1.271 oder später liefert ein Subagent, der mit dem [`SubagentHandback`](/docs/de/tools-reference) Tool läuft, das Claude Code im [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) bereitstellt, seinen Bericht über dieses Tool statt ihn als Text zurückzugeben. Das `content` Feld seines `completed` Ergebnisses trägt dann eine kurze Notiz über diesen Handback statt des Berichts selbst. Um den Bericht zu lesen, gleichen Sie einen `PreToolUse` oder `PostToolUse` Hook auf `SubagentHandback` ab und lesen Sie `tool_input.message`.1898Auf Claude Code v2.1.271 oder später liefert ein Subagent, der mit dem [`SubagentHandback`](/docs/de/tools-reference) Tool läuft, das Claude Code im [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) bereitstellt, seinen Bericht über dieses Tool statt ihn als Text zurückzugeben. Das `content` Feld seines `completed` Ergebnisses trägt dann eine kurze Notiz über diesen Handback statt des Berichts selbst. Um den Bericht zu lesen, gleichen Sie einen `PreToolUse` oder `PostToolUse` Hook auf `SubagentHandback` ab und lesen Sie `tool_input.message`.
1890 1899
1891Für Hintergrund-Subagenten kehrt das Tool zurück, wenn die Aufgabe in den Hintergrund geht, daher trägt `tool_response` keine Nutzungsfelder: Ein Hintergrund-Start kehrt sofort zurück und eine Vordergrund-Aufgabe, die Claude Code während des Laufs in den Hintergrund verschiebt, kehrt bei diesem Übergang zurück. Es hat `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile` und `resolvedModel`.1900Fü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 an diesem Übergang zurück. Es hat `status: "async_launched"`, `agentId`, `description`, `prompt`, `outputFile` und `resolvedModel`.
1892 1901
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 eine andere Überschreibung gilt. Bei einem `async_launched` Ergebnis benennt `resolvedModel` das Modell in Verwendung, wenn der Agent in den Hintergrund geht, daher wird ein Wechsel, der vor dem Backgrounding stattfand, dort widergespiegelt. `modelsUsed` und das Backgrounding-Zeit-`resolvedModel` Verhalten erfordern Claude Code v2.1.212 oder später.1902Bei 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 eine andere Überschreibung gilt. Bei einem `async_launched` Ergebnis benennt `resolvedModel` das Modell in Verwendung, wenn der Agent in den Hintergrund geht, daher wird ein Wechsel, der vor dem Hintergrund-Verschieben stattfand, dort widergespiegelt. `modelsUsed` und das Hintergrund-Verschiebungs-Zeit-`resolvedModel` Verhalten erfordern Claude Code v2.1.212 oder später.
1894 1903
1895<a id="askuserquestion" />1904<a id="askuserquestion" />
1896 1905
1927 1936
1928| Feld | Beschreibung |1937| Feld | Beschreibung |
1929| :- | :- |1938| :- | :- |
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 |1939| `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 ordnungsgemäß, 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 |
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 |1940| `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 |
1932| `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 `"ask"`, um die geänderte Eingabe dem Benutzer zu zeigen. Für `"defer"`, ignoriert |1941| `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-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 |
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) |1942| `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) |
1934 1943
1935Wenn mehrere PreToolUse-Hooks unterschiedliche Entscheidungen zurückgeben, ist die Priorität `deny` > `defer` > `ask` > `allow`.1944Wenn mehrere PreToolUse-Hooks unterschiedliche Entscheidungen zurückgeben, ist die Priorität `deny` > `defer` > `ask` > `allow`.
1936 1945
1937Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `"deny"` weitergeleitet: Claude sieht die stderr-Nachricht als Ablehnungsgrund.1946Ein Hook, der durch Beendigung mit 2 blockiert, leitet auf die gleiche Weise wie `"deny"` weiter: Claude sieht die stderr-Nachricht als Ablehnungsgrund.
1938 1947
1939Wenn 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 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.1948Wenn 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 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 eine Bestätigung anfordert.
1940 1949
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, kann ihn aber 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.1950Ein 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, kann ihn aber 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.
1942 1951
1956 1965
1957<span id="allow-with-updatedinput" />1966<span id="allow-with-updatedinput" />
1958 1967
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 auf die gewählte Antwort abbildet.1968Im [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 Sie ein [`answers`](#askuserquestion) Objekt hinzu, das jede Frage auf die gewählte Antwort abbildet.
1960 1969
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.1970Ab 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 gesammelt hat, die das Tool benötigt.
1962 1971
1963<Note>1972<Note>
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"` werden auf `"allow"` und `"deny"` abgebildet. Andere Ereignisse wie PostToolUse und Stop verwenden weiterhin Top-Level-`decision` und `reason` als ihr aktuelles Format.1973 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"` werden auf `"allow"` und `"deny"` abgebildet. Andere Ereignisse wie PostToolUse und Stop verwenden weiterhin Top-Level-`decision` und `reason` als ihr aktuelles Format.
1965</Note>1974</Note>
1966 1975
1967<h4 id="defer-a-tool-call-for-later">1976<h4 id="defer-a-tool-call-for-later">
1968 Tool-Aufruf für später aufschieben1977 Einen Tool-Aufruf für später aufschieben
1969</h4>1978</h4>
1970 1979
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 auf Basis von Claude Code. 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.1980`"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 auf Claude Code. 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.
1972 1981
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. Der Roundtrip funktioniert so:1982Das `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:
1974 1983
19751. Claude ruft `AskUserQuestion` auf. Der `PreToolUse` Hook wird ausgelöst.19841. Claude ruft `AskUserQuestion` auf. Der `PreToolUse` Hook wird ausgelöst.
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.19852. 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.
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.19863. 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.
19784. Der aufrufende Prozess führt `claude -p --resume <session-id>` mit dem gleichen Berechtigungshost aus. Der gleiche Tool-Aufruf löst `PreToolUse` erneut aus.19874. Der aufrufende Prozess führt `claude -p --resume <session-id>` mit dem gleichen Berechtigungshost aus. Der gleiche Tool-Aufruf löst `PreToolUse` erneut aus.
19795. Der Hook gibt `permissionDecision: "allow"` mit der Antwort in `updatedInput` zurück. Das Tool wird ausgeführt und Claude setzt fort.19885. Der Hook gibt `permissionDecision: "allow"` mit der Antwort in `updatedInput` zurück. Das Tool wird ausgeführt und Claude setzt fort.
1980 1989
1981Das `deferred_tool_use` Feld trägt die `id`, `name` und `input` des Tools. Die `input` sind die Parameter, die Claude für den Tool-Aufruf generiert hat, erfasst vor der Ausführung:1990Das `deferred_tool_use` Feld trägt die `id`, den `name` und die `input` des Tools. Die `input` sind die Parameter, die Claude für den Tool-Aufruf generiert hat, erfasst vor der Ausführung:
1982 1991
1983```json theme={null}1992```json theme={null}
1984{1993{
1994}2003}
1995```2004```
1996 2005
1997Es gibt kein Timeout oder Wiederholungslimit. Die Sitzung bleibt auf der Festplatte, bis Sie sie fortsetzen, unterliegt aber den [`cleanupPeriodDays`](/docs/de/settings-reference#cleanupperioddays) Aufräumregeln, die Sitzungsdateien nach 30 Tagen standardmäßig löschen, nach den [Aufräumregeln](/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.2006Es 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 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.
1998 2007
1999`"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 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.2008`"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 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.
2000 2009
2010 PermissionRequest2019 PermissionRequest
2011</h3>2020</h3>
2012 2021
2013Wird ausgeführt, wenn Claude Code Sie um Erlaubnis zur Verwendung eines Tools bitten wird. 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.2022Wird ausgeführt, wenn Claude Code Sie um Genehmigung 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.
2014Verwenden Sie [PermissionRequest-Entscheidungskontrolle](#permissionrequest-decision-control), um im Namen des Benutzers zuzulassen oder zu verweigern.2023Verwenden Sie [PermissionRequest-Entscheidungskontrolle](#permissionrequest-decision-control), um im Namen des Benutzers zuzulassen oder zu verweigern.
2015 2024
2016Verwenden Sie dieses Ereignis, wenn Sie ein Signal benötigen, in dem Moment, in dem Claude um Erlaubnis zur Verwendung eines Tools bittet. Claude Code führt einen [Notification](#notification) Hook mit dem `permission_prompt` Typ nur aus, nachdem die Aufforderung etwa sechs Sekunden gewartet hat.2025Verwenden Sie dieses Ereignis, wenn Sie ein Signal benötigen, in dem Moment, in dem Claude um Genehmigung zur Verwendung eines Tools bittet. Claude Code führt einen [Notification](#notification) Hook mit dem `permission_prompt` Typ nur aus, nachdem die Aufforderung etwa sechs Sekunden gewartet hat.
2017 2026
2018Claude Code führt PermissionRequest-Hooks nicht für eine Sandbox-Anfrage einer [Netzwerkanfrage](/docs/de/sandboxing#network-isolation) aus. Um ein Signal für diese Aufforderung zu erhalten, verwenden Sie den `permission_prompt` Benachrichtigungstyp.2027Claude Code führt PermissionRequest-Hooks nicht für eine Sandbox-Anfrage einer [Netzwerkanfrage](/docs/de/sandboxing#network-isolation) aus. Um ein Signal für diese Aufforderung zu erhalten, verwenden Sie den `permission_prompt` Benachrichtigungstyp.
2019 2028
2027 2036
2028Das `permission_suggestions` Array ist keine genaue Liste der Optionen, die Sie sehen, da jeder Berechtigungsdialog seine eigenen Optionen erstellt. Einige Dialoge, wie der für Dateibearbeitungen, lesen das Array überhaupt nicht und leiten ihre Optionen aus der Anfrage selbst ab. Ein Dialog, der es liest, kann immer noch eine Option zurückhalten, deren Vorschlag im Array bleibt, z. B. wenn [`allowManagedPermissionRulesOnly`](/docs/de/settings-reference#allowmanagedpermissionrulesonly) Regel-Speicheroptionen verbirgt. Es kann auch Optionen anbieten, die keinen Vorschlagseintrag haben, wie [**Ja, und zum Auto-Modus wechseln**](/docs/de/permission-modes#switch-permission-modes), das den Berechtigungsmodus direkt ändert, anstatt durch eine Berechtigungsaktualisierung.2037Das `permission_suggestions` Array ist keine genaue Liste der Optionen, die Sie sehen, da jeder Berechtigungsdialog seine eigenen Optionen erstellt. Einige Dialoge, wie der für Dateibearbeitungen, lesen das Array überhaupt nicht und leiten ihre Optionen aus der Anfrage selbst ab. Ein Dialog, der es liest, kann immer noch eine Option zurückhalten, deren Vorschlag im Array bleibt, z. B. wenn [`allowManagedPermissionRulesOnly`](/docs/de/settings-reference#allowmanagedpermissionrulesonly) Regel-Speicheroptionen verbirgt. Es kann auch Optionen anbieten, die keinen Vorschlagseintrag haben, wie [**Ja, und zum Auto-Modus wechseln**](/docs/de/permission-modes#switch-permission-modes), das den Berechtigungsmodus direkt ändert, anstatt durch eine Berechtigungsaktualisierung.
2029 2038
2030PreToolUse-Hooks werden vor jedem Tool-Aufruf ausgeführt, unabhängig davon, ob er Berechtigung benötigt. PermissionRequest-Hooks werden nur ausgeführt, wenn Claude Code Sie um Erlaubnis bitten wird oder wenn es sonst einen Aufruf automatisch verweigern würde, der nicht aufforderbar ist. Keines der Ereignisse wird für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgelöst.2039PreToolUse-Hooks werden vor jedem Tool-Aufruf ausgeführt, unabhängig davon, ob er Genehmigung benötigt. PermissionRequest-Hooks werden nur ausgeführt, wenn Claude Code Sie um Genehmigung bitten möchte, oder wenn es sonst einen Aufruf automatisch verweigern würde, der nicht auffordern kann. Keines der Ereignisse wird für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgelöst.
2031 2040
2032```json theme={null}2041```json theme={null}
2033{2042{
2060 2069
2061| Feld | Beschreibung |2070| Feld | Beschreibung |
2062| :- | :- |2071| :- | :- |
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 |2072| `behavior` | `"allow"` gewährt die Genehmigung, `"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 |
2064| `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 gegen Ablehnungs- und Frage-Regeln erneut ausgewertet |2073| `updatedInput` | Für `"allow"` nur: ä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 Frage-Regeln ausgewertet |
2065| `updatedPermissions` | Nur für `"allow"`: Array von [Berechtigungsaktualisierungseinträgen](#permission-update-entries) zum Anwenden, wie das Hinzufügen einer Zulassungsregel oder das Ändern des Sitzungsberechtigungsmodus |2074| `updatedPermissions` | Für `"allow"` nur: Array von [Berechtigungsaktualisierungseinträgen](#permission-update-entries) zum Anwenden, wie das Hinzufügen einer Zulassungsregel oder das Ändern des Sitzungsberechtigungsmodus |
2066| `message` | Nur für `"deny"`: sagt Claude, warum die Berechtigung verweigert wurde |2075| `message` | Für `"deny"` nur: sagt Claude, warum die Genehmigung verweigert wurde |
2067| `interrupt` | Nur für `"deny"`: wenn `true`, stoppt Claude |2076| `interrupt` | Für `"deny"` nur: wenn `true`, stoppt Claude |
2068 2077
2069Ein Hook, der mit Code 2 beendet wird, ohne ein `decision` Objekt zu hinterlassen, lässt den Berechtigungsfluss unverändert, und sein stderr wird verworfen. Nur das `decision` Objekt kann die Anfrage gewähren oder verweigern.2078Ein Hook, der mit 2 beendet wird, ohne ein `decision` Objekt zu hinterlassen, lässt den Berechtigungsfluss unverändert, und sein stderr wird verworfen. Nur das `decision` Objekt kann die Anfrage gewähren oder verweigern.
2070 2079
2071```json theme={null}2080```json theme={null}
2072{2081{
2090 2099
2091| `type` | Felder | Effekt |2100| `type` | Felder | Effekt |
2092| :- | :- | :- |2101| :- | :- | :- |
2093| `addRules` | `rules`, `behavior`, `destination` | Fügt Berechtigungsregeln hinzu. `rules` ist ein Array von `{toolName, ruleContent?}` Objekten. Weglassen von `ruleContent`, um das ganze Tool abzugleichen. `behavior` ist `"allow"`, `"deny"` oder `"ask"` |2102| `addRules` | `rules`, `behavior`, `destination` | Fügt Berechtigungsregeln hinzu. `rules` ist ein Array von `{toolName, ruleContent?}` Objekten. Weglassen Sie `ruleContent`, um das gesamte Tool abzugleichen. `behavior` ist `"allow"`, `"deny"` oder `"ask"` |
2094| `replaceRules` | `rules`, `behavior`, `destination` | Ersetzt alle Regeln des gegebenen `behavior` am `destination` mit den bereitgestellten `rules` |2103| `replaceRules` | `rules`, `behavior`, `destination` | Ersetzt alle Regeln des angegebenen `behavior` am `destination` mit den bereitgestellten `rules` |
2095| `removeRules` | `rules`, `behavior`, `destination` | Entfernt übereinstimmende Regeln des gegebenen `behavior` |2104| `removeRules` | `rules`, `behavior`, `destination` | Entfernt übereinstimmende Regeln des angegebenen `behavior` |
2096| `setMode` | `mode`, `destination` | Ändert den Berechtigungsmodus. Gültige Modi sind `default`, `auto`, `acceptEdits`, `dontAsk`, `bypassPermissions`, `plan` und `manual` als Alias für `default`. Der `manual` Alias erfordert Claude Code v2.1.200 oder später |2105| `setMode` | `mode`, `destination` | Ändert den Berechtigungsmodus. Gültige Modi sind `default`, `auto`, `acceptEdits`, `dontAsk`, `bypassPermissions`, `plan` und `manual` als Alias für `default`. Der `manual` Alias erfordert Claude Code v2.1.200 oder später |
2097| `addDirectories` | `directories`, `destination` | Fügt Arbeitsverzeichnisse hinzu. `directories` ist ein Array von Pfad-Zeichenketten |2106| `addDirectories` | `directories`, `destination` | Fügt Arbeitsverzeichnisse hinzu. `directories` ist ein Array von Pfad-Zeichenketten |
2098| `removeDirectories` | `directories`, `destination` | Entfernt Arbeitsverzeichnisse |2107| `removeDirectories` | `directories`, `destination` | Entfernt Arbeitsverzeichnisse |
2099 2108
2100<Note>2109<Note>
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.2110 `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.
2102 2111
2103 `bypassPermissions` wird niemals als `defaultMode` beibehalten, unabhängig von `destination`.2112 `bypassPermissions` wird niemals als `defaultMode` beibehalten, unabhängig von `destination`.
2104</Note>2113</Note>
2112| `projectSettings` | `.claude/settings.json` |2121| `projectSettings` | `.claude/settings.json` |
2113| `userSettings` | `~/.claude/settings.json` |2122| `userSettings` | `~/.claude/settings.json` |
2114 2123
2115Ein Hook kann eines der `permission_suggestions` widerspiegeln, die er als seine eigene `updatedPermissions` Ausgabe empfangen hat.2124Ein Hook kann eines der `permission_suggestions` widerspiegeln, die er als seine eigene `updatedPermissions` Ausgabe erhalten hat.
2116 2125
2117<h3 id="posttooluse">2126<h3 id="posttooluse">
2118 PostToolUse2127 PostToolUse
2119</h3>2128</h3>
2120 2129
2121Wird sofort ausgeführt, nachdem ein Tool erfolgreich abgeschlossen ist.2130Wird unmittelbar nach erfolgreichem Abschluss eines Tools ausgeführt.
2122 2131
2123Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2132Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2124 2133
2125Gleichen Sie breiter ab, wenn der Tool-Name nicht der richtige Filter ist:2134Gleichen Sie breiter ab, wenn der Tool-Name nicht der richtige Filter ist:
2126 2135
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.2136* Um einen Hook nach erfolgreichem Abschluss eines beliebigen Tools 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.
2128* Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, unabhängig davon, was sie geschrieben hat, 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.2137* Um einen Hook auszuführen, wenn sich eine bestimmte Datei auf der Festplatte ändert, 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.
2129 2138
2130<h4 id="posttooluse-input">2139<h4 id="posttooluse-input">
2131 PostToolUse-Eingabe2140 PostToolUse-Eingabe
2132</h4>2141</h4>
2133 2142
2134`PostToolUse` Hooks werden ausgelöst, nachdem ein Tool bereits erfolgreich ausgeführt wurde. Die Eingabe enthält sowohl `tool_input`, die an das Tool gesendeten Argumente, als auch `tool_response`, das 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.2143`PostToolUse` Hooks werden ausgelöst, 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.
2135 2144
2136```json theme={null}2145```json theme={null}
2137{2146{
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` |2178| `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` |
2170| `reason` | Erklärung, die Claude angezeigt wird, wenn `decision` `"block"` ist |2179| `reason` | Erklärung, die Claude angezeigt wird, wenn `decision` `"block"` ist |
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) |2180| `additionalContext` | String, der zu Claudes Kontext neben dem Tool-Ergebnis hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
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 [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 |2181| `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 kommentieren](#annotate-a-result-for-the-auto-mode-classifier). Erfordert Claude Code v2.1.236 oder später |
2173| `updatedToolOutput` | Ersetzt die Ausgabe des Tools mit dem bereitgestellten Wert, bevor er an Claude gesendet wird. Der Wert muss der Ausgabeform des Tools entsprechen |2182| `updatedToolOutput` | Ersetzt die Ausgabe des Tools mit dem bereitgestellten Wert, bevor er an Claude gesendet wird. Der Wert muss der Ausgabeform des Tools entsprechen |
2174| `updatedMCPToolOutput` | Ersetzt die Ausgabe nur für [MCP-Tools](#match-mcp-tools). Bevorzugen Sie `updatedToolOutput`, das für alle Tools funktioniert |2183| `updatedMCPToolOutput` | Ersetzt die Ausgabe für [MCP-Tools](#match-mcp-tools) nur. Bevorzugen Sie `updatedToolOutput`, das für alle Tools funktioniert |
2175 2184
2176Das Beispiel unten ersetzt die Ausgabe eines `Bash` Aufrufs. Der Ersatzwert entspricht der Ausgabeform des `Bash` Tools:2185Das Beispiel unten ersetzt die Ausgabe eines `Bash` Aufrufs. Der Ersatzwert entspricht der Ausgabeform des `Bash` Tools:
2177 2186
2191```2200```
2192 2201
2193<Warning>2202<Warning>
2194 `updatedToolOutput` ändert nur, was Claude sieht. Das Tool hat bereits ausgeführt, wenn der Hook ausgelöst 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 ausgelöst wird. Um einen Tool-Aufruf vor der Ausführung zu verhindern oder zu ändern, verwenden Sie stattdessen einen [PreToolUse](#pretooluse) Hook.2203 `updatedToolOutput` ändert nur das, was Claude sieht. Das Tool hat bereits ausgeführt, wenn der Hook ausgelöst 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 vor der Ausführung zu verhindern oder zu ändern, verwenden Sie stattdessen einen [PreToolUse](#pretooluse) Hook.
2195 2204
2196 Der Ersatzwert muss der Ausgabeform des Tools entsprechen. Integrierte Tools geben strukturierte Objekte statt Klartext 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.2205 Der Ersatzwert muss der Ausgabeform des Tools entsprechen. Integrierte Tools geben strukturierte Objekte statt Klartext 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.
2197</Warning>2206</Warning>
2198 2207
2199<h4 id="annotate-a-result-for-the-auto-mode-classifier">2208<h4 id="annotate-a-result-for-the-auto-mode-classifier">
2200 Ergebnis für den Auto-Modus Klassifizierer annotieren2209 Ein Ergebnis für den Auto-Modus Klassifizierer kommentieren
2201</h4>2210</h4>
2202 2211
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 zu sagen, was ein Aufruf zurückgegeben hat, bevor er spätere Aktionen überprüft. Das Feld erfordert Claude Code v2.1.236 oder später.2212Geben 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.
2204 2213
2205Das Beispiel unten sagt dem Klassifizierer, woher die Ausgabe einer Abfrage stammt:2214Das Beispiel unten sagt dem Klassifizierer, woher die Ausgabe einer Abfrage stammt:
2206 2215
2215 2224
2216Wie viel Gewicht der Klassifizierer der Notiz gibt, hängt davon ab, wo Sie den Hook konfiguriert haben:2225Wie viel Gewicht der Klassifizierer der Notiz gibt, hängt davon ab, wo Sie den Hook konfiguriert haben:
2217 2226
2218* **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 im Gespräch2227* **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
2219* **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 nicht heben könnte. Nach einer Sitzungswiederaufnahme 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 Kontext2228* **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 eine Blockierung auf, die Ihre eigene Nachricht auch nicht aufheben könnte. Nach einer Sitzungswiederaufnahme behandelt Claude Code wiederhergestellte Notizen als nicht verifizierten Kontext. Wenn Hooks aus beiden Gruppen den gleichen Aufruf kommentieren, behandelt der Klassifizierer die kombinierte Notiz als nicht verifizierten Kontext
2220 2229
2221Claude Code wendet diese Grenzen an, wenn die Notiz geliefert wird:2230Claude Code wendet diese Grenzen an, wenn die Notiz geliefert wird:
2222 2231
2223* **Länge**: Claude Code begrenzt die Notizen für einen Tool-Aufruf auf 2.000 Zeichen und kürzt den Rest. Die Grenze wird über jeden Hook geteilt, der auf diesen Aufruf antwortet2232* **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
2224* **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 ankommt, nachdem Claude Code das Tool-Ergebnis aufzeichnet2233* **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 ankommt
2225* **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 ist2234* **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
2226* **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ässt die Notiz fallen, 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 umschreibt2235* **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 verwirft 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
2227 2236
2228<Warning>2237<Warning>
2229 Der Klassifizierer liest Inhalte, die Sie in `classifierContext` platzieren, als Informationen vom Anwendungshost der Sitzung, daher kopieren Sie nicht unvertrauenswü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 unabhängige Nachrichten oder einen Strom von Ereignissen zu liefern.2238 Der Klassifizierer liest Inhalte, die Sie in `classifierContext` einfügen, als Informationen von der Anwendung, die die Sitzung hostet, daher kopieren Sie nicht vertrauenswürdige Tool-Ausgabe oder Text von Drittanbietern darin. 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.
2230</Warning>2239</Warning>
2231 2240
2232<h3 id="posttoolusefailure">2241<h3 id="posttoolusefailure">
2238Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2247Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2239 2248
2240<Note>2249<Note>
2241 Dieses Ereignis wird nicht für Tool-Aufrufe ausgelöst, 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 lösen sie weder `PreToolUse` noch dieses Ereignis aus. Berechtigungsablehnungen lösen `PreToolUse` aus, aber nicht dieses Ereignis; siehe [PermissionDenied](#permissiondenied).2250 Dieses Ereignis wird nicht für Tool-Aufrufe ausgelöst, 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 lösen sie weder `PreToolUse` noch dieses Ereignis aus. Berechtigungsverweigerungen lösen `PreToolUse` aus, aber nicht dieses Ereignis; siehe [PermissionDenied](#permissiondenied).
2242</Note>2251</Note>
2243 2252
2244<h4 id="posttoolusefailure-input">2253<h4 id="posttoolusefailure-input">
2269| Feld | Beschreibung |2278| Feld | Beschreibung |
2270| :- | :- |2279| :- | :- |
2271| `error` | String, der beschreibt, was schief gelaufen ist. Das Format hängt vom Tool ab, das fehlgeschlagen ist |2280| `error` | String, der beschreibt, was schief gelaufen ist. Das Format hängt vom Tool ab, das fehlgeschlagen ist |
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 löst diesen Hook nicht aus; das Tool-Ergebnis trägt die Abbruchnachricht statt |2281| `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 löst diesen Hook nicht aus; das Tool-Ergebnis trägt die Abbruchmeldung statt |
2273| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |2282| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |
2274 2283
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.2284Die `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.
2276 2285
2277* 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 erzeugte2286* Für Bash und PowerShell erzeugt ein Befehl, der ausgeführt wurde und beendet wurde, eine erste Zeile `Exit code N`, dann jede Ausgabe, die der Befehl als einen Block mit stdout und stderr vermischt erzeugte
2278* Eine Nutzlast kann auch eine bloße Fehlernachricht ohne Exit-Code-Zeile tragen, wenn Claude Code den Shell-Prozess selbst nicht starten konnte2287* Eine Nutzlast kann auch eine bloße Fehlermeldung ohne Exit-Code-Zeile tragen, wenn Claude Code den Shell-Prozess selbst nicht starten konnte
2279* Claude Code kürzt lange Zeichenketten in der Mitte um einen `... [N characters truncated] ...` Marker und kann Zeilen einfügen, wie `Command timed out after 2m 0s`2288* Claude Code schneidet lange Zeichenketten in der Mitte um einen `... [N characters truncated] ...` Marker ab und kann Zeilen einfügen, wie `Command timed out after 2m 0s`
2280 2289
2281<h4 id="posttoolusefailure-decision-control">2290<h4 id="posttoolusefailure-decision-control">
2282 PostToolUseFailure-Entscheidungskontrolle2291 PostToolUseFailure-Entscheidungskontrolle
2301 PostToolBatch2310 PostToolBatch
2302</h3>2311</h3>
2303 2312
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 liefen, anstatt von einem einzelnen Tool. Es gibt keinen Matcher für dieses Ereignis.2313Wird 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 ausgeführt wurden, anstatt von einem einzelnen Tool. Es gibt keinen Matcher für dieses Ereignis.
2305 2314
2306<h4 id="posttoolbatch-input">2315<h4 id="posttoolbatch-input">
2307 PostToolBatch-Eingabe2316 PostToolBatch-Eingabe
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 Zeilennummern-Präfix-Text statt rohe Dateiinhalte. Antworten können groß sein, daher analysieren Sie nur die Felder, die Sie benötigen.2345`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.
2337 2346
2338<Note>2347<Note>
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.2348 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.
2340</Note>2349</Note>
2341 2350
2342<h4 id="posttoolbatch-decision-control">2351<h4 id="posttoolbatch-decision-control">
2347 2356
2348| Feld | Beschreibung |2357| Feld | Beschreibung |
2349| :- | :- |2358| :- | :- |
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 |2359| `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 Sie darin einfügen sollten und wie fortgesetzte Sitzungen vergangene Werte handhaben |
2351 2360
2352```json theme={null}2361```json theme={null}
2353{2362{
2358}2367}
2359```2368```
2360 2369
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 im Gespräch, daher sieht Claude sie, wenn das Gespräch fortgesetzt wird.2370Das 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 Exit 2. Sie sehen sie als Warnung im Transkript und sie bleibt in der Konversation, daher sieht Claude sie, wenn die Konversation fortgesetzt wird.
2362 2371
2363<h3 id="permissiondenied">2372<h3 id="permissiondenied">
2364 PermissionDenied2373 PermissionDenied
2365</h3>2374</h3>
2366 2375
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.2376Wird ausgeführt, wenn [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) einen Tool-Aufruf verweigert, einschließlich wenn er ihn 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.
2368 2377
2369Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2378Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2370 2379
2393 2402
2394| Feld | Beschreibung |2403| Feld | Beschreibung |
2395| :- | :- |2404| :- | :- |
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 [Ablehnungen ohne Urteil](#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` |2405| `reason` | Der Ablehnungsgrund. 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` |
2397 2406
2398<h4 id="permissiondenied-decision-control">2407<h4 id="permissiondenied-decision-control">
2399 PermissionDenied-Entscheidungskontrolle2408 PermissionDenied-Entscheidungskontrolle
2410}2419}
2411```2420```
2412 2421
2413Wenn `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 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.2422Wenn `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 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.
2414 2423
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.2424Claude 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 Verweigerungen sagt Claude Code dem Modell in der Ablehnungsmeldung bereits, ob es später erneut versuchen soll oder weitermachen soll.
2416 2425
2417<h3 id="notification">2426<h3 id="notification">
2418 Notification2427 Notification
2419</h3>2428</h3>
2420 2429
2421Wird ausgeführt, wenn Claude Code Benachrichtigungen sendet. Gleicht Benachrichtigungstyp ab. Weglassen des Matchers, um Hooks für alle Benachrichtigungstypen auszuführen.2430Wird ausgeführt, wenn Claude Code Benachrichtigungen sendet. Gleicht Benachrichtigungstyp ab. Weglassen Sie den Matcher, um Hooks für alle Benachrichtigungstypen auszuführen.
2422 2431
2423Sie erhalten diese Hook-Ereignisse auch mit ausgeschalteten Desktop-Benachrichtigungen: Die `preferredNotifChannel` Einstellung, einschließlich `notifications_disabled`, ändert nur, wie Sie benachrichtigt werden, nicht ob Ihr Hook ausgeführt wird.2432Sie erhalten diese Hook-Ereignisse auch mit ausgeschalteten Desktop-Benachrichtigungen: Die `preferredNotifChannel` Einstellung, einschließlich `notifications_disabled`, ändert nur, wie Sie benachrichtigt werden, nicht ob Ihr Hook ausgeführt wird.
2424 2433
2425| Matcher | Wann wird es ausgelöst |2434| Matcher | Wann wird es ausgelöst |
2426| :- | :- |2435| :- | :- |
2427| `permission_prompt` | Claude benötigt Ihre Genehmigung für einen Tool-Aufruf oder eine Sandbox-Anfrage einer [Netzwerkanfrage](/docs/de/sandboxing#network-isolation), und die Aufforderung hat etwa sechs Sekunden gewartet |2436| `permission_prompt` | Claude benötigt Ihre Genehmigung zur Verwendung eines Tools oder einer Sandbox-Anfrage einer [Netzwerkanfrage](/docs/de/sandboxing#network-isolation), und die Aufforderung hat etwa sechs Sekunden gewartet |
2428| `idle_prompt` | Claude hat vor etwa 60 Sekunden geantwortet und Sie haben seitdem nicht eingegeben |2437| `idle_prompt` | Claude hat vor etwa 60 Sekunden geantwortet und Sie haben seitdem nicht eingegeben |
2429| `auth_success` | Authentifizierung wird abgeschlossen |2438| `auth_success` | Authentifizierung wird abgeschlossen |
2430| `elicitation_dialog` | Ein MCP-Server öffnet ein Elicitation-Formular und Sie haben etwa sechs Sekunden nicht eingegeben |2439| `elicitation_dialog` | Ein MCP-Server öffnet ein Elicitierungsformular 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 eingegeben |2440| `elicitation_url_dialog` | Ein MCP-Server fordert Sie auf, eine Browser-URL zu öffnen und Sie haben etwa sechs Sekunden nicht eingegeben |
2432| `elicitation_complete` | Ein MCP-Server meldet, dass eine [URL-Modus-Elicitation](#elicitation-input) abgeschlossen ist |2441| `elicitation_complete` | Ein MCP-Server meldet, dass eine [URL-Modus-Elicitierung](#elicitation-input) abgeschlossen ist |
2433| `elicitation_response` | Eine MCP-Elicitation-Antwort wird an den Server zurückgesendet |2442| `elicitation_response` | Eine MCP-Elicitierungs-Antwort wird an den Server zurückgesendet |
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 eingegeben |2443| `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. Wird auch ausgelöst, wenn eine Terminal-Sitzung Ihnen eine [Agent-Team-Teamkollegen-Terminal-Setup-Frage](/docs/de/agent-teams#choose-a-display-mode) oder eine Auto-Modus-Notiz über [Klassifizierer-Anfrage-Gebühren](/docs/de/auto-mode-classifier-billing) zeigt und Sie etwa sechs Sekunden nicht eingegeben haben |
2435| `agent_completed` | Eine Hintergrund-Sitzung wird beendet oder schlägt fehl. Wird nur ausgelöst, während [Agent-Ansicht](/docs/de/agent-view) in einem Terminal offen ist |2444| `agent_completed` | Eine Hintergrund-Sitzung wird abgeschlossen oder schlägt fehl. Wird nur ausgelöst, während [Agent-Ansicht](/docs/de/agent-view) in einem Terminal offen ist |
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, was Nutzung wieder verfügbar macht, mit der [Modell-Einstellung Ausnahme](/docs/de/interactive-mode#wait-for-a-usage-limit-to-reset) |2445| `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, was Nutzung wieder verfügbar macht, mit der [Modell-Einstellung Ausnahme](/docs/de/interactive-mode#wait-for-a-usage-limit-to-reset) |
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 löst stattdessen `quota_auto_resume_fired` aus |2446| `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 löst stattdessen `quota_auto_resume_fired` aus |
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 weiterhin das Limit oder die Fortsetzung wurde blockiert, bevor sie das Modell erreichte. Wird nicht ausgelöst, wenn Sie `Esc` oder `Ctrl+C` drücken oder **Nicht automatisch fortsetzen** wählen |2447| `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 ausgelöst, wenn Sie `Esc` oder `Ctrl+C` drücken oder **Nicht automatisch fortsetzen** wählen |
2439 2448
2440Die `agent_needs_input` und `agent_completed` Typen erfordern Claude Code v2.1.198 oder später.2449Die `agent_needs_input` und `agent_completed` Typen erfordern Claude Code v2.1.198 oder später.
2441 2450
2446`agent_needs_input` für eine Teamkollegen-Terminal-Setup-Frage erfordert Claude Code v2.1.248 oder später.2455`agent_needs_input` für eine Teamkollegen-Terminal-Setup-Frage erfordert Claude Code v2.1.248 oder später.
2447 2456
2448<Note>2457<Note>
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 weg zu sein scheinen:2458 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:
2450 2459
2451 * 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 zur Verwendung eines Tools bittet, verwenden Sie stattdessen [PermissionRequest](#permissionrequest).2460 * 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 Genehmigung zur Verwendung eines Tools bittet, verwenden Sie stattdessen [PermissionRequest](#permissionrequest).
2452 * 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 auf eigene Faust endet, wird stattdessen einer der `quota_auto_resume_*` Typen ausgelöst.2461 * 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 auf eigene Faust endet, wird stattdessen einer der `quota_auto_resume_*` Typen ausgelöst.
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 eingegeben haben. Beide teilen das gleiche Sechs-Sekunden-Gate wie `permission_prompt`: Der Timer startet, wenn der Dialog erscheint, und jeder Tastendruck verschiebt ihn.2462 * 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.
2454 2463
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.2464 Eine Berechtigungsanfrage oder Elicitierung, die ankommt, während ein anderer Dialog auf dem Bildschirm ist, behält das gleiche Sechs-Sekunden-Gate, zeitlich vom Ankommen der Anfrage. Seine Benachrichtigung kann Sie erreichen, während die Anfrage immer noch hinter dem offenen Dialog wartet.
2456</Note>2465</Note>
2457 2466
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, was ist, wie Claude Desktop und die VS Code Erweiterung Claude Code hosten:2467Claude 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:
2459 2468
2460* Erwarten Sie `permission_prompt` etwa sechs Sekunden, nachdem Claude um Erlaubnis bittet. Claude Code verschiebt es nicht, während Sie eingeben.2469* Erwarten Sie `permission_prompt` etwa sechs Sekunden, nachdem Claude um Genehmigung bittet. Claude Code verschiebt es nicht, während Sie eingeben.
2461* Wenn Sie oder ein [PermissionRequest](#permissionrequest) Hook früher antworten, führt Claude Code `permission_prompt` nicht aus.2470* Wenn Sie oder ein [PermissionRequest](#permissionrequest) Hook früher antworten, führt Claude Code `permission_prompt` nicht aus.
2462* Setzen Sie [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/de/env-vars) auf `1`, um `permission_prompt` in diesen Sitzungen auszuschalten.2471* Setzen Sie [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/de/env-vars) auf `1`, um `permission_prompt` in diesen Sitzungen auszuschalten.
2463 2472
2464Vor v2.1.233 wurde `permission_prompt` in diesen Sitzungen nicht ausgelöst.2473Vor v2.1.233 wurde `permission_prompt` in diesen Sitzungen nicht ausgelöst.
2465 2474
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:2475Verwenden 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:
2467 2476
2468```json theme={null}2477```json theme={null}
2469{2478{
2496 Notification-Eingabe2505 Notification-Eingabe
2497</h4>2506</h4>
2498 2507
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 ausgelöst wurde.2508Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten Notification-Hooks `message` mit dem Benachrichtigungstext, ein optionaler `title` und `notification_type`, der angibt, welcher Typ ausgelöst wurde.
2500 2509
2501```json theme={null}2510```json theme={null}
2502{2511{
2510}2519}
2511```2520```
2512 2521
2513Notification-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.2522Notification-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-Benachrichtigungs-Beispiel verlässt. Notification-Hooks sind für Nebenwirkungen wie das Weiterleiten der Benachrichtigung an einen externen Service gedacht.
2514 2523
2515<h3 id="subagentstart">2524<h3 id="subagentstart">
2516 SubagentStart2525 SubagentStart
2517</h3>2526</h3>
2518 2527
2519Wird ausgeführt, wenn Claude einen Subagent mit dem Agent-Tool erzeugt, wenn Claude [einen Subagent 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.2528Wird ausgeführt, wenn Claude einen Subagenten mit dem Agent-Tool erzeugt, 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.
2520 2529
2521Für Subagenten, die von einem [Plugin](/docs/de/plugins/overview) versendet werden, ist der Agent-Typ der Plugin-scoped Bezeichner 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$`.2530Für Subagenten, die von einem [Plugin](/docs/de/plugins/overview) versendet werden, ist der Agent-Typ der Plugin-scoped Bezeichner 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 eine genaue Übereinstimmung: `^my-plugin:reviewer$`.
2522 2531
2523<h4 id="subagentstart-input">2532<h4 id="subagentstart-input">
2524 SubagentStart-Eingabe2533 SubagentStart-Eingabe
2525</h4>2534</h4>
2526 2535
2527Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SubagentStart-Hooks `agent_id` mit dem eindeutigen Bezeichner für den Subagent und `agent_type` mit dem Agent-Namen, den der Matcher filtert.2536Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SubagentStart-Hooks `agent_id` mit dem eindeutigen Bezeichner für den Subagenten und `agent_type` mit dem Agent-Namen, den der Matcher filtert.
2528 2537
2529```json theme={null}2538```json theme={null}
2530{2539{
2537}2546}
2538```2547```
2539 2548
2540SubagentStart-Hooks können die Subagent-Erstellung nicht blockieren, aber sie können Kontext in den Subagent einfügen. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:2549SubagentStart-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:
2541 2550
2542| Feld | Beschreibung |2551| Feld | Beschreibung |
2543| :- | :- |2552| :- | :- |
2544| `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) |2553| `additionalContext` | String, der zu Claudes Kontext am Anfang der Subagenten-Konversation hinzugefügt wird, bevor seine erste Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
2545 2554
2546```json theme={null}2555```json theme={null}
2547{2556{
2552}2561}
2553```2562```
2554 2563
2555Wenn der Hook erneut für den gleichen Subagent 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 hä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.2564Wenn 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 injizierte 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), die diese Kopie verwirft, injiziert Claude Code den Kontext des nächsten Laufs erneut.
2556 2565
2557<h3 id="subagentstop">2566<h3 id="subagentstop">
2558 SubagentStop2567 SubagentStop
2559</h3>2568</h3>
2560 2569
2561Wird ausgeführt, wenn ein Claude Code Subagent mit der Antwort fertig ist. Gleicht Agent-Typ ab, gleiche Werte wie SubagentStart.2570Wird ausgeführt, wenn ein Claude Code Subagent mit dem Antworten fertig ist. Gleicht Agent-Typ ab, gleiche Werte wie SubagentStart.
2562 2571
2563<h4 id="subagentstop-input">2572<h4 id="subagentstop-input">
2564 SubagentStop-Eingabe2573 SubagentStop-Eingabe
2565</h4>2574</h4>
2566 2575
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.2576Zusä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 Transkript des Subagenten selbst 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.
2568 2577
2569Nicht jedes SubagentStop-Ereignis kommt von einem Subagent, den Claude erzeugt hat. 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 ausgelöst, 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.2578Nicht jedes SubagentStop-Ereignis kommt von einem Subagenten, den Claude erzeugt hat. 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 ausgelöst, 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 ausgeführt wird.
2570 2579
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.2580Ein `matcher`, der Agent-Typen benennt, gleicht kein leeres `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 einem leeren `agent_type` ausgeführt.
2572 2581
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 über dieses Tool, bevor er stoppt. Das `last_assistant_message` Feld hält dann den abschließenden Text 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.2582Auf Claude Code v2.1.271 oder später liefert ein Subagent, der mit dem [`SubagentHandback`](/docs/de/tools-reference) Tool läuft, seinen Bericht über 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.
2574 2583
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 Subagent.2584SubagentStop-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.
2576 2585
2577```json theme={null}2586```json theme={null}
2578{2587{
2591}2600}
2592```2601```
2593 2602
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 Subagent laufen lässt. Das Zurückgeben von `decision: "block"` mit einem `reason` lässt den Subagent laufen und liefert `reason` an den Subagent 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 einzufügen, nachdem ein Subagent zurückkehrt, verwenden Sie einen [`PostToolUse`](#posttooluse) Hook auf dem `Agent` Tool statt.2603SubagentStop-Hooks verwenden das gleiche Entscheidungskontroll-Format 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.
2595 2604
2596<h3 id="taskcreated">2605<h3 id="taskcreated">
2597 TaskCreated2606 TaskCreated
2638* **Exit-Code 2**: Claude Code gibt den stderr-Text als die Nachricht zurück.2647* **Exit-Code 2**: Claude Code gibt den stderr-Text als die Nachricht zurück.
2639* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code gibt `reason` als die Nachricht zurück.2648* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code gibt `reason` als die Nachricht zurück.
2640 2649
2641Dieses Beispiel blockiert Aufgaben, deren Betreff nicht dem erforderlichen Format entspricht:2650Dieses Beispiel blockiert Aufgaben, deren Betreff nicht dem erforderlichen Format folgt:
2642 2651
2643```bash theme={null}2652```bash theme={null}
2644#!/bin/bash2653#!/bin/bash
2719 Stop2728 Stop
2720</h3>2729</h3>
2721 2730
2722Wird ausgeführt, wenn der Haupt-Claude Code Agent mit der Antwort fertig ist. Wird nicht ausgeführt, wenn der Stopp aufgrund einer Benutzerunterbrechung auftrat. API-Fehler lösen stattdessen [StopFailure](#stopfailure) aus.2731Wird 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 lösen stattdessen [StopFailure](#stopfailure) aus.
2723 2732
2724<Tip>2733<Tip>
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 Claude weiterarbeiten lassen möchten, bis eine Bedingung erfüllt ist, ohne Hook-Konfiguration zu schreiben.2734 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.
2726</Tip>2735</Tip>
2727 2736
2728<h4 id="stop-input">2737<h4 id="stop-input">
2729 Stop-Eingabe2738 Stop-Eingabe
2730</h4>2739</h4>
2731 2740
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 aufgrund 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 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).2741Zusä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 niemals auflöst. Claude Code wendet eine 8-aufeinanderfolgende-Fortsetzungs-Grenze an: Nach Stop-Hooks, die den Zug achtmal hintereinander fortgesetzt haben, überschreibt Claude Code den nächsten Block und beendet den Zug. Um die Grenze zu erhöhen, setzen Sie [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/de/env-vars).
2733 2742
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 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 zu diesem Stop-Zeitpunkt auf allen Versionen einzuschließen.2743Das `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 Vorlese- oder Benachrichtigungs-Hooks, verwenden Sie dieses Feld statt `transcript_path` zu lesen: Die Transkript-Datei ist nicht garantiert, die letzte Nachricht zum Stop-Zeitpunkt auf allen Versionen einzuschließen.
2735 2744
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.2745Die `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.
2737 2746
2740| Feld | Beschreibung |2749| Feld | Beschreibung |
2741| :- | :- |2750| :- | :- |
2742| `id` | Aufgaben-Bezeichner |2751| `id` | Aufgaben-Bezeichner |
2743| `type` | Freundliches Aufgaben-Typ-Label wie `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` oder `MCP task`. Jedes Label identifiziert, welche Claude Code Funktion die Aufgabe erstellt hat. Fällt auf den rohen Diskriminanten für unbekannte Typen zurück |2752| `type` | Freundlicher Aufgaben-Typ-Label wie `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` oder `MCP task`. Jedes Label identifiziert, welche Claude Code Funktion die Aufgabe erstellt hat. Fällt auf den rohen Diskriminanten für unbekannte Typen zurück |
2744| `status` | Aktueller Aufgaben-Status |2753| `status` | Aktueller Aufgaben-Status |
2745| `description` | Freitext-Beschreibung, begrenzt auf 1000 Zeichen mit einem In-String `… [+N chars]` Marker, wenn gekürzt |2754| `description` | Freitext-Beschreibung, begrenzt auf 1000 Zeichen mit einem In-String-`… [+N chars]` Marker, wenn gekürzt |
2746| `command` | Shell-Befehlszeile, begrenzt auf 1000 Zeichen. Nur für `shell` Aufgaben vorhanden |2755| `command` | Shell-Befehlszeile, begrenzt auf 1000 Zeichen. Nur für `shell` Aufgaben vorhanden |
2747| `agent_type` | Subagent-Typ-Name. Nur für `subagent` Aufgaben vorhanden |2756| `agent_type` | Subagenten-Typ-Name. Nur für `subagent` Aufgaben vorhanden |
2748| `server` | MCP-Server-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |2757| `server` | MCP-Server-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |
2749| `tool` | MCP-Tool-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |2758| `tool` | MCP-Tool-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |
2750| `name` | Workflow-Name. Nur für `workflow` Aufgaben vorhanden |2759| `name` | Workflow-Name. Nur für `workflow` Aufgaben vorhanden |
2755| :- | :- |2764| :- | :- |
2756| `id` | Cron-Aufgaben-Bezeichner |2765| `id` | Cron-Aufgaben-Bezeichner |
2757| `schedule` | Cron-Ausdruck, z. B. `0 9 * * 1-5` |2766| `schedule` | Cron-Ausdruck, z. B. `0 9 * * 1-5` |
2758| `recurring` | `false` für einmalige Aufwach-Aufrufe, deren Schedule eine einzelne Feuerzeit kodiert, `true` für Aufgaben, die bei jedem Treffer erneut feuern |2767| `recurring` | `false` für einmalige Aufwach-Aufrufe, deren Zeitplan eine einzelne Feuerzeit kodiert, `true` für Aufgaben, die bei jedem Match erneut feuern |
2759| `prompt` | Eingabeaufforderung, die eingereicht wird, wenn der Cron feuert, begrenzt auf 1000 Zeichen mit dem gleichen `… [+N chars]` Marker |2768| `prompt` | Eingabeaufforderung, die eingereicht wird, wenn der Cron feuert, begrenzt auf 1000 Zeichen mit dem gleichen `… [+N chars]` Marker |
2760 2769
2761Dieses Beispiel zeigt eine Stop-Eingabe mit einer laufenden Shell-Aufgabe und einem wiederkehrenden Cron:2770Dieses Beispiel zeigt eine Stop-Eingabe mit einer laufenden Shell-Aufgabe und einem wiederkehrenden Cron:
2799| :- | :- |2808| :- | :- |
2800| `decision` | `"block"` verhindert, dass Claude stoppt. Weglassen, um Claude zu stoppen |2809| `decision` | `"block"` verhindert, dass Claude stoppt. Weglassen, um Claude zu stoppen |
2801| `reason` | Erforderlich, wenn `decision` `"block"` ist. Sagt Claude, warum es fortgesetzt werden sollte |2810| `reason` | Erforderlich, wenn `decision` `"block"` ist. Sagt Claude, warum es fortgesetzt werden sollte |
2802| `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 |2811| `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 |
2803 2812
2804Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `reason` weitergeleitet: Claude empfängt die stderr-Nachricht als die Erklärung, warum es fortgesetzt werden sollte.2813Ein Hook, der durch Beendigung mit 2 blockiert, leitet auf die gleiche Weise wie `reason` weiter: Claude empfängt die stderr-Nachricht als Erklärung, warum es fortgesetzt werden sollte.
2805 2814
2806```json theme={null}2815```json theme={null}
2807{2816{
2810}2819}
2811```2820```
2812 2821
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 lässt das Gespräch durch die gleichen Loop-Schutzmaßnahmen wie `decision: "block"` gehen, 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:2822Verwenden 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"` laufen, nämlich die `stop_hook_active` Eingabe und die 8-aufeinanderfolgende-Fortsetzungs-Grenze, aber das Transkript kennzeichnet es als `Stop hook feedback` und es wird keine Hook-Fehler-Benachrichtigung angezeigt:
2814 2823
2815```json theme={null}2824```json theme={null}
2816{2825{
2825 StopFailure2834 StopFailure
2826</h3>2835</h3>
2827 2836
2828Wird statt [Stop](#stop) ausgeführt, wenn der Zug aufgrund eines API-Fehlers endet. Claude Code ignoriert die Ausgabe und den Exit-Code des Hooks, abgesehen von [`terminalSequence`](#emit-terminal-notifications). Verwenden Sie dies, um Fehler zu protokollieren, Warnungen zu senden oder Wiederherstellungsmaßnahmen zu ergreifen, wenn Claude aufgrund von Rate Limits, Authentifizierungsproblemen oder anderen API-Fehlern keine Antwort abschließen kann.2837Wird stattdessen von [Stop](#stop) ausgeführt, wenn der Zug aufgrund eines API-Fehlers endet. Claude Code ignoriert die Ausgabe und den Exit-Code des Hooks, abgesehen von [`terminalSequence`](#emit-terminal-notifications). Verwenden Sie dies, um Fehler zu protokollieren, Warnungen zu senden oder Wiederherstellungsmaßnahmen zu ergreifen, wenn Claude aufgrund von Ratenlimits, Authentifizierungsproblemen oder anderen API-Fehlern keine Antwort abschließen kann.
2829 2838
2830<h4 id="stopfailure-input">2839<h4 id="stopfailure-input">
2831 StopFailure-Eingabe2840 StopFailure-Eingabe
2832</h4>2841</h4>
2833 2842
2834Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten StopFailure-Hooks `error`, optionalen `error_details` und optionalen `last_assistant_message`. Das `error` Feld identifiziert den Fehlertyp und wird zum Filtern des Matchers verwendet.2843Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten StopFailure-Hooks `error`, optional `error_details` und optional `last_assistant_message`. Das `error` Feld identifiziert den Fehlertyp und wird zum Filtern des Matchers verwendet.
2835 2844
2836| Feld | Beschreibung |2845| Feld | Beschreibung |
2837| :- | :- |2846| :- | :- |
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` |2847| `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` |
2839| `error_details` | Zusätzliche Details zum Fehler, wenn verfügbar |2848| `error_details` | Zusätzliche Details zum Fehler, wenn verfügbar |
2840| `last_assistant_message` | Der gerenderte Fehlertext, der im Gespräch angezeigt wird. Im Gegensatz zu `Stop` und `SubagentStop`, wo dieses Feld Claudes Gesprächsausgabe hält, enthält es für `StopFailure` die API-Fehler-Zeichenkette selbst, wie `"API Error: Rate limit reached"` |2849| `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"` |
2841 2850
2842```json theme={null}2851```json theme={null}
2843{2852{
2857 TeammateIdle2866 TeammateIdle
2858</h3>2867</h3>
2859 2868
2860Wird ausgeführt, wenn ein [Agent-Team](/docs/de/agent-teams) Teamkollege nach Beendigung seines Zugs untätig wird. Verwenden Sie dies, um Qualitäts-Gates durchzusetzen, bevor ein Teamkollege aufhört zu arbeiten, wie das Erfordern bestandener Lint-Überprüfungen oder das Überprüfen, dass Ausgabe-Dateien existieren.2869Wird ausgeführt, wenn ein [Agent-Team](/docs/de/agent-teams) Teamkollege nach Abschluss seines Zugs untätig werden soll. 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.
2861 2870
2862TeammateIdle-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgelöst.2871TeammateIdle-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgelöst.
2863 2872
2881 2890
2882| Feld | Beschreibung |2891| Feld | Beschreibung |
2883| :- | :- |2892| :- | :- |
2884| `teammate_name` | Name des Teamkollegen, der untätig wird |2893| `teammate_name` | Name des Teamkollegen, der untätig werden soll |
2885| `team_name` | Veraltet. Sitzungs-abgeleiteter Team-Name; wird in einer zukünftigen Version entfernt |2894| `team_name` | Veraltet. Sitzungs-abgeleiteter Team-Name; wird in einer zukünftigen Version entfernt |
2886 2895
2887<h4 id="teammateidle-decision-control">2896<h4 id="teammateidle-decision-control">
2893* **Exit-Code 2**: Der Teamkollege empfängt die stderr-Nachricht als Feedback und arbeitet weiter, anstatt untätig zu werden.2902* **Exit-Code 2**: Der Teamkollege empfängt die stderr-Nachricht als Feedback und arbeitet weiter, anstatt untätig zu werden.
2894* **JSON `{"continue": false, "stopReason": "..."}`**: Stoppt den Teamkollegen vollständig, was dem `Stop` Hook-Verhalten entspricht. Der `stopReason` wird dem Benutzer angezeigt.2903* **JSON `{"continue": false, "stopReason": "..."}`**: Stoppt den Teamkollegen vollständig, was dem `Stop` Hook-Verhalten entspricht. Der `stopReason` wird dem Benutzer angezeigt.
2895 2904
2896Dieses Beispiel überprüft, dass ein Build-Artefakt existiert, bevor ein Teamkollege untätig wird:2905Dieses Beispiel überprüft, dass ein Build-Artefakt existiert, bevor ein Teamkollege untätig werden darf:
2897 2906
2898```bash theme={null}2907```bash theme={null}
2899#!/bin/bash2908#!/bin/bash
2910 ConfigChange2919 ConfigChange
2911</h3>2920</h3>
2912 2921
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.2922Wird ausgeführt, wenn sich eine Konfigurationsdatei während einer Sitzung ändert. Verwenden Sie dies, um Einstellungs-Änderungen zu überprüfen, Sicherheits-Richtlinien durchzusetzen oder nicht autorisierte Änderungen an Konfigurationsdateien zu blockieren.
2914 2923
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.2924Claude 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.
2916 2925
2924| `policy_settings` | `managed-settings.json` oder eine Datei in `managed-settings.d/` ändert sich |2933| `policy_settings` | `managed-settings.json` oder eine Datei in `managed-settings.d/` ändert sich |
2925| `skills` | Eine Skill-Datei in `.claude/skills/` ändert sich |2934| `skills` | Eine Skill-Datei in `.claude/skills/` ändert sich |
2926 2935
2927Dieses Beispiel protokolliert alle Konfigurationsänderungen für Sicherheits-Auditing:2936Dieses Beispiel protokolliert alle Konfigurationsänderungen für Sicherheits-Audits:
2928 2937
2929```json theme={null}2938```json theme={null}
2930{2939{
2948 ConfigChange-Eingabe2957 ConfigChange-Eingabe
2949</h4>2958</h4>
2950 2959
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.2960Zusä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.
2952 2961
2953```json theme={null}2962```json theme={null}
2954{2963{
2989 2998
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: Umgebungsvariablen neu laden, projekt-spezifische 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.2999Wird 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: Umgebungsvariablen neu laden, projekt-spezifische 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.
2991 3000
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.3001CwdChanged-Hooks haben Zugriff auf [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variablen, die in diese Datei geschrieben werden, bleiben für nachfolgende Bash-Befehle bestehen, bis zum nächsten CwdChanged-Ereignis, wenn Claude Code sie löscht.
2993 3002
2994CwdChanged unterstützt keine Matcher und wird bei jedem Vorkommen ausgelöst.3003CwdChanged unterstützt keine Matcher und wird bei jedem Vorkommen ausgelöst.
2995 3004
3036* Sie ein Verzeichnis auf der `/permissions` Workspace-Registerkarte hinzufügen3045* Sie ein Verzeichnis auf der `/permissions` Workspace-Registerkarte hinzufügen
3037* Sie ein Verzeichnis hinzufügen, das bereits ein Arbeitsverzeichnis ist oder sich in einem befindet3046* Sie ein Verzeichnis hinzufügen, das bereits ein Arbeitsverzeichnis ist oder sich in einem befindet
3038 3047
3039Claude Code führt 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.3048Claude Code löst DirectoryAdded aus, nachdem Sandbox- und Berechtigungs-Status aktualisiert wurden, daher sehen Sandbox-Tools das neue Verzeichnis bereits, wenn Ihr Hook ausgeführt wird. Hook-Befehle selbst werden unsandboxed ausgeführt.
3040 3049
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.3050Claude 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.
3042 3051
3043Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:3052Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:
3044 3053
3069}3078}
3070```3079```
3071 3080
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 pro Quelle:3081DirectoryAdded-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:
3073 3082
3074* `slash_command`: Claude Code liefert die `systemMessage` des Hooks an Claude als Kontext beim nächsten Gesprächszug, anstatt sie Ihnen zu zeigen. Eine Anzahl fehlgeschlagener Hooks erscheint im Transkript. Vollständige Fehlerausgabe geht ins Debug-Protokoll3083* `slash_command`: Claude Code liefert den `systemMessage` des Hooks an Claude als Kontext beim nächsten Konversations-Zug, anstatt ihn Ihnen zu zeigen. Eine Anzahl fehlgeschlagener Hooks erscheint im Transkript. Vollständige Fehler-Ausgabe geht ins Debug-Protokoll
3075* `register_repo_root`: Claude Code schreibt `systemMessage` Ausgabe und Fehlerausgabe nur ins Debug-Protokoll3084* `register_repo_root`: Claude Code schreibt `systemMessage` Ausgabe und Fehler-Ausgabe nur ins Debug-Protokoll
3076 3085
3077<h3 id="filechanged">3086<h3 id="filechanged">
3078 FileChanged3087 FileChanged
3079</h3>3088</h3>
3080 3089
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 führt es den Hook aus, egal 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.3090Wird 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 ausgeführt, egal 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.
3082 3091
3083Der `matcher` für dieses Ereignis dient zwei Rollen:3092Der `matcher` für dieses Ereignis dient zwei Rollen:
3084 3093
3085* **Überwachungsliste erstellen**: 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.3094* **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.
3086* **Filtern, welche Hooks laufen**: Wenn sich eine überwachte Datei ändert, filtert der gleiche Wert, welche Hook-Gruppen mit den Standard-[Matcher-Regeln](#matcher-patterns) gegen den Basis-Namen der geänderten Datei laufen.3095* **Filtere, welche Hooks ausgeführt werden**: Wenn sich eine überwachte Datei ändert, filtert der gleiche Wert, welche Hook-Gruppen ausgeführt werden, unter Verwendung der Standard-[Matcher-Regeln](#matcher-patterns) gegen den Basis-Namen der geänderten Datei.
3087 3096
3088Dieses Beispiel normalisiert Zeilenumbrüche in `data.csv` nach jeder Änderung, einschließlich eines `Bash` Befehls oder eines externen Skripts, das die Datei umschreibt:3097Dieses Beispiel normalisiert Zeilenumbrüche in `data.csv` nach jeder Änderung, einschließlich eines `Bash` Befehls oder eines externen Skripts, das die Datei umschreibt:
3089 3098
3105}3114}
3106```3115```
3107 3116
3108Der 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, ein CR am Ende einer Zeile, daher beendet sich der Lauf nach einer Normalisierung, 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:3117Der 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, ein CR am Ende einer Zeile, daher beendet der Lauf nach einer Normalisierung ohne Berührung der Datei. Eine lockerere 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:
3109 3118
3110```bash theme={null}3119```bash theme={null}
3111#!/bin/bash3120#!/bin/bash
3115fi3124fi
3116```3125```
3117 3126
3118Um 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.3127Um 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.
3119 3128
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 säen 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 `*`.3129Um 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 `*`.
3121 3130
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.3131FileChanged-Hooks haben Zugriff auf [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variablen, die in diese Datei geschrieben werden, bleiben für nachfolgende Bash-Befehle bestehen, bis zum nächsten [CwdChanged](#cwdchanged) Ereignis, wenn Claude Code sie löscht.
3123 3132
3124<h4 id="filechanged-input">3133<h4 id="filechanged-input">
3125 FileChanged-Eingabe3134 FileChanged-Eingabe
3161 WorktreeCreate3170 WorktreeCreate
3162</h3>3171</h3>
3163 3172
3164Wird ausgeführt, wenn ein Worktree erstellt wird, ob von `claude --worktree`, von einem [Subagent 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 und ermöglicht es Ihnen, ein anderes Versionskontrollsystem wie SVN, Perforce oder Mercurial zu verwenden.3173Wird 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 und ermöglicht es Ihnen, ein anderes Versionskontroll-System wie SVN, Perforce oder Mercurial zu verwenden.
3165 3174
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 das neue Worktree kopieren müssen, tun Sie dies in Ihrem Hook-Skript.3175Da 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.
3167 3176
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.3177Der 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.
3169 3178
3188}3197}
3189```3198```
3190 3199
3191Der Hook liest den Worktree `name` aus der JSON-Eingabe von stdin, checkt eine frische Kopie in ein neues Verzeichnis aus und druckt den Verzeichnis-Pfad. 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.3200Der Hook liest den Worktree-`name` aus der JSON-Eingabe von stdin, checkt eine frische Kopie in ein neues Verzeichnis aus und druckt den Verzeichnis-Pfad. 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.
3192 3201
3193<h4 id="worktreecreate-input">3202<h4 id="worktreecreate-input">
3194 WorktreeCreate-Eingabe3203 WorktreeCreate-Eingabe
3195</h4>3204</h4>
3196 3205
3197Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten WorktreeCreate-Hooks das `name` Feld. Dies ist ein Slug-Bezeichner für das neue Worktree, entweder vom Benutzer angegeben oder automatisch generiert, z. B. `bold-oak-a3f2`.3206Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten WorktreeCreate-Hooks das `name` Feld. Dies ist ein Slug-Bezeichner für den neuen Worktree, entweder vom Benutzer angegeben oder automatisch generiert, z. B. `bold-oak-a3f2`.
3198 3207
3199```json theme={null}3208```json theme={null}
3200{3209{
3217 3226
3218Wenn der Hook fehlschlägt oder keinen Pfad erzeugt, schlägt die Worktree-Erstellung mit einem Fehler fehl.3227Wenn der Hook fehlschlägt oder keinen Pfad erzeugt, schlägt die Worktree-Erstellung mit einem Fehler fehl.
3219 3228
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.3229Claude Code löst einen relativen Pfad gegen das Verzeichnis auf, in dem der Hook ausgeführt wurde, 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.
3221 3230
3222Claude Code lehnt einen absoluten Pfad ab, der `.` oder `..` Segmente enthält, und jeden Pfad, der unter dem Repository-Root durch einen Symlink geht, da ein Symlink, der im Repository committed ist, das 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.3231Claude Code lehnt einen absoluten Pfad ab, der `.` oder `..` Segmente enthält, und jeden Pfad, der unter der Repository-Root durch einen Symlink 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 Pfad des Hooks ohne diese Überprüfung.
3223 3232
3224<h3 id="worktreeremove">3233<h3 id="worktreeremove">
3225 WorktreeRemove3234 WorktreeRemove
3226</h3>3235</h3>
3227 3236
3228Wird ausgeführt, wenn ein Worktree entfernt wird. Dies ist das Aufräum-Gegenstück zu [WorktreeCreate](#worktreecreate). Das Ereignis wird ausgelöst, wenn:3237Wird ausgeführt, wenn ein Worktree entfernt wird. Dies ist das Cleanup-Gegenstück zu [WorktreeCreate](#worktreecreate). Das Ereignis wird ausgelöst, wenn:
3229 3238
3230* Sie eine `--worktree` Sitzung beenden und wählen, sie zu entfernen3239* Sie eine `--worktree` Sitzung beenden und wählen, sie zu entfernen
3231* Ein Subagent mit `isolation: "worktree"` beendet wird3240* Ein Subagent mit `isolation: "worktree"` beendet
3232* Sie eine [Hintergrund-Sitzung](/docs/de/agent-view#what-deleting-a-session-removes) löschen, deren Worktree der Hook erstellt hat3241* Sie eine [Hintergrund-Sitzung](/docs/de/agent-view#what-deleting-a-session-removes) löschen, deren Worktree der Hook erstellt hat
3233 3242
3234Für Git-basierte Worktrees verarbeitet Claude Code das Aufräumen automatisch mit `git worktree remove`. Wenn Sie einen WorktreeCreate-Hook konfiguriert haben, paaren Sie ihn mit einem WorktreeRemove-Hook, um das Aufräumen der Worktrees zu steuern, die er erstellt:3243Für Git-basierte Worktrees verarbeitet Claude Code Cleanup automatisch mit `git worktree remove`. Wenn Sie einen WorktreeCreate-Hook konfiguriert haben, paaren Sie ihn mit einem WorktreeRemove-Hook, um Cleanup der Worktrees zu steuern, die er erstellt:
3235 3244
3236* **Kein WorktreeRemove-Hook**: Wenn Sie eine `--worktree` Sitzung beenden und Entfernung wählen, fällt Claude Code auf `git worktree remove --force` auf dem Pfad zurück, den Ihr WorktreeCreate-Hook zurückgegeben hat, daher wird ein Worktree, das Git erkennt, entfernt. Ein Worktree, das Git nicht erkennt, z. B. einer, den Ihr Hook mit einem nicht-Git-Versionskontrollsystem erstellt hat, bleibt auf der Festplatte. Für was das Löschen einer [Hintergrund-Sitzung](/docs/de/agent-view#what-deleting-a-session-removes) mit einem Hook-erstellten Worktree tut, siehe die Lösch-Regeln der Agent-Ansicht.3245* **Kein WorktreeRemove-Hook**: Wenn Sie eine `--worktree` Sitzung beenden und Entfernung wählen, fällt Claude Code auf `git worktree remove --force` auf dem Pfad zurück, den Ihr WorktreeCreate-Hook zurückgegeben hat, daher wird ein Worktree, das Git erkennt, entfernt. Ein Worktree, das Git nicht erkennt, z. B. einer, den Ihr Hook mit einem nicht-Git-Versionskontroll-System erstellt hat, bleibt auf der Festplatte. Für was das Löschen einer [Hintergrund-Sitzung](/docs/de/agent-view#what-deleting-a-session-removes) mit einem Hook-erstellten Worktree tut, siehe die Lösch-Regeln der Agent-Ansicht.
3237* **Hook beendet sich mit 0**: Das Worktree wird als entfernt gezählt. Claude Code liest nichts anderes vom Hook, daher stellen Sie sicher, dass Ihr Hook das Verzeichnis gelöscht hat.3246* **Hook beendet 0**: Der Worktree wird als entfernt gezählt. Claude Code liest nichts anderes vom Hook, daher stellen Sie sicher, dass Ihr Hook das Verzeichnis gelöscht hat.
3238* **Hook beendet sich mit nicht-Null**: Das Entfernen schlägt fehl, wenn das Verzeichnis bei `worktree_path` immer noch danach existiert, und das Worktree bleibt auf der Festplatte ohne Git-Fallback. Ein Hook, der das Verzeichnis vor dem Beenden mit nicht-Null gelöscht hat, wird als entfernt gezählt. Für wie der Fehler gemeldet wird, siehe [WorktreeRemove-Eingabe](#worktreeremove-input).3247* **Hook beendet nicht-Null**: Die Entfernung schlägt fehl, wenn das Verzeichnis bei `worktree_path` immer noch danach existiert, und der Worktree bleibt auf der Festplatte mit keinem Git-Fallback. Ein Hook, der das Verzeichnis vor dem Beenden nicht-Null gelöscht hat, wird als entfernt gezählt. Für wie der Fehler gemeldet wird, siehe [WorktreeRemove-Eingabe](#worktreeremove-input).
3239 3248
3240Claude Code löscht niemals einen Branch, der zu einem Hook-erstellten Worktree gehört, da es nur den Pfad kennt, den Ihr WorktreeCreate-Hook zurückgegeben hat. Wenn Ihr WorktreeCreate-Hook einen Branch erstellt, löschen Sie ihn in Ihrem WorktreeRemove-Hook.3249Claude Code löscht niemals einen Branch, der zu einem Hook-erstellten Worktree gehört, da es nur den Pfad kennt, den Ihr WorktreeCreate-Hook zurückgegeben hat. Wenn Ihr WorktreeCreate-Hook einen Branch erstellt, löschen Sie ihn in Ihrem WorktreeRemove-Hook.
3241 3250
3242Claude Code verwirft die [JSON-Ausgabefelder](#json-output) eines WorktreeRemove-Hooks, wie `systemMessage` und `continue`.3251Claude Code verwirft die [JSON-Ausgabefelder](#json-output) eines WorktreeRemove-Hooks, wie `systemMessage` und `continue`.
3243 3252
3244Für ein Hintergrund-Sitzungs-Löschen überprüft Claude Code den gespeicherten Worktree-Pfad, bevor der Hook ausgeführt wird und lehnt einen Pfad ab, der ein Symlink ist oder unter dem Repository-Root durch einen geht. Der Hook wird für ein Worktree, das immer noch Dateien enthält, nur ausgeführt, wenn Sie das Löschen in der [Agent-Ansicht](/docs/de/agent-view#what-deleting-a-session-removes) bestätigen; für ein solches Worktree behält [`claude rm`](/docs/de/agent-view#manage-sessions-from-the-shell) die Sitzung und das Worktree statt. Vor v2.1.216 wurde der Hook auf dem gespeicherten Pfad ohne diese Überprüfungen ausgeführt.3253Für ein Hintergrund-Sitzungs-Löschen überprüft Claude Code den gespeicherten Worktree-Pfad, bevor der Hook ausgeführt wird und lehnt einen Pfad ab, der ein Symlink ist oder unter der Repository-Root durch einen geht. Der Hook wird für einen Worktree, der immer noch Dateien enthält, nur ausgeführt, wenn Sie das Löschen in der [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.
3245 3254
3246Claude Code übergibt den Pfad, den WorktreeCreate zurückgegeben hat, als `worktree_path` in der Hook-Eingabe. Dieses Beispiel liest diesen Pfad und entfernt das Verzeichnis:3255Claude Code übergibt den von WorktreeCreate zurückgegebenen Pfad als `worktree_path` in der Hook-Eingabe. Dieses Beispiel liest diesen Pfad und entfernt das Verzeichnis:
3247 3256
3248```json theme={null}3257```json theme={null}
3249{3258{
3266 WorktreeRemove-Eingabe3275 WorktreeRemove-Eingabe
3267</h4>3276</h4>
3268 3277
3269Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten WorktreeRemove-Hooks das `worktree_path` Feld, das der absolute Pfad zum Worktree ist, das entfernt wird.3278Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten WorktreeRemove-Hooks das `worktree_path` Feld, das der absolute Pfad zum Worktree ist, der entfernt wird.
3270 3279
3271```json theme={null}3280```json theme={null}
3272{3281{
3278}3287}
3279```3288```
3280 3289
3281Der Exit-Code eines WorktreeRemove-Hooks entscheidet das Ergebnis. Wenn ein Hook mit nicht-Null beendet wird und das Verzeichnis bei `worktree_path` danach immer noch existiert, schlägt das Entfernen fehl:3290Der Exit-Code eines WorktreeRemove-Hooks entscheidet das Ergebnis. Wenn ein Hook nicht-Null beendet und das Verzeichnis bei `worktree_path` danach immer noch existiert, schlägt die Entfernung fehl:
3282 3291
3283* Das Worktree bleibt auf der Festplatte, und der Hook-Befehl und stderr gehen ins [Debug-Protokoll](#debug-hooks).3292* Der Worktree bleibt auf der Festplatte und der Hook-Befehl und stderr gehen ins [Debug-Protokoll](#debug-hooks).
3284* Wenn Sie eine Hintergrund-Sitzung löschen, bleibt die Sitzung auch. Die Verweigerungs-Nachricht in der [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 entfernt.3293* Wenn Sie eine Hintergrund-Sitzung löschen, bleibt die Sitzung auch. Die Verweigerungs-Nachricht in der [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 entfernt.
3285 3294
3286<h3 id="precompact">3295<h3 id="precompact">
3287 PreCompact3296 PreCompact
3288</h3>3297</h3>
3289 3298
3290Wird ausgeführt, bevor Claude Code eine Komprimierungs-Operation ausführen wird.3299Wird ausgeführt, bevor Claude Code eine Komprimierungs-Operation ausführen möchte.
3291 3300
3292Der Matcher-Wert gibt an, ob die Komprimierung manuell oder automatisch ausgelöst wurde:3301Der Matcher-Wert gibt an, ob die Komprimierung manuell oder automatisch ausgelöst wurde:
3293 3302
3294| Matcher | Wann wird es ausgelöst |3303| Matcher | Wann wird es ausgelöst |
3295| :- | :- |3304| :- | :- |
3296| `manual` | `/compact` |3305| `manual` | `/compact` |
3297| `auto` | Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |3306| `auto` | Auto-Komprimierung, wenn die Konversation das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3298 3307
3299Beenden 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.3308Beenden 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.
3300 3309
3301Das Blockieren der automatischen Komprimierung hat unterschiedliche Auswirkungen, je nachdem, wann es ausgelöst 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.3310Das Blockieren der automatischen Komprimierung hat unterschiedliche Auswirkungen, je nachdem, wann es ausgelöst wird. Wenn die Komprimierung proaktiv ausgelöst wurde, bevor das Kontext-Limit erreicht wurde, überspringt Claude Code sie und die Konversation 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.
3302 3311
3303Claude Code verwirft die `systemMessage` und `continue` Felder eines PreCompact-Hooks.3312Claude Code verwirft die `systemMessage` und `continue` Felder eines PreCompact-Hooks.
3304 3313
3330| Matcher | Wann wird es ausgelöst |3339| Matcher | Wann wird es ausgelöst |
3331| :- | :- |3340| :- | :- |
3332| `manual` | Nach `/compact` |3341| `manual` | Nach `/compact` |
3333| `auto` | Nach Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |3342| `auto` | Nach Auto-Komprimierung, wenn die Konversation das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3334 3343
3335<h4 id="postcompact-input">3344<h4 id="postcompact-input">
3336 PostCompact-Eingabe3345 PostCompact-Eingabe
3337</h4>3346</h4>
3338 3347
3339Zusä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 von der Komprimierungs-Operation generiert wurde.3348Zusä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 von der Komprimierungs-Operation generiert wurde.
3340 3349
3341```json theme={null}3350```json theme={null}
3342{3351{
3355 PreModelSwitch3364 PreModelSwitch
3356</h3>3365</h3>
3357 3366
3358Wird 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.3367Wird 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.
3359 3368
3360PreModelSwitch erfordert Claude Code v2.1.251 oder später. Claude Code führt ihn für diese Anfragen aus:3369PreModelSwitch erfordert Claude Code v2.1.251 oder später. Claude Code führt ihn für diese Anfragen aus:
3361 3370
3362* `/model <name>` und der `/model` Picker3371* `/model <name>` und der `/model` Picker
3363* Der `Option+P` oder `Alt+P` Modell-Picker3372* Der `Option+P` oder `Alt+P` Modell-Picker
3364* Die Modell-Einstellung in `/config`3373* Die Model-Einstellung in `/config`
3365* Das Einschalten des [Fast-Modus](/docs/de/fast-mode), wenn das die Sitzungs-Modell ändert3374* Das Aktivieren des [Fast-Modus](/docs/de/fast-mode), wenn das das Modell der Sitzung ändert
3366* 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)3375* 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)
3367 3376
3368Claude 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.3377Claude 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.
3371 3380
3372Wenn 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.3381Wenn 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.
3373 3382
3374Schreiben Sie den Matcher als genauen Namen, eine `|`-getrennte Liste wie `claude-opus-4-6|claude-opus-5` oder einen regulären Ausdruck wie `.*opus.*`. Dieses Beispiel verwendet einen genauen Namen-Matcher und überprüft auch `to_model` aus der Hook-Eingabe, daher lehnt es einen Wechsel zu Opus 4.6 ab, indem es mit Code 2 beendet wird und lässt jedes andere Ziel durch:3383Schreiben Sie den Matcher als genauen Namen, eine `|`-getrennte Liste wie `claude-opus-4-6|claude-opus-5` oder einen regulären Ausdruck wie `.*opus.*`. Dieses Beispiel verwendet einen genauen Namen-Matcher und überprüft auch `to_model` aus der Hook-Eingabe, daher lehnt es einen Wechsel zu Opus 4.6 ab, indem es mit Code 2 beendet und lässt jedes andere Ziel durch:
3375 3384
3376<Tabs>3385<Tabs>
3377 <Tab title="macOS/Linux">3386 <Tab title="macOS/Linux">
3397 </Tab>3406 </Tab>
3398 3407
3399 <Tab title="Windows (PowerShell)">3408 <Tab title="Windows (PowerShell)">
3400 Registrieren Sie einen Command-Hook, der ein Skript über PowerShell ausführt:3409 Registrieren Sie einen Command-Hook, der ein Skript durch PowerShell ausführt:
3401 3410
3402 ```json theme={null}3411 ```json theme={null}
3403 {3412 {
3443 PreModelSwitch-Eingabe3452 PreModelSwitch-Eingabe
3444</h4>3453</h4>
3445 3454
3446Zusä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.3455Zusä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.
3447 3456
3448| Feld | Typ | Beschreibung |3457| Feld | Typ | Beschreibung |
3449| :- | :- | :- |3458| :- | :- | :- |
3450| `from_model` | string | Modell-ID, von der der Wechsel ändert |3459| `from_model` | string | Modell-ID, von der der Wechsel ändert |
3451| `to_model` | string | Modell-ID, zu der der Wechsel ändert. Der Matcher vergleicht gegen den kanonischen Namen dieses Modells |3460| `to_model` | string | Modell-ID, zu der der Wechsel ändert. Der Matcher vergleicht gegen den kanonischen Namen dieses Modells |
3452| `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 |3461| `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 |
3453| `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 |3462| `source` | string | Woher die Anfrage kam: `"command"` für `/model <name>`, die Model-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 |
3454| `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 im Hauptgespräch, kombiniert. `0` vor der ersten Antwort |3463| `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 |
3455| `prompt_cache_warm` | boolean | Ob der Prompt-Cache des aktuellen Modells wahrscheinlich noch warm ist, was bedeutet, dass der Wechsel ihn aufgibt |3464| `prompt_cache_warm` | boolean | Ob der Prompt-Cache des aktuellen Modells wahrscheinlich noch warm ist, was bedeutet, dass der Wechsel ihn aufgibt |
3456| `cache_ttl` | string | [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime), die Claude Code für diese Sitzung anfordert: `"5m"` oder `"1h"` |3465| `cache_ttl` | string | [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime), die Claude Code für diese Sitzung anfordert: `"5m"` oder `"1h"` |
3457| `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 |3466| `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 |
3510 3519
3511Ein 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.3520Ein 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.
3512 3521
3513Ein Hook, der mit einem Code außer 0 oder 2 beendet wird 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.3522Ein 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.
3514 3523
3515<h3 id="postmodelswitch">3524<h3 id="postmodelswitch">
3516 PostModelSwitch3525 PostModelSwitch
3521PostModelSwitch erfordert Claude Code v2.1.251 oder später. Es kann nicht blockieren, da sich das Modell bereits geändert hat. Claude Code führt PostModelSwitch-Hooks nach jeder dieser Änderungen aus:3530PostModelSwitch erfordert Claude Code v2.1.251 oder später. Es kann nicht blockieren, da sich das Modell bereits geändert hat. Claude Code führt PostModelSwitch-Hooks nach jeder dieser Änderungen aus:
3522 3531
3523* Ein Wechsel, den Sie oder ein Client angefordert haben3532* Ein Wechsel, den Sie oder ein Client angefordert haben
3524* Ein [automatisches Modell-Fallback](/docs/de/model-config#automatic-model-fallback), das das Sitzungs-Modell ändert3533* Ein [automatisches Modell-Fallback](/docs/de/model-config#automatic-model-fallback), das das Modell der Sitzung ändert
3525* Eine Einstellung wie [`opusplan`](/docs/de/model-config#opusplan-model-setting), die den Plan-Modus betritt oder verlässt3534* Eine Einstellung wie [`opusplan`](/docs/de/model-config#opusplan-model-setting), die den Plan-Modus betritt oder verlässt
3526* Claude Code stellt das Modell wieder her, wenn Sie eine Sitzung fortsetzen3535* Claude Code stellt das Modell wieder her, wenn Sie eine Sitzung fortsetzen
3527 3536
3528Claude Code führt PostModelSwitch-Hooks nicht aus, wenn ein Modell aus einer [Fallback-Modell-Kette](/docs/de/model-config#fallback-model-chains) einen Zug bedient, da diese Substitution einen Zug dauert und das Sitzungs-Modell unverändert lässt.3537Claude Code führt PostModelSwitch-Hooks nicht aus, wenn ein Modell aus einer [Fallback-Modell-Kette](/docs/de/model-config#fallback-model-chains) einen Zug bedient, da diese Substitution einen Zug dauert und das Modell der Sitzung unverändert lässt.
3529 3538
3530Der Matcher folgt den gleichen Regeln wie [PreModelSwitch](#premodelswitch): Claude Code vergleicht ihn gegen den kanonischen Namen des Modells, zu dem die Sitzung wechselt.3539Der Matcher folgt den gleichen Regeln wie [PreModelSwitch](#premodelswitch): Claude Code vergleicht ihn gegen den kanonischen Namen des Modells, zu dem die Sitzung wechselt.
3531 3540
3532Dieses Beispiel fügt Anleitung hinzu, wenn sich das Sitzungs-Modell zu einem Opus-Modell ändert:3541Dieses Beispiel fügt Anleitung hinzu, wenn sich das Modell der Sitzung zu einem beliebigen Opus-Modell ändert:
3533 3542
3534```json theme={null}3543```json theme={null}
3535{3544{
3555 PostModelSwitch-Eingabe3564 PostModelSwitch-Eingabe
3556</h4>3565</h4>
3557 3566
3558PostModelSwitch-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.3567PostModelSwitch-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.
3559 3568
3560`requested_model` ist `null`, wenn `source` `"auto"` ist. Wenn `source` `"resume"` ist, ist es die gespeicherte Modell-Einstellung, die Claude Code wiederhergestellt hat.3569`requested_model` ist `null`, wenn `source` `"auto"` ist. Wenn `source` `"resume"` ist, ist es die gespeicherte Modell-Einstellung, die Claude Code wiederhergestellt hat.
3561 3570
3569| :- | :- |3578| :- | :- |
3570| `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) |3579| `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) |
3571 3580
3572Wenn 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 zum Ziel-Modell.3581Wenn 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-Ziel-Modell.
3573 3582
3574<h3 id="sessionend">3583<h3 id="sessionend">
3575 SessionEnd3584 SessionEnd
3576</h3>3585</h3>
3577 3586
3578Wird ausgeführt, wenn eine Claude Code Sitzung endet. Nützlich für Aufräum-Aufgaben, Protokollierung von Sitzungs-Statistiken oder Speicherung von Sitzungs-Zustand. Unterstützt Matcher zum Filtern nach Exit-Grund.3587Wird 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.
3579 3588
3580Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:3589Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:
3581 3590
3583| :- | :- |3592| :- | :- |
3584| `clear` | Sitzung mit `/clear` Befehl gelöscht |3593| `clear` | Sitzung mit `/clear` Befehl gelöscht |
3585| `resume` | Sitzung mit interaktivem `/resume` gewechselt |3594| `resume` | Sitzung mit interaktivem `/resume` gewechselt |
3586| `logout` | Benutzer abgemeldet |3595| `logout` | Benutzer hat sich abgemeldet |
3587| `prompt_input_exit` | Benutzer beendet, während Eingabeaufforderungs-Eingabe sichtbar war |3596| `prompt_input_exit` | Benutzer beendet, während Eingabeaufforderungs-Eingabe sichtbar war |
3588| `other` | Andere Exit-Gründe |3597| `other` | Andere Exit-Gründe |
3589| `bypass_permissions_disabled` | Entfernt in v2.1.234; Claude Code sendet es nicht. Löschen Sie es aus Ihren `SessionEnd` Matchern |3598| `bypass_permissions_disabled` | Entfernt in v2.1.234; Claude Code sendet es nicht. Löschen Sie es aus Ihren `SessionEnd` Matchern |
3604}3613}
3605```3614```
3606 3615
3607SessionEnd-Hooks haben keine Entscheidungskontrolle. Sie können die Sitzungs-Beendigung nicht blockieren, können aber Aufräum-Aufgaben ausführen. Claude Code verwirft ihre [JSON-Ausgabefelder](#json-output), wie `systemMessage`.3616SessionEnd-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`.
3608 3617
3609SessionEnd-Hooks haben ein Standard-Timeout von 1,5 Sekunden. Es gilt, wenn Sie beenden, `/clear` ausführen oder Sitzungen mit interaktivem `/resume` wechseln. Sie können einem Hook auf zwei Wegen mehr Zeit geben:3618SessionEnd-Hooks haben ein Standard-Timeout von 1,5 Sekunden. Es gilt, wenn Sie beenden, `/clear` ausführen oder Sitzungen mit interaktivem `/resume` wechseln. Sie können einem Hook auf zwei Wegen mehr Zeit geben:
3610 3619
3631 Elicitation-Eingabe3640 Elicitation-Eingabe
3632</h4>3641</h4>
3633 3642
3634Zusä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.3643Zusä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.
3635 3644
3636Für Form-Modus-Elicitation, der häufigste Fall:3645Für Form-Modus-Elicitierung, der häufigste Fall:
3637 3646
3638```json theme={null}3647```json theme={null}
3639{3648{
3653}3662}
3654```3663```
3655 3664
3656Für URL-Modus-Elicitation, verwendet für Browser-basierte Authentifizierung:3665Für URL-Modus-Elicitierung, verwendet für Browser-basierte Authentifizierung:
3657 3666
3658```json theme={null}3667```json theme={null}
3659{3668{
3672 Elicitation-Ausgabe3681 Elicitation-Ausgabe
3673</h4>3682</h4>
3674 3683
3675Um programmatisch ohne Dialog zu antworten, geben Sie ein JSON-Objekt mit `hookSpecificOutput` zurück:3684Um programmatisch ohne Anzeige des Dialogs zu antworten, geben Sie ein JSON-Objekt mit `hookSpecificOutput` zurück:
3676 3685
3677```json theme={null}3686```json theme={null}
3678{3687{
3691| `action` | `accept`, `decline`, `cancel` | Ob die Anfrage akzeptiert, abgelehnt oder abgebrochen werden soll |3700| `action` | `accept`, `decline`, `cancel` | Ob die Anfrage akzeptiert, abgelehnt oder abgebrochen werden soll |
3692| `content` | object | Formular-Feldwerte zum Einreichen. Nur verwendet, wenn `action` `accept` ist |3701| `content` | object | Formular-Feldwerte zum Einreichen. Nur verwendet, wenn `action` `accept` ist |
3693 3702
3694Exit-Code 2 lehnt die Elicitation ab. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.3703Exit-Code 2 lehnt die Elicitierung ab. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.
3695 3704
3696Claude Code handelt auf `hookSpecificOutput` aus einer Elicitation-Hook-JSON-Ausgabe und verwirft `systemMessage` und `continue`.3705Claude Code handelt auf `hookSpecificOutput` aus der JSON-Ausgabe eines Elicitation-Hooks und verwirft `systemMessage` und `continue`.
3697 3706
3698<h3 id="elicitationresult">3707<h3 id="elicitationresult">
3699 ElicitationResult3708 ElicitationResult
3700</h3>3709</h3>
3701 3710
3702Wird 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.3711Wird 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.
3703 3712
3704Das Matcher-Feld gleicht gegen den MCP-Server-Namen ab.3713Das Matcher-Feld gleicht gegen den MCP-Server-Namen ab.
3705 3714
3707 ElicitationResult-Eingabe3716 ElicitationResult-Eingabe
3708</h4>3717</h4>
3709 3718
3710Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ElicitationResult-Hooks `mcp_server_name`, `action` und optionale `mode`, `elicitation_id` und `content` Felder.3719Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ElicitationResult-Hooks `mcp_server_name`, `action` und optional `mode`, `elicitation_id` und `content` Felder.
3711 3720
3712```json theme={null}3721```json theme={null}
3713{3722{
3744| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |3753| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |
3745| `content` | object | Überschreibt Formular-Feldwerte. Nur aussagekräftig, wenn `action` `accept` ist |3754| `content` | object | Überschreibt Formular-Feldwerte. Nur aussagekräftig, wenn `action` `accept` ist |
3746 3755
3747Exit-Code 2 blockiert die Antwort, ändert die effektive Aktion zu `decline`. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.3756Exit-Code 2 blockiert die Antwort, indem die effektive Aktion zu `decline` geändert wird. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.
3748 3757
3749Claude Code handelt auf `hookSpecificOutput` aus einer ElicitationResult-Hook-JSON-Ausgabe und verwirft `systemMessage` und `continue`.3758Claude Code handelt auf `hookSpecificOutput` aus der JSON-Ausgabe eines ElicitationResult-Hooks und verwirft `systemMessage` und `continue`.
3750 3759
3751<h2 id="prompt-based-hooks">3760<h2 id="prompt-based-hooks">
3752 Prompt-basierte Hooks3761 Prompt-basierte Hooks