35Die folgende Tabelle fasst zusammen, wann jedes Ereignis ausgelöst wird. Der Abschnitt [Hook-Ereignisse](#hook-events) dokumentiert das vollständige Eingabeschema und die Optionen zur Entscheidungskontrolle für jedes Ereignis.35Die folgende Tabelle fasst zusammen, wann jedes Ereignis ausgelöst wird. Der Abschnitt [Hook-Ereignisse](#hook-events) dokumentiert das vollständige Eingabeschema und die Optionen zur Entscheidungskontrolle für jedes Ereignis.
36 36
37| Ereignis | Wann es ausgelöst wird |37| Ereignis | Wann es ausgelöst wird |
38| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |38| :- | :- |
39| `SessionStart` | Wenn eine Sitzung beginnt oder fortgesetzt wird |39| `SessionStart` | Wenn eine Sitzung beginnt oder fortgesetzt wird |
40| `Setup` | Wenn Sie Claude Code mit `--init-only` starten oder mit `--init` oder `--maintenance` im `-p`-Modus. Für einmalige Vorbereitung in CI oder Skripten |40| `Setup` | Wenn Sie Claude Code mit `--init-only` starten oder mit `--init` oder `--maintenance` im `-p`-Modus. Für einmalige Vorbereitung in CI oder Skripten |
41| `UserPromptSubmit` | Wenn Sie eine Eingabeaufforderung absenden, bevor Claude sie verarbeitet |41| `UserPromptSubmit` | Wenn Sie eine Eingabeaufforderung absenden, bevor Claude sie verarbeitet |
259Der Ort, an dem Sie einen Hook definieren, bestimmt seinen Umfang:259Der Ort, an dem Sie einen Hook definieren, bestimmt seinen Umfang:
260 260
261| Speicherort | Umfang | Freigegeben |261| Speicherort | Umfang | Freigegeben |
262| :------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ |262| :- | :- | :- |
263| `~/.claude/settings.json` | Alle Ihre Projekte | Nein, lokal auf Ihrem Computer |263| `~/.claude/settings.json` | Alle Ihre Projekte | Nein, lokal auf Ihrem Computer |
264| `.claude/settings.json` | Einzelnes Projekt | Ja, kann im Repository committed werden |264| `.claude/settings.json` | Einzelnes Projekt | Ja, kann im Repository committed werden |
265| `.claude/settings.local.json` | Einzelnes Projekt | Nein, gitignored, wenn Claude Code eine Einstellung darin speichert |265| `.claude/settings.local.json` | Einzelnes Projekt | Nein, gitignored, wenn Claude Code eine Einstellung darin speichert |
297Das Feld `matcher` filtert, wann Hooks ausgelöst werden. Wie ein Matcher ausgewertet wird, hängt von den Zeichen ab, die er enthält:297Das Feld `matcher` filtert, wann Hooks ausgelöst werden. Wie ein Matcher ausgewertet wird, hängt von den Zeichen ab, die er enthält:
298 298
299| Matcher-Wert | Ausgewertet als | Beispiel |299| Matcher-Wert | Ausgewertet als | Beispiel |
300| :----------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |300| :- | :- | :- |
301| `"*"`, `""` oder weggelassen | Alle abgleichen | wird bei jedem Auftreten des Ereignisses ausgelöst |301| `"*"`, `""` oder weggelassen | Alle abgleichen | wird bei jedem Auftreten des Ereignisses ausgelöst |
302| Nur Buchstaben, Ziffern, `_`, `-`, Leerzeichen, `,` und `\|` | Exakte Zeichenkette oder Liste exakter Zeichenketten, getrennt durch `\|` oder `,` mit optionalem umgebendem Leerzeichen | `Bash` passt nur auf das Bash-Tool; `Edit\|Write` und `Edit, Write` passen jeweils auf eines der beiden Tools genau; `code-reviewer` passt nur auf diesen Agent-Typ |302| Nur Buchstaben, Ziffern, `_`, `-`, Leerzeichen, `,` und `\|` | Exakte Zeichenkette oder Liste exakter Zeichenketten, getrennt durch `\|` oder `,` mit optionalem umgebendem Leerzeichen | `Bash` passt nur auf das Bash-Tool; `Edit\|Write` und `Edit, Write` passen jeweils auf eines der beiden Tools genau; `code-reviewer` passt nur auf diesen Agent-Typ |
303| Enthält ein anderes Zeichen | JavaScript-Regulärer Ausdruck, nicht verankert | `^Notebook` passt auf jedes Tool, dessen Name mit `Notebook` beginnt; `mcp__memory__.*` passt auf jedes Tool vom `memory`-Server |303| Enthält ein anderes Zeichen | JavaScript-Regulärer Ausdruck, nicht verankert | `^Notebook` passt auf jedes Tool, dessen Name mit `Notebook` beginnt; `mcp__memory__.*` passt auf jedes Tool vom `memory`-Server |
313Jeder Ereignistyp passt auf ein anderes Feld:313Jeder Ereignistyp passt auf ein anderes Feld:
314 314
315| Ereignis | Worauf der Matcher filtert | Beispiel-Matcher-Werte |315| Ereignis | Worauf der Matcher filtert | Beispiel-Matcher-Werte |
316| :------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |316| :- | :- | :- |
317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | Tool-Name | `Bash`, `Edit\|Write`, `mcp__.*` |317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | Tool-Name | `Bash`, `Edit\|Write`, `mcp__.*` |
318| `SessionStart` | wie die Sitzung gestartet wurde | `startup`, `resume`, `clear`, `compact`, `fork` |318| `SessionStart` | wie die Sitzung gestartet wurde | `startup`, `resume`, `clear`, `compact`, `fork` |
319| `Setup` | welches CLI-Flag Setup ausgelöst hat | `init`, `maintenance` |319| `Setup` | welches CLI-Flag Setup ausgelöst hat | `init`, `maintenance` |
438Diese Felder gelten für alle Hook-Typen:438Diese Felder gelten für alle Hook-Typen:
439 439
440| Feld | Erforderlich | Beschreibung |440| Feld | Erforderlich | Beschreibung |
441| :-------------- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |441| :- | :- | :- |
442| `type` | ja | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` oder `"agent"` |442| `type` | ja | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` oder `"agent"` |
443| `if` | nein | Berechtigungsregelsyntax zum Filtern, wann dieser Hook ausgeführt wird, z. B. `"Bash(git *)"` oder `"Edit(*.ts)"`. Der Hook-Befehl wird nur ausgeführt, wenn der Tool-Aufruf dem Muster entspricht. Siehe die [Bash-Matching-Tabelle](#bash-if-matching) unten, wie Bash-Muster gegen Subcommands, `$()` und Backticks ausgewertet werden. Nur auf Tool-Ereignissen ausgewertet: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` und `PermissionDenied`. Bei anderen Ereignissen wird ein Hook mit `if` gesetzt nie ausgeführt. Verwendet die gleiche Syntax wie [Berechtigungsregeln](/docs/de/permissions) |443| `if` | nein | Berechtigungsregelsyntax zum Filtern, wann dieser Hook ausgeführt wird, z. B. `"Bash(git *)"` oder `"Edit(*.ts)"`. Der Hook-Befehl wird nur ausgeführt, wenn der Tool-Aufruf dem Muster entspricht. Siehe die [Bash-Matching-Tabelle](#bash-if-matching) unten, wie Bash-Muster gegen Subcommands, `$()` und Backticks ausgewertet werden. Nur auf Tool-Ereignissen ausgewertet: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` und `PermissionDenied`. Bei anderen Ereignissen wird ein Hook mit `if` gesetzt nie ausgeführt. Verwendet die gleiche Syntax wie [Berechtigungsregeln](/docs/de/permissions) |
444| `timeout` | nein | Sekunden vor dem Abbruch. Claude Code erzwingt es nicht auf einem Command-Hook, den Sie mit [`async: true`](#run-hooks-in-the-background) ausführen. Standardwerte: 600 für `command`, `http` und `mcp_tool`; 30 für `prompt`; 60 für `agent`. Claude Code senkt den Standard für `command`, `http` und `mcp_tool` auf 30 bei [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) und [`PostModelSwitch`](#postmodelswitch) und auf 10 bei [`MessageDisplay`](#messagedisplay). [`SessionEnd`](#sessionend)-Hooks teilen sich ein Budget von 1,5 Sekunden; wenn Ihre Einstellungen einen längeren Pro-Hook-`timeout` setzen, erhöht Claude Code das Budget, um zu entsprechen, bis zu 60 Sekunden |444| `timeout` | nein | Sekunden vor dem Abbruch. Claude Code erzwingt es nicht auf einem Command-Hook, den Sie mit [`async: true`](#run-hooks-in-the-background) ausführen. Standardwerte: 600 für `command`, `http` und `mcp_tool`; 30 für `prompt`; 60 für `agent`. Claude Code senkt den Standard für `command`, `http` und `mcp_tool` auf 30 bei [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) und [`PostModelSwitch`](#postmodelswitch) und auf 10 bei [`MessageDisplay`](#messagedisplay). [`SessionEnd`](#sessionend)-Hooks teilen sich ein Budget von 1,5 Sekunden; wenn Ihre Einstellungen einen längeren Pro-Hook-`timeout` setzen, erhöht Claude Code das Budget, um zu entsprechen, bis zu 60 Sekunden |
452<span id="bash-if-matching" />Für Bash-Muster hängt davon ab, ob Ihr Hook-Befehl ausgeführt wird, von der Form des Musters und dem Bash-Befehl ab, den Claude aufruft. Führende `VAR=value`-Zuweisungen werden vor dem Abgleich entfernt.452<span id="bash-if-matching" />Für Bash-Muster hängt davon ab, ob Ihr Hook-Befehl ausgeführt wird, von der Form des Musters und dem Bash-Befehl ab, den Claude aufruft. Führende `VAR=value`-Zuweisungen werden vor dem Abgleich entfernt.
453 453
454| `if`-Muster | Bash-Befehl | Hook wird ausgeführt? | Warum |454| `if`-Muster | Bash-Befehl | Hook wird ausgeführt? | Warum |
455| :----------------- | :-------------------------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |455| :- | :- | :- | :- |
456| `Bash(git *)` | `FOO=bar git push` | ja | führende Zuweisungen werden entfernt; `git push` passt |456| `Bash(git *)` | `FOO=bar git push` | ja | führende Zuweisungen werden entfernt; `git push` passt |
457| `Bash(git *)` | `npm test && git push` | ja | jeder Subbefehl wird überprüft; `git push` passt |457| `Bash(git *)` | `npm test && git push` | ja | jeder Subbefehl wird überprüft; `git push` passt |
458| `Bash(rm *)` | `echo $(rm -rf /)` | ja | Befehle in `$()` und Backticks werden überprüft; `rm -rf /` passt |458| `Bash(rm *)` | `echo $(rm -rf /)` | ja | Befehle in `$()` und Backticks werden überprüft; `rm -rf /` passt |
470Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren Command-Hooks diese Felder:470Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren Command-Hooks diese Felder:
471 471
472| Feld | Erforderlich | Beschreibung |472| Feld | Erforderlich | Beschreibung |
473| :------------ | :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |473| :- | :- | :- |
474| `command` | ja | Shell-Befehl zum Ausführen. Mit `args` die Ausführungsdatei zum direkten Spawnen. Siehe [Exec-Form und Shell-Form](#exec-form-and-shell-form) |474| `command` | ja | Shell-Befehl zum Ausführen. Mit `args` die Ausführungsdatei zum direkten Spawnen. Siehe [Exec-Form und Shell-Form](#exec-form-and-shell-form) |
475| `args` | nein | Argumentliste. Wenn vorhanden, wird `command` als Ausführungsdatei aufgelöst und direkt mit `args` als Argumentvektor gespawnt, ohne Shell. Siehe [Exec-Form und Shell-Form](#exec-form-and-shell-form) |475| `args` | nein | Argumentliste. Wenn vorhanden, wird `command` als Ausführungsdatei aufgelöst und direkt mit `args` als Argumentvektor gespawnt, ohne Shell. Siehe [Exec-Form und Shell-Form](#exec-form-and-shell-form) |
476| `async` | nein | Wenn `true`, wird im Hintergrund ohne Blockierung ausgeführt. Siehe [Hooks im Hintergrund ausführen](#run-hooks-in-the-background) |476| `async` | nein | Wenn `true`, wird im Hintergrund ohne Blockierung ausgeführt. Siehe [Hooks im Hintergrund ausführen](#run-hooks-in-the-background) |
529Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren HTTP-Hooks diese Felder:529Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren HTTP-Hooks diese Felder:
530 530
531| Feld | Erforderlich | Beschreibung |531| Feld | Erforderlich | Beschreibung |
532| :--------------- | :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |532| :- | :- | :- |
533| `url` | ja | URL zum Senden der POST-Anfrage an |533| `url` | ja | URL zum Senden der POST-Anfrage an |
534| `headers` | nein | Zusätzliche HTTP-Header als Schlüssel-Wert-Paare. Werte unterstützen Umgebungsvariablen-Interpolation mit `$VAR_NAME` oder `${VAR_NAME}`-Syntax. Nur Variablen in `allowedEnvVars` werden aufgelöst |534| `headers` | nein | Zusätzliche HTTP-Header als Schlüssel-Wert-Paare. Werte unterstützen Umgebungsvariablen-Interpolation mit `$VAR_NAME` oder `${VAR_NAME}`-Syntax. Nur Variablen in `allowedEnvVars` werden aufgelöst |
535| `allowedEnvVars` | nein | Liste von Umgebungsvariablennamen, die in Header-Werte interpoliert werden dürfen. Verweise auf nicht aufgelistete Variablen werden durch leere Zeichenketten ersetzt. Erforderlich für jede Umgebungsvariablen-Interpolation |535| `allowedEnvVars` | nein | Liste von Umgebungsvariablennamen, die in Header-Werte interpoliert werden dürfen. Verweise auf nicht aufgelistete Variablen werden durch leere Zeichenketten ersetzt. Erforderlich für jede Umgebungsvariablen-Interpolation |
570Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren MCP-Tool-Hooks diese Felder:570Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren MCP-Tool-Hooks diese Felder:
571 571
572| Feld | Erforderlich | Beschreibung |572| Feld | Erforderlich | Beschreibung |
573| :------- | :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |573| :- | :- | :- |
574| `server` | ja | Name eines konfigurierten MCP-Servers. Für einen [Plugin-gebündelten Server](/docs/de/mcp#plugin-provided-mcp-servers) ist dies der bereichsbezogene Name `plugin:<plugin-name>:<server-name>`, z. B. `plugin:my-plugin:db`, nicht der bloße Server-Schlüssel. Der Server muss bereits verbunden sein; der Hook löst nie einen OAuth- oder Verbindungsfluss aus |574| `server` | ja | Name eines konfigurierten MCP-Servers. Für einen [Plugin-gebündelten Server](/docs/de/mcp#plugin-provided-mcp-servers) ist dies der bereichsbezogene Name `plugin:<plugin-name>:<server-name>`, z. B. `plugin:my-plugin:db`, nicht der bloße Server-Schlüssel. Der Server muss bereits verbunden sein; der Hook löst nie einen OAuth- oder Verbindungsfluss aus |
575| `tool` | ja | Name des Tools, das auf diesem Server aufgerufen werden soll |575| `tool` | ja | Name des Tools, das auf diesem Server aufgerufen werden soll |
576| `input` | nein | Argumente, die an das Tool übergeben werden. Zeichenkettenwerte unterstützen `${path}`-Ersetzung aus der [JSON-Eingabe](#hook-input-and-output) des Hooks, z. B. `"${tool_input.file_path}"` |576| `input` | nein | Argumente, die an das Tool übergeben werden. Zeichenkettenwerte unterstützen `${path}`-Ersetzung aus der [JSON-Eingabe](#hook-input-and-output) des Hooks, z. B. `"${tool_input.file_path}"` |
634Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren Prompt- und Agent-Hooks diese Felder:634Zusätzlich zu den [gemeinsamen Feldern](#common-fields) akzeptieren Prompt- und Agent-Hooks diese Felder:
635 635
636| Feld | Erforderlich | Beschreibung |636| Feld | Erforderlich | Beschreibung |
637| :------- | :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |637| :- | :- | :- |
638| `prompt` | ja | Prompt-Text zum Senden an das Modell. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe-JSON. Mit einem Backslash escapen, um wörtlichen Text einzuschließen: `\$1.00` wird als `$1.00` gerendert |638| `prompt` | ja | Prompt-Text zum Senden an das Modell. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe-JSON. Mit einem Backslash escapen, um wörtlichen Text einzuschließen: `\$1.00` wird als `$1.00` gerendert |
639| `model` | nein | Modell, das für die Bewertung verwendet werden soll. Standardmäßig ein schnelles Modell |639| `model` | nein | Modell, das für die Bewertung verwendet werden soll. Standardmäßig ein schnelles Modell |
640 640
786Hook Events empfangen diese Felder als JSON, zusätzlich zu Event-spezifischen Feldern, die in jedem [Hook-Event](#hook-events)-Abschnitt dokumentiert sind. Für Command Hooks kommt dieses JSON über stdin an. Für HTTP Hooks kommt es als POST-Request-Body an.786Hook Events empfangen diese Felder als JSON, zusätzlich zu Event-spezifischen Feldern, die in jedem [Hook-Event](#hook-events)-Abschnitt dokumentiert sind. Für Command Hooks kommt dieses JSON über stdin an. Für HTTP Hooks kommt es als POST-Request-Body an.
787 787
788| Feld | Beschreibung |788| Feld | Beschreibung |
789| :---------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |789| :- | :- |
790| `session_id` | Aktuelle Session-Kennung |790| `session_id` | Aktuelle Session-Kennung |
791| `prompt_id` | UUID, die den aktuell verarbeiteten Benutzer-Prompt identifiziert. Stimmt mit dem [`prompt.id`-Attribut auf OpenTelemetry-Events](/docs/de/monitoring-usage#event-correlation-attributes) überein, sodass Sie Hook-Ausgabe mit Telemetrie für einen einzelnen Prompt korrelieren können. Nicht vorhanden bis zur ersten Benutzereingabe. Erfordert Claude Code v2.1.196 oder später |791| `prompt_id` | UUID, die den aktuell verarbeiteten Benutzer-Prompt identifiziert. Stimmt mit dem [`prompt.id`-Attribut auf OpenTelemetry-Events](/docs/de/monitoring-usage#event-correlation-attributes) überein, sodass Sie Hook-Ausgabe mit Telemetrie für einen einzelnen Prompt korrelieren können. Nicht vorhanden bis zur ersten Benutzereingabe. Erfordert Claude Code v2.1.196 oder später |
792| `transcript_path` | Pfad zur Konversations-JSON. Die Transkriptdatei wird asynchron geschrieben und kann der In-Memory-Konversation hinterherhinken, daher kann sie möglicherweise noch nicht die neuesten Nachrichten des aktuellen Turns enthalten, wenn ein Hook ausgelöst wird. Hooks, die den endgültigen Assistant-Text des aktuellen Turns benötigen, sollten `last_assistant_message` auf [Stop](#stop) und [SubagentStop](#subagentstop) verwenden, anstatt das Transkript zu lesen |792| `transcript_path` | Pfad zur Konversations-JSON. Die Transkriptdatei wird asynchron geschrieben und kann der In-Memory-Konversation hinterherhinken, daher kann sie möglicherweise noch nicht die neuesten Nachrichten des aktuellen Turns enthalten, wenn ein Hook ausgelöst wird. Hooks, die den endgültigen Assistant-Text des aktuellen Turns benötigen, sollten `last_assistant_message` auf [Stop](#stop) und [SubagentStop](#subagentstop) verwenden, anstatt das Transkript zu lesen |
799Bei Ausführung mit `--agent` oder innerhalb eines Subagenten sind zwei zusätzliche Felder enthalten:799Bei Ausführung mit `--agent` oder innerhalb eines Subagenten sind zwei zusätzliche Felder enthalten:
800 800
801| Feld | Beschreibung |801| Feld | Beschreibung |
802| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |802| :- | :- |
803| `agent_id` | Eindeutige Kennung für den Subagenten. Nur vorhanden, wenn der Hook innerhalb eines Subagenten-Aufrufs ausgelöst wird. Verwenden Sie dies, um Subagenten-Hook-Aufrufe von Main-Thread-Aufrufen zu unterscheiden. |803| `agent_id` | Eindeutige Kennung für den Subagenten. Nur vorhanden, wenn der Hook innerhalb eines Subagenten-Aufrufs ausgelöst wird. Verwenden Sie dies, um Subagenten-Hook-Aufrufe von Main-Thread-Aufrufen zu unterscheiden. |
804| `agent_type` | Agent-Name (z. B. `"Explore"` oder `"security-reviewer"`). Vorhanden, wenn die Session `--agent` verwendet oder der Hook innerhalb eines Subagenten ausgelöst wird. Für Subagenten hat der Typ des Subagenten Vorrang vor dem `--agent`-Wert der Session. Siehe [SubagentStart](#subagentstart) für die Werte, die benutzerdefinierte und Plugin-Subagenten melden, und wie man einen Matcher gegen einen Plugin-Scoped-Namen schreibt. |804| `agent_type` | Agent-Name (z. B. `"Explore"` oder `"security-reviewer"`). Vorhanden, wenn die Session `--agent` verwendet oder der Hook innerhalb eines Subagenten ausgelöst wird. Für Subagenten hat der Typ des Subagenten Vorrang vor dem `--agent`-Wert der Session. Siehe [SubagentStart](#subagentstart) für die Werte, die benutzerdefinierte und Plugin-Subagenten melden, und wie man einen Matcher gegen einen Plugin-Scoped-Namen schreibt. |
805 805
926Exit-Code 2 ist die Art, wie ein Hook signalisiert „Stopp, mach das nicht." Die Auswirkung hängt vom Event ab, da einige Events Aktionen darstellen, die blockiert werden können (wie ein Tool-Aufruf, der noch nicht stattgefunden hat), und andere Dinge darstellen, die bereits passiert sind oder nicht verhindert werden können.926Exit-Code 2 ist die Art, wie ein Hook signalisiert „Stopp, mach das nicht." Die Auswirkung hängt vom Event ab, da einige Events Aktionen darstellen, die blockiert werden können (wie ein Tool-Aufruf, der noch nicht stattgefunden hat), und andere Dinge darstellen, die bereits passiert sind oder nicht verhindert werden können.
927 927
928| Hook-Event | Kann blockieren? | Was passiert bei Exit 2 |928| Hook-Event | Kann blockieren? | Was passiert bei Exit 2 |
929| :-------------------- | :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |929| :- | :- | :- |
930| `PreToolUse` | Ja | Blockiert den Tool-Aufruf |930| `PreToolUse` | Ja | Blockiert den Tool-Aufruf |
931| `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) |931| `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) |
932| `UserPromptSubmit` | Ja | Blockiert die Prompt-Verarbeitung und löscht den Prompt |932| `UserPromptSubmit` | Ja | Blockiert die Prompt-Verarbeitung und löscht den Prompt |
1003* **`hookSpecificOutput`** ist ein verschachteltes Objekt für Events, die reichere Kontrolle benötigen. Es erfordert ein `hookEventName`-Feld, das auf den Event-Namen gesetzt ist.1003* **`hookSpecificOutput`** ist ein verschachteltes Objekt für Events, die reichere Kontrolle benötigen. Es erfordert ein `hookEventName`-Feld, das auf den Event-Namen gesetzt ist.
1004 1004
1005| Feld | Standard | Beschreibung |1005| Feld | Standard | Beschreibung |
1006| :----------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1006| :- | :- | :- |
1007| `continue` | `true` | Wenn `false`, stoppt Claude die Verarbeitung vollständig, nachdem der Hook ausgeführt wird. Hat Vorrang vor allen Event-spezifischen Entscheidungsfeldern |1007| `continue` | `true` | Wenn `false`, stoppt Claude die Verarbeitung vollständig, nachdem der Hook ausgeführt wird. Hat Vorrang vor allen Event-spezifischen Entscheidungsfeldern |
1008| `stopReason` | keine | Meldung, die dem Benutzer angezeigt wird, wenn `continue` `false` ist. Sie bleibt in der Konversation, sodass Claude sie sieht, wenn die Konversation fortgesetzt wird |1008| `stopReason` | keine | Meldung, die dem Benutzer angezeigt wird, wenn `continue` `false` ist. Sie bleibt in der Konversation, sodass Claude sie sieht, wenn die Konversation fortgesetzt wird |
1009| `suppressOutput` | `false` | Hat keine Auswirkung: Claude Code akzeptiert das Feld, aber handelt nicht danach. Der stdout eines erfolgreichen Hooks wird nie im Transkript angezeigt und wird im Debug-Protokoll aufgezeichnet |1009| `suppressOutput` | `false` | Hat keine Auswirkung: Claude Code akzeptiert das Feld, aber handelt nicht danach. Der stdout eines erfolgreichen Hooks wird nie im Transkript angezeigt und wird im Debug-Protokoll aufgezeichnet |
1101Nicht jeder Event unterstützt Blockierung oder Verhaltenskontrolle durch JSON. Die Events, die dies tun, verwenden jeweils einen anderen Satz von Feldern, um diese Entscheidung auszudrücken. Verwenden Sie diese Tabelle als schnelle Referenz, bevor Sie einen Hook schreiben:1101Nicht jeder Event unterstützt Blockierung oder Verhaltenskontrolle durch JSON. Die Events, die dies tun, verwenden jeweils einen anderen Satz von Feldern, um diese Entscheidung auszudrücken. Verwenden Sie diese Tabelle als schnelle Referenz, bevor Sie einen Hook schreiben:
1102 1102
1103| Events | Entscheidungsmuster | Schlüsselfelder |1103| Events | Entscheidungsmuster | Schlüsselfelder |
1104| :---------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1104| :- | :- | :- |
1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | Top-Level `decision` | `decision: "block"`, `reason`. Stop und SubagentStop akzeptieren auch `hookSpecificOutput.additionalContext` für [nicht-fehlerhafte Rückmeldung, die die Konversation fortsetzt](#stop-decision-control) |1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | Top-Level `decision` | `decision: "block"`, `reason`. Stop und SubagentStop akzeptieren auch `hookSpecificOutput.additionalContext` für [nicht-fehlerhafte Rückmeldung, die die Konversation fortsetzt](#stop-decision-control) |
1106| TeammateIdle, TaskCompleted | Exit-Code oder `continue: false` | Exit-Code 2 blockiert die Aktion mit stderr-Rückmeldung. JSON `{"continue": false, "stopReason": "..."}` stoppt auch den Teammate vollständig, was dem `Stop`-Hook-Verhalten entspricht; [TaskCompleted ignoriert es, wenn das `TaskUpdate`-Tool den Event ausgelöst hat](#taskcompleted-decision-control) |1106| TeammateIdle, TaskCompleted | Exit-Code oder `continue: false` | Exit-Code 2 blockiert die Aktion mit stderr-Rückmeldung. JSON `{"continue": false, "stopReason": "..."}` stoppt auch den Teammate vollständig, was dem `Stop`-Hook-Verhalten entspricht; [TaskCompleted ignoriert es, wenn das `TaskUpdate`-Tool den Event ausgelöst hat](#taskcompleted-decision-control) |
1107| TaskCreated | Exit-Code oder Top-Level `decision` | Exit-Code 2 oder `decision: "block"` [bricht die Task ab](#taskcreated-decision-control) und gibt die Meldung an Claude zurück. `continue: false` wird ignoriert |1107| TaskCreated | Exit-Code oder Top-Level `decision` | Exit-Code 2 oder `decision: "block"` [bricht die Task ab](#taskcreated-decision-control) und gibt die Meldung an Claude zurück. `continue: false` wird ignoriert |
1192Der Matcher-Wert entspricht der Art, wie die Sitzung eingeleitet wurde:1192Der Matcher-Wert entspricht der Art, wie die Sitzung eingeleitet wurde:
1193 1193
1194| Matcher | Wann wird es ausgelöst |1194| Matcher | Wann wird es ausgelöst |
1195| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |1195| :- | :- |
1196| `startup` | Neue Sitzung |1196| `startup` | Neue Sitzung |
1197| `resume` | `--resume`, `--continue` oder `/resume` |1197| `resume` | `--resume`, `--continue` oder `/resume` |
1198| `clear` | `/clear` |1198| `clear` | `/clear` |
1216Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SessionStart-Hooks `source` und optional `model`, `agent_type` und `session_title`:1216Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten SessionStart-Hooks `source` und optional `model`, `agent_type` und `session_title`:
1217 1217
1218| Feld | Beschreibung |1218| Feld | Beschreibung |
1219| :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1219| :- | :- |
1220| `source` | Wie die Sitzung gestartet wurde: `"startup"` für neue Sitzungen, `"resume"` für fortgesetzte Sitzungen, `"clear"` nach `/clear`, `"compact"` nach Komprimierung oder `"fork"` für eine neue Sitzung, die aus einer vorhandenen abgezweigt wurde |1220| `source` | Wie die Sitzung gestartet wurde: `"startup"` für neue Sitzungen, `"resume"` für fortgesetzte Sitzungen, `"clear"` nach `/clear`, `"compact"` nach Komprimierung oder `"fork"` für eine neue Sitzung, die aus einer vorhandenen abgezweigt wurde |
1221| `model` | Die aktive Modell-ID. Sie kann weggelassen werden, z. B. nach `/clear` oder wenn eine Sitzung durch Gesprächswiederherstellung wiederhergestellt wird, daher überprüfen Sie das Feld, bevor Sie es lesen |1221| `model` | Die aktive Modell-ID. Sie kann weggelassen werden, z. B. nach `/clear` oder wenn eine Sitzung durch Gesprächswiederherstellung wiederhergestellt wird, daher überprüfen Sie das Feld, bevor Sie es lesen |
1222| `agent_type` | Der Agent-Name, vorhanden, wenn Sie Claude Code mit `claude --agent <name>` starten |1222| `agent_type` | Der Agent-Name, vorhanden, wenn Sie Claude Code mit `claude --agent <name>` starten |
1225Wenn `source` `"resume"` oder `"fork"` ist und das Transkript mindestens eine Antwort von Claude enthält, erhalten SessionStart-Hooks auch die vier folgenden Felder. Ihr Hook kann sie verwenden, um zu melden, was das Fortsetzen eines veralteten Gesprächs kostet, bevor die erste Anfrage erfolgt, z. B. in einer [`systemMessage`](#json-output). Diese Felder erfordern Claude Code v2.1.251 oder später.1225Wenn `source` `"resume"` oder `"fork"` ist und das Transkript mindestens eine Antwort von Claude enthält, erhalten SessionStart-Hooks auch die vier folgenden Felder. Ihr Hook kann sie verwenden, um zu melden, was das Fortsetzen eines veralteten Gesprächs kostet, bevor die erste Anfrage erfolgt, z. B. in einer [`systemMessage`](#json-output). Diese Felder erfordern Claude Code v2.1.251 oder später.
1226 1226
1227| Feld | Beschreibung |1227| Feld | Beschreibung |
1228| :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1228| :- | :- |
1229| `seconds_since_last_response` | Wanduhr-Sekunden seit der letzten Antwort im fortgesetzten Transkript |1229| `seconds_since_last_response` | Wanduhr-Sekunden seit der letzten Antwort im fortgesetzten Transkript |
1230| `context_tokens` | Tokens, die die erste Anfrage der fortgesetzten Sitzung als ihre Eingabeaufforderung erneut sendet |1230| `context_tokens` | Tokens, die die erste Anfrage der fortgesetzten Sitzung als ihre Eingabeaufforderung erneut sendet |
1231| `prompt_cache_likely_expired` | `true`, wenn die letzte Antwort älter ist als die [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime) der Sitzung oder eine spätere Komprimierung das zwischengespeicherte Gespräch ersetzt hat |1231| `prompt_cache_likely_expired` | `true`, wenn die letzte Antwort älter ist als die [Prompt-Cache-Lebensdauer](/docs/de/prompt-caching#cache-lifetime) der Sitzung oder eine spätere Komprimierung das zwischengespeicherte Gespräch ersetzt hat |
1255Claude Code fügt stdout, das es [als Klartext behandelt](#exit-code-0), zu Claudes Kontext hinzu. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie diese ereignisspezifischen Felder zurückgeben:1255Claude Code fügt stdout, das es [als Klartext behandelt](#exit-code-0), zu Claudes Kontext hinzu. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie diese ereignisspezifischen Felder zurückgeben:
1256 1256
1257| Feld | Beschreibung |1257| Feld | Beschreibung |
1258| :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1258| :- | :- |
1259| `additionalContext` | String, der zu Claudes Kontext am Anfang des Gesprächs hinzugefügt wird, vor der ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude), um zu erfahren, wie der Text bereitgestellt wird und was Sie darin einfügen sollten |1259| `additionalContext` | String, der zu Claudes Kontext am Anfang des Gesprächs hinzugefügt wird, vor der ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude), um zu erfahren, wie der Text bereitgestellt wird und was Sie darin einfügen sollten |
1260| `initialUserMessage` | String, der als erste Benutzernachricht der Sitzung verwendet wird. Gilt im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag, wo es zum ersten Zug wird, auch wenn keine Eingabeaufforderung bereitgestellt wird. Wenn eine Eingabeaufforderung bereitgestellt wird, folgt sie als nächster Zug. Im Gegensatz zu `additionalContext`, das an einen vorhandenen Zug angehängt wird, erstellt dies den Zug |1260| `initialUserMessage` | String, der als erste Benutzernachricht der Sitzung verwendet wird. Gilt im [nicht-interaktiven Modus](/docs/de/headless) mit dem `-p` Flag, wo es zum ersten Zug wird, auch wenn keine Eingabeaufforderung bereitgestellt wird. Wenn eine Eingabeaufforderung bereitgestellt wird, folgt sie als nächster Zug. Im Gegensatz zu `additionalContext`, das an einen vorhandenen Zug angehängt wird, erstellt dies den Zug |
1261| `sessionTitle` | Legt den Sitzungstitel fest, mit der gleichen Wirkung wie `/rename`. Verwenden Sie dies, um Sitzungen automatisch aus dem Start-Ordner, Git-Branch oder Worktree-Namen zu benennen. Gilt, wenn `source` `"startup"`, `"resume"` oder `"fork"` ist; wird bei `"clear"` und `"compact"` ignoriert |1261| `sessionTitle` | Legt den Sitzungstitel fest, mit der gleichen Wirkung wie `/rename`. Verwenden Sie dies, um Sitzungen automatisch aus dem Start-Ordner, Git-Branch oder Worktree-Namen zu benennen. Gilt, wenn `source` `"startup"`, `"resume"` oder `"fork"` ist; wird bei `"clear"` und `"compact"` ignoriert |
1339Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:1339Der Matcher-Wert entspricht dem CLI-Flag, das den Hook ausgelöst hat:
1340 1340
1341| Matcher | Wann wird es ausgelöst |1341| Matcher | Wann wird es ausgelöst |
1342| :------------ | :------------------------------------------- |1342| :- | :- |
1343| `init` | `claude --init-only` oder `claude -p --init` |1343| `init` | `claude --init-only` oder `claude -p --init` |
1344| `maintenance` | `claude -p --maintenance` |1344| `maintenance` | `claude -p --maintenance` |
1345 1345
1392Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten InstructionsLoaded-Hooks diese Felder:1392Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten InstructionsLoaded-Hooks diese Felder:
1393 1393
1394| Feld | Beschreibung |1394| Feld | Beschreibung |
1395| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1395| :- | :- |
1396| `file_path` | Absoluter Pfad zur Anweisungsdatei, die geladen wurde |1396| `file_path` | Absoluter Pfad zur Anweisungsdatei, die geladen wurde |
1397| `memory_type` | Umfang der Datei: `"User"`, `"Project"`, `"Local"` oder `"Managed"` |1397| `memory_type` | Umfang der Datei: `"User"`, `"Project"`, `"Local"` oder `"Managed"` |
1398| `load_reason` | Warum die Datei geladen wurde: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` oder `"compact"`. Der `"compact"` Wert wird ausgeführt, wenn Anweisungsdateien nach einem Komprimierungsereignis erneut geladen werden |1398| `load_reason` | Warum die Datei geladen wurde: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` oder `"compact"`. Der `"compact"` Wert wird ausgeführt, wenn Anweisungsdateien nach einem Komprimierungsereignis erneut geladen werden |
1463Um eine Eingabeaufforderung zu blockieren, geben Sie ein JSON-Objekt mit `decision` auf `"block"` zurück:1463Um eine Eingabeaufforderung zu blockieren, geben Sie ein JSON-Objekt mit `decision` auf `"block"` zurück:
1464 1464
1465| Feld | Beschreibung |1465| Feld | Beschreibung |
1466| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |1466| :- | :- |
1467| `decision` | `"block"` verhindert, dass die Eingabeaufforderung verarbeitet wird und löscht sie aus dem Kontext. Weglassen, um die Eingabeaufforderung fortzufahren |1467| `decision` | `"block"` verhindert, dass die Eingabeaufforderung verarbeitet wird und löscht sie aus dem Kontext. Weglassen, um die Eingabeaufforderung fortzufahren |
1468| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist. Nicht zum Kontext hinzugefügt |1468| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist. Nicht zum Kontext hinzugefügt |
1469| `additionalContext` | String, der zu Claudes Kontext neben der eingereichten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |1469| `additionalContext` | String, der zu Claudes Kontext neben der eingereichten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
1522`UserPromptExpansion` Hooks können die Erweiterung blockieren oder Kontext hinzufügen. Alle [JSON-Ausgabefelder](#json-output) sind verfügbar.1522`UserPromptExpansion` Hooks können die Erweiterung blockieren oder Kontext hinzufügen. Alle [JSON-Ausgabefelder](#json-output) sind verfügbar.
1523 1523
1524| Feld | Beschreibung |1524| Feld | Beschreibung |
1525| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |1525| :- | :- |
1526| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um fortzufahren |1526| `decision` | `"block"` verhindert, dass der Befehl erweitert wird. Weglassen, um fortzufahren |
1527| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist |1527| `reason` | Wird dem Benutzer angezeigt, wenn `decision` `"block"` ist |
1528| `additionalContext` | String, der zu Claudes Kontext neben der erweiterten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |1528| `additionalContext` | String, der zu Claudes Kontext neben der erweiterten Eingabeaufforderung hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
1567Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten MessageDisplay-Hooks Identifikatoren für den Zug und die Nachricht, die Position dieses Aufrufs innerhalb der Nachricht und den neuen Text in `delta`. Batch-Grenzen hängen davon ab, wie der Text streamt, daher verwenden Sie `index` und `final`, um den Fortschritt durch eine Nachricht zu verfolgen, anstatt zu erwarten, dass Zeilen auf eine bestimmte Weise gruppiert werden.1567Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten MessageDisplay-Hooks Identifikatoren für den Zug und die Nachricht, die Position dieses Aufrufs innerhalb der Nachricht und den neuen Text in `delta`. Batch-Grenzen hängen davon ab, wie der Text streamt, daher verwenden Sie `index` und `final`, um den Fortschritt durch eine Nachricht zu verfolgen, anstatt zu erwarten, dass Zeilen auf eine bestimmte Weise gruppiert werden.
1568 1568
1569| Feld | Beschreibung |1569| Feld | Beschreibung |
1570| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1570| :- | :- |
1571| `turn_id` | UUID des aktuellen Zugs |1571| `turn_id` | UUID des aktuellen Zugs |
1572| `message_id` | UUID der angezeigten Assistenten-Nachricht. Stabil über jeden Batch der gleichen Nachricht. Dies ist nicht die API `msg_…` ID, daher kann sie nicht mit Transkript-Nachrichten-IDs korreliert werden |1572| `message_id` | UUID der angezeigten Assistenten-Nachricht. Stabil über jeden Batch der gleichen Nachricht. Dies ist nicht die API `msg_…` ID, daher kann sie nicht mit Transkript-Nachrichten-IDs korreliert werden |
1573| `index` | Null-basierter Index dieses Batches innerhalb der Nachricht |1573| `index` | Null-basierter Index dieses Batches innerhalb der Nachricht |
1595Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können MessageDisplay-Hooks `displayContent` zurückgeben, um das Delta auf dem Bildschirm zu ersetzen:1595Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können MessageDisplay-Hooks `displayContent` zurückgeben, um das Delta auf dem Bildschirm zu ersetzen:
1596 1596
1597| Feld | Beschreibung |1597| Feld | Beschreibung |
1598| :--------------- | :--------------------------------------------------------------------------------- |1598| :- | :- |
1599| `displayContent` | Text, der anstelle des Delta angezeigt wird. Weglassen, um das Original anzuzeigen |1599| `displayContent` | Text, der anstelle des Delta angezeigt wird. Weglassen, um das Original anzuzeigen |
1600 1600
1601MessageDisplay-Hooks haben keine Entscheidungskontrolle. Sie können die Nachricht nicht blockieren oder ändern, was im Transkript gespeichert oder an Claude gesendet wird. Claude Code handelt `displayContent` aus ihrer JSON-Ausgabe und verwirft `systemMessage` und `continue`.1601MessageDisplay-Hooks haben keine Entscheidungskontrolle. Sie können die Nachricht nicht blockieren oder ändern, was im Transkript gespeichert oder an Claude gesendet wird. Claude Code handelt `displayContent` aus ihrer JSON-Ausgabe und verwirft `systemMessage` und `continue`.
1736Führt Shell-Befehle aus.1736Führt Shell-Befehle aus.
1737 1737
1738| Feld | Typ | Beispiel | Beschreibung |1738| Feld | Typ | Beispiel | Beschreibung |
1739| :------------------ | :------ | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1739| :- | :- | :- | :- |
1740| `command` | string | `"npm test"` | Der auszuführende Shell-Befehl |1740| `command` | string | `"npm test"` | Der auszuführende Shell-Befehl |
1741| `description` | string | `"Run test suite"` | Optionale Beschreibung, was der Befehl tut |1741| `description` | string | `"Run test suite"` | Optionale Beschreibung, was der Befehl tut |
1742| `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 |1742| `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 |
1753`changedFiles` und `files` listen auf, was der Befehl geändert hat; die verbleibenden Felder sagen, wie vollständig und wie zuverlässig diese Liste ist.1753`changedFiles` und `files` listen auf, was der Befehl geändert hat; die verbleibenden Felder sagen, wie vollständig und wie zuverlässig diese Liste ist.
1754 1754
1755| Feld | Typ | Beispiel | Beschreibung |1755| Feld | Typ | Beispiel | Beschreibung |
1756| :------------- | :------ | :------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1756| :- | :- | :- | :- |
1757| `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 enthält oder `moreFiles` über Null liegt |1757| `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 enthält oder `moreFiles` über Null liegt |
1758| `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 |1758| `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 |
1759| `moreFiles` | number | `2` | Anzahl der geänderten Dateien ohne Diff in `files` |1759| `moreFiles` | number | `2` | Anzahl der geänderten Dateien ohne Diff in `files` |
1772Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:1772Die Felder entsprechen dem Bash-Tool, mit der Befehlszeichenkette in `command`:
1773 1773
1774| Feld | Typ | Beispiel | Beschreibung |1774| Feld | Typ | Beispiel | Beschreibung |
1775| :------------------ | :------ | :------------------------- | :-------------------------------------------------- |1775| :- | :- | :- | :- |
1776| `command` | string | `"Get-ChildItem -Recurse"` | Der auszuführende PowerShell-Befehl |1776| `command` | string | `"Get-ChildItem -Recurse"` | Der auszuführende PowerShell-Befehl |
1777| `description` | string | `"List files recursively"` | Optionale Beschreibung, was der Befehl tut |1777| `description` | string | `"List files recursively"` | Optionale Beschreibung, was der Befehl tut |
1778| `timeout` | number | `120000` | Optionales Timeout in Millisekunden |1778| `timeout` | number | `120000` | Optionales Timeout in Millisekunden |
1791Erstellt oder überschreibt eine Datei.1791Erstellt oder überschreibt eine Datei.
1792 1792
1793| Feld | Typ | Beispiel | Beschreibung |1793| Feld | Typ | Beispiel | Beschreibung |
1794| :---------- | :----- | :-------------------- | :--------------------------------------- |1794| :- | :- | :- | :- |
1795| `file_path` | string | `"/path/to/file.txt"` | Absoluter Pfad zur zu schreibenden Datei |1795| `file_path` | string | `"/path/to/file.txt"` | Absoluter Pfad zur zu schreibenden Datei |
1796| `content` | string | `"file content"` | Inhalt zum Schreiben in die Datei |1796| `content` | string | `"file content"` | Inhalt zum Schreiben in die Datei |
1797 1797
1802Ersetzt eine Zeichenkette in einer vorhandenen Datei.1802Ersetzt eine Zeichenkette in einer vorhandenen Datei.
1803 1803
1804| Feld | Typ | Beispiel | Beschreibung |1804| Feld | Typ | Beispiel | Beschreibung |
1805| :------------ | :------ | :-------------------- | :---------------------------------------- |1805| :- | :- | :- | :- |
1806| `file_path` | string | `"/path/to/file.txt"` | Absoluter Pfad zur zu bearbeitenden Datei |1806| `file_path` | string | `"/path/to/file.txt"` | Absoluter Pfad zur zu bearbeitenden Datei |
1807| `old_string` | string | `"original text"` | Text zum Suchen und Ersetzen |1807| `old_string` | string | `"original text"` | Text zum Suchen und Ersetzen |
1808| `new_string` | string | `"replacement text"` | Ersatztext |1808| `new_string` | string | `"replacement text"` | Ersatztext |
1815Liest Dateiinhalte.1815Liest Dateiinhalte.
1816 1816
1817| Feld | Typ | Beispiel | Beschreibung |1817| Feld | Typ | Beispiel | Beschreibung |
1818| :---------- | :----- | :-------------------- | :-------------------------------------------- |1818| :- | :- | :- | :- |
1819| `file_path` | string | `"/path/to/file.txt"` | Absoluter Pfad zur zu lesenden Datei |1819| `file_path` | string | `"/path/to/file.txt"` | Absoluter Pfad zur zu lesenden Datei |
1820| `offset` | number | `10` | Optionale Zeilennummer zum Starten des Lesens |1820| `offset` | number | `10` | Optionale Zeilennummer zum Starten des Lesens |
1821| `limit` | number | `50` | Optionale Anzahl der zu lesenden Zeilen |1821| `limit` | number | `50` | Optionale Anzahl der zu lesenden Zeilen |
1827Findet Dateien, die einem Glob-Muster entsprechen.1827Findet Dateien, die einem Glob-Muster entsprechen.
1828 1828
1829| Feld | Typ | Beispiel | Beschreibung |1829| Feld | Typ | Beispiel | Beschreibung |
1830| :-------- | :----- | :--------------- | :--------------------------------------------------------------------------------- |1830| :- | :- | :- | :- |
1831| `pattern` | string | `"**/*.ts"` | Glob-Muster zum Abgleichen von Dateien |1831| `pattern` | string | `"**/*.ts"` | Glob-Muster zum Abgleichen von Dateien |
1832| `path` | string | `"/path/to/dir"` | Optionales Verzeichnis zum Durchsuchen. Standardmäßig aktuelles Arbeitsverzeichnis |1832| `path` | string | `"/path/to/dir"` | Optionales Verzeichnis zum Durchsuchen. Standardmäßig aktuelles Arbeitsverzeichnis |
1833 1833
1838Durchsucht Dateiinhalte mit regulären Ausdrücken.1838Durchsucht Dateiinhalte mit regulären Ausdrücken.
1839 1839
1840| Feld | Typ | Beispiel | Beschreibung |1840| Feld | Typ | Beispiel | Beschreibung |
1841| :------------ | :------ | :--------------- | :--------------------------------------------------------------------------------------- |1841| :- | :- | :- | :- |
1842| `pattern` | string | `"TODO.*fix"` | Muster für reguläre Ausdrücke zum Suchen |1842| `pattern` | string | `"TODO.*fix"` | Muster für reguläre Ausdrücke zum Suchen |
1843| `path` | string | `"/path/to/dir"` | Optionale Datei oder Verzeichnis zum Durchsuchen |1843| `path` | string | `"/path/to/dir"` | Optionale Datei oder Verzeichnis zum Durchsuchen |
1844| `glob` | string | `"*.ts"` | Optionales Glob-Muster zum Filtern von Dateien |1844| `glob` | string | `"*.ts"` | Optionales Glob-Muster zum Filtern von Dateien |
1853Ruft Web-Inhalte ab und verarbeitet sie.1853Ruft Web-Inhalte ab und verarbeitet sie.
1854 1854
1855| Feld | Typ | Beispiel | Beschreibung |1855| Feld | Typ | Beispiel | Beschreibung |
1856| :------- | :----- | :---------------------------- | :----------------------------------------------------------- |1856| :- | :- | :- | :- |
1857| `url` | string | `"https://example.com/api"` | URL zum Abrufen von Inhalten |1857| `url` | string | `"https://example.com/api"` | URL zum Abrufen von Inhalten |
1858| `prompt` | string | `"Extract the API endpoints"` | Eingabeaufforderung zum Ausführen auf dem abgerufenen Inhalt |1858| `prompt` | string | `"Extract the API endpoints"` | Eingabeaufforderung zum Ausführen auf dem abgerufenen Inhalt |
1859 1859
1864Durchsucht das Web.1864Durchsucht das Web.
1865 1865
1866| Feld | Typ | Beispiel | Beschreibung |1866| Feld | Typ | Beispiel | Beschreibung |
1867| :---------------- | :----- | :----------------------------- | :------------------------------------------------------- |1867| :- | :- | :- | :- |
1868| `query` | string | `"react hooks best practices"` | Suchanfrage |1868| `query` | string | `"react hooks best practices"` | Suchanfrage |
1869| `allowed_domains` | array | `["docs.example.com"]` | Optional: Nur Ergebnisse von diesen Domains einschließen |1869| `allowed_domains` | array | `["docs.example.com"]` | Optional: Nur Ergebnisse von diesen Domains einschließen |
1870| `blocked_domains` | array | `["spam.example.com"]` | Optional: Ergebnisse von diesen Domains ausschließen |1870| `blocked_domains` | array | `["spam.example.com"]` | Optional: Ergebnisse von diesen Domains ausschließen |
1876Spawnt einen [Subagenten](/docs/de/sub-agents).1876Spawnt einen [Subagenten](/docs/de/sub-agents).
1877 1877
1878| Feld | Typ | Beispiel | Beschreibung |1878| Feld | Typ | Beispiel | Beschreibung |
1879| :-------------- | :----- | :------------------------- | :------------------------------------------------------ |1879| :- | :- | :- | :- |
1880| `prompt` | string | `"Find all API endpoints"` | Die Aufgabe für den Agenten |1880| `prompt` | string | `"Find all API endpoints"` | Die Aufgabe für den Agenten |
1881| `description` | string | `"Find API endpoints"` | Kurze Beschreibung der Aufgabe |1881| `description` | string | `"Find API endpoints"` | Kurze Beschreibung der Aufgabe |
1882| `subagent_type` | string | `"Explore"` | Typ des zu verwendenden spezialisierten Agenten |1882| `subagent_type` | string | `"Explore"` | Typ des zu verwendenden spezialisierten Agenten |
1885Wenn 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:1885Wenn 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:
1886 1886
1887| Feld | Typ | Beispiel | Beschreibung |1887| Feld | Typ | Beispiel | Beschreibung |
1888| :------------------ | :----- | :---------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1888| :- | :- | :- | :- |
1889| `status` | string | `"completed"` | `"completed"` für Vordergrund-Subagenten, `"async_launched"` für Hintergrund-Subagenten. Ab v2.1.198 laufen Subagenten standardmäßig im Hintergrund, daher erzeugt ein weggelassenes `run_in_background` auch `"async_launched"` |1889| `status` | string | `"completed"` | `"completed"` für Vordergrund-Subagenten, `"async_launched"` für Hintergrund-Subagenten. Ab v2.1.198 laufen Subagenten standardmäßig im Hintergrund, daher erzeugt ein weggelassenes `run_in_background` auch `"async_launched"` |
1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identifikator für den Subagenten-Lauf |1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identifikator für den Subagenten-Lauf |
1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Die finalen Textblöcke des Subagenten oder, für einen Subagenten, dessen Bericht durch `SubagentHandback` geht, eine kurze Notiz über diesen Handback an ihrer Stelle |1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Die finalen Textblöcke des Subagenten oder, für einen Subagenten, dessen Bericht durch `SubagentHandback` geht, eine kurze Notiz über diesen Handback an ihrer Stelle |
1911Stellt dem Benutzer eine bis vier Multiple-Choice-Fragen.1911Stellt dem Benutzer eine bis vier Multiple-Choice-Fragen.
1912 1912
1913| Feld | Typ | Beispiel | Beschreibung |1913| Feld | Typ | Beispiel | Beschreibung |
1914| :---------- | :----- | :----------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1914| :- | :- | :- | :- |
1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Zu stellende Fragen, jeweils mit einer `question` Zeichenkette, kurzem `header`, `options` Array und optionalem `multiSelect` Flag |1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Zu stellende Fragen, jeweils mit einer `question` Zeichenkette, kurzem `header`, `options` Array und optionalem `multiSelect` Flag |
1916| `answers` | object | `{"Which framework?": "React"}` | Optional. Ordnet Fragentext der ausgewählten Optionsbeschriftung zu. Multi-Select-Antworten verbinden Beschriftungen mit Kommas. Claude setzt dieses Feld nicht; liefern Sie es über `updatedInput`, um programmatisch zu antworten |1916| `answers` | object | `{"Which framework?": "React"}` | Optional. Ordnet Fragentext der ausgewählten Optionsbeschriftung zu. Multi-Select-Antworten verbinden Beschriftungen mit Kommas. Claude setzt dieses Feld nicht; liefern Sie es über `updatedInput`, um programmatisch zu antworten |
1917 1917
1922Präsentiert einen Plan und fragt den Benutzer, ihn zu genehmigen, bevor Claude den [Plan-Modus](/docs/de/permission-modes#analyze-before-you-edit-with-plan-mode) verlässt. Claude schreibt den Plan vor dem Aufrufen des Tools in eine Datei auf der Festplatte, daher ist die wörtliche `tool_input` vom Modell typischerweise leer. Claude Code injiziert den Plan-Inhalt und Dateipfad, bevor die Eingabe an Hooks übergeben wird.1922Präsentiert einen Plan und fragt den Benutzer, ihn zu genehmigen, bevor Claude den [Plan-Modus](/docs/de/permission-modes#analyze-before-you-edit-with-plan-mode) verlässt. Claude schreibt den Plan vor dem Aufrufen des Tools in eine Datei auf der Festplatte, daher ist die wörtliche `tool_input` vom Modell typischerweise leer. Claude Code injiziert den Plan-Inhalt und Dateipfad, bevor die Eingabe an Hooks übergeben wird.
1923 1923
1924| Feld | Typ | Beispiel | Beschreibung |1924| Feld | Typ | Beispiel | Beschreibung |
1925| :--------------- | :----- | :------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1925| :- | :- | :- | :- |
1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Plan-Inhalt in Markdown. Injiziert aus der Plan-Datei auf der Festplatte |1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Plan-Inhalt in Markdown. Injiziert aus der Plan-Datei auf der Festplatte |
1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Pfad zur Plan-Datei. Injiziert |1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Pfad zur Plan-Datei. Injiziert |
1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Veraltet. Claude Code akzeptiert das Feld, ignoriert es aber. Vor v2.1.205 trug es eingabeaufforderungsbasierte Berechtigungen, die Claude anforderte, um den Plan zu implementieren |1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Veraltet. Claude Code akzeptiert das Feld, ignoriert es aber. Vor v2.1.205 trug es eingabeaufforderungsbasierte Berechtigungen, die Claude anforderte, um den Plan zu implementieren |
1936`PreToolUse` Hooks können steuern, ob ein Tool-Aufruf fortgesetzt wird. Im Gegensatz zu anderen Hooks, die ein Top-Level-`decision` Feld verwenden, gibt PreToolUse seine Entscheidung in einem `hookSpecificOutput` Objekt zurück. Dies gibt ihm reichere Kontrolle: vier Ergebnisse (erlauben, verweigern, fragen oder aufschieben) plus die Möglichkeit, Tool-Eingabe vor der Ausführung zu ändern.1936`PreToolUse` Hooks können steuern, ob ein Tool-Aufruf fortgesetzt wird. Im Gegensatz zu anderen Hooks, die ein Top-Level-`decision` Feld verwenden, gibt PreToolUse seine Entscheidung in einem `hookSpecificOutput` Objekt zurück. Dies gibt ihm reichere Kontrolle: vier Ergebnisse (erlauben, verweigern, fragen oder aufschieben) plus die Möglichkeit, Tool-Eingabe vor der Ausführung zu ändern.
1937 1937
1938| Feld | Beschreibung |1938| Feld | Beschreibung |
1939| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1939| :- | :- |
1940| `permissionDecision` | `"allow"` überspringt die Berechtigungsaufforderung, außer für die [Aktionen, die kein Modus automatisch genehmigt](/docs/de/permission-modes#actions-no-mode-auto-approves) und für `AskUserQuestion` und `ExitPlanMode`, die [`updatedInput` gepaart damit benötigen](#allow-with-updatedinput). `"deny"` verhindert den Tool-Aufruf. `"ask"` fordert den Benutzer zur Bestätigung auf. `"defer"` beendet sich elegant, damit das Tool später fortgesetzt werden kann. [Ablehnungs- und Frageregel](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, unabhängig davon, was der Hook zurückgibt |1940| `permissionDecision` | `"allow"` überspringt die Berechtigungsaufforderung, außer für die [Aktionen, die kein Modus automatisch genehmigt](/docs/de/permission-modes#actions-no-mode-auto-approves) und für `AskUserQuestion` und `ExitPlanMode`, die [`updatedInput` gepaart damit benötigen](#allow-with-updatedinput). `"deny"` verhindert den Tool-Aufruf. `"ask"` fordert den Benutzer zur Bestätigung auf. `"defer"` beendet sich elegant, damit das Tool später fortgesetzt werden kann. [Ablehnungs- und Frageregel](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, unabhängig davon, was der Hook zurückgibt |
1941| `permissionDecisionReason` | Für `"allow"` und `"ask"`, dem Benutzer angezeigt, aber nicht Claude. Für `"deny"`, Claude angezeigt. Für `"defer"`, ignoriert |1941| `permissionDecisionReason` | Für `"allow"` und `"ask"`, dem Benutzer angezeigt, aber nicht Claude. Für `"deny"`, Claude angezeigt. Für `"defer"`, ignoriert |
1942| `updatedInput` | Ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher schließen Sie unveränderte Felder neben geänderten ein. Claude Code wertet Berechtigungsregeln und die [Auto-Background-Berechtigung](/docs/de/tools-reference#background-commands) eines Bash-Befehls gegen die Eingabe aus, die Ihr Hook zurückgibt, nicht die Eingabe, die Claude gesendet hat. Kombinieren Sie mit `"allow"`, um automatisch zu genehmigen, oder mit `"ask"`, um die geänderte Eingabe dem Benutzer zu zeigen. Für `"defer"`, ignoriert |1942| `updatedInput` | Ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher schließen Sie unveränderte Felder neben geänderten ein. Claude Code wertet Berechtigungsregeln und die [Auto-Background-Berechtigung](/docs/de/tools-reference#background-commands) eines Bash-Befehls gegen die Eingabe aus, die Ihr Hook zurückgibt, nicht die Eingabe, die Claude gesendet hat. Kombinieren Sie mit `"allow"`, um automatisch zu genehmigen, oder mit `"ask"`, um die geänderte Eingabe dem Benutzer zu zeigen. Für `"defer"`, ignoriert |
2069`PermissionRequest` Hooks können Berechtigungsanfragen erlauben oder verweigern. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript ein `decision` Objekt mit diesen ereignisspezifischen Feldern zurückgeben:2069`PermissionRequest` Hooks können Berechtigungsanfragen erlauben oder verweigern. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript ein `decision` Objekt mit diesen ereignisspezifischen Feldern zurückgeben:
2070 2070
2071| Feld | Beschreibung |2071| Feld | Beschreibung |
2072| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2072| :- | :- |
2073| `behavior` | `"allow"` gewährt die Berechtigung, `"deny"` verweigert sie. [Ablehnungs- und Frageregel](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, daher überschreibt ein Hook, der `"allow"` zurückgibt, keine übereinstimmende Ablehnungsregel |2073| `behavior` | `"allow"` gewährt die Berechtigung, `"deny"` verweigert sie. [Ablehnungs- und Frageregel](/docs/de/permissions#manage-permissions) werden immer noch ausgewertet, daher überschreibt ein Hook, der `"allow"` zurückgibt, keine übereinstimmende Ablehnungsregel |
2074| `updatedInput` | Nur für `"allow"`: ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher schließen Sie unveränderte Felder neben geänderten ein. Die geänderte Eingabe wird erneut gegen Ablehnungs- und Frageregel ausgewertet |2074| `updatedInput` | Nur für `"allow"`: ändert die Tool-Eingabeparameter vor der Ausführung. Ersetzt das gesamte Eingabeobjekt, daher schließen Sie unveränderte Felder neben geänderten ein. Die geänderte Eingabe wird erneut gegen Ablehnungs- und Frageregel ausgewertet |
2075| `updatedPermissions` | Nur für `"allow"`: Array von [Berechtigungsaktualisierungseinträgen](#permission-update-entries) zum Anwenden, wie das Hinzufügen einer Erlaubnisregel oder das Ändern des Sitzungsberechtigungsmodus |2075| `updatedPermissions` | Nur für `"allow"`: Array von [Berechtigungsaktualisierungseinträgen](#permission-update-entries) zum Anwenden, wie das Hinzufügen einer Erlaubnisregel oder das Ändern des Sitzungsberechtigungsmodus |
2099Das `updatedPermissions` Ausgabefeld und das [`permission_suggestions` Eingabefeld](#permissionrequest-input) verwenden beide das gleiche Array von Einträgen. Jeder Eintrag hat einen `type`, der seine anderen Felder bestimmt, und ein `destination`, das steuert, wo die Änderung geschrieben wird.2099Das `updatedPermissions` Ausgabefeld und das [`permission_suggestions` Eingabefeld](#permissionrequest-input) verwenden beide das gleiche Array von Einträgen. Jeder Eintrag hat einen `type`, der seine anderen Felder bestimmt, und ein `destination`, das steuert, wo die Änderung geschrieben wird.
2100 2100
2101| `type` | Felder | Effekt |2101| `type` | Felder | Effekt |
2102| :------------------ | :--------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2102| :- | :- | :- |
2103| `addRules` | `rules`, `behavior`, `destination` | Fügt Berechtigungsregeln hinzu. `rules` ist ein Array von `{toolName, ruleContent?}` Objekten. Weglassen `ruleContent`, um das ganze Tool abzugleichen. `behavior` ist `"allow"`, `"deny"` oder `"ask"` |2103| `addRules` | `rules`, `behavior`, `destination` | Fügt Berechtigungsregeln hinzu. `rules` ist ein Array von `{toolName, ruleContent?}` Objekten. Weglassen `ruleContent`, um das ganze Tool abzugleichen. `behavior` ist `"allow"`, `"deny"` oder `"ask"` |
2104| `replaceRules` | `rules`, `behavior`, `destination` | Ersetzt alle Regeln des gegebenen `behavior` am `destination` mit den bereitgestellten `rules` |2104| `replaceRules` | `rules`, `behavior`, `destination` | Ersetzt alle Regeln des gegebenen `behavior` am `destination` mit den bereitgestellten `rules` |
2105| `removeRules` | `rules`, `behavior`, `destination` | Entfernt übereinstimmende Regeln des gegebenen `behavior` |2105| `removeRules` | `rules`, `behavior`, `destination` | Entfernt übereinstimmende Regeln des gegebenen `behavior` |
2116Das `destination` Feld auf jedem Eintrag bestimmt, ob die Änderung im Speicher bleibt oder in einer Einstellungsdatei beibehalten wird.2116Das `destination` Feld auf jedem Eintrag bestimmt, ob die Änderung im Speicher bleibt oder in einer Einstellungsdatei beibehalten wird.
2117 2117
2118| `destination` | Schreibt zu |2118| `destination` | Schreibt zu |
2119| :---------------- | :------------------------------------------------- |2119| :- | :- |
2120| `session` | Nur im Speicher, verworfen, wenn die Sitzung endet |2120| `session` | Nur im Speicher, verworfen, wenn die Sitzung endet |
2121| `localSettings` | `.claude/settings.local.json` |2121| `localSettings` | `.claude/settings.local.json` |
2122| `projectSettings` | `.claude/settings.json` |2122| `projectSettings` | `.claude/settings.json` |
2165```2165```
2166 2166
2167| Feld | Beschreibung |2167| Feld | Beschreibung |
2168| :------------ | :----------------------------------------------------------------------------------------------------------------------------------------- |2168| :- | :- |
2169| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |2169| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |
2170 2170
2171<h4 id="posttooluse-decision-control">2171<h4 id="posttooluse-decision-control">
2175`PostToolUse` Hooks können Claude nach der Tool-Ausführung Feedback geben. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:2175`PostToolUse` Hooks können Claude nach der Tool-Ausführung Feedback geben. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:
2176 2176
2177| Feld | Beschreibung |2177| Feld | Beschreibung |
2178| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2178| :- | :- |
2179| `decision` | `"block"` fügt den `reason` neben dem Tool-Ergebnis hinzu. Claude sieht immer noch die ursprüngliche Ausgabe; um sie zu ersetzen, verwenden Sie `updatedToolOutput` |2179| `decision` | `"block"` fügt den `reason` neben dem Tool-Ergebnis hinzu. Claude sieht immer noch die ursprüngliche Ausgabe; um sie zu ersetzen, verwenden Sie `updatedToolOutput` |
2180| `reason` | Erklärung, die Claude angezeigt wird, wenn `decision` `"block"` ist |2180| `reason` | Erklärung, die Claude angezeigt wird, wenn `decision` `"block"` ist |
2181| `additionalContext` | String, der zu Claudes Kontext neben dem Tool-Ergebnis hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |2181| `additionalContext` | String, der zu Claudes Kontext neben dem Tool-Ergebnis hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
2277```2277```
2278 2278
2279| Feld | Beschreibung |2279| Feld | Beschreibung |
2280| :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2280| :- | :- |
2281| `error` | Zeichenkette, die beschreibt, was schief gelaufen ist. Das Format hängt vom Tool ab, das fehlgeschlagen ist |2281| `error` | Zeichenkette, die beschreibt, was schief gelaufen ist. Das Format hängt vom Tool ab, das fehlgeschlagen ist |
2282| `is_interrupt` | Optionaler Boolean. True, wenn der Fehler Claude Code als Abbruch erreichte, anstatt als Fehler, den das Tool meldete. Das Abbrechen eines laufenden Tools führt nicht zu diesem Hook; das Tool-Ergebnis trägt stattdessen die Abbruchmeldung |2282| `is_interrupt` | Optionaler Boolean. True, wenn der Fehler Claude Code als Abbruch erreichte, anstatt als Fehler, den das Tool meldete. Das Abbrechen eines laufenden Tools führt nicht zu diesem Hook; das Tool-Ergebnis trägt stattdessen die Abbruchmeldung |
2283| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |2283| `duration_ms` | Optional. Tool-Ausführungszeit in Millisekunden. Schließt Zeit aus, die in Berechtigungsaufforderungen und PreToolUse-Hooks verbracht wird |
2295`PostToolUseFailure` Hooks können Claude nach einem Tool-Fehler Kontext geben. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:2295`PostToolUseFailure` Hooks können Claude nach einem Tool-Fehler Kontext geben. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:
2296 2296
2297| Feld | Beschreibung |2297| Feld | Beschreibung |
2298| :------------------ | :------------------------------------------------------------------------------------------------------------------------------- |2298| :- | :- |
2299| `additionalContext` | String, der zu Claudes Kontext neben dem Fehler hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |2299| `additionalContext` | String, der zu Claudes Kontext neben dem Fehler hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
2300 2300
2301```json theme={null}2301```json theme={null}
2356`PostToolBatch` Hooks können Kontext für Claude einfügen. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:2356`PostToolBatch` Hooks können Kontext für Claude einfügen. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:
2357 2357
2358| Feld | Beschreibung |2358| Feld | Beschreibung |
2359| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2359| :- | :- |
2360| `additionalContext` | Kontext-Zeichenkette, die einmal vor dem nächsten Modell-Aufruf eingefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) für Bereitstellungsdetails, was Sie darin einfügen sollten und wie fortgesetzte Sitzungen mit vergangenen Werten umgehen |2360| `additionalContext` | Kontext-Zeichenkette, die einmal vor dem nächsten Modell-Aufruf eingefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) für Bereitstellungsdetails, was Sie darin einfügen sollten und wie fortgesetzte Sitzungen mit vergangenen Werten umgehen |
2361 2361
2362```json theme={null}2362```json theme={null}
2402```2402```
2403 2403
2404| Feld | Beschreibung |2404| Feld | Beschreibung |
2405| :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2405| :- | :- |
2406| `reason` | Der Verweigerungsgrund. Für ein Klassifizierer-Urteil benennt es in den meisten Sitzungen die übereinstimmende Regel in eckigen Klammern, wie `[Data Exfiltration]`; siehe [Verweigerungen überprüfen](/docs/de/auto-mode-config#review-denials) für die anderen Formen. Für eine [Verweigerung ohne Urteil](#permissiondenied-decision-control) beginnt sie mit `Auto mode could not evaluate this action and is blocking it for safety`. Für eine Verweigerung, weil das Klassifizierer-Modell nicht verfügbar war, ist es der feste Text `Classifier unavailable` |2406| `reason` | Der Verweigerungsgrund. Für ein Klassifizierer-Urteil benennt es in den meisten Sitzungen die übereinstimmende Regel in eckigen Klammern, wie `[Data Exfiltration]`; siehe [Verweigerungen überprüfen](/docs/de/auto-mode-config#review-denials) für die anderen Formen. Für eine [Verweigerung ohne Urteil](#permissiondenied-decision-control) beginnt sie mit `Auto mode could not evaluate this action and is blocking it for safety`. Für eine Verweigerung, weil das Klassifizierer-Modell nicht verfügbar war, ist es der feste Text `Classifier unavailable` |
2407 2407
2408<h4 id="permissiondenied-decision-control">2408<h4 id="permissiondenied-decision-control">
2433Sie 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.2433Sie 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.
2434 2434
2435| Matcher | Wann wird es ausgelöst |2435| Matcher | Wann wird es ausgelöst |
2436| :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |2436| :- | :- |
2437| `permission_prompt` | Claude benötigt Ihre Genehmigung für einen Tool-Aufruf oder eine Netzwerkanfrage eines Sandbox-Befehls, und die Aufforderung hat etwa sechs Sekunden gewartet |2437| `permission_prompt` | Claude benötigt Ihre Genehmigung für einen Tool-Aufruf oder eine Netzwerkanfrage eines Sandbox-Befehls, und die Aufforderung hat etwa sechs Sekunden gewartet |
2438| `idle_prompt` | Claude hat vor etwa 60 Sekunden geantwortet und Sie haben seitdem nicht eingegeben |2438| `idle_prompt` | Claude hat vor etwa 60 Sekunden geantwortet und Sie haben seitdem nicht eingegeben |
2439| `auth_success` | Authentifizierung ist abgeschlossen |2439| `auth_success` | Authentifizierung ist abgeschlossen |
2550SubagentStart-Hooks können die Erstellung von Subagenten nicht blockieren, aber sie können Kontext in den Subagenten einfügen. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:2550SubagentStart-Hooks können die Erstellung von Subagenten nicht blockieren, aber sie können Kontext in den Subagenten einfügen. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:
2551 2551
2552| Feld | Beschreibung |2552| Feld | Beschreibung |
2553| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2553| :- | :- |
2554| `additionalContext` | String, der zu Claudes Kontext am Anfang des Gesprächs des Subagenten hinzugefügt wird, vor seiner ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |2554| `additionalContext` | String, der zu Claudes Kontext am Anfang des Gesprächs des Subagenten hinzugefügt wird, vor seiner ersten Eingabeaufforderung. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
2555 2555
2556```json theme={null}2556```json theme={null}
2632```2632```
2633 2633
2634| Feld | Beschreibung |2634| Feld | Beschreibung |
2635| :----------------- | :------------------------------------------------------------------------------------ |2635| :- | :- |
2636| `task_id` | Identifikator der zu erstellenden Aufgabe |2636| `task_id` | Identifikator der zu erstellenden Aufgabe |
2637| `task_subject` | Titel der Aufgabe |2637| `task_subject` | Titel der Aufgabe |
2638| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |2638| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |
2693```2693```
2694 2694
2695| Feld | Beschreibung |2695| Feld | Beschreibung |
2696| :----------------- | :------------------------------------------------------------------------------------ |2696| :- | :- |
2697| `task_id` | Identifikator der zu abschließenden Aufgabe |2697| `task_id` | Identifikator der zu abschließenden Aufgabe |
2698| `task_subject` | Titel der Aufgabe |2698| `task_subject` | Titel der Aufgabe |
2699| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |2699| `task_description` | Detaillierte Beschreibung der Aufgabe. Kann fehlen |
2748Jeder Eintrag in `background_tasks` beschreibt eine laufende Aufgabe und verwendet diese Felder:2748Jeder Eintrag in `background_tasks` beschreibt eine laufende Aufgabe und verwendet diese Felder:
2749 2749
2750| Feld | Beschreibung |2750| Feld | Beschreibung |
2751| :------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2751| :- | :- |
2752| `id` | Aufgaben-Identifikator |2752| `id` | Aufgaben-Identifikator |
2753| `type` | Freundliche Aufgaben-Typ-Beschriftung wie `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` oder `MCP task`. Jede Beschriftung identifiziert, welche Claude Code Funktion die Aufgabe erstellt hat. Fällt auf den rohen Diskriminanten für unbekannte Typen zurück |2753| `type` | Freundliche Aufgaben-Typ-Beschriftung wie `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session` oder `MCP task`. Jede Beschriftung identifiziert, welche Claude Code Funktion die Aufgabe erstellt hat. Fällt auf den rohen Diskriminanten für unbekannte Typen zurück |
2754| `status` | Aktueller Aufgaben-Status |2754| `status` | Aktueller Aufgaben-Status |
2762Jeder Eintrag in `session_crons` beschreibt einen Sitzungs-scoped geplanten Aufweck, stammt von `CronCreate`, `ScheduleWakeup` und `/loop`:2762Jeder Eintrag in `session_crons` beschreibt einen Sitzungs-scoped geplanten Aufweck, stammt von `CronCreate`, `ScheduleWakeup` und `/loop`:
2763 2763
2764| Feld | Beschreibung |2764| Feld | Beschreibung |
2765| :---------- | :--------------------------------------------------------------------------------------------------------------------------------------- |2765| :- | :- |
2766| `id` | Cron-Aufgaben-Identifikator |2766| `id` | Cron-Aufgaben-Identifikator |
2767| `schedule` | Cron-Ausdruck, z. B. `0 9 * * 1-5` |2767| `schedule` | Cron-Ausdruck, z. B. `0 9 * * 1-5` |
2768| `recurring` | `false` für einmalige Aufwecke, deren Zeitplan eine einzelne Feuerzeit kodiert, `true` für Aufgaben, die bei jedem Treffer erneut feuern |2768| `recurring` | `false` für einmalige Aufwecke, deren Zeitplan eine einzelne Feuerzeit kodiert, `true` für Aufgaben, die bei jedem Treffer erneut feuern |
2806`Stop` und `SubagentStop` Hooks können steuern, ob Claude fortgesetzt wird. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:2806`Stop` und `SubagentStop` Hooks können steuern, ob Claude fortgesetzt wird. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, kann Ihr Hook-Skript diese ereignisspezifischen Felder zurückgeben:
2807 2807
2808| Feld | Beschreibung |2808| Feld | Beschreibung |
2809| :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2809| :- | :- |
2810| `decision` | `"block"` verhindert, dass Claude stoppt. Weglassen, um Claude zu stoppen |2810| `decision` | `"block"` verhindert, dass Claude stoppt. Weglassen, um Claude zu stoppen |
2811| `reason` | Erforderlich, wenn `decision` `"block"` ist. Sagt Claude, warum es fortgesetzt werden sollte |2811| `reason` | Erforderlich, wenn `decision` `"block"` ist. Sagt Claude, warum es fortgesetzt werden sollte |
2812| `hookSpecificOutput.additionalContext` | Fehler-freies Feedback für Claude. Das Gespräch wird fortgesetzt, damit Claude darauf handeln kann, aber im Gegensatz zu `decision: "block"` wird es im Transkript als Hook-Feedback statt als Hook-Fehler angezeigt |2812| `hookSpecificOutput.additionalContext` | Fehler-freies Feedback für Claude. Das Gespräch wird fortgesetzt, damit Claude darauf handeln kann, aber im Gegensatz zu `decision: "block"` wird es im Transkript als Hook-Feedback statt als Hook-Fehler angezeigt |
2844Zusä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.2844Zusä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.
2845 2845
2846| Feld | Beschreibung |2846| Feld | Beschreibung |
2847| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |2847| :- | :- |
2848| `error` | Fehlertyp: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` oder `unknown` |2848| `error` | Fehlertyp: `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` oder `unknown` |
2849| `error_details` | Zusätzliche Details zum Fehler, wenn verfügbar |2849| `error_details` | Zusätzliche Details zum Fehler, wenn verfügbar |
2850| `last_assistant_message` | Der gerenderte Fehlertext, der im Gespräch angezeigt wird. Im Gegensatz zu `Stop` und `SubagentStop`, wo dieses Feld Claudes Gesprächsausgabe enthält, enthält es für `StopFailure` die API-Fehler-Zeichenkette selbst, wie `"API Error: Rate limit reached"` |2850| `last_assistant_message` | Der gerenderte Fehlertext, der im Gespräch angezeigt wird. Im Gegensatz zu `Stop` und `SubagentStop`, wo dieses Feld Claudes Gesprächsausgabe enthält, enthält es für `StopFailure` die API-Fehler-Zeichenkette selbst, wie `"API Error: Rate limit reached"` |
2890```2890```
2891 2891
2892| Feld | Beschreibung |2892| Feld | Beschreibung |
2893| :-------------- | :------------------------------------------------------------------------------------ |2893| :- | :- |
2894| `teammate_name` | Name des Teamkollegen, der untätig wird |2894| `teammate_name` | Name des Teamkollegen, der untätig wird |
2895| `team_name` | Veraltet. Sitzungs-abgeleiteter Team-Name; wird in einer zukünftigen Version entfernt |2895| `team_name` | Veraltet. Sitzungs-abgeleiteter Team-Name; wird in einer zukünftigen Version entfernt |
2896 2896
2927Der Matcher filtert auf die Konfigurationsquelle:2927Der Matcher filtert auf die Konfigurationsquelle:
2928 2928
2929| Matcher | Wann wird es ausgelöst |2929| Matcher | Wann wird es ausgelöst |
2930| :----------------- | :--------------------------------------------------------------------------- |2930| :- | :- |
2931| `user_settings` | `~/.claude/settings.json` ändert sich |2931| `user_settings` | `~/.claude/settings.json` ändert sich |
2932| `project_settings` | `.claude/settings.json` ändert sich |2932| `project_settings` | `.claude/settings.json` ändert sich |
2933| `local_settings` | `.claude/settings.local.json` ändert sich |2933| `local_settings` | `.claude/settings.local.json` ändert sich |
2978ConfigChange-Hooks können Konfigurationsänderungen blockieren, damit sie nicht wirksam werden. Verwenden Sie Exit-Code 2 oder ein JSON `decision`, um die Änderung zu verhindern. Wenn blockiert, werden die neuen Einstellungen nicht auf die laufende Sitzung angewendet.2978ConfigChange-Hooks können Konfigurationsänderungen blockieren, damit sie nicht wirksam werden. Verwenden Sie Exit-Code 2 oder ein JSON `decision`, um die Änderung zu verhindern. Wenn blockiert, werden die neuen Einstellungen nicht auf die laufende Sitzung angewendet.
2979 2979
2980| Feld | Beschreibung |2980| Feld | Beschreibung |
2981| :--------- | :------------------------------------------------------------------------------------------------------------ |2981| :- | :- |
2982| `decision` | `"block"` verhindert, dass die Konfigurationsänderung angewendet wird. Weglassen, um die Änderung zu erlauben |2982| `decision` | `"block"` verhindert, dass die Konfigurationsänderung angewendet wird. Weglassen, um die Änderung zu erlauben |
2983| `reason` | Akzeptiert, aber nie angezeigt |2983| `reason` | Akzeptiert, aber nie angezeigt |
2984 2984
3027Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können CwdChanged-Hooks `watchPaths` zurückgeben, um dynamisch zu setzen, welche Dateipfade [FileChanged](#filechanged) überwacht:3027Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können CwdChanged-Hooks `watchPaths` zurückgeben, um dynamisch zu setzen, welche Dateipfade [FileChanged](#filechanged) überwacht:
3028 3028
3029| Feld | Beschreibung |3029| Feld | Beschreibung |
3030| :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |3030| :- | :- |
3031| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Das Zurückgeben eines leeren Arrays löscht die dynamische Liste, was typisch ist, wenn ein neues Verzeichnis betreten wird |3031| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Das Zurückgeben eines leeren Arrays löscht die dynamische Liste, was typisch ist, wenn ein neues Verzeichnis betreten wird |
3032 3032
3033CwdChanged-Hooks haben keine Entscheidungskontrolle. Sie können den Verzeichniswechsel nicht blockieren.3033CwdChanged-Hooks haben keine Entscheidungskontrolle. Sie können den Verzeichniswechsel nicht blockieren.
3053Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:3053Der Matcher filtert, wie das Verzeichnis hinzugefügt wurde:
3054 3054
3055| Matcher | Wann wird es ausgelöst |3055| Matcher | Wann wird es ausgelöst |
3056| :------------------- | :-------------------------------------------------------------------------------------- |3056| :- | :- |
3057| `slash_command` | Sie fügen ein Verzeichnis mit `/add-dir` hinzu |3057| `slash_command` | Sie fügen ein Verzeichnis mit `/add-dir` hinzu |
3058| `register_repo_root` | Ein SDK-Client fügt ein Verzeichnis mit der `register_repo_root` Kontroll-Anfrage hinzu |3058| `register_repo_root` | Ein SDK-Client fügt ein Verzeichnis mit der `register_repo_root` Kontroll-Anfrage hinzu |
3059 3059
3064Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten DirectoryAdded-Hooks `directory` und `source`.3064Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten DirectoryAdded-Hooks `directory` und `source`.
3065 3065
3066| Feld | Beschreibung |3066| Feld | Beschreibung |
3067| :---------- | :------------------------------------------------------------------------------------------------------------------------------- |3067| :- | :- |
3068| `directory` | Absoluter Pfad des hinzugefügten Verzeichnisses |3068| `directory` | Absoluter Pfad des hinzugefügten Verzeichnisses |
3069| `source` | Wie das Verzeichnis hinzugefügt wurde, `"slash_command"` für `/add-dir` oder `"register_repo_root"` für die SDK-Kontroll-Anfrage |3069| `source` | Wie das Verzeichnis hinzugefügt wurde, `"slash_command"` für `/add-dir` oder `"register_repo_root"` für die SDK-Kontroll-Anfrage |
3070 3070
3138Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten FileChanged-Hooks `file_path` und `event`.3138Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten FileChanged-Hooks `file_path` und `event`.
3139 3139
3140| Feld | Beschreibung |3140| Feld | Beschreibung |
3141| :---------- | :------------------------------------------------------------------------------------------------------------------------------- |3141| :- | :- |
3142| `file_path` | Absoluter Pfad zur Datei, die sich geändert hat |3142| `file_path` | Absoluter Pfad zur Datei, die sich geändert hat |
3143| `event` | Was passiert ist: `"change"` für eine geänderte Datei, `"add"` für eine erstellte Datei oder `"unlink"` für eine gelöschte Datei |3143| `event` | Was passiert ist: `"change"` für eine geänderte Datei, `"add"` für eine erstellte Datei oder `"unlink"` für eine gelöschte Datei |
3144 3144
3160Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können FileChanged-Hooks `watchPaths` zurückgeben, um dynamisch zu aktualisieren, welche Dateipfade überwacht werden:3160Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können FileChanged-Hooks `watchPaths` zurückgeben, um dynamisch zu aktualisieren, welche Dateipfade überwacht werden:
3161 3161
3162| Feld | Beschreibung |3162| Feld | Beschreibung |
3163| :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3163| :- | :- |
3164| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Verwenden Sie dies, wenn Ihr Hook-Skript basierend auf der geänderten Datei zusätzliche Dateien zum Überwachen entdeckt |3164| `watchPaths` | Array von absoluten Pfaden. Ersetzt die aktuelle dynamische Überwachungsliste. Pfade aus Ihrer `matcher` Konfiguration werden immer überwacht. Verwenden Sie dies, wenn Ihr Hook-Skript basierend auf der geänderten Datei zusätzliche Dateien zum Überwachen entdeckt |
3165 3165
3166FileChanged-Hooks haben keine Entscheidungskontrolle. Sie können die Dateiänderung nicht blockieren.3166FileChanged-Hooks haben keine Entscheidungskontrolle. Sie können die Dateiänderung nicht blockieren.
3296Der Matcher-Wert gibt an, ob die Komprimierung manuell oder automatisch ausgelöst wurde:3296Der Matcher-Wert gibt an, ob die Komprimierung manuell oder automatisch ausgelöst wurde:
3297 3297
3298| Matcher | Wann wird es ausgelöst |3298| Matcher | Wann wird es ausgelöst |
3299| :------- | :----------------------------------------------------------------------------------------------------------------------------- |3299| :- | :- |
3300| `manual` | `/compact` |3300| `manual` | `/compact` |
3301| `auto` | Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |3301| `auto` | Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3302 3302
3332Die gleichen Matcher-Werte gelten wie für `PreCompact`:3332Die gleichen Matcher-Werte gelten wie für `PreCompact`:
3333 3333
3334| Matcher | Wann wird es ausgelöst |3334| Matcher | Wann wird es ausgelöst |
3335| :------- | :---------------------------------------------------------------------------------------------------------------------------------- |3335| :- | :- |
3336| `manual` | Nach `/compact` |3336| `manual` | Nach `/compact` |
3337| `auto` | Nach Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |3337| `auto` | Nach Auto-Komprimierung, wenn das Gespräch das [Auto-Komprimierungs-Fenster](/docs/de/model-config#set-the-auto-compact-window) erreicht |
3338 3338
3450Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PreModelSwitch-Hooks die Felder in dieser Tabelle. Die letzten fünf beschreiben, was das Erneut-Senden des Gesprächs zum neuen Modell kostet, daher kann ein Hook diese Zahl zeigen, bevor der Wechsel passiert.3450Zusätzlich zu den [allgemeinen Eingabefeldern](#common-input-fields) erhalten PreModelSwitch-Hooks die Felder in dieser Tabelle. Die letzten fünf beschreiben, was das Erneut-Senden des Gesprächs zum neuen Modell kostet, daher kann ein Hook diese Zahl zeigen, bevor der Wechsel passiert.
3451 3451
3452| Feld | Typ | Beschreibung |3452| Feld | Typ | Beschreibung |
3453| :-------------------------- | :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3453| :- | :- | :- |
3454| `from_model` | string | Modell-ID, zu der der Wechsel wechselt |3454| `from_model` | string | Modell-ID, zu der der Wechsel wechselt |
3455| `to_model` | string | Modell-ID, zu der der Wechsel wechselt. Der Matcher vergleicht gegen den kanonischen Namen dieses Modells |3455| `to_model` | string | Modell-ID, zu der der Wechsel wechselt. Der Matcher vergleicht gegen den kanonischen Namen dieses Modells |
3456| `requested_model` | string oder `null` | Das Modell, das die Anfrage benannt hat: ein Alias wie `opus`, eine vollständige Modell-ID oder `null`, wenn die Anfrage für das Standard-Modell war |3456| `requested_model` | string oder `null` | Das Modell, das die Anfrage benannt hat: ein Alias wie `opus`, eine vollständige Modell-ID oder `null`, wenn die Anfrage für das Standard-Modell war |
3490Für feinere Kontrolle geben Sie `permissionDecision` und `permissionDecisionReason` in einem `hookSpecificOutput` Objekt zurück, wie auf [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` akzeptiert `"allow"`, `"deny"` und `"ask"`. Es akzeptiert nicht `"defer"`, `updatedInput` oder `additionalContext`. Die Tabelle unten beschreibt beide Felder:3490Für feinere Kontrolle geben Sie `permissionDecision` und `permissionDecisionReason` in einem `hookSpecificOutput` Objekt zurück, wie auf [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` akzeptiert `"allow"`, `"deny"` und `"ask"`. Es akzeptiert nicht `"defer"`, `updatedInput` oder `additionalContext`. Die Tabelle unten beschreibt beide Felder:
3491 3491
3492| Feld | Beschreibung |3492| Feld | Beschreibung |
3493| :------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3493| :- | :- |
3494| `permissionDecision` | `"allow"` fährt fort und überspringt die [Bestätigung, die Claude Code zeigt, während der Prompt-Cache warm ist](/docs/de/prompt-caching#switching-models). `"deny"` bricht den Wechsel ab. `"ask"` fordert den Benutzer zur Bestätigung auf |3494| `permissionDecision` | `"allow"` fährt fort und überspringt die [Bestätigung, die Claude Code zeigt, während der Prompt-Cache warm ist](/docs/de/prompt-caching#switching-models). `"deny"` bricht den Wechsel ab. `"ask"` fordert den Benutzer zur Bestätigung auf |
3495| `permissionDecisionReason` | Für `"deny"`, dem Benutzer als Grund angezeigt, warum der Wechsel blockiert wurde, oder als Fehler für eine `set_model` Anfrage zurückgegeben. Für `"ask"`, in der Bestätigungs-Aufforderung angezeigt. Ignoriert für `"allow"` |3495| `permissionDecisionReason` | Für `"deny"`, dem Benutzer als Grund angezeigt, warum der Wechsel blockiert wurde, oder als Fehler für eine `set_model` Anfrage zurückgegeben. Für `"ask"`, in der Bestätigungs-Aufforderung angezeigt. Ignoriert für `"allow"` |
3496 3496
3570Claude Code nimmt Ihren Hook-[Klartext-stdout](#exit-code-0) bei Beendigung mit 0 oder `additionalContext` aus JSON-Ausgabe und liefert es an Claude mit der nächsten Anfrage nach dem Wechsel. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:3570Claude Code nimmt Ihren Hook-[Klartext-stdout](#exit-code-0) bei Beendigung mit 0 oder `additionalContext` aus JSON-Ausgabe und liefert es an Claude mit der nächsten Anfrage nach dem Wechsel. Zusätzlich zu den [JSON-Ausgabefeldern](#json-output), die für alle Hooks verfügbar sind, können Sie zurückgeben:
3571 3571
3572| Feld | Beschreibung |3572| Feld | Beschreibung |
3573| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------- |3573| :- | :- |
3574| `additionalContext` | String, der zu Claudes Kontext mit der nächsten Anfrage hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |3574| `additionalContext` | String, der zu Claudes Kontext mit der nächsten Anfrage hinzugefügt wird. Siehe [Kontext für Claude hinzufügen](#add-context-for-claude) |
3575 3575
3576Wenn der Hook nicht innerhalb von fünf Sekunden nach dem Senden der nächsten Eingabeaufforderung fertig ist, sendet Claude Code diese Anfrage ohne die Ausgabe und hängt sie stattdessen an die folgende Anfrage an. Wenn sich das Modell mehrmals ändert, bevor die nächste Anfrage erfolgt, liefert Claude Code nur die Ausgabe für den letzten Wechsel zum Ziel-Modell.3576Wenn der Hook nicht innerhalb von fünf Sekunden nach dem Senden der nächsten Eingabeaufforderung fertig ist, sendet Claude Code diese Anfrage ohne die Ausgabe und hängt sie stattdessen an die folgende Anfrage an. Wenn sich das Modell mehrmals ändert, bevor die nächste Anfrage erfolgt, liefert Claude Code nur die Ausgabe für den letzten Wechsel zum Ziel-Modell.
3584Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:3584Das `reason` Feld in der Hook-Eingabe gibt an, warum die Sitzung endete:
3585 3585
3586| Grund | Beschreibung |3586| Grund | Beschreibung |
3587| :---------------------------- | :------------------------------------------------------------------------------------------------ |3587| :- | :- |
3588| `clear` | Sitzung mit `/clear` Befehl gelöscht |3588| `clear` | Sitzung mit `/clear` Befehl gelöscht |
3589| `resume` | Sitzung mit interaktivem `/resume` gewechselt |3589| `resume` | Sitzung mit interaktivem `/resume` gewechselt |
3590| `logout` | Benutzer abgemeldet |3590| `logout` | Benutzer abgemeldet |
3691```3691```
3692 3692
3693| Feld | Werte | Beschreibung |3693| Feld | Werte | Beschreibung |
3694| :-------- | :---------------------------- | :-------------------------------------------------------------------------------- |3694| :- | :- | :- |
3695| `action` | `accept`, `decline`, `cancel` | Ob die Anfrage akzeptiert, abgelehnt oder abgebrochen werden soll |3695| `action` | `accept`, `decline`, `cancel` | Ob die Anfrage akzeptiert, abgelehnt oder abgebrochen werden soll |
3696| `content` | object | Formular-Feldwerte zum Einreichen. Wird nur verwendet, wenn `action` `accept` ist |3696| `content` | object | Formular-Feldwerte zum Einreichen. Wird nur verwendet, wenn `action` `accept` ist |
3697 3697
3744```3744```
3745 3745
3746| Feld | Werte | Beschreibung |3746| Feld | Werte | Beschreibung |
3747| :-------- | :---------------------------- | :------------------------------------------------------------------------ |3747| :- | :- | :- |
3748| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |3748| `action` | `accept`, `decline`, `cancel` | Überschreibt die Aktion des Benutzers |
3749| `content` | object | Überschreibt Formular-Feldwerte. Nur sinnvoll, wenn `action` `accept` ist |3749| `content` | object | Überschreibt Formular-Feldwerte. Nur sinnvoll, wenn `action` `accept` ist |
3750 3750
3834```3834```
3835 3835
3836| Feld | Erforderlich | Beschreibung |3836| Feld | Erforderlich | Beschreibung |
3837| :---------------- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |3837| :- | :- | :- |
3838| `type` | ja | Muss `"prompt"` sein |3838| `type` | ja | Muss `"prompt"` sein |
3839| `prompt` | ja | Der Prompt-Text zum Senden an das LLM. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe JSON. Wenn `$ARGUMENTS` nicht vorhanden ist, wird die Eingabe JSON an den Prompt angehängt |3839| `prompt` | ja | Der Prompt-Text zum Senden an das LLM. Verwenden Sie `$ARGUMENTS` als Platzhalter für die Hook-Eingabe JSON. Wenn `$ARGUMENTS` nicht vorhanden ist, wird die Eingabe JSON an den Prompt angehängt |
3840| `model` | nein | Modell zur Verwendung für die Evaluierung. Standardwert ist ein schnelles Modell |3840| `model` | nein | Modell zur Verwendung für die Evaluierung. Standardwert ist ein schnelles Modell |
3856```3856```
3857 3857
3858| Feld | Beschreibung |3858| Feld | Beschreibung |
3859| :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3859| :- | :- |
3860| `ok` | `true` erlaubt die Aktion. Bei `false` siehe das ereignisspezifische Verhalten unten |3860| `ok` | `true` erlaubt die Aktion. Bei `false` siehe das ereignisspezifische Verhalten unten |
3861| `reason` | Erforderlich, wenn `ok` `false` ist |3861| `reason` | Erforderlich, wenn `ok` `false` ist |
3862| `impossible` | Optional. Das Modell gibt es mit `ok: false` zurück, wenn es beurteilt, dass die Bedingung niemals erfüllt werden kann. Bei `Stop` und `SubagentStop` lässt Claude Code dann den Turn enden, anstatt den Grund zurückzugeben. Agent-Hooks und andere Ereignisse ignorieren es |3862| `impossible` | Optional. Das Modell gibt es mit `ok: false` zurück, wenn es beurteilt, dass die Bedingung niemals erfüllt werden kann. Bei `Stop` und `SubagentStop` lässt Claude Code dann den Turn enden, anstatt den Grund zurückzugeben. Agent-Hooks und andere Ereignisse ignorieren es |