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` 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 |
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.1211Wenn `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 1212
1217| Feld | Beschreibung |1213| Feld | Beschreibung |
1218| :- | :- |1214| :- | :- |
1219| `seconds_since_last_response` | Wanduhr-Sekunden seit der letzten Antwort im fortgesetzten Transkript |1215| `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 |1216| `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 |1217| `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 |1218| `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 1219
1224Dieses Beispiel zeigt die Eingabe für eine Sitzung, die 90 Minuten nach ihrer letzten Antwort fortgesetzt wurde:1220Dieses Beispiel zeigt die Eingabe für eine Sitzung, die 90 Minuten nach ihrer letzten Antwort fortgesetzt wurde:
1246 1242
1247| Feld | Beschreibung |1243| Feld | Beschreibung |
1248| :- | :- |1244| :- | :- |
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 |1245| `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 |1246| `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 |1247| `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 |1248| `watchPaths` | Array von absoluten Pfaden zum Überwachen von [FileChanged](#filechanged) Ereignissen während dieser Sitzung |
1324 Setup1320 Setup
1325</h3>1321</h3>
1326 1322
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).1323Wird 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 1324
1329Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:1325Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:
1330 1326
1333| `init` | `claude --init-only` oder `claude -p --init` |1329| `init` | `claude --init-only` oder `claude -p --init` |
1334| `maintenance` | `claude -p --maintenance` |1330| `maintenance` | `claude -p --maintenance` |
1335 1331
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.1332Wenn 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 1333
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.1334Wenn 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 1335
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.1336Bei 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 1337
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.1338Da 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 1339
1344<h4 id="setup-input">1340<h4 id="setup-input">
1345 Setup-Eingabe1341 Setup-Eingabe
1361 Setup-Entscheidungskontrolle1357 Setup-Entscheidungskontrolle
1362</h4>1358</h4>
1363 1359
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.1360Setup-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 1361
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.1362Setup-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 1363
1368<h3 id="instructionsloaded">1364<h3 id="instructionsloaded">
1369 InstructionsLoaded1365 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 |1384| `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 |1385| `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 |1386| `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 |1387| `parent_file_path` | Pfad zur übergeordneten Anweisungsdatei, die diese importiert hat, für `include` Ladevorgänge |
1392 1388
1393```json theme={null}1389```json theme={null}
1394{1390{
1412 UserPromptSubmit1408 UserPromptSubmit
1413</h3>1409</h3>
1414 1410
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.1411Wird 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 1412
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.1413`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 1414
1443 1439
1444`UserPromptSubmit` Hooks können steuern, ob eine Benutzereingabeaufforderung verarbeitet wird und Kontext hinzufügen. Alle [JSON-Ausgabefelder](#json-output) sind verfügbar.1440`UserPromptSubmit` Hooks können steuern, ob eine Benutzereingabeaufforderung verarbeitet wird und Kontext hinzufügen. Alle [JSON-Ausgabefelder](#json-output) sind verfügbar.
1445 1441
1446Es gibt zwei Möglichkeiten, Kontext zum Gespräch beim Exit-Code 0 hinzuzufügen:1442Es gibt zwei Möglichkeiten, Kontext zur Konversation beim Exit-Code 0 hinzuzufügen:
1447 1443
1448* **Klartext-stdout**: Claude Code fügt stdout, das es [als Klartext behandelt](#exit-code-0), zu Claudes Kontext hinzu1444* **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ügt1445* **JSON mit `additionalContext`**: Verwenden Sie das JSON-Format unten für mehr Kontrolle. Das `additionalContext` Feld wird als Kontext hinzugefügt
1454 1450
1455| Feld | Beschreibung |1451| Feld | Beschreibung |
1456| :- | :- |1452| :- | :- |
1457| `decision` | `"block"` verhindert, dass die Eingabeaufforderung verarbeitet wird und löscht sie aus dem Kontext. Weglassen, um die Eingabeaufforderung fortzusetzen |1453| `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 |1454| `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) |1455| `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 |1456| `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 |1457| `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 1458
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.1459Ein 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 1460
1465```json theme={null}1461```json theme={null}
1466{1462{
1469 "hookSpecificOutput": {1465 "hookSpecificOutput": {
1470 "hookEventName": "UserPromptSubmit",1466 "hookEventName": "UserPromptSubmit",
1471 "additionalContext": "My additional context here",1467 "additionalContext": "My additional context here",
1472 "sessionTitle": "My session title"1468 "sessionTitle": "My session title",
1469 "suppressOriginalPrompt": true
1473 }1470 }
1474}1471}
1475```1472```
1476 1473
1474<h4 id="what-a-blocked-prompt-leaves-behind">
1475 Was eine blockierte Eingabeaufforderung hinterlässt
1476</h4>
1477
1478Eine 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.
1479
1480`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).
1481
1477<h3 id="userpromptexpansion">1482<h3 id="userpromptexpansion">
1478 UserPromptExpansion1483 UserPromptExpansion
1479</h3>1484</h3>
1480 1485
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.1486Wird 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 1487
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.1488Dieses 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 1489
1485Gleicht `command_name` ab. Lassen Sie den Matcher leer, um bei jedem Eingabeaufforderungs-Befehl zu aktivieren.1490Gleicht `command_name` ab. Lassen Sie den Matcher leer, um bei jeder Eingabeaufforderungs-Typ-Befehl ausgelöst zu werden.
1486 1491
1487<h4 id="userpromptexpansion-input">1492<h4 id="userpromptexpansion-input">
1488 UserPromptExpansion-Eingabe1493 UserPromptExpansion-Eingabe
1513 1518
1514| Feld | Beschreibung |1519| Feld | Beschreibung |
1515| :- | :- |1520| :- | :- |
1516| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um ihn fortzusetzen |1521| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um ihn fortzufahren |
1517| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist |1522| `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) |1523| `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 1524
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.1525Ein 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 1526
1522```json theme={null}1527```json theme={null}
1523{1528{
1534 MessageDisplay1539 MessageDisplay
1535</h3>1540</h3>
1536 1541
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.1542Wird 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 1543
1539Verwenden Sie MessageDisplay für:1544Verwenden Sie MessageDisplay für:
1540 1545
1546 1551
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.1552MessageDisplay 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 1553
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.1554MessageDisplay 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 1555
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.1556In 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 1557
1553<h4 id="messagedisplay-input">1558<h4 id="messagedisplay-input">
1554 MessageDisplay-Eingabe1559 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 |1567| `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 |1568| `index` | Nullbasierter Index dieses Batches innerhalb der Nachricht |
1564| `final` | `true` beim letzten Batch der Nachricht. Jede Nachricht hat genau einen finalen Batch |1569| `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 |1570| `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 1571
1567```json theme={null}1572```json theme={null}
1568{1573{
1623 </Tab>1628 </Tab>
1624 1629
1625 <Tab title="Windows (PowerShell)">1630 <Tab title="Windows (PowerShell)">
1626 Registrieren Sie einen Command-Hook, der das Skript über PowerShell ausführt:1631 Registrieren Sie einen Command-Hook, der das Skript durch PowerShell ausführt:
1627 1632
1628 ```json theme={null}1633 ```json theme={null}
1629 {1634 {
1672 PreToolUse1677 PreToolUse
1673</h3>1678</h3>
1674 1679
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).1680Wird 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 1681
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.1682Um 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 1683
1679<Warning>1684<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).1685 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 1686
1682 PreToolUse wird auch nicht für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgelöst.1687 PreToolUse wird auch nicht für [`EndConversation`](/docs/de/tools-reference#endconversation-tool-behavior) ausgelöst.
1683</Warning>1688</Warning>
1696 1701
1697Für die Datei-Tools `Write`, `Edit` und `Read` ist `tool_input.file_path` immer absolut:1702Für die Datei-Tools `Write`, `Edit` und `Read` ist `tool_input.file_path` immer absolut:
1698 1703
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 werden1704* 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` aussieht1705* 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 blockieren1706* 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 ist1707* 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 1708
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 |1737| `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 |1738| `run_in_background` | boolean | `false` | Ob der Befehl im Hintergrund ausgeführt werden soll |
1734 1739
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.1740Wenn 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 1741
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.1742Ihr [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 1743
1739<Note>1744<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.1745 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 1749
1745| Feld | Typ | Beispiel | Beschreibung |1750| Feld | Typ | Beispiel | Beschreibung |
1746| :- | :- | :- | :- |1751| :- | :- | :- | :- |
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 |1752| `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 |1753| `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` |1754| `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 |1755| `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 |1756| `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 |1757| `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 1758
1754<a id="powershell" />1759<a id="powershell" />
1755 1760
1757 PowerShell1762 PowerShell
1758</h5>1763</h5>
1759 1764
1760Führt PowerShell-Befehle aus. Siehe das [PowerShell-Tool](/docs/de/tools-reference#powershell-tool) für die Verfügbarkeit nach Plattform.1765Führt PowerShell-Befehle aus. Siehe das [PowerShell-Tool](/docs/de/tools-reference#powershell-tool) für Verfügbarkeit nach Plattform.
1761 1766
1762Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:1767Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:
1763 1768
1856| Feld | Typ | Beispiel | Beschreibung |1861| Feld | Typ | Beispiel | Beschreibung |
1857| :- | :- | :- | :- |1862| :- | :- | :- | :- |
1858| `query` | string | `"react hooks best practices"` | Suchanfrage |1863| `query` | string | `"react hooks best practices"` | Suchanfrage |
1859| `allowed_domains` | array | `["docs.example.com"]` | Optional: nur Ergebnisse von diesen Domains einschließen |1864| `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 |1865| `blocked_domains` | array | `["spam.example.com"]` | Optional: Ergebnisse von diesen Domains ausschließen |
1861 1866
1862<h5 id="agent">1867<h5 id="agent">
1863 Agent1868 Agent
1864</h5>1869</h5>
1865 1870
1866Erzeugt einen [Subagent](/docs/de/sub-agents).1871Erzeugt einen [Subagenten](/docs/de/sub-agents).
1867 1872
1868| Feld | Typ | Beispiel | Beschreibung |1873| Feld | Typ | Beispiel | Beschreibung |
1869| :- | :- | :- | :- |1874| :- | :- | :- | :- |
1870| `prompt` | string | `"Find all API endpoints"` | Die Aufgabe für den Agent |1875| `prompt` | string | `"Find all API endpoints"` | Die Aufgabe für den Agenten |
1871| `description` | string | `"Find API endpoints"` | Kurze Beschreibung der Aufgabe |1876| `description` | string | `"Find API endpoints"` | Kurze Beschreibung der Aufgabe |
1872| `subagent_type` | string | `"Explore"` | Typ des zu verwendenden spezialisierten Agenten |1877| `subagent_type` | string | `"Explore"` | Typ des zu verwendenden spezialisierten Agenten |
1873| `model` | string | `"sonnet"` | Optionaler Modellalias zum Überschreiben des Standards |1878| `model` | string | `"sonnet"` | Optionaler Modellalias zum Überschreiben des Standards |
1874 1879
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:1880Wenn 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 1881
1877| Feld | Typ | Beispiel | Beschreibung |1882| Feld | Typ | Beispiel | Beschreibung |
1878| :- | :- | :- | :- |1883| :- | :- | :- | :- |
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"` |1884| `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 |1885| `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 |1886| `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 |1887| `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 |1888| `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 |1889| `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 |1890| `totalDurationMs` | number | `48211` | Echtzeit-Dauer des Subagenten-Laufs |
1886| `totalToolUseCount` | number | `7` | Anzahl der Tool-Aufrufe, die der Subagent gemacht hat |1891| `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` |1892| `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 1893
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`.1894Auf 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 1895
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`.1896Fü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 1897
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.1898Bei 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 1899
1895<a id="askuserquestion" />1900<a id="askuserquestion" />
1896 1901
1927 1932
1928| Feld | Beschreibung |1933| Feld | Beschreibung |
1929| :- | :- |1934| :- | :- |
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 |1935| `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 |1936| `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 |1937| `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) |1938| `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 1939
1935Wenn mehrere PreToolUse-Hooks unterschiedliche Entscheidungen zurückgeben, ist die Priorität `deny` > `defer` > `ask` > `allow`.1940Wenn mehrere PreToolUse-Hooks unterschiedliche Entscheidungen zurückgeben, ist die Priorität `deny` > `defer` > `ask` > `allow`.
1936 1941
1937Ein Hook, der durch Beendigung mit 2 blockiert, wird auf die gleiche Weise wie `"deny"` weitergeleitet: Claude sieht die stderr-Nachricht als Ablehnungsgrund.1942Ein Hook, der durch Beendigung mit 2 blockiert, leitet auf die gleiche Weise wie `"deny"` weiter: Claude sieht die stderr-Nachricht als Ablehnungsgrund.
1938 1943
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.1944Wenn 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 1945
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.1946Ein 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 1947
1956 1961
1957<span id="allow-with-updatedinput" />1962<span id="allow-with-updatedinput" />
1958 1963
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.1964Im [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 1965
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.1966Ab 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 1967
1963<Note>1968<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.1969 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>1970</Note>
1966 1971
1967<h4 id="defer-a-tool-call-for-later">1972<h4 id="defer-a-tool-call-for-later">
1968 Tool-Aufruf für später aufschieben1973 Einen Tool-Aufruf für später aufschieben
1969</h4>1974</h4>
1970 1975
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.1976`"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 1977
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:1978Das `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 1979
19751. Claude ruft `AskUserQuestion` auf. Der `PreToolUse` Hook wird ausgelöst.19801. 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.19812. 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.19823. 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.19834. 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.19845. Der Hook gibt `permissionDecision: "allow"` mit der Antwort in `updatedInput` zurück. Das Tool wird ausgeführt und Claude setzt fort.
1980 1985
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:1986Das `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 1987
1983```json theme={null}1988```json theme={null}
1984{1989{
1994}1999}
1995```2000```
1996 2001
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.2002Es 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 2003
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.2004`"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 2005
2010 PermissionRequest2015 PermissionRequest
2011</h3>2016</h3>
2012 2017
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.2018Wird 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.2019Verwenden Sie [PermissionRequest-Entscheidungskontrolle](#permissionrequest-decision-control), um im Namen des Benutzers zuzulassen oder zu verweigern.
2015 2020
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.2021Verwenden 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 2022
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.2023Claude 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 2024
2027 2032
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.2033Das `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 2034
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.2035PreToolUse-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 2036
2032```json theme={null}2037```json theme={null}
2033{2038{
2060 2065
2061| Feld | Beschreibung |2066| Feld | Beschreibung |
2062| :- | :- |2067| :- | :- |
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 |2068| `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 |2069| `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 |2070| `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 |2071| `message` | Für `"deny"` nur: sagt Claude, warum die Genehmigung verweigert wurde |
2067| `interrupt` | Nur für `"deny"`: wenn `true`, stoppt Claude |2072| `interrupt` | Für `"deny"` nur: wenn `true`, stoppt Claude |
2068 2073
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.2074Ein 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 2075
2071```json theme={null}2076```json theme={null}
2072{2077{
2090 2095
2091| `type` | Felder | Effekt |2096| `type` | Felder | Effekt |
2092| :- | :- | :- |2097| :- | :- | :- |
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"` |2098| `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` |2099| `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` |2100| `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 |2101| `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 |2102| `addDirectories` | `directories`, `destination` | Fügt Arbeitsverzeichnisse hinzu. `directories` ist ein Array von Pfad-Zeichenketten |
2098| `removeDirectories` | `directories`, `destination` | Entfernt Arbeitsverzeichnisse |2103| `removeDirectories` | `directories`, `destination` | Entfernt Arbeitsverzeichnisse |
2099 2104
2100<Note>2105<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.2106 `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 2107
2103 `bypassPermissions` wird niemals als `defaultMode` beibehalten, unabhängig von `destination`.2108 `bypassPermissions` wird niemals als `defaultMode` beibehalten, unabhängig von `destination`.
2104</Note>2109</Note>
2112| `projectSettings` | `.claude/settings.json` |2117| `projectSettings` | `.claude/settings.json` |
2113| `userSettings` | `~/.claude/settings.json` |2118| `userSettings` | `~/.claude/settings.json` |
2114 2119
2115Ein Hook kann eines der `permission_suggestions` widerspiegeln, die er als seine eigene `updatedPermissions` Ausgabe empfangen hat.2120Ein Hook kann eines der `permission_suggestions` widerspiegeln, die er als seine eigene `updatedPermissions` Ausgabe erhalten hat.
2116 2121
2117<h3 id="posttooluse">2122<h3 id="posttooluse">
2118 PostToolUse2123 PostToolUse
2119</h3>2124</h3>
2120 2125
2121Wird sofort ausgeführt, nachdem ein Tool erfolgreich abgeschlossen ist.2126Wird unmittelbar nach erfolgreichem Abschluss eines Tools ausgeführt.
2122 2127
2123Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2128Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2124 2129
2125Gleichen Sie breiter ab, wenn der Tool-Name nicht der richtige Filter ist:2130Gleichen Sie breiter ab, wenn der Tool-Name nicht der richtige Filter ist:
2126 2131
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.2132* 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.2133* 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 2134
2130<h4 id="posttooluse-input">2135<h4 id="posttooluse-input">
2131 PostToolUse-Eingabe2136 PostToolUse-Eingabe
2132</h4>2137</h4>
2133 2138
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.2139`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 2140
2136```json theme={null}2141```json theme={null}
2137{2142{
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` |2174| `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 |2175| `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) |2176| `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 |2177| `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 |2178| `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 |2179| `updatedMCPToolOutput` | Ersetzt die Ausgabe für [MCP-Tools](#match-mcp-tools) nur. Bevorzugen Sie `updatedToolOutput`, das für alle Tools funktioniert |
2175 2180
2176Das Beispiel unten ersetzt die Ausgabe eines `Bash` Aufrufs. Der Ersatzwert entspricht der Ausgabeform des `Bash` Tools:2181Das Beispiel unten ersetzt die Ausgabe eines `Bash` Aufrufs. Der Ersatzwert entspricht der Ausgabeform des `Bash` Tools:
2177 2182
2191```2196```
2192 2197
2193<Warning>2198<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.2199 `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 2200
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.2201 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>2202</Warning>
2198 2203
2199<h4 id="annotate-a-result-for-the-auto-mode-classifier">2204<h4 id="annotate-a-result-for-the-auto-mode-classifier">
2200 Ergebnis für den Auto-Modus Klassifizierer annotieren2205 Ein Ergebnis für den Auto-Modus Klassifizierer kommentieren
2201</h4>2206</h4>
2202 2207
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.2208Geben 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 2209
2205Das Beispiel unten sagt dem Klassifizierer, woher die Ausgabe einer Abfrage stammt:2210Das Beispiel unten sagt dem Klassifizierer, woher die Ausgabe einer Abfrage stammt:
2206 2211
2215 2220
2216Wie viel Gewicht der Klassifizierer der Notiz gibt, hängt davon ab, wo Sie den Hook konfiguriert haben:2221Wie viel Gewicht der Klassifizierer der Notiz gibt, hängt davon ab, wo Sie den Hook konfiguriert haben:
2217 2222
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äch2223* **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 Kontext2224* **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 2225
2221Claude Code wendet diese Grenzen an, wenn die Notiz geliefert wird:2226Claude Code wendet diese Grenzen an, wenn die Notiz geliefert wird:
2222 2227
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 antwortet2228* **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 aufzeichnet2229* **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 ist2230* **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 umschreibt2231* **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 2232
2228<Warning>2233<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.2234 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>2235</Warning>
2231 2236
2232<h3 id="posttoolusefailure">2237<h3 id="posttoolusefailure">
2238Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2243Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2239 2244
2240<Note>2245<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).2246 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>2247</Note>
2243 2248
2244<h4 id="posttoolusefailure-input">2249<h4 id="posttoolusefailure-input">
2269| Feld | Beschreibung |2274| Feld | Beschreibung |
2270| :- | :- |2275| :- | :- |
2271| `error` | String, der beschreibt, was schief gelaufen ist. Das Format hängt vom Tool ab, das fehlgeschlagen ist |2276| `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 |2277| `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 |2278| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |
2274 2279
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.2280Die `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 2281
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 erzeugte2282* 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 konnte2283* 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`2284* 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 2285
2281<h4 id="posttoolusefailure-decision-control">2286<h4 id="posttoolusefailure-decision-control">
2282 PostToolUseFailure-Entscheidungskontrolle2287 PostToolUseFailure-Entscheidungskontrolle
2301 PostToolBatch2306 PostToolBatch
2302</h3>2307</h3>
2303 2308
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.2309Wird 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 2310
2306<h4 id="posttoolbatch-input">2311<h4 id="posttoolbatch-input">
2307 PostToolBatch-Eingabe2312 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.2341`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 2342
2338<Note>2343<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.2344 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>2345</Note>
2341 2346
2342<h4 id="posttoolbatch-decision-control">2347<h4 id="posttoolbatch-decision-control">
2347 2352
2348| Feld | Beschreibung |2353| Feld | Beschreibung |
2349| :- | :- |2354| :- | :- |
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 |2355| `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 2356
2352```json theme={null}2357```json theme={null}
2353{2358{
2358}2363}
2359```2364```
2360 2365
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.2366Das 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 2367
2363<h3 id="permissiondenied">2368<h3 id="permissiondenied">
2364 PermissionDenied2369 PermissionDenied
2365</h3>2370</h3>
2366 2371
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.2372Wird 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 2373
2369Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.2374Gleicht Tool-Namen ab, gleiche Werte wie PreToolUse.
2370 2375
2393 2398
2394| Feld | Beschreibung |2399| Feld | Beschreibung |
2395| :- | :- |2400| :- | :- |
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` |2401| `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 2402
2398<h4 id="permissiondenied-decision-control">2403<h4 id="permissiondenied-decision-control">
2399 PermissionDenied-Entscheidungskontrolle2404 PermissionDenied-Entscheidungskontrolle
2410}2415}
2411```2416```
2412 2417
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.2418Wenn `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 2419
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.2420Claude 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 2421
2417<h3 id="notification">2422<h3 id="notification">
2418 Notification2423 Notification
2419</h3>2424</h3>
2420 2425
2421Wird ausgeführt, wenn Claude Code Benachrichtigungen sendet. Gleicht Benachrichtigungstyp ab. Weglassen des Matchers, um Hooks für alle Benachrichtigungstypen auszuführen.2426Wird ausgeführt, wenn Claude Code Benachrichtigungen sendet. Gleicht Benachrichtigungstyp ab. Weglassen Sie den Matcher, um Hooks für alle Benachrichtigungstypen auszuführen.
2422 2427
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.2428Sie 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 2429
2425| Matcher | Wann wird es ausgelöst |2430| Matcher | Wann wird es ausgelöst |
2426| :- | :- |2431| :- | :- |
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 |2432| `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 |2433| `idle_prompt` | Claude hat vor etwa 60 Sekunden geantwortet und Sie haben seitdem nicht eingegeben |
2429| `auth_success` | Authentifizierung wird abgeschlossen |2434| `auth_success` | Authentifizierung wird abgeschlossen |
2430| `elicitation_dialog` | Ein MCP-Server öffnet ein Elicitation-Formular und Sie haben etwa sechs Sekunden nicht eingegeben |2435| `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 |2436| `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 |2437| `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 |2438| `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 |2439| `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 |2440| `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) |2441| `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 |2442| `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 |2443| `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 2444
2440Die `agent_needs_input` und `agent_completed` Typen erfordern Claude Code v2.1.198 oder später.2445Die `agent_needs_input` und `agent_completed` Typen erfordern Claude Code v2.1.198 oder später.
2441 2446
2446`agent_needs_input` für eine Teamkollegen-Terminal-Setup-Frage erfordert Claude Code v2.1.248 oder später.2451`agent_needs_input` für eine Teamkollegen-Terminal-Setup-Frage erfordert Claude Code v2.1.248 oder später.
2447 2452
2448<Note>2453<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:2454 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 2455
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).2456 * 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.2457 * 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.2458 * 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 2459
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.2460 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>2461</Note>
2457 2462
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:2463Claude 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 2464
2460* Erwarten Sie `permission_prompt` etwa sechs Sekunden, nachdem Claude um Erlaubnis bittet. Claude Code verschiebt es nicht, während Sie eingeben.2465* 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.2466* 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.2467* Setzen Sie [`CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS`](/docs/de/env-vars) auf `1`, um `permission_prompt` in diesen Sitzungen auszuschalten.
2463 2468
2464Vor v2.1.233 wurde `permission_prompt` in diesen Sitzungen nicht ausgelöst.2469Vor v2.1.233 wurde `permission_prompt` in diesen Sitzungen nicht ausgelöst.
2465 2470
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:2471Verwenden 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 2472
2468```json theme={null}2473```json theme={null}
2469{2474{
2496 Notification-Eingabe2501 Notification-Eingabe
2497</h4>2502</h4>
2498 2503
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.2504Zusä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 2505
2501```json theme={null}2506```json theme={null}
2502{2507{
2510}2515}
2511```2516```
2512 2517
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.2518Notification-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 2519
2515<h3 id="subagentstart">2520<h3 id="subagentstart">
2516 SubagentStart2521 SubagentStart
2517</h3>2522</h3>
2518 2523
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.2524Wird 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 2525
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$`.2526Fü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 2527
2523<h4 id="subagentstart-input">2528<h4 id="subagentstart-input">
2524 SubagentStart-Eingabe2529 SubagentStart-Eingabe
2525</h4>2530</h4>
2526 2531
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.2532Zusä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 2533
2529```json theme={null}2534```json theme={null}
2530{2535{
2537}2542}
2538```2543```
2539 2544
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:2545SubagentStart-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 2546
2542| Feld | Beschreibung |2547| Feld | Beschreibung |
2543| :- | :- |2548| :- | :- |
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) |2549| `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 2550
2546```json theme={null}2551```json theme={null}
2547{2552{
2552}2557}
2553```2558```
2554 2559
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.2560Wenn 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 2561
2557<h3 id="subagentstop">2562<h3 id="subagentstop">
2558 SubagentStop2563 SubagentStop
2559</h3>2564</h3>
2560 2565
2561Wird ausgeführt, wenn ein Claude Code Subagent mit der Antwort fertig ist. Gleicht Agent-Typ ab, gleiche Werte wie SubagentStart.2566Wird ausgeführt, wenn ein Claude Code Subagent mit dem Antworten fertig ist. Gleicht Agent-Typ ab, gleiche Werte wie SubagentStart.
2562 2567
2563<h4 id="subagentstop-input">2568<h4 id="subagentstop-input">
2564 SubagentStop-Eingabe2569 SubagentStop-Eingabe
2565</h4>2570</h4>
2566 2571
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.2572Zusä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 2573
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.2574Nicht 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 2575
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.2576Ein `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 2577
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.2578Auf 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 2579
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.2580SubagentStop-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 2581
2577```json theme={null}2582```json theme={null}
2578{2583{
2591}2596}
2592```2597```
2593 2598
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.2599SubagentStop-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 2600
2596<h3 id="taskcreated">2601<h3 id="taskcreated">
2597 TaskCreated2602 TaskCreated
2638* **Exit-Code 2**: Claude Code gibt den stderr-Text als die Nachricht zurück.2643* **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.2644* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code gibt `reason` als die Nachricht zurück.
2640 2645
2641Dieses Beispiel blockiert Aufgaben, deren Betreff nicht dem erforderlichen Format entspricht:2646Dieses Beispiel blockiert Aufgaben, deren Betreff nicht dem erforderlichen Format folgt:
2642 2647
2643```bash theme={null}2648```bash theme={null}
2644#!/bin/bash2649#!/bin/bash
2719 Stop2724 Stop
2720</h3>2725</h3>
2721 2726
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.2727Wird 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 2728
2724<Tip>2729<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.2730 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>2731</Tip>
2727 2732
2728<h4 id="stop-input">2733<h4 id="stop-input">
2729 Stop-Eingabe2734 Stop-Eingabe
2730</h4>2735</h4>
2731 2736
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).2737Zusä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 2738
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.2739Das `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 2740
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.2741Die `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 2742
2740| Feld | Beschreibung |2745| Feld | Beschreibung |
2741| :- | :- |2746| :- | :- |
2742| `id` | Aufgaben-Bezeichner |2747| `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 |2748| `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 |2749| `status` | Aktueller Aufgaben-Status |
2745| `description` | Freitext-Beschreibung, begrenzt auf 1000 Zeichen mit einem In-String `… [+N chars]` Marker, wenn gekürzt |2750| `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 |2751| `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 |2752| `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 |2753| `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 |2754| `tool` | MCP-Tool-Name. Nur für `monitor` und `MCP task` Aufgaben vorhanden |
2750| `name` | Workflow-Name. Nur für `workflow` Aufgaben vorhanden |2755| `name` | Workflow-Name. Nur für `workflow` Aufgaben vorhanden |
2755| :- | :- |2760| :- | :- |
2756| `id` | Cron-Aufgaben-Bezeichner |2761| `id` | Cron-Aufgaben-Bezeichner |
2757| `schedule` | Cron-Ausdruck, z. B. `0 9 * * 1-5` |2762| `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 |2763| `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 |2764| `prompt` | Eingabeaufforderung, die eingereicht wird, wenn der Cron feuert, begrenzt auf 1000 Zeichen mit dem gleichen `… [+N chars]` Marker |
2760 2765
2761Dieses Beispiel zeigt eine Stop-Eingabe mit einer laufenden Shell-Aufgabe und einem wiederkehrenden Cron:2766Dieses Beispiel zeigt eine Stop-Eingabe mit einer laufenden Shell-Aufgabe und einem wiederkehrenden Cron:
2799| :- | :- |2804| :- | :- |
2800| `decision` | `"block"` verhindert, dass Claude stoppt. Weglassen, um Claude zu stoppen |2805| `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 |2806| `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 |2807| `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 2808
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.2809Ein 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 2810
2806```json theme={null}2811```json theme={null}
2807{2812{
2810}2815}
2811```2816```
2812 2817
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:2818Verwenden 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 2819
2815```json theme={null}2820```json theme={null}
2816{2821{
2825 StopFailure2830 StopFailure
2826</h3>2831</h3>
2827 2832
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.2833Wird 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 2834
2830<h4 id="stopfailure-input">2835<h4 id="stopfailure-input">
2831 StopFailure-Eingabe2836 StopFailure-Eingabe
2832</h4>2837</h4>
2833 2838
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.2839Zusä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 2840
2836| Feld | Beschreibung |2841| Feld | Beschreibung |
2837| :- | :- |2842| :- | :- |
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` |2843| `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 |2844| `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"` |2845| `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 2846
2842```json theme={null}2847```json theme={null}
2843{2848{
2857 TeammateIdle2862 TeammateIdle
2858</h3>2863</h3>
2859 2864
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.2865Wird 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 2866
2862TeammateIdle-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgelöst.2867TeammateIdle-Hooks unterstützen keine Matcher und werden bei jedem Vorkommen ausgelöst.
2863 2868
2881 2886
2882| Feld | Beschreibung |2887| Feld | Beschreibung |
2883| :- | :- |2888| :- | :- |
2884| `teammate_name` | Name des Teamkollegen, der untätig wird |2889| `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 |2890| `team_name` | Veraltet. Sitzungs-abgeleiteter Team-Name; wird in einer zukünftigen Version entfernt |
2886 2891
2887<h4 id="teammateidle-decision-control">2892<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.2898* **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.2899* **JSON `{"continue": false, "stopReason": "..."}`**: Stoppt den Teamkollegen vollständig, was dem `Stop` Hook-Verhalten entspricht. Der `stopReason` wird dem Benutzer angezeigt.
2895 2900
2896Dieses Beispiel überprüft, dass ein Build-Artefakt existiert, bevor ein Teamkollege untätig wird:2901Dieses Beispiel überprüft, dass ein Build-Artefakt existiert, bevor ein Teamkollege untätig werden darf:
2897 2902
2898```bash theme={null}2903```bash theme={null}
2899#!/bin/bash2904#!/bin/bash
2910 ConfigChange2915 ConfigChange
2911</h3>2916</h3>
2912 2917
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.2918Wird 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 2919
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.2920Claude 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 2921
2924| `policy_settings` | `managed-settings.json` oder eine Datei in `managed-settings.d/` ändert sich |2929| `policy_settings` | `managed-settings.json` oder eine Datei in `managed-settings.d/` ändert sich |
2925| `skills` | Eine Skill-Datei in `.claude/skills/` ändert sich |2930| `skills` | Eine Skill-Datei in `.claude/skills/` ändert sich |
2926 2931
2927Dieses Beispiel protokolliert alle Konfigurationsänderungen für Sicherheits-Auditing:2932Dieses Beispiel protokolliert alle Konfigurationsänderungen für Sicherheits-Audits:
2928 2933
2929```json theme={null}2934```json theme={null}
2930{2935{
2948 ConfigChange-Eingabe2953 ConfigChange-Eingabe
2949</h4>2954</h4>
2950 2955
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.2956Zusä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 2957
2953```json theme={null}2958```json theme={null}
2954{2959{
2989 2994
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.2995Wird 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 2996
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.2997CwdChanged-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 2998
2994CwdChanged unterstützt keine Matcher und wird bei jedem Vorkommen ausgelöst.2999CwdChanged unterstützt keine Matcher und wird bei jedem Vorkommen ausgelöst.
2995 3000
3036* Sie ein Verzeichnis auf der `/permissions` Workspace-Registerkarte hinzufügen3041* 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 befindet3042* Sie ein Verzeichnis hinzufügen, das bereits ein Arbeitsverzeichnis ist oder sich in einem befindet
3038 3043
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.3044Claude 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 3045
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.3046Claude 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 3047
3043Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:3048Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:
3044 3049
3069}3074}
3070```3075```
3071 3076
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:3077DirectoryAdded-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 3078
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-Protokoll3079* `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-Protokoll3080* `register_repo_root`: Claude Code schreibt `systemMessage` Ausgabe und Fehler-Ausgabe nur ins Debug-Protokoll
3076 3081
3077<h3 id="filechanged">3082<h3 id="filechanged">
3078 FileChanged3083 FileChanged
3079</h3>3084</h3>
3080 3085
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.3086Wird 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 3087
3083Der `matcher` für dieses Ereignis dient zwei Rollen:3088Der `matcher` für dieses Ereignis dient zwei Rollen:
3084 3089
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.3090* **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.3091* **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 3092
3088Dieses Beispiel normalisiert Zeilenumbrüche in `data.csv` nach jeder Änderung, einschließlich eines `Bash` Befehls oder eines externen Skripts, das die Datei umschreibt:3093Dieses Beispiel normalisiert Zeilenumbrüche in `data.csv` nach jeder Änderung, einschließlich eines `Bash` Befehls oder eines externen Skripts, das die Datei umschreibt:
3089 3094
3105}3110}
3106```3111```
3107 3112
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:3113Der 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 3114
3110```bash theme={null}3115```bash theme={null}
3111#!/bin/bash3116#!/bin/bash
3115fi3120fi
3116```3121```
3117 3122
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.3123Um 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 3124
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 `*`.3125Um 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 3126
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.3127FileChanged-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 3128
3124<h4 id="filechanged-input">3129<h4 id="filechanged-input">
3125 FileChanged-Eingabe3130 FileChanged-Eingabe
3161 WorktreeCreate3166 WorktreeCreate
3162</h3>3167</h3>
3163 3168
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.3169Wird 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 3170
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.3171Da 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 3172
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.3173Der 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 3174
3188}3193}
3189```3194```
3190 3195
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.3196Der 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 3197
3193<h4 id="worktreecreate-input">3198<h4 id="worktreecreate-input">
3194 WorktreeCreate-Eingabe3199 WorktreeCreate-Eingabe
3195</h4>3200</h4>
3196 3201
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`.3202Zusä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 3203
3199```json theme={null}3204```json theme={null}
3200{3205{
3217 3222
3218Wenn der Hook fehlschlägt oder keinen Pfad erzeugt, schlägt die Worktree-Erstellung mit einem Fehler fehl.3223Wenn der Hook fehlschlägt oder keinen Pfad erzeugt, schlägt die Worktree-Erstellung mit einem Fehler fehl.
3219 3224
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.3225Claude 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 3226
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.3227Claude 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 3228
3224<h3 id="worktreeremove">3229<h3 id="worktreeremove">
3225 WorktreeRemove3230 WorktreeRemove
3226</h3>3231</h3>
3227 3232
3228Wird ausgeführt, wenn ein Worktree entfernt wird. Dies ist das Aufräum-Gegenstück zu [WorktreeCreate](#worktreecreate). Das Ereignis wird ausgelöst, wenn:3233Wird ausgeführt, wenn ein Worktree entfernt wird. Dies ist das Cleanup-Gegenstück zu [WorktreeCreate](#worktreecreate). Das Ereignis wird ausgelöst, wenn:
3229 3234
3230* Sie eine `--worktree` Sitzung beenden und wählen, sie zu entfernen3235* Sie eine `--worktree` Sitzung beenden und wählen, sie zu entfernen
3231* Ein Subagent mit `isolation: "worktree"` beendet wird3236* 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 hat3237* Sie eine [Hintergrund-Sitzung](/docs/de/agent-view#what-deleting-a-session-removes) löschen, deren Worktree der Hook erstellt hat
3233 3238
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:3239Fü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 3240
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.3241* **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.3242* **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).3243* **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 3244
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.3245Claude 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 3246
3242Claude Code verwirft die [JSON-Ausgabefelder](#json-output) eines WorktreeRemove-Hooks, wie `systemMessage` und `continue`.3247Claude Code verwirft die [JSON-Ausgabefelder](#json-output) eines WorktreeRemove-Hooks, wie `systemMessage` und `continue`.
3243 3248
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.3249Fü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 3250
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:3251Claude 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 3252
3248```json theme={null}3253```json theme={null}
3249{3254{
3266 WorktreeRemove-Eingabe3271 WorktreeRemove-Eingabe
3267</h4>3272</h4>
3268 3273
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.3274Zusä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 3275
3271```json theme={null}3276```json theme={null}
3272{3277{
3278}3283}
3279```3284```
3280 3285
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:3286Der 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 3287
3283* Das Worktree bleibt auf der Festplatte, und der Hook-Befehl und stderr gehen ins [Debug-Protokoll](#debug-hooks).3288* 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.3289* 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 3290
3286<h3 id="precompact">3291<h3 id="precompact">
3287 PreCompact3292 PreCompact
3288</h3>3293</h3>
3289 3294
3290Wird ausgeführt, bevor Claude Code eine Komprimierungs-Operation ausführen wird.3295Wird ausgeführt, bevor Claude Code eine Komprimierungs-Operation ausführen möchte.
3291 3296
3292Der Matcher-Wert gibt an, ob die Komprimierung manuell oder automatisch ausgelöst wurde:3297Der Matcher-Wert gibt an, ob die Komprimierung manuell oder automatisch ausgelöst wurde:
3293 3298
3294| Matcher | Wann wird es ausgelöst |3299| Matcher | Wann wird es ausgelöst |
3295| :- | :- |3300| :- | :- |
3296| `manual` | `/compact` |3301| `manual` | `/compact` |
3297| `auto` | Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |3302| `auto` | Auto-Komprimierung, wenn die Konversation das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3298 3303
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.3304Beenden 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 3305
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.3306Das 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 3307
3303Claude Code verwirft die `systemMessage` und `continue` Felder eines PreCompact-Hooks.3308Claude Code verwirft die `systemMessage` und `continue` Felder eines PreCompact-Hooks.
3304 3309
3330| Matcher | Wann wird es ausgelöst |3335| Matcher | Wann wird es ausgelöst |
3331| :- | :- |3336| :- | :- |
3332| `manual` | Nach `/compact` |3337| `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 |3338| `auto` | Nach Auto-Komprimierung, wenn die Konversation das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3334 3339
3335<h4 id="postcompact-input">3340<h4 id="postcompact-input">
3336 PostCompact-Eingabe3341 PostCompact-Eingabe
3337</h4>3342</h4>
3338 3343
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.3344Zusä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 3345
3341```json theme={null}3346```json theme={null}
3342{3347{
3355 PreModelSwitch3360 PreModelSwitch
3356</h3>3361</h3>
3357 3362
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.3363Wird 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 3364
3360PreModelSwitch erfordert Claude Code v2.1.251 oder später. Claude Code führt ihn für diese Anfragen aus:3365PreModelSwitch erfordert Claude Code v2.1.251 oder später. Claude Code führt ihn für diese Anfragen aus:
3361 3366
3362* `/model <name>` und der `/model` Picker3367* `/model <name>` und der `/model` Picker
3363* Der `Option+P` oder `Alt+P` Modell-Picker3368* Der `Option+P` oder `Alt+P` Modell-Picker
3364* Die Modell-Einstellung in `/config`3369* Die Model-Einstellung in `/config`
3365* Das Einschalten des [Fast-Modus](/docs/de/fast-mode), wenn das die Sitzungs-Modell ändert3370* 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)3371* 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 3372
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.3373Claude 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 3376
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.3377Wenn 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 3378
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:3379Schreiben 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 3380
3376<Tabs>3381<Tabs>
3377 <Tab title="macOS/Linux">3382 <Tab title="macOS/Linux">
3397 </Tab>3402 </Tab>
3398 3403
3399 <Tab title="Windows (PowerShell)">3404 <Tab title="Windows (PowerShell)">
3400 Registrieren Sie einen Command-Hook, der ein Skript über PowerShell ausführt:3405 Registrieren Sie einen Command-Hook, der ein Skript durch PowerShell ausführt:
3401 3406
3402 ```json theme={null}3407 ```json theme={null}
3403 {3408 {
3443 PreModelSwitch-Eingabe3448 PreModelSwitch-Eingabe
3444</h4>3449</h4>
3445 3450
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.3451Zusä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 3452
3448| Feld | Typ | Beschreibung |3453| Feld | Typ | Beschreibung |
3449| :- | :- | :- |3454| :- | :- | :- |
3450| `from_model` | string | Modell-ID, von der der Wechsel ändert |3455| `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 |3456| `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 |3457| `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 |3458| `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 |3459| `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 |3460| `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"` |3461| `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 |3462| `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 3515
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.3516Ein 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 3517
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.3518Ein 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 3519
3515<h3 id="postmodelswitch">3520<h3 id="postmodelswitch">
3516 PostModelSwitch3521 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:3526PostModelSwitch 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 3527
3523* Ein Wechsel, den Sie oder ein Client angefordert haben3528* 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 ändert3529* 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ässt3530* 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 fortsetzen3531* Claude Code stellt das Modell wieder her, wenn Sie eine Sitzung fortsetzen
3527 3532
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.3533Claude 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 3534
3530Der Matcher folgt den gleichen Regeln wie [PreModelSwitch](#premodelswitch): Claude Code vergleicht ihn gegen den kanonischen Namen des Modells, zu dem die Sitzung wechselt.3535Der Matcher folgt den gleichen Regeln wie [PreModelSwitch](#premodelswitch): Claude Code vergleicht ihn gegen den kanonischen Namen des Modells, zu dem die Sitzung wechselt.
3531 3536
3532Dieses Beispiel fügt Anleitung hinzu, wenn sich das Sitzungs-Modell zu einem Opus-Modell ändert:3537Dieses Beispiel fügt Anleitung hinzu, wenn sich das Modell der Sitzung zu einem beliebigen Opus-Modell ändert:
3533 3538
3534```json theme={null}3539```json theme={null}
3535{3540{
3555 PostModelSwitch-Eingabe3560 PostModelSwitch-Eingabe
3556</h4>3561</h4>
3557 3562
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.3563PostModelSwitch-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 3564
3560`requested_model` ist `null`, wenn `source` `"auto"` ist. Wenn `source` `"resume"` ist, ist es die gespeicherte Modell-Einstellung, die Claude Code wiederhergestellt hat.3565`requested_model` ist `null`, wenn `source` `"auto"` ist. Wenn `source` `"resume"` ist, ist es die gespeicherte Modell-Einstellung, die Claude Code wiederhergestellt hat.
3561 3566
3569| :- | :- |3574| :- | :- |
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) |3575| `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 3576
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.3577Wenn 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 3578
3574<h3 id="sessionend">3579<h3 id="sessionend">
3575 SessionEnd3580 SessionEnd
3576</h3>3581</h3>
3577 3582
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.3583Wird 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 3584
3580Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:3585Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:
3581 3586
3583| :- | :- |3588| :- | :- |
3584| `clear` | Sitzung mit `/clear` Befehl gelöscht |3589| `clear` | Sitzung mit `/clear` Befehl gelöscht |
3585| `resume` | Sitzung mit interaktivem `/resume` gewechselt |3590| `resume` | Sitzung mit interaktivem `/resume` gewechselt |
3586| `logout` | Benutzer abgemeldet |3591| `logout` | Benutzer hat sich abgemeldet |
3587| `prompt_input_exit` | Benutzer beendet, während Eingabeaufforderungs-Eingabe sichtbar war |3592| `prompt_input_exit` | Benutzer beendet, während Eingabeaufforderungs-Eingabe sichtbar war |
3588| `other` | Andere Exit-Gründe |3593| `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 |3594| `bypass_permissions_disabled` | Entfernt in v2.1.234; Claude Code sendet es nicht. Löschen Sie es aus Ihren `SessionEnd` Matchern |
3604}3609}
3605```3610```
3606 3611
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`.3612SessionEnd-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 3613
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:3614SessionEnd-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 3615
3631 Elicitation-Eingabe3636 Elicitation-Eingabe
3632</h4>3637</h4>
3633 3638
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.3639Zusä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 3640
3636Für Form-Modus-Elicitation, der häufigste Fall:3641Für Form-Modus-Elicitierung, der häufigste Fall:
3637 3642
3638```json theme={null}3643```json theme={null}
3639{3644{
3653}3658}
3654```3659```
3655 3660
3656Für URL-Modus-Elicitation, verwendet für Browser-basierte Authentifizierung:3661Für URL-Modus-Elicitierung, verwendet für Browser-basierte Authentifizierung:
3657 3662
3658```json theme={null}3663```json theme={null}
3659{3664{
3672 Elicitation-Ausgabe3677 Elicitation-Ausgabe
3673</h4>3678</h4>
3674 3679
3675Um programmatisch ohne Dialog zu antworten, geben Sie ein JSON-Objekt mit `hookSpecificOutput` zurück:3680Um programmatisch ohne Anzeige des Dialogs zu antworten, geben Sie ein JSON-Objekt mit `hookSpecificOutput` zurück:
3676 3681
3677```json theme={null}3682```json theme={null}
3678{3683{
3691| `action` | `accept`, `decline`, `cancel` | Ob die Anfrage akzeptiert, abgelehnt oder abgebrochen werden soll |3696| `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 |3697| `content` | object | Formular-Feldwerte zum Einreichen. Nur verwendet, wenn `action` `accept` ist |
3693 3698
3694Exit-Code 2 lehnt die Elicitation ab. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.3699Exit-Code 2 lehnt die Elicitierung ab. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.
3695 3700
3696Claude Code handelt auf `hookSpecificOutput` aus einer Elicitation-Hook-JSON-Ausgabe und verwirft `systemMessage` und `continue`.3701Claude Code handelt auf `hookSpecificOutput` aus der JSON-Ausgabe eines Elicitation-Hooks und verwirft `systemMessage` und `continue`.
3697 3702
3698<h3 id="elicitationresult">3703<h3 id="elicitationresult">
3699 ElicitationResult3704 ElicitationResult
3700</h3>3705</h3>
3701 3706
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.3707Wird 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 3708
3704Das Matcher-Feld gleicht gegen den MCP-Server-Namen ab.3709Das Matcher-Feld gleicht gegen den MCP-Server-Namen ab.
3705 3710
3707 ElicitationResult-Eingabe3712 ElicitationResult-Eingabe
3708</h4>3713</h4>
3709 3714
3710Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ElicitationResult-Hooks `mcp_server_name`, `action` und optionale `mode`, `elicitation_id` und `content` Felder.3715Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten ElicitationResult-Hooks `mcp_server_name`, `action` und optional `mode`, `elicitation_id` und `content` Felder.
3711 3716
3712```json theme={null}3717```json theme={null}
3713{3718{
3744| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |3749| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |
3745| `content` | object | Überschreibt Formular-Feldwerte. Nur aussagekräftig, wenn `action` `accept` ist |3750| `content` | object | Überschreibt Formular-Feldwerte. Nur aussagekräftig, wenn `action` `accept` ist |
3746 3751
3747Exit-Code 2 blockiert die Antwort, ändert die effektive Aktion zu `decline`. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.3752Exit-Code 2 blockiert die Antwort, indem die effektive Aktion zu `decline` geändert wird. Claude Code zeigt Ihre stderr-Nachricht nirgendwo an.
3748 3753
3749Claude Code handelt auf `hookSpecificOutput` aus einer ElicitationResult-Hook-JSON-Ausgabe und verwirft `systemMessage` und `continue`.3754Claude Code handelt auf `hookSpecificOutput` aus der JSON-Ausgabe eines ElicitationResult-Hooks und verwirft `systemMessage` und `continue`.
3750 3755
3751<h2 id="prompt-based-hooks">3756<h2 id="prompt-based-hooks">
3752 Prompt-basierte Hooks3757 Prompt-basierte Hooks