SpyBara
Go Premium

Documentation 2026-10-23 22:59 UTC to 2026-10-24 22:59 UTC

31 files changed +842 −265. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59

artifacts.md +1 −3

Details

340 340 

341Claude Docs erreicht Claude Code als einen claude.ai [Connector](https://code.claude.com/docs/de/mcp.md#use-mcp-servers-from-claude-ai) anstelle eines Befehls. Wenn es verbunden ist, listet `/mcp` es als `claude.ai Claude Docs` auf. Eine Anfrage für ein Dokument, das für andere Personen bestimmt ist, geht dann zu Claude Docs anstelle einer Artefaktseite: eine Spezifikation, ein Vorschlag oder eine Zusammenfassung des Plans, den Sie in der Sitzung durchgearbeitet haben. Claude gibt Ihnen den Link des Dokuments, wenn es entworfen ist.341Claude Docs erreicht Claude Code als einen claude.ai [Connector](https://code.claude.com/docs/de/mcp.md#use-mcp-servers-from-claude-ai) anstelle eines Befehls. Wenn es verbunden ist, listet `/mcp` es als `claude.ai Claude Docs` auf. Eine Anfrage für ein Dokument, das für andere Personen bestimmt ist, geht dann zu Claude Docs anstelle einer Artefaktseite: eine Spezifikation, ein Vorschlag oder eine Zusammenfassung des Plans, den Sie in der Sitzung durchgearbeitet haben. Claude gibt Ihnen den Link des Dokuments, wenn es entworfen ist.

342 342 

343Ein Dokument, das zum Codebase gehört, z. B. eine README, bleibt eine Datei. Um eine Datei für etwas zu erhalten, das Claude sonst in Claude Docs ablegen würde, geben Sie das Format an, z. B. `.docx` oder eine Markdown-Datei im Repository.343Ein Dokument, das in die Codebasis gehört, z. B. eine README, bleibt eine Datei. Um eine Datei für etwas zu erhalten, das Claude sonst in Claude Docs ablegen würde, geben Sie das Format an, z. B. `.docx` oder eine Markdown-Datei im Repository. Um nur den Konnektor `claude.ai Claude Docs` auszuschalten, siehe [claude.ai-Konnektoren deaktivieren](https://code.claude.com/docs/de/mcp.md#disable-claude-ai-connectors).

344 

345Um den Connector auszuschalten, fügen Sie `claude.ai Claude Docs` zu `deniedMcpServers` hinzu oder verwenden Sie den `/mcp`-Umschalter, beide beschrieben in [Deaktivieren Sie claude.ai Connectors](https://code.claude.com/docs/de/mcp.md#disable-claude-ai-connectors).

346 344 

347## Seitenbeschränkungen345## Seitenbeschränkungen

348 346 

Details

458 458 

459#### Wie Hook- und Skill-Schlüssel in übergeordneten Einstellungen wirksam werden459#### Wie Hook- und Skill-Schlüssel in übergeordneten Einstellungen wirksam werden

460 460 

461Wenn Sie `disableAllHooks: true` als übergeordnete Einstellung über die Option `managedSettings` des Agent SDK übergeben, stoppen nicht alle Hooks. Ihre [SDK-Hook-Callbacks](https://code.claude.com/docs/de/agent-sdk/hooks.md) laufen weiterhin, ebenso die Hooks des Administrators, die Ihre Anwendung nicht ausschalten kann.461Schlüssel, die Ihre Anwendung in der Option [`managedSettings`](https://code.claude.com/docs/de/agent-sdk/typescript#options) des Agent SDK übergibt, sind übergeordnete Einstellungen. Auf einer Maschine, auf der ein Administrator verwaltete Einstellungen bereitstellt, ignoriert Claude Code übergeordnete Einstellungen, es sei denn, der Administrator [lässt einen einbettenden Host Richtlinien hinzufügen](https://code.claude.com/docs/de/managed-settings.md#let-an-embedding-host-add-policy).

462 462 

463Auf einer Maschine, auf der ein Administrator verwaltete Einstellungen bereitstellt, ignoriert Claude Code übergeordnete Einstellungen, es sei denn, der Administrator [lässt einen einbettenden Host Richtlinien hinzufügen](https://code.claude.com/docs/de/managed-settings.md#let-an-embedding-host-add-policy).463Wenn Sie [`disableAllHooks: true`](https://code.claude.com/docs/de/settings-reference#disableallhooks) in `managedSettings` übergeben:

464 

465* **Stoppen**: Benutzer-, Projekt- und lokale Hooks sowie Hooks, die im Frontmatter eines Agenten oder in der [`settings`-Option](https://code.claude.com/docs/de/agent-sdk/typescript#options) des SDK deklariert sind.

466* **Laufen weiter**: die [SDK-Hook-Callbacks](https://code.claude.com/docs/de/agent-sdk/hooks.md) Ihrer Anwendung und die Hooks eines Administrators aus verwalteten Einstellungen. Ihre Anwendung kann die Hooks des Administrators nicht ausschalten.

464 467 

465| Was Sie übergeben | Was passiert |468| Was Sie übergeben | Was passiert |

466| :- | :- |469| :- | :- |

467| `disableAllHooks: true` | Wird als `allowManagedHooksOnly: true` behandelt, sodass die als [unter `allowManagedHooksOnly` blockiert](https://code.claude.com/docs/de/settings-reference#what-runs-under-allowmanagedhooksonly) aufgeführten Hooks stoppen, ebenso Hooks in der [`settings`-Option](https://code.claude.com/docs/de/agent-sdk/typescript#options) des SDK. |470| `hooks` oder `allowedHttpHookUrls` bzw. `httpHookAllowedEnvVars` mit Einträgen | Claude Code ignoriert den Schlüssel. Verwenden Sie stattdessen die SDK-Option `settings`. |

468| [`disableSkillShellExecution: true`](https://code.claude.com/docs/de/settings-reference#disableskillshellexecution) | Wird wirksam. |

469| `allowedHttpHookUrls: []` | Wird wirksam, es sei denn, der Administrator definiert `hooks` oder aktiviert ein Plugin. Es läuft kein HTTP-Hook, außer für URLs, die eine andere Einstellungsquelle auflistet. |471| `allowedHttpHookUrls: []` | Wird wirksam, es sei denn, der Administrator definiert `hooks` oder aktiviert ein Plugin. Es läuft kein HTTP-Hook, außer für URLs, die eine andere Einstellungsquelle auflistet. |

470| `httpHookAllowedEnvVars: []` | Wird wirksam, es sei denn, der Administrator definiert `hooks` oder aktiviert ein Plugin. HTTP-Hook-Header können nur Umgebungsvariablen enthalten, die eine andere Einstellungsquelle auflistet. |472| `httpHookAllowedEnvVars: []` | Wird wirksam, es sei denn, der Administrator definiert `hooks` oder aktiviert ein Plugin. HTTP-Hook-Header können nur Umgebungsvariablen enthalten, die eine andere Einstellungsquelle auflistet. |

471| `allowedHttpHookUrls` oder `httpHookAllowedEnvVars` mit Einträgen | Claude Code ignoriert es, da ein Zusammenführen die Liste eines Administrators erweitern würde. Verwenden Sie stattdessen die SDK-Option `settings`. |473| [`disableSkillShellExecution: true`](https://code.claude.com/docs/de/settings-reference#disableskillshellexecution) | Wird wirksam. |

472 474 

473Das Übergeben dieser Schlüssel in `managedSettings` erfordert Claude Code v2.1.309 oder später oder das TypeScript Agent SDK v0.3.309 oder später.475Das Übergeben dieser Schlüssel in `managedSettings` erfordert Claude Code v2.1.309 oder später oder das TypeScript Agent SDK v0.3.309 oder später.

474 476 

Details

8 8 

9> [!NOTE]9> [!NOTE]

10>10>

11> Cloud-Sitzungen sind in Pro-, Max- und Team-Plänen sowie für Enterprise-Benutzer mit Premium-Sitzen oder Chat + Claude Code-Sitzen verfügbar. Wenn Ihre Enterprise-Organisation Ihren Zugriff mit [benutzerdefinierten Rollen](https://support.claude.com/en/articles/13930452) verwaltet, benötigen Sie außerdem eine Rolle, die die Berechtigung für Cloud-Sitzungen enthält. Bitten Sie einen Owner, Ihre Rollen zu überprüfen und die Berechtigung unter [**Organization settings > Roles**](https://claude.ai/admin-settings/roles) hinzuzufügen, falls sie fehlt.11> Cloud-Sitzungen sind in Pro-, Max- und Team-Plänen sowie für Enterprise-Benutzer mit Premium-Sitzen oder Chat + Claude Code-Sitzen verfügbar. Wenn Ihr Zugriff über [benutzerdefinierte Rollen](https://support.claude.com/en/articles/13930452) gesteuert wird, benötigen Sie außerdem eine Rolle mit der Berechtigung für Cloud-Sitzungen, um Sitzungen auf der Infrastruktur von Anthropic aus dem Browser, den Apps oder dem Terminal zu starten. Bitten Sie einen Owner, sie unter [**Organization settings > Roles**](https://claude.ai/admin-settings/roles) zu einer Ihrer Rollen hinzuzufügen.

12 12 

13Eine Cloud-Sitzung ist eine Claude Code-Sitzung, die auf Cloud-Infrastruktur statt auf Ihrem Computer ausgeführt wird. Standardmäßig wird sie auf von Anthropic verwalteter Infrastruktur ausgeführt oder auf der [selbstgehosteten Umgebung](https://code.claude.com/docs/de/self-hosted-environments) Ihrer Organisation, wenn sie dorthin weitergeleitet wird. Die Sitzung läuft weiter, nachdem Sie Ihren Laptop schließen, und Sie können sie von jedem Gerät aus überprüfen oder steuern. Sie wird zusammen mit Ihrer übrigen Nutzung von Claude und Claude Code auf die Nutzungslimits Ihres Plans angerechnet, und für die Cloud-VM fallen keine separaten Kosten an.13Eine Cloud-Sitzung ist eine Claude Code-Sitzung, die auf Cloud-Infrastruktur statt auf Ihrem Computer ausgeführt wird. Standardmäßig wird sie auf von Anthropic verwalteter Infrastruktur ausgeführt oder auf der [selbstgehosteten Umgebung](https://code.claude.com/docs/de/self-hosted-environments) Ihrer Organisation, wenn sie dorthin weitergeleitet wird. Die Sitzung läuft weiter, nachdem Sie Ihren Laptop schließen, und Sie können sie von jedem Gerät aus überprüfen oder steuern. Sie wird zusammen mit Ihrer übrigen Nutzung von Claude und Claude Code auf die Nutzungslimits Ihres Plans angerechnet, und für die Cloud-VM fallen keine separaten Kosten an.

14 14 

Details

109 109 

110#### Fügen Sie ein Secret hinzu110#### Fügen Sie ein Secret hinzu

111 111 

112Sie fügen Secrets einzeln hinzu, und Sie können ein Secret nach dem Hinzufügen nicht bearbeiten. Um die Hosts oder den Wert eines Secrets zu ändern, löschen Sie es und fügen Sie es erneut hinzu.112Sie fügen Secrets einzeln hinzu. Um die Hosts oder den Wert eines Secrets zu ändern, löschen Sie es und fügen Sie es erneut hinzu.

113 113 

114Um ein Secret zu einer [gemeinsamen Umgebung](#organization-shared-environments) hinzuzufügen, öffnen Sie diese zur Bearbeitung über die Seite **Cloud-Umgebungen** in den [Admin-Einstellungen](https://claude.ai/admin-settings) und fahren Sie dann mit Schritt 2 im Bereich **Netzwerk-Secrets** fort. Wenn Sie einen Team-Plan nutzen und keine [Organisationsadministrator-Rolle](#requirements) haben, folgen Sie Schritt 1 in Ihrer eigenen Umgebung und [füllen Sie dann das kürzere Formular aus](#add-a-secret-without-the-role).114Um ein Secret zu einer [gemeinsamen Umgebung](#organization-shared-environments) hinzuzufügen, öffnen Sie diese zur Bearbeitung über die Seite **Cloud-Umgebungen** in den [Admin-Einstellungen](https://claude.ai/admin-settings) und fahren Sie dann mit Schritt 2 im Bereich **Netzwerk-Secrets** fort. Wenn Sie einen Team-Plan nutzen und keine [Organisationsadministrator-Rolle](#requirements) haben, folgen Sie Schritt 1 in Ihrer eigenen Umgebung und [füllen Sie dann das kürzere Formular aus](#add-a-secret-without-the-role).

115 115 


119 119 

120**2. Fügen Sie das Secret hinzu**120**2. Fügen Sie das Secret hinzu**

121 121 

122Wählen Sie **Secret hinzufügen** und füllen Sie das Formular aus. Behalten Sie den Standard-**Secret-Typ**, **Bearer**, für einen API-Schlüssel, der in einem Request-Header übertragen wird, und füllen Sie diese Felder aus:122Wählen Sie **Secret hinzufügen**, in den Admin-Einstellungen mit **Hinzufügen** beschriftet, und füllen Sie das Formular aus. Behalten Sie den Standard-**Secret-Typ**, **Bearer**, für einen API-Schlüssel, der in einem Request-Header übertragen wird, und füllen Sie diese Felder aus:

123 123 

124* **Name**: eine Bezeichnung für das Secret, wie `Internal billing API`124* **Name**: eine Bezeichnung für das Secret, wie `Internal billing API`

125* **Zulässige Websites**: die Hosts der API, wie `api.example.com`. Ein führendes `*.` passt zu jeder Subdomain125* **Zulässige Websites**: die Hosts der API, wie `api.example.com`. Ein führendes `*.` passt zu jeder Subdomain


443 443 

444### Anforderungen an Skripte444### Anforderungen an Skripte

445 445 

446Ein Setup-Skript hat drei Einschränkungen, die Sie beachten müssen:446Ein Setup-Skript hat vier Einschränkungen, die Sie beachten müssen:

447 447 

448* **Mit Null beenden**: Wenn das Skript mit einem Nicht-Null-Wert beendet wird, schlägt der Sitzungsstart fehl. Fügen Sie `|| true` an nicht kritische Befehle an, damit ein gelegentlicher Installationsfehler die Sitzung nicht blockiert.448* **Mit Null beenden**: Wenn das Skript mit einem Nicht-Null-Wert beendet wird, schlägt der Sitzungsstart fehl. Fügen Sie `|| true` an nicht kritische Befehle an, damit ein gelegentlicher Installationsfehler die Sitzung nicht blockiert.

449* **Innerhalb von fünf Minuten fertig**: Halten Sie die Gesamtlaufzeit des Skripts unter etwa fünf Minuten, damit der [Umgebungs-Cache](#environment-caching) erstellt werden kann. Wenn Setup länger dauert, wird die Umgebung nicht zwischengespeichert. Führen Sie unabhängige Installationen parallel mit `&` und `wait` aus, und verschieben Sie jeden einzelnen Download, der nicht passt, in einen [SessionStart-Hook](#setup-scripts-vs-sessionstart-hooks), der ihn im Hintergrund startet. Wenn neue Sitzungen während des Setups hängen bleiben oder zeitüberschreitung auftreten, siehe [Neue Sitzungen hängen oder zeitüberschreitung während des Setups](https://code.claude.com/docs/de/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).449* **Innerhalb von fünf Minuten fertig**: Halten Sie die Gesamtlaufzeit des Skripts unter etwa fünf Minuten, damit der [Umgebungs-Cache](#environment-caching) erstellt werden kann. Wenn Setup länger dauert, wird die Umgebung nicht zwischengespeichert. Führen Sie unabhängige Installationen parallel mit `&` und `wait` aus, und verschieben Sie jeden einzelnen Download, der nicht passt, in einen [SessionStart-Hook](#setup-scripts-vs-sessionstart-hooks), der ihn im Hintergrund startet. Wenn neue Sitzungen während des Setups hängen bleiben oder zeitüberschreitung auftreten, siehe [Neue Sitzungen hängen oder zeitüberschreitung während des Setups](https://code.claude.com/docs/de/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).

450* **Netzwerkzugriff für Installationen**: Paketinstallationen müssen Registries erreichen. Die Standard-Stufe **Vertraut** deckt [häufige Paket-Registries](#default-allowed-domains) ab, einschließlich npm, PyPI, RubyGems und crates.io; mit **Keine** Netzwerkzugriff schlagen Installationen fehl.450* **Netzwerkzugriff für Installationen**: Paketinstallationen müssen Registries erreichen. Die Standard-Stufe **Vertraut** deckt [häufige Paket-Registries](#default-allowed-domains) ab, einschließlich npm, PyPI, RubyGems und crates.io; mit **Keine** Netzwerkzugriff schlagen Installationen fehl.

451* **Die Variablen der Umgebung sind noch nicht gesetzt**: Das Skript wird ausgeführt, bevor die Sitzung die [Umgebungsvariablen](#set-environment-variables) der Umgebung setzt. Setzen Sie jeden Wert, den das Skript benötigt, im Skript selbst.

451 452 

452### Umgebungs-Caching453### Umgebungs-Caching

453 454 

Details

123 123 

124Wenn ein Review eine eingebundene Datei nicht anwendet, prüfen Sie jeden dieser Punkte:124Wenn ein Review eine eingebundene Datei nicht anwendet, prüfen Sie jeden dieser Punkte:

125 125 

126* **Speicherort**: Verschieben Sie die Datei in das Stammverzeichnis des Repositorys. Ein Pfad in ein Unterverzeichnis wie `@docs/review-rules.md` wird nicht eingebunden.126* **Speicherort**: Verschieben Sie die Datei in das Stammverzeichnis des Repositorys. Außer bei einer [Skill-Datei](#include-a-skill-file) wird ein Pfad in ein Unterverzeichnis wie `@docs/review-rules.md` nicht eingebunden.

127* **Name**: Geben Sie den Dateinamen exakt an, einschließlich Groß- und Kleinschreibung, und verwenden Sie einen Namen ohne Leerzeichen. Eine Zeile, deren Name keiner Datei neben `REVIEW.md` entspricht, bleibt als reiner Text in `REVIEW.md`, und der Check Run meldet sie nicht als übersprungene Einbindung.127* **Name**: Geben Sie den Dateinamen exakt an, einschließlich Groß- und Kleinschreibung, und verwenden Sie einen Namen ohne Leerzeichen. Eine Zeile, deren Name keiner Datei neben `REVIEW.md` entspricht, bleibt als reiner Text in `REVIEW.md`, und der Check Run meldet sie nicht als übersprungene Einbindung.

128* **Eine Ebene**: Führen Sie jede Datei in der Stamm-`REVIEW.md` auf. Eine `@`-Zeile in einer eingebundenen Datei oder in einer `REVIEW.md` in einem Unterverzeichnis bleibt reiner Text, und ein Markdown-Link auf eine andere Datei ist keine Einbindung.128* **Eine Ebene**: Führen Sie jede Datei in der Stamm-`REVIEW.md` auf. Eine `@`-Zeile in einer eingebundenen Datei oder in einer `REVIEW.md` in einem Unterverzeichnis bleibt reiner Text ([bei Skill-Dateien ist das anders](#include-a-skill-file)), und ein Markdown-Link auf eine andere Datei ist keine Einbindung.

129* **Grenzwerte**: Binden Sie höchstens acht verschiedene Dateien ein, und halten Sie `REVIEW.md` und die eingebundenen Dateien zusammen unter 150.000 Bytes. Eine Datei, die das Byte-Limit erreichen würde, wird vollständig übersprungen und nicht gekürzt. Der Check Run meldet, wie viele Einbindungszeilen er aufgrund eines der beiden Grenzwerte übersprungen hat.129* **Grenzwerte**: Binden Sie höchstens acht verschiedene Dateien ein, und halten Sie `REVIEW.md` und die eingebundenen Dateien zusammen unter 150.000 Bytes. Eine Datei, die das Byte-Limit erreichen würde, wird vollständig übersprungen und nicht gekürzt. Der Check Run meldet, wie viele Einbindungszeilen er aufgrund eines der beiden Grenzwerte übersprungen hat.

130* **Links**: Verwenden Sie in `REVIEW.md` und den eingebundenen Dateien insgesamt höchstens 64 Markdown-Links. Links auf `http`-, `https`- oder `mailto`-Adressen und auf `#`-Anker zählen nicht. Oberhalb dieses Grenzwerts überspringt das Review Ihre gesamte Stamm-`REVIEW.md`, nicht nur die eingebundenen Dateien. Der Check Run [meldet dann, dass die Anweisungen nicht angewendet wurden](https://code.claude.com/docs/de/code-review-troubleshooting.md#the-check-run-mentions-review-md).130* **Links**: Verwenden Sie in `REVIEW.md` und den eingebundenen Dateien insgesamt höchstens 64 Markdown-Links. Links auf `http`-, `https`- oder `mailto`-Adressen und auf `#`-Anker zählen nicht, ebenso wenig Links in einer [Skill-Datei](#include-a-skill-file). Oberhalb dieses Grenzwerts überspringt das Review Ihre gesamte Stamm-`REVIEW.md`, nicht nur die eingebundenen Dateien. Der Check Run [meldet dann, dass die Anweisungen nicht angewendet wurden](https://code.claude.com/docs/de/code-review-troubleshooting.md#the-check-run-mentions-review-md).

131* **Gemergte Kopie**: Mergen Sie die eingebundene Datei in den [Branch, aus dem `REVIEW.md` gelesen wird](#which-branch-review-md-is-read-from). Das Review liest beide aus demselben Commit, niemals aus den Änderungen des Pull Requests selbst.131* **Gemergte Kopie**: Mergen Sie die eingebundene Datei in den [Branch, aus dem `REVIEW.md` gelesen wird](#which-branch-review-md-is-read-from). Das Review liest beide aus demselben Commit, niemals aus den Änderungen des Pull Requests selbst.

132 132 

133### Eine Skill-Datei einbinden

134 

135Damit Reviews Richtlinien befolgen, die Sie in einem [Skill](https://code.claude.com/docs/de/skills.md) pflegen, binden Sie die `SKILL.md` des Skills in Ihre Stamm-`REVIEW.md` ein. Code Review führt keine Skills aus.

136 

137Fügen Sie `@` und den Pfad zu `SKILL.md` in der Form `.claude/skills/<folder>/SKILL.md` in einer eigenen Zeile hinzu:

138 

139```markdown theme={null}

140# Review instructions

141 

142Report at most five Nits per review.

143 

144@.claude/skills/api-review/SKILL.md

145 

146Treat any change under `migrations/` as Important.

147```

148 

149Schützen Sie den [Branch, aus dem `REVIEW.md` gelesen wird](#which-branch-review-md-is-read-from), denn Code Review bindet eine Skill-Datei nur ein, wenn es `REVIEW.md` aus einem geschützten Branch liest. Die Skill-Datei zählt zu den Grenzwerten von acht Dateien und 150.000 Bytes und hat einen eigenen Grenzwert von 30.000 Bytes.

150 

151#### Eine Skill-Zeile schreiben, die Code Review einbindet

152 

153Verwenden Sie einen Ordnernamen ohne Leerzeichen. Eine Zeile mit einem Leerzeichen im Pfad bleibt als reiner Text in `REVIEW.md`, und der Check Run meldet sie nicht als übersprungene Einbindung.

154 

155Wenn die `@`-Zeile für einen Skill gegen eine der folgenden Regeln verstößt, bindet Code Review den Skill aus dieser Zeile nicht ein:

156 

157* **Pfad**: Schreiben Sie den Pfad ausgehend vom Stammverzeichnis des Repositorys als `.claude/skills/<folder>/SKILL.md`, wobei der Ordner des Skills direkt unter `skills/` liegt. Anders als ein Dateiname im Stammverzeichnis wird ein Pfad dieser Form, der keiner Datei entspricht, übersprungen und gezählt.

158* **Quelle**: Kopieren Sie Richtlinien aus jeder anderen Datei unter `.claude/` oder aus einem [mitgelieferten, persönlichen oder Plugin-Skill](https://code.claude.com/docs/de/skills.md#where-skills-live) in eine Datei neben `REVIEW.md`. Diese können Sie nicht direkt einbinden.

159* **Datei**: Committen Sie `SKILL.md` als reguläre Textdatei. Code Review folgt keinem symbolischen Link, unabhängig davon, ob der Link die Datei selbst oder ein Ordner in ihrem Pfad ist.

160* **Größe**: Halten Sie `SKILL.md` bei höchstens 30.000 Bytes, einschließlich Frontmatter

161* **Anzahl**: Schreiben Sie höchstens acht Skill-Zeilen. Eine wiederholte Zeile zählt erneut zu den acht.

162* **Blöcke in `REVIEW.md`**: Halten Sie die `@`-Zeile außerhalb von Code-Fences. Schließen Sie jeden HTML-Kommentar und jeden `<pre>`-, `<script>`-, `<style>`- oder `<textarea>`-Block oberhalb davon.

163 

164Wenn Code Review eine Skill-Zeile überspringt, weil sie gegen die Regel Datei, Größe, Anzahl oder Blöcke verstößt, zählt die [Meldung des Check Runs zu übersprungenen Einbindungszeilen](https://code.claude.com/docs/de/code-review-troubleshooting.md#the-check-run-mentions-review-md) sie mit. Die Meldung erscheint nur, wenn das Review `REVIEW.md` aus einem geschützten Branch anwendet.

165 

166#### Prüfen, was ein Review von einem Skill erhält

167 

168Wenn der Skill eingebunden ist, erhält ein Review den Hauptteil von `SKILL.md` und sonst nichts aus dem Skill. Prüfen Sie den Skill daher anhand der folgenden Liste.

169 

170* **Frontmatter**: Wiederholen Sie im Hauptteil alles, was ein Review aus dem [Frontmatter](https://code.claude.com/docs/de/skills.md#frontmatter-reference) benötigt, zum Beispiel die Bedingungen, die `description` für die Verwendung des Skills angibt

171* **Eingefügte Befehle**: Schreiben Sie aus, was ein [`!`-Befehl](https://code.claude.com/docs/de/skills#inject-dynamic-context) liefern würde. Code Review führt den Befehl nicht aus und ersetzt die gesamte Zeile oder den gesamten Block, der ihn enthält, durch einen Platzhalter.

172* **Ersetzungen**: Ersetzen Sie `$ARGUMENTS` und andere [Ersetzungen](https://code.claude.com/docs/de/skills.md#available-string-substitutions) durch festen Text, da ein Review keine Argumente übergibt und sie unverändert lässt

173* **Unterstützende Dateien**: Kopieren Sie, was ein Review benötigt, in `SKILL.md`, da Code Review keine Skripte, verlinkten Dateien oder `@file`-Verweise lädt

174* **Ausschlüsse und Nit-Obergrenzen**: Schreiben Sie Anweisungen, die Befunde ausschließen oder Nits begrenzen, in `REVIEW.md` oder eine Datei daneben, nicht in den Skill. Code Review akzeptiert den Text eines Skills für keines von beiden als Begründung.

175* **Links auf Repository-Dateien**: Beschreiben Sie in Worten, worauf ein Link oder `@file`-Verweis zeigt. Das Review sieht den Pfad als reinen Text oder als Platzhalter.

176 

177Wenn Sie die `!`-Befehle, `$ARGUMENTS` oder Links des Skills bearbeiten, ändern Sie auch, wie er in Claude Code funktioniert. Wenn Ihr Team darauf angewiesen ist, kopieren Sie die Richtlinien in eine Datei neben `REVIEW.md` und binden Sie diese Datei anstelle des Skills ein.

178 

179#### Zeichen, die Code Review im Skill-Text ändert

180 

181Code Review ändert einige Zeichen im Text des Skills, sodass Ihre Codebeispiele ein Review in der folgenden Form erreichen.

182 

183```text theme={null}

184In SKILL.md: Use `items[0]`, never `List<String>`.

185The review reads: Use ˋitems(0)ˋ, never ˋList< String>ˋ.

186 

187In SKILL.md: Run `ps | grep api` and ask @alice.

188The review reads: Run ˋps ¦ grep apiˋ and ask @ alice.

189```

190 

191Wenn eine Regel von einem dieser Zeichen abhängt, beschreiben Sie sie zusätzlich in Worten.

192 

133### Von welchem Branch REVIEW\.md gelesen wird193### Von welchem Branch REVIEW\.md gelesen wird

134 194 

135Code Review liest `REVIEW.md` aus dem Basis-Branch des Pull Requests oder aus dem Standard-Branch, niemals aus den Änderungen des Pull Requests selbst. Um das Review-Verhalten zu ändern, mergen Sie die Änderung an `REVIEW.md` zuerst.195Code Review liest `REVIEW.md` aus dem Basis-Branch des Pull Requests oder aus dem Standard-Branch, niemals aus den Änderungen des Pull Requests selbst. Um das Review-Verhalten zu ändern, mergen Sie die Änderung an `REVIEW.md` zuerst.


140* Ausschließen von Pfaden, Dateien oder Arten von Problemen200* Ausschließen von Pfaden, Dateien oder Arten von Problemen

141* Begrenzen von Nit-Kommentaren201* Begrenzen von Nit-Kommentaren

142 202 

203Schreiben Sie Ausschlüsse und Nit-Obergrenzen in `REVIEW.md` oder eine Datei daneben, nicht in einen [eingebundenen Skill](#include-a-skill-file).

204 

143#### Was als Branch-Schutz gilt205#### Was als Branch-Schutz gilt

144 206 

145Code Review wertet diese Einstellungen als Schutz:207Code Review wertet diese Einstellungen als Schutz:

Details

67 67 

68## Der Check-Run erwähnt REVIEW\.md68## Der Check-Run erwähnt REVIEW\.md

69 69 

70Dies sind drei der Meldungen, die ein Check-Run zu `REVIEW.md` enthalten kann:70Dies sind vier der Meldungen, die ein Check-Run zu `REVIEW.md` enthalten kann:

71 71 

72* **„This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes.“**: Das Review hat nur die Datei im Stammverzeichnis gelesen. Unter [Aus welchem Branch REVIEW.md gelesen wird](https://code.claude.com/docs/de/code-review-customize.md#which-branch-review-md-is-read-from) erfahren Sie, was sich durch das Schützen des Branches ändert.72* **„This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes.“**: Das Review hat nur die Datei im Stammverzeichnis gelesen. Unter [Aus welchem Branch REVIEW.md gelesen wird](https://code.claude.com/docs/de/code-review-customize.md#which-branch-review-md-is-read-from) erfahren Sie, was sich durch das Schützen des Branches ändert.

73* **„were not applied to this review: branch protection could not be confirmed“**: Das Review hat keine `REVIEW.md` gelesen.73* **„were not applied to this review: branch protection could not be confirmed“**: Das Review hat keine `REVIEW.md` gelesen.


75 * **Zu viele Links**: Die Datei enthält mehr als 64 Markdown-Links. Reduzieren Sie die Links auf [64 oder weniger](https://code.claude.com/docs/de/code-review-customize.md#include-other-files-in-review-md).75 * **Zu viele Links**: Die Datei enthält mehr als 64 Markdown-Links. Reduzieren Sie die Links auf [64 oder weniger](https://code.claude.com/docs/de/code-review-customize.md#include-other-files-in-review-md).

76 * **Ein Link, den das Review nicht parsen kann**: Die Datei enthält einen fehlerhaften Markdown-Link. Korrigieren oder entfernen Sie den Link.76 * **Ein Link, den das Review nicht parsen kann**: Die Datei enthält einen fehlerhaften Markdown-Link. Korrigieren oder entfernen Sie den Link.

77 * **Ein Link auf eine geänderte Datei**: Die Datei verlinkt auf eine Datei oder einen Ordner, die bzw. den dieser Pull Request ändert, und das Review konnte nicht nur die Zeilen mit diesem Link auslassen. Schreiben Sie die Regel direkt in `REVIEW.md`.77 * **Ein Link auf eine geänderte Datei**: Die Datei verlinkt auf eine Datei oder einen Ordner, die bzw. den dieser Pull Request ändert, und das Review konnte nicht nur die Zeilen mit diesem Link auslassen. Schreiben Sie die Regel direkt in `REVIEW.md`.

78* **„include line(s) in the root REVIEW\.md were skipped on this review“**: Ihre `REVIEW.md` im Stammverzeichnis wurde angewendet, die in diesen Zeilen genannten Dateien jedoch nicht. Prüfen Sie die Listen unter [Andere Dateien in REVIEW.md einbinden](https://code.claude.com/docs/de/code-review-customize.md#include-other-files-in-review-md) und bei einem Skill auch unter [Eine Skill-Datei einbinden](https://code.claude.com/docs/de/code-review-customize.md#include-a-skill-file).

78 79 

79## Probleme bei der Einrichtung80## Probleme bei der Einrichtung

80 81 

desktop.md +2 −2

Details

844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/de/env-vars#variables) oder [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/de/env-vars#variables) | Setzen Sie sie an [einer der Stellen, an denen Sie eine Variable für Dev-Server setzen würden](#set-environment-variables-for-dev-servers), beenden Sie Desktop und öffnen Sie es erneut |844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/de/env-vars#variables) oder [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/de/env-vars#variables) | Setzen Sie sie an [einer der Stellen, an denen Sie eine Variable für Dev-Server setzen würden](#set-environment-variables-for-dev-servers), beenden Sie Desktop und öffnen Sie es erneut |

845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` oder eine andere Variable, die Desktop selbst setzt | Siehe [Umgebungsvariablen, die Desktop selbst setzt](#environment-variables-desktop-sets-itself) |845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` oder eine andere Variable, die Desktop selbst setzt | Siehe [Umgebungsvariablen, die Desktop selbst setzt](#environment-variables-desktop-sets-itself) |

846 846 

847Wenn Sie Ihre Variable unter macOS oder Linux bereits mit `export` in `~/.zshrc` oder `~/.bashrc` gesetzt haben, siehe [Exportierte Variable fehlt oder ist falsch in Befehlen, die Claude ausführt](#exported-variable-missing-or-wrong-in-commands-claude-runs).847Wenn unter macOS oder Linux eine Variable, die Sie mit `export` setzen, in einem Befehl, den Claude ausführt, fehlt oder falsch ist, siehe [Exportierte Variable fehlt oder ist falsch in Befehlen, die Claude ausführt](#exported-variable-missing-or-wrong-in-commands-claude-runs).

848 848 

849#### Umgebungsvariablen für lokale Sitzungen setzen849#### Umgebungsvariablen für lokale Sitzungen setzen

850 850 


908 908 

909**4. Eine gespeicherte Umgebung verwenden**909**4. Eine gespeicherte Umgebung verwenden**

910 910 

911Fügen Sie die Variable einer [gespeicherten lokalen Umgebung](#set-environment-variables-for-local-sessions) hinzu und starten Sie dann eine neue Sitzung aus dieser Umgebung. Für eine Variable wie `PATH` oder `CLAUDE_CONFIG_DIR` folgen Sie stattdessen [ihren eigenen Anweisungen](#environment-variables-in-local-sessions).911Fügen Sie die Variable einer [gespeicherten lokalen Umgebung](#set-environment-variables-for-local-sessions) hinzu und starten Sie dann eine neue Sitzung aus dieser Umgebung. Für eine Variable wie `PATH`, `CLAUDE_CONFIG_DIR` oder `API_TIMEOUT_MS` folgen Sie stattdessen [der jeweiligen Anleitung](#environment-variables-in-local-sessions).

912 912 

913Vor v2.1.304 übergibt Claude Code exportierte Variablen nicht an Befehle. [Prüfen Sie daher, welche Version die Sitzung ausführt](#claude-code-version-in-the-code-tab).913Vor v2.1.304 übergibt Claude Code exportierte Variablen nicht an Befehle. [Prüfen Sie daher, welche Version die Sitzung ausführt](#claude-code-version-in-the-code-tab).

914 914 

Details

15 15 

16Diese Seite behandelt lokale geplante Aufgaben. Informationen zu geplanten Cloud-Aufgaben und deren Trigger-Optionen finden Sie unter [Arbeit mit geplanten Aufgaben automatisieren](https://code.claude.com/docs/de/routines.md).16Diese Seite behandelt lokale geplante Aufgaben. Informationen zu geplanten Cloud-Aufgaben und deren Trigger-Optionen finden Sie unter [Arbeit mit geplanten Aufgaben automatisieren](https://code.claude.com/docs/de/routines.md).

17 17 

18> [!NOTE]

19>

20> Wenn Ihre App die Funktion noch unter ihrem [früheren Namen](https://code.claude.com/docs/de/routines.md#where-the-name-routines-still-appears) anzeigt, klicken Sie auf **Routines**, wo auf dieser Seite **Scheduled** steht, und auf **New routine**, wo **New task** steht.

21 

18## Planungsoptionen vergleichen22## Planungsoptionen vergleichen

19 23 

20Claude Code bietet drei Möglichkeiten, um wiederkehrende oder einmalige Aufgaben zu planen:24Claude Code bietet drei Möglichkeiten, um wiederkehrende oder einmalige Aufgaben zu planen:


45 49 

46**1. Seite „Geplante Aufgaben“ öffnen**50**1. Seite „Geplante Aufgaben“ öffnen**

47 51 

48Klicken Sie auf der [**Code**-Registerkarte](https://code.claude.com/docs/de/desktop.md) auf **Geplant** in der Seitenleiste oder im Menü **Mehr** der Seitenleiste.52Klicken Sie auf der [**Code**-Registerkarte](https://code.claude.com/docs/de/desktop.md) auf **Geplant** in der Seitenleiste oder im Menü **Mehr** der Seitenleiste. Wenn die Seitenleiste **Routinen** statt **Geplant** anzeigt, klicken Sie auf **Routinen**, dann auf **Neue Routine**, und fahren Sie mit [Ganzseitiges Formular](#full-page-form) fort.

49 53 

50**2. Neue Aufgabe beginnen**54**2. Neue Aufgabe beginnen**

51 55 

52Klicken Sie auf **Neue Aufgabe**. Wenn sich ein Menü mit **Mit Claude erstellen** und **Manuell einrichten** öffnet, wählen Sie **Manuell einrichten**. Der Dialog **Neue geplante Aufgabe** wird geöffnet. Wenn **Nur auf diesem Computer** oben im Dialog steht, gehen Sie zu [Dialog mit „Nur auf diesem Computer“ oben](#dialog-with-only-on-this-computer-at-the-top), bevor Sie etwas eingeben.56Klicken Sie auf **Neue Aufgabe**, um den Dialog **Neue geplante Aufgabe** zu öffnen. Achten Sie auf diese Bildschirme, bevor Sie fortfahren:

57 

58* Wenn sich ein Menü mit **Mit Claude erstellen** und **Manuell einrichten** öffnet, wählen Sie **Manuell einrichten**, um den Dialog zu öffnen.

59* Wenn **Nur auf diesem Computer** oben im Dialog steht, gehen Sie zu [Dialog mit „Nur auf diesem Computer“ oben](#dialog-with-only-on-this-computer-at-the-top), bevor Sie etwas eingeben.

60* Wenn sich ein Menü mit **Lokal** und **Cloud** öffnet oder anstelle des Dialogs eine ganze Seite geöffnet wird, gehen Sie zu [Ganzseitiges Formular](#full-page-form).

53 61 

54**3. Aufgabe benennen**62**3. Aufgabe benennen**

55 63 


99 107 

100Klicken Sie auf **Erstellen**. Die Detailseite der Aufgabe wird geöffnet.108Klicken Sie auf **Erstellen**. Die Detailseite der Aufgabe wird geöffnet.

101 109 

110### Ganzseitiges Formular

111 

112Wenn sich ein Menü mit **Lokal** und **Cloud** öffnet, wählen Sie **Lokal**. Eine Seite mit dem Titel **Neue lokale Routine** oder **Neue lokale geplante Aufgabe** wird geöffnet. Füllen Sie ihre Felder aus:

113 

114* **Name**: Geben Sie einen Namen ein, der über alle Ihre Aufgaben hinweg eindeutig ist.

115* **Beschreibung**: Geben Sie eine Beschreibung ein.

116* **Anweisungen**: Geben Sie ein, was Claude tun soll, wenn die Aufgabe ausgeführt wird. Wählen Sie im selben Feld den Berechtigungsmodus, das Modell und den Ordner aus, in dem die Aufgabe ausgeführt wird.

117* **Zeitplan**: Wählen Sie eine der [Planungsoptionen](#schedule-options) aus.

118 

119Wenn **Erstellen** nicht verfügbar ist, bewegen Sie den Mauszeiger darüber, um zu sehen, was im Formular noch fehlt. Klicken Sie auf **Erstellen**, und die Detailseite der Aufgabe wird geöffnet.

120 

102## Planungsoptionen121## Planungsoptionen

103 122 

104Wenn Sie unter **Advanced settings** die Option **Only on this computer** aktivieren, bietet die Karte **Trigger** die Optionen Stündlich, Täglich, Wochentage und Wöchentlich. Um für eine solche Aufgabe **Manuell** oder **Benutzerdefiniert** zu erhalten, öffnen Sie nach dem Erstellen ihr [**Edit**-Formular](#manage-scheduled-tasks). Dieses Formular und der [Dialog mit **Only on this computer** oben](#dialog-with-only-on-this-computer-at-the-top) bieten diese sechs Optionen:123Wenn Sie unter **Advanced settings** die Option **Only on this computer** aktivieren, bietet die Karte **Trigger** die Optionen Stündlich, Täglich, Wochentage und Wöchentlich. Um für eine solche Aufgabe **Manuell** oder **Benutzerdefiniert** zu erhalten, öffnen Sie nach dem Erstellen ihr [**Edit**-Formular](#manage-scheduled-tasks). Dieses Formular, der [Dialog mit **Only on this computer** oben](#dialog-with-only-on-this-computer-at-the-top) und das [ganzseitige Formular](#full-page-form) bieten diese sechs Optionen:

105 124 

106* **Stündlich**: wird jede Stunde ausgeführt125* **Stündlich**: wird jede Stunde ausgeführt

107* **Täglich**: wird jeden Tag zur lokalen Zeit ausgeführt, die Sie auswählen126* **Täglich**: wird jeden Tag zur lokalen Zeit ausgeführt, die Sie auswählen

env-vars.md +1 −1

Details

298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Auf `1` setzen, um die Persistenz von Transkripten, den Prompt-Verlauf und die Registrierung bei `claude agents` zu erzwingen, selbst wenn dieses `claude` aus einer anderen Claude Code-Sitzung heraus gestartet wurde. Verwenden Sie dies, wenn ein geerbter `CLAUDE_CODE_CHILD_SESSION`-Wert, etwa aus einer `screen`-Sitzung oder einem Hintergrund-Launcher, der zuerst vom Bash-Tool von Claude Code gestartet wurde, dazu führt, dass eine echte Sitzung der obersten Ebene fälschlich als verschachtelt eingestuft wird. Ab v2.1.178 erkennt Claude Code den tmux-Fall automatisch und ignoriert die geerbte Markierung, sodass tmux diese Variable nicht mehr benötigt. Wird auch in v2.1.169 und früher berücksichtigt; hat in v2.1.170 und v2.1.171 keine Wirkung, da dort die Erkennung verschachtelter Sitzungen, die sie überschreibt, entfernt war |298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Auf `1` setzen, um die Persistenz von Transkripten, den Prompt-Verlauf und die Registrierung bei `claude agents` zu erzwingen, selbst wenn dieses `claude` aus einer anderen Claude Code-Sitzung heraus gestartet wurde. Verwenden Sie dies, wenn ein geerbter `CLAUDE_CODE_CHILD_SESSION`-Wert, etwa aus einer `screen`-Sitzung oder einem Hintergrund-Launcher, der zuerst vom Bash-Tool von Claude Code gestartet wurde, dazu führt, dass eine echte Sitzung der obersten Ebene fälschlich als verschachtelt eingestuft wird. Ab v2.1.178 erkennt Claude Code den tmux-Fall automatisch und ignoriert die geerbte Markierung, sodass tmux diese Variable nicht mehr benötigt. Wird auch in v2.1.169 und früher berücksichtigt; hat in v2.1.170 und v2.1.171 keine Wirkung, da dort die Erkennung verschachtelter Sitzungen, die sie überschreibt, entfernt war |

299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Auf `1` setzen, um die durchgestrichene Darstellung von `~~text~~` in Claudes Antworten zu erzwingen, wenn Ihr Terminal sie unterstützt, aber nicht automatisch erkannt wird, etwa über SSH ohne weitergeleitetes `TERM_PROGRAM`. Ohne diese Variable zeigen nicht erkannte Terminals die wörtlichen `~~`-Markierungen an, statt den Text durchgestrichen darzustellen. Erfordert Claude Code v2.1.186 oder höher |299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Auf `1` setzen, um die durchgestrichene Darstellung von `~~text~~` in Claudes Antworten zu erzwingen, wenn Ihr Terminal sie unterstützt, aber nicht automatisch erkannt wird, etwa über SSH ohne weitergeleitetes `TERM_PROGRAM`. Ohne diese Variable zeigen nicht erkannte Terminals die wörtlichen `~~`-Markierungen an, statt den Text durchgestrichen darzustellen. Erfordert Claude Code v2.1.186 oder höher |

300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Auf `1` setzen, um den DEC Private Mode 2026 für [synchronisierte Ausgabe](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) zwangsweise zu aktivieren, wenn Ihr Terminal ihn unterstützt, aber nicht automatisch erkannt wird. Nützlich für Emulatoren wie Emacs `eat`, die BSU/ESU implementieren, aber nicht auf die Fähigkeitsabfrage antworten. Hat unter tmux keine Wirkung. Anders als `CLAUDE_CODE_NO_FLICKER`, das zum [Vollbild-Rendering](https://code.claude.com/docs/de/fullscreen.md) wechselt, ändert dies den Renderer nicht |300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Auf `1` setzen, um den DEC Private Mode 2026 für [synchronisierte Ausgabe](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) zwangsweise zu aktivieren, wenn Ihr Terminal ihn unterstützt, aber nicht automatisch erkannt wird. Nützlich für Emulatoren wie Emacs `eat`, die BSU/ESU implementieren, aber nicht auf die Fähigkeitsabfrage antworten. Hat unter tmux keine Wirkung. Anders als `CLAUDE_CODE_NO_FLICKER`, das zum [Vollbild-Rendering](https://code.claude.com/docs/de/fullscreen.md) wechselt, ändert dies den Renderer nicht |

301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Auf `1` setzen, um [Mod-`Image`-Elemente](https://code.claude.com/docs/de/plugins/mods/reference#elements) als Bilder zu zeichnen, wenn Ihr Terminal Bilder des Kitty-Grafikprotokolls mit Unicode-Platzhaltern zeichnet und Sie dennoch den abgeblendeten `alt`-Text eines `Image` sehen. Siehe [welche Terminals ein `Image` zeichnen](https://code.claude.com/docs/de/plugins/mods/gallery#image-and-client) und warum diese Variable innerhalb von tmux oder screen nicht hilft |301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Auf `1` setzen, um [`Image`-Elemente von Mods](https://code.claude.com/docs/de/plugins/mods/reference#elements) als Bilder darzustellen, wenn Ihr Terminal Bilder des kitty graphics protocol mit Unicode-Platzhaltern darstellt und Sie trotzdem den abgeblendeten `alt`-Text eines `Image` sehen. Siehe [welche Terminals ein `Image` darstellen und wo Sie diese Variable nicht setzen sollten](https://code.claude.com/docs/de/plugins/mods/gallery#image-and-client) |

302| `CLAUDE_CODE_FORK_SUBAGENT` | Steuert den Fork-Modus, der standardmäßig aktiviert ist und Claude erlaubt, selbstständig [Forks](https://code.claude.com/docs/de/sub-agents.md#fork-the-current-conversation) zu starten. Solange der Fork-Modus aktiviert ist, kann Claude in interaktiven Terminal-, VS Code- oder Desktop-Sitzungen auf Ihrem Rechner außerdem nicht [auf einen Subagenten warten](https://code.claude.com/docs/de/sub-agents.md#run-subagents-in-foreground-or-background). Auf `0` setzen, um den Fork-Modus zu deaktivieren. Informationen zu Versionen finden Sie unter [Fork-Modus deaktivieren](https://code.claude.com/docs/de/sub-agents.md#turn-fork-mode-on-or-off) |302| `CLAUDE_CODE_FORK_SUBAGENT` | Steuert den Fork-Modus, der standardmäßig aktiviert ist und Claude erlaubt, selbstständig [Forks](https://code.claude.com/docs/de/sub-agents.md#fork-the-current-conversation) zu starten. Solange der Fork-Modus aktiviert ist, kann Claude in interaktiven Terminal-, VS Code- oder Desktop-Sitzungen auf Ihrem Rechner außerdem nicht [auf einen Subagenten warten](https://code.claude.com/docs/de/sub-agents.md#run-subagents-in-foreground-or-background). Auf `0` setzen, um den Fork-Modus zu deaktivieren. Informationen zu Versionen finden Sie unter [Fork-Modus deaktivieren](https://code.claude.com/docs/de/sub-agents.md#turn-fork-mode-on-or-off) |

303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Auf `1` setzen, um Text- und Thinking-Blöcke von [Subagenten](https://code.claude.com/docs/de/sub-agents.md) in der Ausgabe von `claude -p --output-format stream-json` auszugeben, mit demselben Verhalten wie das Flag [`--forward-subagent-text`](https://code.claude.com/docs/de/cli-reference#cli-flags). Verwenden Sie die Variable, wenn ein Harness `claude` aufruft und das Flag nicht selbst übergeben kann. Anders als das Flag, das außerhalb des nicht interaktiven Modus mit stream-json-Ausgabe mit einem Fehler beendet wird, wird die Variable dort ignoriert, sodass verschachtelte Aufrufe weiterhin funktionieren, wenn sie prozessweit gesetzt ist. Erfordert Claude Code v2.1.211 oder höher |303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Auf `1` setzen, um Text- und Thinking-Blöcke von [Subagenten](https://code.claude.com/docs/de/sub-agents.md) in der Ausgabe von `claude -p --output-format stream-json` auszugeben, mit demselben Verhalten wie das Flag [`--forward-subagent-text`](https://code.claude.com/docs/de/cli-reference#cli-flags). Verwenden Sie die Variable, wenn ein Harness `claude` aufruft und das Flag nicht selbst übergeben kann. Anders als das Flag, das außerhalb des nicht interaktiven Modus mit stream-json-Ausgabe mit einem Fehler beendet wird, wird die Variable dort ignoriert, sodass verschachtelte Aufrufe weiterhin funktionieren, wenn sie prozessweit gesetzt ist. Erfordert Claude Code v2.1.211 oder höher |

304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Auf `1` setzen, um die [Gateway-Hinweis-Header](https://code.claude.com/docs/de/llm-gateway-protocol.md#gateway-hint-headers) wie `x-claude-code-request-class` und `x-claude-code-compaction` an einen benutzerdefinierten Proxy oder einen Drittanbieter wie Amazon Bedrock oder Claude Platform on AWS zu senden. Auf `0` setzen, um sie bei keiner Verbindung mehr zu senden, einschließlich einer direkten Verbindung zur Anthropic API, bei der Claude Code sie standardmäßig sendet. Erfordert Claude Code v2.1.273 oder höher |304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Auf `1` setzen, um die [Gateway-Hinweis-Header](https://code.claude.com/docs/de/llm-gateway-protocol.md#gateway-hint-headers) wie `x-claude-code-request-class` und `x-claude-code-compaction` an einen benutzerdefinierten Proxy oder einen Drittanbieter wie Amazon Bedrock oder Claude Platform on AWS zu senden. Auf `0` setzen, um sie bei keiner Verbindung mehr zu senden, einschließlich einer direkten Verbindung zur Anthropic API, bei der Claude Code sie standardmäßig sendet. Erfordert Claude Code v2.1.273 oder höher |

errors.md +65 −8

Details

317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Plugin-Fehler](#skipping-connection-recent-failure-cached) |317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Plugin-Fehler](#skipping-connection-recent-failure-cached) |

318| `Error: No such tool available: <tool name>` | [Werkzeugfehler](#no-such-tool-available) |318| `Error: No such tool available: <tool name>` | [Werkzeugfehler](#no-such-tool-available) |

319| `MCP server "<name>" connection closed before the tool call was answered` | [Werkzeugfehler](#connection-closed-before-the-tool-call-was-answered) |319| `MCP server "<name>" connection closed before the tool call was answered` | [Werkzeugfehler](#connection-closed-before-the-tool-call-was-answered) |

320| `MCP server "<name>" is disabled — re-enable it via /mcp to use its tools` | [Tool-Fehler](#mcp-server-is-disabled) |

321| `MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit.` | [Werkzeugfehler](#mcp-tool-call-timed-out-with-the-servers-question-unanswered) |

320| `would be spawned with zero tools — refusing` | [Werkzeugfehler](#agent-would-be-spawned-with-zero-tools) |322| `would be spawned with zero tools — refusing` | [Werkzeugfehler](#agent-would-be-spawned-with-zero-tools) |

321| `File is covered by a Read deny rule in your permission settings` | [Werkzeugfehler](#file-is-covered-by-a-read-deny-rule) |323| `File is covered by a Read deny rule in your permission settings` | [Werkzeugfehler](#file-is-covered-by-a-read-deny-rule) |

322| `cannot contain null bytes (\0)` | [Werkzeugfehler](#path-cannot-contain-null-bytes) |324| `cannot contain null bytes (\0)` | [Werkzeugfehler](#path-cannot-contain-null-bytes) |


348| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Werkzeugfehler](#disk-quota-or-temp-filesystem-is-full) |350| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Werkzeugfehler](#disk-quota-or-temp-filesystem-is-full) |

349| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Werkzeugfehler](#disk-quota-or-temp-filesystem-is-full) |351| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Werkzeugfehler](#disk-quota-or-temp-filesystem-is-full) |

350| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Werkzeugfehler](#file-is-not-valid-utf-8) |352| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Werkzeugfehler](#file-is-not-valid-utf-8) |

353| `git is not installed on this Mac. To install it, run xcode-select --install, then try again.` | [Tool-Fehler](#git-is-not-installed-on-this-mac) |

351| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Werkzeugfehler](#the-source-file-is-not-valid-utf-8-text) |354| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Werkzeugfehler](#the-source-file-is-not-valid-utf-8-text) |

352| `the source file has the replacement character U+FFFD` | [Werkzeugfehler](#the-source-file-is-not-valid-utf-8-text) |355| `the source file has the replacement character U+FFFD` | [Werkzeugfehler](#the-source-file-is-not-valid-utf-8-text) |

353| `Not published: that file is on a network share` | [Werkzeugfehler](#not-published-that-file-is-on-a-network-share) |356| `Not published: that file is on a network share` | [Werkzeugfehler](#not-published-that-file-is-on-a-network-share) |


487 490 

488Während Claude den [Advisor](https://code.claude.com/docs/de/advisor.md) konsultiert, erscheint das Banner erst nach 90 statt 20 Sekunden ohne Daten, da eine lange Advisor-Prüfung deutlich länger als 20 Sekunden nichts senden kann. Vor v2.1.214 galt der Schwellenwert von 20 Sekunden auch während Advisor-Aufrufen, sodass das Banner bei Advisor-Prüfungen erschien, obwohl kein Problem vorlag.491Während Claude den [Advisor](https://code.claude.com/docs/de/advisor.md) konsultiert, erscheint das Banner erst nach 90 statt 20 Sekunden ohne Daten, da eine lange Advisor-Prüfung deutlich länger als 20 Sekunden nichts senden kann. Vor v2.1.214 galt der Schwellenwert von 20 Sekunden auch während Advisor-Aufrufen, sodass das Banner bei Advisor-Prüfungen erschien, obwohl kein Problem vorlag.

489 492 

493#### Das Warte-Banner erscheint und verschwindet hinter einem Gateway

494 

495Wenn das Banner `Waiting for API response` erscheint und wieder verschwindet, während Claude nachdenkt, und Sie sich über ein Gateway verbinden, [aktualisieren Sie Claude Code](https://code.claude.com/docs/de/setup.md#update-claude-code) auf v2.1.309 oder höher. Das Banner erscheint bei diesen Verbindungen nach 45 Sekunden ohne Daten:

496 

497* [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/de/env-vars) ist auf einen anderen Host als die Anthropic API gesetzt, etwa ein [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway)

498* Eine Sitzung über das [Claude apps gateway](https://code.claude.com/docs/de/claude-apps-gateway)

499* [Claude Platform on AWS](https://code.claude.com/docs/de/claude-platform-on-aws.md) mit gesetztem `ANTHROPIC_AWS_BASE_URL`

500 

501Vor v2.1.309 erschien das Banner bei diesen Verbindungen nach 20 Sekunden.

502 

490### Verhalten bei Wiederholungsversuchen anpassen503### Verhalten bei Wiederholungsversuchen anpassen

491 504 

492Sie können das Verhalten bei Wiederholungsversuchen mit diesen Umgebungsvariablen anpassen:505Sie können das Verhalten bei Wiederholungsversuchen mit diesen Umgebungsvariablen anpassen:


3256 3269 

3257**Was zu tun ist:**3270**Was zu tun ist:**

3258 3271 

3259* Hängen Sie in einem Skript oder CI-Job `--trust-workspace` an, um dem Checkout nur für diese Ausführung zu vertrauen: `claude ultrareview --trust-workspace`. Hängen Sie es nur bei Code an, dem Sie vertrauen, weil die Git-Konfiguration und die Claude-Code-Projekteinstellungen des Checkouts dann Programme ausführen können. Um einen Pull Request zu prüfen, dessen Code Sie nicht vertrauen, siehe [wie Sie ihn aus einem Checkout prüfen, dem Sie vertrauen](https://code.claude.com/docs/de/ultrareview.md#trust-the-folder-before-the-review-runs).3272* In einem Skript oder CI-Job hängen Sie `--trust-workspace` an, um dem Ordner für diesen Lauf zu vertrauen: `claude ultrareview --trust-workspace`. Hängen Sie es nur für Code an, dem Sie vertrauen, denn Git und Claude Code können dann Programme ausführen, die in der Git-Konfiguration und den Projekteinstellungen des Ordners genannt sind. Für einen Pull Request, dessen Code Sie nicht vertrauen, [führen Sie das Review von einem Branch aus, dem Sie vertrauen](https://code.claude.com/docs/de/ultrareview.md#trust-the-folder-before-the-review-runs).

3260* Auf Ihrem eigenen Rechner führen Sie `claude` in diesem Ordner aus und akzeptieren den [Workspace-Vertrauensdialog](https://code.claude.com/docs/de/permissions.md#project-allow-rules-and-workspace-trust), und führen dann Ihren ursprünglichen Befehl erneut aus3273* Auf Ihrem eigenen Rechner führen Sie `claude` in diesem Ordner aus und akzeptieren den [Workspace-Vertrauensdialog](https://code.claude.com/docs/de/permissions.md#project-allow-rules-and-workspace-trust), und führen dann Ihren ursprünglichen Befehl erneut aus

3261 3274 

3262Jede dieser Meldungen von `claude ultrareview` bedeutet, dass kein Review gestartet wurde und der Exit-Code 1 ist:3275Jede dieser Meldungen von `claude ultrareview` bedeutet, dass kein Review gestartet wurde und der Exit-Code 1 ist:


3265* **`Error: Workspace not trusted. <folder> is your home directory`**: Da das Vertrauen für Ihr Home-Verzeichnis nie gespeichert wird, hilft es nicht, dort zuerst `claude` auszuführen. Führen Sie `claude ultrareview` stattdessen aus einem Projektverzeichnis aus, nachdem Sie dort einmal `claude` ausgeführt und den Vertrauensdialog akzeptiert haben, oder hängen Sie `--trust-workspace` an.3278* **`Error: Workspace not trusted. <folder> is your home directory`**: Da das Vertrauen für Ihr Home-Verzeichnis nie gespeichert wird, hilft es nicht, dort zuerst `claude` auszuführen. Führen Sie `claude ultrareview` stattdessen aus einem Projektverzeichnis aus, nachdem Sie dort einmal `claude` ausgeführt und den Vertrauensdialog akzeptiert haben, oder hängen Sie `--trust-workspace` an.

3266* **`No answer in time.` gefolgt von `Error: Workspace not trusted`**: Die Frage `Trust <folder>? [y/N]` blieb 5 Minuten lang unbeantwortet. Führen Sie `claude ultrareview` erneut aus und beantworten Sie sie.3279* **`No answer in time.` gefolgt von `Error: Workspace not trusted`**: Die Frage `Trust <folder>? [y/N]` blieb 5 Minuten lang unbeantwortet. Führen Sie `claude ultrareview` erneut aus und beantworten Sie sie.

3267* **`Ultrareview did not start: <folder> is not trusted`**: Sie haben bei der Frage `Trust <folder>? [y/N]` abgelehnt, zum Beispiel indem Sie `n` geantwortet oder Enter gedrückt haben. Um das Review zu starten, führen Sie `claude ultrareview` erneut aus und antworten Sie `y`.3280* **`Ultrareview did not start: <folder> is not trusted`**: Sie haben bei der Frage `Trust <folder>? [y/N]` abgelehnt, zum Beispiel indem Sie `n` geantwortet oder Enter gedrückt haben. Um das Review zu starten, führen Sie `claude ultrareview` erneut aus und antworten Sie `y`.

3268* **``Ultrareview did not start: `--trust-workspace` takes no value``**: Auf `--trust-workspace` folgt etwas anderes als ein Flag, etwa eine PR-Nummer oder `false`. Wenn Sie dem Ordner nicht vertrauen, lassen Sie das Flag weg. Um ihm für diese Ausführung zu vertrauen, setzen Sie die PR-Nummer oder den Basis-Branch vor das Flag: `claude ultrareview 1234 --trust-workspace`.3281* **``Ultrareview did not start: `--trust-workspace` takes no value``**: Auf `--trust-workspace` folgt etwas anderes als ein Flag, etwa eine PR-Nummer oder `false`. Wenn Sie dem Ordner nicht vertrauen, lassen Sie das Flag weg. Um ihm für diesen Lauf zu vertrauen, setzen Sie die PR-Nummer oder den Basis-Branch vor das Flag: `claude ultrareview 1234 --trust-workspace`.

3269 3282 

3270Vor v2.1.309 akzeptierte `claude ultrareview` kein `--trust-workspace`.3283Vor v2.1.309 akzeptierte `claude ultrareview` kein `--trust-workspace`.

3271 3284 


3526 3539 

3527Verwandte Meldungen treten auf, bevor der Befehl überhaupt ausgeführt wird:3540Verwandte Meldungen treten auf, bevor der Befehl überhaupt ausgeführt wird:

3528 3541 

3529* `Shell command permission check failed for pattern "..."`: Die Berechtigungsprüfung des Befehls hat ihn nicht zugelassen. [Berechtigungsprüfungen für eingefügte Befehle](https://code.claude.com/docs/de/skills.md#permission-checks-on-injected-commands) beschreibt, welche Ergebnisse in welchem Berechtigungsmodus abbrechen und wie Sie einen Befehl mit `allowed-tools` vorab genehmigen3542* `Shell command permission check failed for pattern "..."`: Die Berechtigungsprüfung des Befehls hat ihn nicht zugelassen. [Berechtigungsprüfungen für eingefügte Befehle](https://code.claude.com/docs/de/skills.md#permission-checks-on-injected-commands) beschreibt, welche Ergebnisse in den einzelnen Berechtigungsmodi zum Abbruch führen und wie Sie einen Befehl mit `allowed-tools` vorab genehmigen

3530* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: Das Frontmatter des Skills verlangt bash auf einem Rechner, auf dem es fehlt. Installieren Sie Git for Windows oder ändern Sie das Frontmatter zu `shell: powershell`. Siehe [Wie eingefügte Befehle ausgeführt werden](https://code.claude.com/docs/de/skills.md#how-injected-commands-run)3543* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: Das Frontmatter des Skills verlangt Bash auf einem Rechner ohne Bash. Installieren Sie Git for Windows oder ändern Sie das Frontmatter in `shell: powershell`. Siehe [Wie eingefügte Befehle ausgeführt werden](https://code.claude.com/docs/de/skills.md#how-injected-commands-run)

3531* `No shell command in <name> was run`: Einer der `!`-Befehle der Datei enthält ein rohes Steuerzeichen außer Tab oder Zeilenumbruch, daher wird keiner davon ausgeführt. Siehe [wie Sie das Zeichen finden und entfernen](#no-shell-command-was-run)3544* `No shell command in <name> was run`: Einer der `!`-Befehle der Datei enthält ein rohes Steuerzeichen außer Tab oder Zeilenumbruch, daher wird keiner davon ausgeführt. Siehe [wie Sie das Zeichen finden und entfernen](#no-shell-command-was-run)

3532 3545 

3533**Vorgehensweise:**3546**Vorgehensweise:**


3678 3691 

3679* **Sie haben keinen Basis-Branch übergeben**: Claude Code hat mit dem Standard-Branch des Repositorys verglichen und schlägt vor, Ihre Basis explizit zu übergeben, wie im obigen Beispiel3692* **Sie haben keinen Basis-Branch übergeben**: Claude Code hat mit dem Standard-Branch des Repositorys verglichen und schlägt vor, Ihre Basis explizit zu übergeben, wie im obigen Beispiel

3680* **Sie haben einen Basis-Branch übergeben, der bereits in Ihrem Klon vorhanden war**: Der Hinweis lautet ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3693* **Sie haben einen Basis-Branch übergeben, der bereits in Ihrem Klon vorhanden war**: Der Hinweis lautet ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3681* **Sie haben einen Basis-Branch übergeben, der nicht in Ihrem Klon vorhanden war**: Claude Code hat ihn vor dem Vergleich von origin abgerufen. Der Hinweis lautet ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; wenn Claude Code nicht feststellen kann, ob Ihr Klon shallow ist, schlägt es stattdessen `git fetch --unshallow origin` vor. Vor v2.1.221 schlug der Hinweis für jeden abgerufenen Basis-Branch `git fetch --unshallow origin` vor, und bei einem vollständigen Klon schlägt dieser Befehl mit `fatal: --unshallow on a complete repository does not make sense` fehl.3694* **Sie haben einen Basis-Branch übergeben, der nicht in Ihrem Klon vorhanden war**: Claude Code hat ihn vor dem Vergleich von origin abgerufen. Der Hinweis lautet ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; wenn Claude Code nicht erkennen kann, ob Ihr Klon flach ist, schlägt es stattdessen `git fetch --unshallow origin` vor. Vor v2.1.221 schlug der Hinweis für jeden abgerufenen Basis-Branch `git fetch --unshallow origin` vor, und bei einem vollständigen Klon schlägt dieser Befehl mit `fatal: --unshallow on a complete repository does not make sense` fehl.

3682 3695 

3683**Vorgehensweise:**3696**Vorgehensweise:**

3684 3697 


4419* Wenn die Aktion nicht stattgefunden hat, bitten Sie Claude, das Tool erneut auszuführen. Sie müssen den Server vorher nicht neu verbinden, da Claude Code sich beim nächsten Aufruf eines seiner Tools erneut mit ihm verbindet. Wenn auch diese Verbindung fehlschlägt, siehe [Verbindungsabbrüche eines Remote-Servers während der Sitzung](https://code.claude.com/docs/de/mcp.md#mid-session-drops-of-a-remote-server).4432* Wenn die Aktion nicht stattgefunden hat, bitten Sie Claude, das Tool erneut auszuführen. Sie müssen den Server vorher nicht neu verbinden, da Claude Code sich beim nächsten Aufruf eines seiner Tools erneut mit ihm verbindet. Wenn auch diese Verbindung fehlschlägt, siehe [Verbindungsabbrüche eines Remote-Servers während der Sitzung](https://code.claude.com/docs/de/mcp.md#mid-session-drops-of-a-remote-server).

4420* Wenn Sie den Server entwickeln und das Tool gefahrlos zweimal aufgerufen werden kann, [markieren Sie es als sicher wiederholbar](https://code.claude.com/docs/de/mcp.md#tool-calls-pending-when-a-connection-closes), damit Claude Code einen verlorenen Aufruf wiederholen kann4433* Wenn Sie den Server entwickeln und das Tool gefahrlos zweimal aufgerufen werden kann, [markieren Sie es als sicher wiederholbar](https://code.claude.com/docs/de/mcp.md#tool-calls-pending-when-a-connection-closes), damit Claude Code einen verlorenen Aufruf wiederholen kann

4421 4434 

4435### MCP-Server ist deaktiviert

4436 

4437Diese Nachricht in einem Tool-Ergebnis bedeutet, dass Claude ein Tool auf einem [MCP-Server](https://code.claude.com/docs/de/mcp.md) aufgerufen hat, der [ausgeschaltet](https://code.claude.com/docs/de/mcp.md#disable-a-server-without-removing-it) ist. Claude Code hat sich nicht mit dem Server verbunden, daher wurde das Tool nicht ausgeführt, und Claude hat diesen Text anstelle eines Ergebnisses erhalten:

4438 

4439```text wrap theme={null}

4440MCP server "<name>" is disabled — re-enable it via /mcp to use its tools

4441```

4442 

4443**Was zu tun ist:**

4444 

4445* Wenn Sie den Server absichtlich ausgeschaltet haben, müssen Sie nichts tun

4446* Wenn Claude die Tools des Servers benötigt, schalten Sie ihn über `/mcp` im Eingabefeld von Claude Code wieder ein

4447* In einer [Agent SDK](https://code.claude.com/docs/de/agent-sdk/overview.md)-Anwendung schalten Sie den Server wieder ein, indem Sie in TypeScript [`toggleMcpServer()`](https://code.claude.com/docs/de/agent-sdk/typescript#togglemcpserver) mit `enabled` auf `true` aufrufen oder in Python [`toggle_mcp_server()`](https://code.claude.com/docs/de/agent-sdk/python#claudesdkclient) mit `enabled` auf `True`

4448 

4449### MCP-Tool-Aufruf hat das Zeitlimit überschritten, ohne dass die Frage des Servers beantwortet wurde

4450 

4451Im [nicht interaktiven Modus](https://code.claude.com/docs/de/headless.md) hat ein [MCP-Server](https://code.claude.com/docs/de/mcp.md) während eines Tool-Aufrufs über [Elicitation](https://code.claude.com/docs/de/mcp.md#respond-to-mcp-elicitation-requests) eine Eingabe angefordert, und das Zeitlimit des Aufrufs lief ab, bevor eine Antwort kam:

4452 

4453```text theme={null}

4454MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit. Do not call this tool again in this turn. Tell the user that the server's question got no answer, and wait for their reply.

4455```

4456 

4457Vor v2.1.310 endete das Ergebnis bei `timed out after <N>s` und erwähnte die Frage nicht.

4458 

4459**Was zu tun ist:**

4460 

4461* Richten Sie einen [`Elicitation`-Hook](https://code.claude.com/docs/de/hooks#elicitation) ein, der die Anfragen des Servers beantwortet

4462* Sorgen Sie in einer TypeScript-Agent-SDK-Anwendung dafür, dass Ihr [`onElicitation`](https://code.claude.com/docs/de/agent-sdk/typescript#options)-Callback seine Antwort zurückgibt, bevor das Limit abläuft

4463* Um einer Antwort mehr Zeit zu geben, setzen Sie im Konfigurationseintrag des Servers einen längeren [`timeout`](https://code.claude.com/docs/de/mcp#time-limits-on-mcp-tool-calls) in Millisekunden, etwa `"timeout": 600000` für 10 Minuten

4464* Führen Sie die Aufgabe stattdessen in einer interaktiven Sitzung aus und beantworten Sie den [Dialog](https://code.claude.com/docs/de/mcp.md#respond-to-mcp-elicitation-requests) des Servers selbst

4465 

4422### Agent würde mit null Tools erzeugt4466### Agent würde mit null Tools erzeugt

4423 4467 

4424Jeder Eintrag in der [`tools`-Liste](https://code.claude.com/docs/de/sub-agents#supported-frontmatter-fields) des Subagenten konnte mit keinem verwendbaren Tool abgeglichen werden, daher weigerte sich Claude Code, den Subagenten zu starten: Ohne Tools konnte er nicht handeln. Die Nachricht gruppiert Ihre Einträge nach dem, was schiefgelaufen ist:4468Jeder Eintrag in der [`tools`-Liste](https://code.claude.com/docs/de/sub-agents#supported-frontmatter-fields) des Subagenten konnte mit keinem verwendbaren Tool abgeglichen werden, daher weigerte sich Claude Code, den Subagenten zu starten: Ohne Tools konnte er nicht handeln. Die Nachricht gruppiert Ihre Einträge nach dem, was schiefgelaufen ist:


4741The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4785The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.

4742```4786```

4743 4787 

4744Die anderen drei Nachrichten folgen auf einen Befehl, der ausgeführt wurde und mit einem Exit-Code ungleich null beendet wurde. Dieses Beispiel zeigt die Form `Disk full:`:4788Die Nachrichten `Disk full:`, `Disk quota used up:` und `Nearly out of inodes:` folgen auf einen Befehl, der ausgeführt wurde und mit einem Exit-Code ungleich null beendet wurde. Zum Beispiel:

4745 4789 

4746```text wrap theme={null}4790```text wrap theme={null}

4747Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4791Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.


4751 4795 

4752* Führen Sie unter macOS und Linux `df -h <dir>` in Ihrer Shell aus, um zu sehen, welches Volume das Verzeichnis enthält und wie voll es ist. `df -i <dir>` zeigt, wie viele Inodes frei sind. `<dir>` ist das Verzeichnis, das Ihre Nachricht nennt, wie in `df -i /tmp/claude-501`4796* Führen Sie unter macOS und Linux `df -h <dir>` in Ihrer Shell aus, um zu sehen, welches Volume das Verzeichnis enthält und wie voll es ist. `df -i <dir>` zeigt, wie viele Inodes frei sind. `<dir>` ist das Verzeichnis, das Ihre Nachricht nennt, wie in `df -i /tmp/claude-501`

4753* **`Disk full: this computer's volume` oder `disk is full (ENOSPC)`**: Löschen Sie an beliebiger Stelle auf diesem Volume Dateien, die Sie nicht benötigen4797* **`Disk full: this computer's volume` oder `disk is full (ENOSPC)`**: Löschen Sie an beliebiger Stelle auf diesem Volume Dateien, die Sie nicht benötigen

4754* **`Disk quota used up:` oder `Disk full: a test write`**: Löschen Sie Ihre eigenen Dateien auf diesem Volume, auch wenn es noch freien Speicherplatz anzeigt4798* **`Disk quota used up:`, `disk quota is used up (EDQUOT)` oder `Disk full: a test write`**: Löschen Sie Ihre eigenen Dateien auf diesem Volume, auch wenn es noch freien Speicherplatz anzeigt

4755* **`disk quota is used up (EDQUOT)`**: Löschen Sie Ihre eigenen Dateien auf diesem Volume

4756* **`Nearly out of inodes:`**: Löschen Sie viele Dateien auf diesem Volume. Jede belegt unabhängig von ihrer Größe einen Inode, daher zählt ihre Anzahl, nicht ihre Größe4799* **`Nearly out of inodes:`**: Löschen Sie viele Dateien auf diesem Volume. Jede belegt unabhängig von ihrer Größe einen Inode, daher zählt ihre Anzahl, nicht ihre Größe

4757* Oder starten Sie Claude Code neu, wobei [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/de/env-vars) auf ein Verzeichnis auf einem Volume mit ausreichend Platz gesetzt ist4800* Oder starten Sie Claude Code neu, wobei [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/de/env-vars) auf ein Verzeichnis auf einem Volume mit ausreichend Platz gesetzt ist

4758* Lassen Sie Claude den Befehl dann erneut ausführen4801* Lassen Sie Claude den Befehl dann erneut ausführen


4766 4809 

4767Vor v2.1.305 gab ein Befehl, den Claude Code wegen voller Festplatte nicht starten konnte, nur den Fehlertext des Betriebssystems zurück. Dieser Text lautete zum Beispiel `ENOSPC: no space left on device, open <path>.output`.4810Vor v2.1.305 gab ein Befehl, den Claude Code wegen voller Festplatte nicht starten konnte, nur den Fehlertext des Betriebssystems zurück. Dieser Text lautete zum Beispiel `ENOSPC: no space left on device, open <path>.output`.

4768 4811 

4812### git ist auf diesem Mac nicht installiert

4813 

4814Diese Nachricht bedeutet, dass ein Schritt in Claude Code git benötigte und das gefundene git Apples Platzhalter unter `/usr/bin/git` ist. Die Entwicklertools, die git bereitstellen, sind nicht installiert.

4815 

4816Claude Code startet den Platzhalter nicht und zeigt stattdessen diesen Text an, zum Beispiel innerhalb einer längeren Nachricht:

4817 

4818```text wrap theme={null}

4819git is not installed on this Mac. To install it, run xcode-select --install, then try again.

4820```

4821 

4822**Was zu tun ist:**

4823 

4824* Führen Sie im Terminal `xcode-select --install` aus, schließen Sie die damit gestartete Installation ab und versuchen Sie dann erneut, was Sie in Claude Code getan haben

4825 

4769### Datei ist kein gültiges UTF-84826### Datei ist kein gültiges UTF-8

4770 4827 

4771Claude hat das Edit- oder NotebookEdit-Tool auf eine Datei angewendet, deren Bytes sich nicht als UTF-8 dekodieren lassen, und Claude Code hat die Änderung abgelehnt. Es wurde nichts geschrieben, die Datei ist also unverändert. Diese Tools speichern die gesamte Datei als UTF-8 zurück, wodurch jedes Byte, das sie nicht dekodieren konnten, in das Ersatzzeichen `U+FFFD` umgewandelt worden wäre. Die Nachricht erscheint im Tool-Ergebnis:4828Claude hat das Edit- oder NotebookEdit-Tool auf eine Datei angewendet, deren Bytes sich nicht als UTF-8 dekodieren lassen, und Claude Code hat die Änderung abgelehnt. Es wurde nichts geschrieben, die Datei ist also unverändert. Diese Tools speichern die gesamte Datei als UTF-8 zurück, wodurch jedes Byte, das sie nicht dekodieren konnten, in das Ersatzzeichen `U+FFFD` umgewandelt worden wäre. Die Nachricht erscheint im Tool-Ergebnis:

fast-mode.md +21 −11

Details

155 155 

156Bevor Claude Code den Schnellmodus anbietet, prüft es die Verfügbarkeit des Schnellmodus Ihrer Organisation mit einer direkten Anfrage an `api.anthropic.com`. Die Prüfung folgt nicht [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential), daher schlägt die Prüfung in einem Netzwerk fehl, das Claude-Verkehr durch ein [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway) leitet und direkten Ausgang zu `api.anthropic.com` blockiert, obwohl Inferenzanfragen funktionieren. Die Prüfung verwendet einen konfigurierten [HTTP-Proxy](https://code.claude.com/docs/de/network-config.md#proxy-configuration), daher schlägt eine Netzwerkblockade die Prüfung nur dort fehl, wo `api.anthropic.com` auch über den Proxy nicht erreichbar ist.156Bevor Claude Code den Schnellmodus anbietet, prüft es die Verfügbarkeit des Schnellmodus Ihrer Organisation mit einer direkten Anfrage an `api.anthropic.com`. Die Prüfung folgt nicht [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential), daher schlägt die Prüfung in einem Netzwerk fehl, das Claude-Verkehr durch ein [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway) leitet und direkten Ausgang zu `api.anthropic.com` blockiert, obwohl Inferenzanfragen funktionieren. Die Prüfung verwendet einen konfigurierten [HTTP-Proxy](https://code.claude.com/docs/de/network-config.md#proxy-configuration), daher schlägt eine Netzwerkblockade die Prüfung nur dort fehl, wo `api.anthropic.com` auch über den Proxy nicht erreichbar ist.

157 157 

158Wenn die Prüfung fehlschlägt, meldet `/fast` „Fast mode unavailable due to network connectivity issues“, und Anfragen werden mit Standardgeschwindigkeit ausgeführt, auch wenn Ihre Organisation den Schnellmodus aktiviert hat. Eine Prüfung, die in der Vergangenheit erfolgreich war, funktioniert weiterhin aus ihrem zwischengespeicherten Ergebnis, daher betrifft eine blockierte Prüfung hauptsächlich neue Installationen.158Wenn Ihre Organisation den Fast-Modus aktiviert hat und `/fast` etwas anderes meldet, suchen Sie die angezeigte Meldung unter den folgenden Fällen.

159 159 

160Die gleiche Konnektivitätsmeldung wird in einem offenen Netzwerk angezeigt, wenn die Prüfung `api.anthropic.com` erreicht, aber eine Anmeldedaten präsentiert, die Anthropic ablehnt. Eine Sitzung, deren aufgelöster Schlüssel eine vom Gateway ausgegebene Anmeldedaten ist, die in [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential) gespeichert oder von einem [`apiKeyHelper`](https://code.claude.com/docs/de/settings-reference#apikeyhelper) erzeugt wird, sendet die Prüfung mit diesem Schlüssel, und die abgelehnte Anfrage wird als Konnektivitätsfehler gemeldet.160#### Fast mode unavailable due to network connectivity issues

161 161 

162Um den Schnellmodus wiederherzustellen, erlauben Sie direkten Ausgang zu `api.anthropic.com`, wenn eine Netzwerkblockade die Ursache ist, oder setzen Sie die Variable, die dem Fehler der Prüfung entspricht:162Die Verfügbarkeitsprüfung ist fehlgeschlagen, beispielsweise weil Ihr Netzwerk `api.anthropic.com` blockiert, und Anfragen werden mit Standardgeschwindigkeit ausgeführt. Eine Prüfung, die in der Vergangenheit erfolgreich war, funktioniert weiterhin aus ihrem zwischengespeicherten Ergebnis, daher betrifft eine blockierte Prüfung hauptsächlich neue Installationen.

163 163 

164* `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` behandelt eine fehlgeschlagene Prüfung als verfügbar und berücksichtigt immer noch eine „disabled by your organization“-Antwort. Verwenden Sie dies, wenn Ihr Netzwerk die Verbindung verweigert, oder wenn Anthropic eine Gateway-Anmeldedaten ablehnt; Whitelisting hilft nicht im Fall der Anmeldedaten, da nichts blockiert wird.164Um den Fast-Modus wiederherzustellen, nehmen Sie direkten Ausgang zu `api.anthropic.com` in die Allowlist auf, oder setzen Sie `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`, was eine fehlgeschlagene Prüfung als verfügbar behandelt und eine „disabled by your organization“-Antwort weiterhin berücksichtigt.

165* `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` überspringt die Prüfung vollständig. Verwenden Sie dies, wenn Ihr Netzwerk die Anfrage abfängt, anstatt sie zu verweigern.

166 165 

167Zwei Gateway-Konfigurationen melden „Fast mode has been disabled by your organization“ anstelle der Konnektivitätsmeldung, auch wenn Ihre Organisation den Schnellmodus aktiviert hat:166#### Fast mode is currently unavailable

168 167 

169* Eine Sitzung, die sich nur mit [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential) authentifiziert, überspringt die Prüfung: Ohne eine claude.ai-Anmeldung oder einen Anthropic API-Schlüssel und ohne eine zwischengespeicherte erfolgreiche Prüfung behandelt Claude Code den Schnellmodus als von Ihrer Organisation deaktiviert, ohne die Anfrage zu senden.168Prüfen Sie hinter einem Gateway, ob eine der folgenden Konfigurationen vorliegt, in denen Claude Code die Verfügbarkeitsprüfung nicht sendet und keine frühere erfolgreiche Prüfung zwischengespeichert hat:

170* Ein Proxy, der die Prüfung abfängt und mit seiner eigenen Seite antwortet, beispielsweise ein TLS-inspizierender Proxy, der eine HTTP 200-Blockierungsseite zurückgibt, wird als Antwort gelesen, die besagt, dass Ihre Organisation den Schnellmodus deaktiviert hat.

171 169 

172Setzen Sie in beiden Fällen `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`, um den Schnellmodus wiederherzustellen. `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS` gilt nicht für beide Fälle, da es nur fehlgeschlagene Prüfungen umgeht und beide eine deaktivierte Antwort erzeugen. Whitelisting direkten Ausgangs hilft nicht im Fall des Bearer-Tokens, der die Anfrage nie sendet.170* Sie richten `ANTHROPIC_BASE_URL` auf Ihr Gateway und setzen [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential) auf einen vom Gateway ausgegebenen Schlüssel, der nicht das Format eines Anthropic API-Schlüssels hat. Claude Code sendet einen solchen Schlüssel nicht an `api.anthropic.com`.

171* Sie setzen [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/de/env-vars), sodass Claude Code die Prüfung überspringt.

173 172 

174Die Variablen beeinflussen nur die clientseitige Prüfung. Wenn Ihre Organisation den Schnellmodus deaktiviert hat, lehnt die API Schnellmodus-Anfragen ab, unabhängig davon, ob sie gesetzt sind. Eine Ablehnung von der API bleibt bestehen, auch wenn eine Skip-Variable gesetzt ist. Claude Code versucht die abgelehnte Anfrage mit Standardgeschwindigkeit erneut, schaltet den Schnellmodus aus, und `/fast` meldet, dass Ihre Organisation den Schnellmodus deaktiviert hat.173Um den Fast-Modus in beiden Konfigurationen wiederherzustellen, setzen Sie `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`.

175 174 

176Das Setzen von `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` unterdrückt auch die Verfügbarkeitsprüfung. Ohne eine zuvor zwischengespeicherte erfolgreiche Prüfung meldet `/fast` „Fast mode is currently unavailable“; beide Skip-Variablen stellen den Schnellmodus in dieser Konfiguration auch wieder her.175#### Fast mode has been disabled by your organization

176 

177Hinter einem Gateway kann diese Meldung auch dann erscheinen, wenn Ihre Organisation den Fast-Modus aktiviert hat, und zwar in einer der folgenden Konfigurationen:

178 

179* Sie authentifizieren sich ausschließlich mit [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential), ohne claude.ai-Anmeldung, ohne API-Schlüssel und ohne zwischengespeicherte erfolgreiche Prüfung. Claude Code behandelt den Fast-Modus dann als von Ihrer Organisation deaktiviert, ohne die Anfrage zu senden.

180* Ein Proxy fängt die Prüfung ab und antwortet mit seiner eigenen Seite, beispielsweise ein TLS-inspizierender Proxy, der eine HTTP 200-Blockierungsseite zurückgibt. Claude Code liest diese Seite als Antwort, die besagt, dass Ihre Organisation den Fast-Modus deaktiviert hat.

181 

182Setzen Sie in beiden Fällen `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`, was die Prüfung vollständig überspringt, statt `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS`, das in keinem der beiden Fälle greift.

183 

184> [!NOTE]

185>

186> Die Skip-Variablen ändern nur die clientseitige Prüfung. Wenn Ihre Organisation den Fast-Modus deaktiviert hat, lehnt die API Fast-Modus-Anfragen ab, unabhängig davon, ob sie gesetzt sind. Claude Code versucht die Anfrage dann erneut mit Standardgeschwindigkeit, schaltet den Fast-Modus aus, und `/fast` meldet, dass Ihre Organisation den Fast-Modus deaktiviert hat.

177 187 

178### Opt-in pro Sitzung erforderlich188### Opt-in pro Sitzung erforderlich

179 189 

hooks.md +17 −6

Details

961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.

962```962```

963 963 

964Um herauszufinden, warum der Hook fehlgeschlagen ist, prüfen Sie das [Debug-Log](#debug-hooks). Wählen Sie die Lösung, die zu Ihrem Hook passt:964Wenn der Fehler außerdem `PowerShell started no program` enthält, beginnen Sie mit [den Lösungen für einen `command`, der nur aus Strings in Anführungszeichen besteht](#powershell-started-no-program), die PowerShell ausgibt, statt sie auszuführen.

965 965 

966* **Die Aktion soll fortgesetzt werden, wenn der Hook fehlschlägt**: Fügen Sie dem Hook [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) hinzu966Ohne Git Bash zählt jeder Exit-Code außer 0 oder 2 von diesem Hook als [Fehlschlag](#block-the-action-when-a-hook-fails), auch wenn er JSON ausgibt, das den Aufruf nicht verweigert. Um herauszufinden, warum der Hook fehlgeschlagen ist, prüfen Sie das [Debug-Log](#debug-hooks). Wählen Sie dann die Lösung, die zu Ihrem Hook passt:

967* **Der Hook ist für Bash geschrieben**: Ein Hook in [Shell-Form](#exec-form-and-shell-form) ohne gesetztes `shell` wird in PowerShell ausgeführt, wenn Git Bash nicht installiert ist, und ein für Bash geschriebenes Skript läuft dort möglicherweise nicht unverändert. Installieren Sie [Git for Windows](https://git-scm.com/downloads/win) oder setzen Sie [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/de/env-vars), wenn Git Bash an einem Ort installiert ist, an dem Claude Code es nicht findet, und starten Sie dann eine neue Sitzung967 

968* **Der Aufruf soll fortgesetzt werden, wenn der Hook fehlschlägt**: Fügen Sie dem Hook [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) hinzu

969* **Der Hook wird mit 1 beendet, um zu warnen, muss aber blockieren, wenn er abstürzt**: Mit `"onFailure": "continue"` wird der Aufruf bei Exit-Code 1 fortgesetzt, ob Warnung oder Absturz. Fügen Sie stattdessen `"onFailure": "block"` hinzu und beenden Sie das Skript an den Stellen, an denen es warnt, mit Exit-Code 0, damit diese Aufrufe fortgesetzt werden. Um die Warnung bei `PreToolUse` trotzdem anzuzeigen, geben Sie sie auf stdout im Feld [`systemMessage`](#json-output) eines einzelnen JSON-Objekts aus.

970* **Der Hook ist für Bash geschrieben**: Ohne Git Bash wird ein Hook in [Shell-Form](#exec-form-and-shell-form) ohne gesetztes `shell` in PowerShell ausgeführt, wo er fehlschlagen kann. Installieren Sie [Git for Windows](https://git-scm.com/downloads/win) oder setzen Sie [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/de/env-vars), wenn Git Bash an einem Ort installiert ist, an dem Claude Code es nicht findet. Starten Sie dann eine neue Sitzung.

968* **Der Hook führt eine einzelne `.exe` aus, keine `.cmd`- oder `.bat`-Datei**: Tragen Sie das Programm in `command` und seine Argumente in `args` ein, um die Exec-Form zu verwenden, und fügen Sie `"onFailure": "block"` hinzu. Claude Code startet das Programm dann ohne Shell. Ohne `"onFailure": "block"` kann der Aufruf fortgesetzt werden, wenn das Programm fehlschlägt, fehlt oder in ein Timeout läuft971* **Der Hook führt eine einzelne `.exe` aus, keine `.cmd`- oder `.bat`-Datei**: Tragen Sie das Programm in `command` und seine Argumente in `args` ein, um die Exec-Form zu verwenden, und fügen Sie `"onFailure": "block"` hinzu. Claude Code startet das Programm dann ohne Shell. Ohne `"onFailure": "block"` kann der Aufruf fortgesetzt werden, wenn das Programm fehlschlägt, fehlt oder in ein Timeout läuft

969* **Der Hook wird mit 1 beendet, um zu warnen, muss aber blockieren, wenn er abstürzt**: Mit `"onFailure": "continue"` wird der Aufruf bei Exit-Code 1 fortgesetzt, ob Warnung oder Absturz. Fügen Sie stattdessen `"onFailure": "block"` hinzu und beenden Sie das Skript an den Stellen, an denen es warnt, mit Exit-Code 0, damit diese Aufrufe fortgesetzt werden. Um die Warnung bei `PreToolUse` nach Exit-Code 0 anzuzeigen, geben Sie sie auf stdout im Feld [`systemMessage`](#json-output) eines einzelnen JSON-Objekts aus

970* **Ein PowerShell-Guard-Hook, der bei einem Fehlschlag blockieren muss**: Ohne gesetztes `onFailure` tut er das nicht mehr, sobald Git for Windows installiert ist und Claude Code Git Bash findet. Fügen Sie `"onFailure": "block"` hinzu, damit ein Fehlschlag oder ein Timeout den Aufruf mit oder ohne Git Bash blockiert. Setzen Sie außerdem `"shell": "powershell"`, damit der Hook von da an weiterhin in PowerShell statt in Git Bash ausgeführt wird972* **Ein PowerShell-Guard-Hook, der bei einem Fehlschlag blockieren muss**: Ohne gesetztes `onFailure` tut er das nicht mehr, sobald Git for Windows installiert ist und Claude Code Git Bash findet. Fügen Sie `"onFailure": "block"` hinzu, damit ein Fehlschlag oder ein Timeout den Aufruf mit oder ohne Git Bash blockiert. Setzen Sie außerdem `"shell": "powershell"`, damit der Hook von da an weiterhin in PowerShell statt in Git Bash ausgeführt wird

971 973 

972Bei einem Hook, der diesen Fehler anzeigt, zählt jeder Exit-Code außer 0 oder 2 als [Fehlschlag](#block-the-action-when-a-hook-fails), auch wenn der Hook JSON ausgibt, das den Aufruf nicht verweigert.

973 

974Vor v2.1.309 lautete die Meldung `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`974Vor v2.1.309 lautete die Meldung `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`

975 975 

976#### PowerShell started no program

977 

978Ein Hook mit diesem Fehler wurde in PowerShell ausgeführt, die einen `command`, der nur aus Strings in Anführungszeichen besteht, etwa `"command": "\"C:\\Tools\\guard.exe\""`, ausgibt, statt ihn auszuführen.

979 

980* **Um Text wie JSON auszugeben**: Setzen Sie `"shell": "powershell"`, und der Hook wird mit 0 beendet

981* **Um eine `.ps1`-, `.cmd`- oder `.bat`-Datei oder eine `.exe`, deren Pfad eine Variable enthält, auszuführen**: Setzen Sie `"shell": "powershell"` und stellen Sie `&` vor den Pfad in Anführungszeichen. Lassen Sie `$HOME` unverändert, und schreiben Sie Umgebungsvariablen so, wie das [`check.ps1`-Beispiel](#reference-scripts-by-path-in-powershell-hooks) `$env:CLAUDE_PROJECT_DIR` schreibt

982* **Um eine einzelne `.exe` an einem Pfad ohne `$` auszuführen**: Entfernen Sie die inneren Anführungszeichen aus `command` und wenden Sie dann die [Lösung für einen Hook, der eine einzelne `.exe` ausführt](#failed-hooks-on-windows-without-git-bash), an, wobei Sie `"args": []` schreiben, wenn das Programm keine Argumente erwartet

983* **Um ein für Bash geschriebenes Skript auszuführen**: Wenden Sie die [Lösung für einen für Bash geschriebenen Hook](#failed-hooks-on-windows-without-git-bash) an

984 

976#### Exit-Code-2-Verhalten pro Event985#### Exit-Code-2-Verhalten pro Event

977 986 

978Exit-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.987Exit-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.


4187}4196}

4188```4197```

4189 4198 

4199### Skripte in PowerShell-Hooks über ihren Pfad referenzieren

4200 

4190Um auf das Projektverzeichnis aus einem PowerShell-Shell-Form-Befehl zu verweisen, schreiben Sie `${CLAUDE_PROJECT_DIR}` oder `$env:CLAUDE_PROJECT_DIR`. Claude Code schreibt die Platzhalter `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` und `${CLAUDE_PLUGIN_DATA}` in einem PowerShell-Shell-Form-Befehl in die PowerShell-Form `${env:NAME}` um, unabhängig davon, ob der Hook in `settings.json`, einem Plugin oder einem Skill definiert ist. PowerShell löst dann den Wert aus der exportierten Umgebung nach dem Parsing auf, daher funktioniert der Platzhalter in doppelt angeführten Zeichenketten, aber nicht in einfach angeführten Zeichenketten, wo PowerShell niemals Variablen erweitert.4201Um auf das Projektverzeichnis aus einem PowerShell-Shell-Form-Befehl zu verweisen, schreiben Sie `${CLAUDE_PROJECT_DIR}` oder `$env:CLAUDE_PROJECT_DIR`. Claude Code schreibt die Platzhalter `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` und `${CLAUDE_PLUGIN_DATA}` in einem PowerShell-Shell-Form-Befehl in die PowerShell-Form `${env:NAME}` um, unabhängig davon, ob der Hook in `settings.json`, einem Plugin oder einem Skill definiert ist. PowerShell löst dann den Wert aus der exportierten Umgebung nach dem Parsing auf, daher funktioniert der Platzhalter in doppelt angeführten Zeichenketten, aber nicht in einfach angeführten Zeichenketten, wo PowerShell niemals Variablen erweitert.

4191 4202 

4192Schreiben Sie nicht die bloße Schreibweise `$CLAUDE_PROJECT_DIR` in einem PowerShell-Hook. PowerShell analysiert sie als undefinierte lokale Variable und löst sie zu `$null` auf, was den Skriptpfad ohne sein Projektverzeichnis-Präfix hinterlässt. Claude Code schreibt diese Form nicht um; stattdessen protokolliert es eine Warnung im [Debug-Log](#debug-hooks).4203Schreiben Sie nicht die bloße Schreibweise `$CLAUDE_PROJECT_DIR` in einem PowerShell-Hook. PowerShell analysiert sie als undefinierte lokale Variable und löst sie zu `$null` auf, was den Skriptpfad ohne sein Projektverzeichnis-Präfix hinterlässt. Claude Code schreibt diese Form nicht um; stattdessen protokolliert es eine Warnung im [Debug-Log](#debug-hooks).

jetbrains.md +1 −1

Details

61/ide61/ide

62```62```

63 63 

64Wenn die Verbindung erfolgreich ist, bestätigt Claude Code dies mit einer Meldung wie `Connected to IntelliJ IDEA.` Wenn Claude Code eine laufende IDE erkennt, die das Plugin nicht hat, installiert `/ide` das Plugin für Sie und fordert Sie auf, die IDE neu zu starten.64Wenn die Verbindung erfolgreich ist, bestätigt Claude Code dies mit einer Meldung wie `Connected to IntelliJ IDEA.`

65 65 

66Wenn Sie möchten, dass Claude Zugriff auf die gleichen Dateien wie Ihre IDE hat, starten Sie Claude Code aus dem gleichen Verzeichnis wie Ihr IDE-Projektstammverzeichnis.66Wenn Sie möchten, dass Claude Zugriff auf die gleichen Dateien wie Ihre IDE hat, starten Sie Claude Code aus dem gleichen Verzeichnis wie Ihr IDE-Projektstammverzeichnis.

67 67 

Details

519| `400`-Fehler bei jeder Anfrage, in den eigenen Worten des Gateways, die das Eingabe-Schema eines Tools oder sein `pattern` ablehnen, auf Claude Code v2.1.265 bis v2.1.267 | Bei einem schrittweisen Rollout auf diesen Versionen trägt das [Artifact-Tool](https://code.claude.com/docs/de/artifacts.md#availability)-Schema einen regulären Ausdruck mit `\p{...}` Unicode-Zeichenklassen. Die Anthropic-API akzeptiert ihn, aber ein Gateway oder Upstream, der jedes Tool-Schema `pattern` mit seiner eigenen Regex-Engine überprüft, lehnt die gesamte Anfrage ab | Aktualisieren Sie auf v2.1.268 oder später, das den regulären Ausdruck nicht sendet. Auf einer betroffenen Version [deaktivieren Sie Artifacts](https://code.claude.com/docs/de/artifacts.md#disable-artifacts), das das Tool und sein Schema aus Anfragen entfernt |519| `400`-Fehler bei jeder Anfrage, in den eigenen Worten des Gateways, die das Eingabe-Schema eines Tools oder sein `pattern` ablehnen, auf Claude Code v2.1.265 bis v2.1.267 | Bei einem schrittweisen Rollout auf diesen Versionen trägt das [Artifact-Tool](https://code.claude.com/docs/de/artifacts.md#availability)-Schema einen regulären Ausdruck mit `\p{...}` Unicode-Zeichenklassen. Die Anthropic-API akzeptiert ihn, aber ein Gateway oder Upstream, der jedes Tool-Schema `pattern` mit seiner eigenen Regex-Engine überprüft, lehnt die gesamte Anfrage ab | Aktualisieren Sie auf v2.1.268 oder später, das den regulären Ausdruck nicht sendet. Auf einer betroffenen Version [deaktivieren Sie Artifacts](https://code.claude.com/docs/de/artifacts.md#disable-artifacts), das das Tool und sein Schema aus Anfragen entfernt |

520| `400`-Fehler bei jeder Anfrage, in den eigenen Worten des Gateways, die einen nicht erkannten Tool-Typ ablehnen, z. B. `Input tag 'advisor_20260301'`, auf Claude Code v2.1.275 | Bei einem schrittweisen Rollout auf dieser Version enthalten Anfragen einen [Advisor-Tool](https://code.claude.com/docs/de/advisor.md)-Eintrag, auch wenn der Advisor ausgeschaltet ist. Die Anthropic-API akzeptiert ihn, aber ein Gateway oder Upstream, der Tool-Typen validiert, lehnt die gesamte Anfrage ab; einer, der [Anfrage-Body-Felder unverändert weiterleitet](https://code.claude.com/docs/de/llm-gateway-protocol.md#forward-as-open-lists), leitet ihn unbeeinträchtigt durch. Der Eintrag ist eine Deklaration, die keinen Gesprächsinhalt trägt | Aktualisieren Sie auf v2.1.276 oder später, das den Eintrag nicht hinter einem `ANTHROPIC_BASE_URL`-Gateway sendet, es sei denn, Sie schalten den Advisor ein. Auf v2.1.275 legen Sie [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/de/env-vars) fest, das den Eintrag aus Anfragen entfernt |520| `400`-Fehler bei jeder Anfrage, in den eigenen Worten des Gateways, die einen nicht erkannten Tool-Typ ablehnen, z. B. `Input tag 'advisor_20260301'`, auf Claude Code v2.1.275 | Bei einem schrittweisen Rollout auf dieser Version enthalten Anfragen einen [Advisor-Tool](https://code.claude.com/docs/de/advisor.md)-Eintrag, auch wenn der Advisor ausgeschaltet ist. Die Anthropic-API akzeptiert ihn, aber ein Gateway oder Upstream, der Tool-Typen validiert, lehnt die gesamte Anfrage ab; einer, der [Anfrage-Body-Felder unverändert weiterleitet](https://code.claude.com/docs/de/llm-gateway-protocol.md#forward-as-open-lists), leitet ihn unbeeinträchtigt durch. Der Eintrag ist eine Deklaration, die keinen Gesprächsinhalt trägt | Aktualisieren Sie auf v2.1.276 oder später, das den Eintrag nicht hinter einem `ANTHROPIC_BASE_URL`-Gateway sendet, es sei denn, Sie schalten den Advisor ein. Auf v2.1.275 legen Sie [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/de/env-vars) fest, das den Eintrag aus Anfragen entfernt |

521| Modelle fehlen im `/model`-Wähler | Gateway-Modellnamen sind nicht in der integrierten Liste von Claude Code enthalten, oder Claude Code zeigt eine [`modelPicker`](https://code.claude.com/docs/de/settings-reference#modelpicker)-Aufstellung, die die integrierten Optionen ersetzt | Aktivieren Sie die [Gateway-Modellermittlung](#add-gateway-models-to-the-model-picker) oder fügen Sie Namen mit den [Modellkonfiguration](https://code.claude.com/docs/de/model-config.md)-Variablen hinzu. Wenn Claude Code eine ersetzende `modelPicker`-Aufstellung zeigt, fügen Sie die Gateway-Modelle hinzu, oder bitten Sie Ihren Administrator, sie hinzuzufügen, wenn verwaltete Einstellungen es bereitstellen |521| Modelle fehlen im `/model`-Wähler | Gateway-Modellnamen sind nicht in der integrierten Liste von Claude Code enthalten, oder Claude Code zeigt eine [`modelPicker`](https://code.claude.com/docs/de/settings-reference#modelpicker)-Aufstellung, die die integrierten Optionen ersetzt | Aktivieren Sie die [Gateway-Modellermittlung](#add-gateway-models-to-the-model-picker) oder fügen Sie Namen mit den [Modellkonfiguration](https://code.claude.com/docs/de/model-config.md)-Variablen hinzu. Wenn Claude Code eine ersetzende `modelPicker`-Aufstellung zeigt, fügen Sie die Gateway-Modelle hinzu, oder bitten Sie Ihren Administrator, sie hinzuzufügen, wenn verwaltete Einstellungen es bereitstellen |

522| `/fast` meldet `Fast mode unavailable due to network connectivity issues` während Inferenz-Anfragen funktionieren | Die [Fast-Mode](https://code.claude.com/docs/de/fast-mode.md)-Verfügbarkeitsprüfung geht direkt zu `api.anthropic.com` und folgt nicht `ANTHROPIC_BASE_URL`, daher schlägt blockierter direkter Ausgang die Prüfung fehl. Die gleiche Nachricht erscheint in einem offenen Netzwerk, wenn die Prüfung einen vom Gateway ausgestellten Schlüssel von `ANTHROPIC_API_KEY` oder einem `apiKeyHelper` präsentiert und Anthropic ihn ablehnt | Nehmen Sie `api.anthropic.com` in die Allowlist auf, wenn Ausgang blockiert ist, oder legen Sie eine Skip-Variable fest; für einen abgelehnten Gateway-Schlüssel helfen nur die Skip-Variablen. Siehe [Fast-Mode hinter Proxys und LLM-Gateways verwenden](https://code.claude.com/docs/de/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` meldet `Fast mode unavailable due to network connectivity issues` während Inferenz-Anfragen funktionieren | Die Verfügbarkeitsprüfung für den [Fast-Modus](https://code.claude.com/docs/de/fast-mode.md) geht direkt zu `api.anthropic.com` und folgt nicht `ANTHROPIC_BASE_URL`, daher schlägt blockierter direkter Ausgang die Prüfung fehl | Nehmen Sie `api.anthropic.com` in die Allowlist auf, wenn Ausgang blockiert ist, oder legen Sie eine Skip-Variable fest. Siehe [Fast-Modus hinter Proxys und LLM-Gateways verwenden](https://code.claude.com/docs/de/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/fast` meldet `Fast mode has been disabled by your organization` in einer Sitzung, die mit `ANTHROPIC_AUTH_TOKEN` authentifiziert ist, obwohl die Organisation Fast-Mode aktiviert hat | Die Verfügbarkeitsprüfung erfordert einen claude.ai-Login oder einen Anthropic-API-Schlüssel; mit nur einem Bearer-Token behandelt Claude Code Fast-Mode als deaktiviert, ohne die Prüfung zu senden | Legen Sie `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` fest; siehe [Fast-Mode hinter Proxys und LLM-Gateways verwenden](https://code.claude.com/docs/de/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |523| `/fast` meldet `Fast mode is currently unavailable` in einer Sitzung, die sich mit einem vom Gateway ausgestellten Schlüssel in `ANTHROPIC_API_KEY` authentifiziert | Solange `ANTHROPIC_BASE_URL` auf Ihr Gateway zeigt, hält Claude Code einen Schlüssel, der nicht im Format eines Anthropic-API-Schlüssels vorliegt, von `api.anthropic.com` zurück. Die Verfügbarkeitsprüfung für den [Fast-Modus](https://code.claude.com/docs/de/fast-mode.md) wird dann nicht gesendet, und ohne eine zwischengespeicherte frühere erfolgreiche Prüfung behandelt Claude Code den Fast-Modus als nicht verfügbar | Legen Sie `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` fest; siehe [Fast-Modus hinter Proxys und LLM-Gateways verwenden](https://code.claude.com/docs/de/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| `/fast` meldet `Fast mode has been disabled by your organization` in einer Sitzung, die mit `ANTHROPIC_AUTH_TOKEN` authentifiziert ist, obwohl die Organisation den Fast-Modus aktiviert hat | Die Verfügbarkeitsprüfung erfordert einen claude.ai-Login oder einen API-Schlüssel; mit nur einem Bearer-Token behandelt Claude Code den Fast-Modus als deaktiviert, ohne die Prüfung zu senden | Legen Sie `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` fest; siehe [Fast-Modus hinter Proxys und LLM-Gateways verwenden](https://code.claude.com/docs/de/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| Claude Code fordert Sie auf, sich anzumelden, obwohl der [curl-Test](#verify-the-connection) erfolgreich ist | Die CLI hat keine eigene Anmeldedaten: Eine erreichbare Basis-URL ist keine, und in einer interaktiven Sitzung gilt ein `env`-Block in einer Projekt-`.claude/settings.json` oder `.claude/settings.local.json` nur nach dem First-Run-Wizard und der [Vertrauensaufforderung](https://code.claude.com/docs/de/permissions.md#what-runs-before-you-trust-a-folder) | Legen Sie `ANTHROPIC_AUTH_TOKEN` irgendwo fest, wo Claude Code vor dem First-Run-Setup liest: ein Shell-Export, der `env`-Block in `~/.claude/settings.json` oder verwaltete Einstellungen |525| Claude Code fordert Sie auf, sich anzumelden, obwohl der [curl-Test](#verify-the-connection) erfolgreich ist | Die CLI hat keine eigene Anmeldedaten: Eine erreichbare Basis-URL ist keine, und in einer interaktiven Sitzung gilt ein `env`-Block in einer Projekt-`.claude/settings.json` oder `.claude/settings.local.json` nur nach dem First-Run-Wizard und der [Vertrauensaufforderung](https://code.claude.com/docs/de/permissions.md#what-runs-before-you-trust-a-folder) | Legen Sie `ANTHROPIC_AUTH_TOKEN` irgendwo fest, wo Claude Code vor dem First-Run-Setup liest: ein Shell-Export, der `env`-Block in `~/.claude/settings.json` oder verwaltete Einstellungen |

525| `ANTHROPIC_API_KEY` ist festgelegt, wird aber ignoriert, ohne Aufforderung | Der Schlüssel benötigt eine einmalige Genehmigung in interaktiven Sitzungen, und ein zuvor abgelehnter Schlüssel wird ohne erneute Frage ignoriert | Aktivieren Sie ihn unter `/config` mit der Option `Use custom API key` |526| `ANTHROPIC_API_KEY` ist festgelegt, wird aber ignoriert, ohne Aufforderung | Der Schlüssel benötigt eine einmalige Genehmigung in interaktiven Sitzungen, und ein zuvor abgelehnter Schlüssel wird ohne erneute Frage ignoriert | Aktivieren Sie ihn unter `/config` mit der Option `Use custom API key` |

526| `This machine's managed settings require a first-party login`, oder [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/de/errors#administrator-policy-requires-a-cloud-gateway-sign-in) wenn verwaltete Einstellungen `forceLoginMethod` auf `"gateway"` setzen oder auch `forceLoginGatewayUrl` setzen | Verwaltete Einstellungen enthalten `forceLoginMethod` oder `forceLoginOrgUUID`, die nicht mit `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` oder `apiKeyHelper` koexistieren können | Ihr Administrator muss `forceLoginMethod`, `forceLoginOrgUUID` und `forceLoginGatewayUrl` aus verwalteten Einstellungen entfernen, um Gateway-Anmeldedaten zu verwenden, oder die Gateway-Anmeldedaten entfernen und die Anmeldung verwenden, die die verwalteten Einstellungen erfordern. Die beiden können nicht kombiniert werden |527| `This machine's managed settings require a first-party login`, oder [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/de/errors#administrator-policy-requires-a-cloud-gateway-sign-in) wenn verwaltete Einstellungen `forceLoginMethod` auf `"gateway"` setzen oder auch `forceLoginGatewayUrl` setzen | Verwaltete Einstellungen enthalten `forceLoginMethod` oder `forceLoginOrgUUID`, die nicht mit `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` oder `apiKeyHelper` koexistieren können | Ihr Administrator muss `forceLoginMethod`, `forceLoginOrgUUID` und `forceLoginGatewayUrl` aus verwalteten Einstellungen entfernen, um Gateway-Anmeldedaten zu verwenden, oder die Gateway-Anmeldedaten entfernen und die Anmeldung verwenden, die die verwalteten Einstellungen erfordern. Die beiden können nicht kombiniert werden |

mcp.md +4 −4

Details

250 250 

251Die Statuse in dieser Liste melden eine Konfigurationsentscheidung statt eines Verbindungsversuchs, daher gibt Claude Code sie aus, ohne sich mit dem Server zu verbinden:251Die Statuse in dieser Liste melden eine Konfigurationsentscheidung statt eines Verbindungsversuchs, daher gibt Claude Code sie aus, ohne sich mit dem Server zu verbinden:

252 252 

253* ``⏸ Pending approval (run `claude` to approve)``: ein projektweiter Server aus `.mcp.json`, den Sie noch nicht genehmigt haben. Claude Code zeigt ihn sowohl in `claude mcp list` als auch in `claude mcp get <name>` an. Führen Sie `claude` interaktiv aus, um ihn zu prüfen und zu genehmigen.253* ``⏸ Pending approval (run `claude` to approve)``: ein projektbezogener Server aus `.mcp.json`, den Sie noch nicht genehmigt haben. Claude Code zeigt ihn sowohl in `claude mcp list` als auch in `claude mcp get <name>` an. Führen Sie `claude` interaktiv aus, um ihn zu prüfen und zu genehmigen.

254* `✘ Rejected (see disabledMcpjsonServers in settings)`: ein `.mcp.json`-Server, den ein [`disabledMcpjsonServers`](https://code.claude.com/docs/de/settings-reference#disabledmcpjsonservers)-Eintrag ablehnt. Claude Code zeigt ihn nur in `claude mcp get <name>`.254* `✘ Rejected (see disabledMcpjsonServers in settings)`: ein `.mcp.json`-Server, den ein [`disabledMcpjsonServers`](https://code.claude.com/docs/de/settings-reference#disabledmcpjsonservers)-Eintrag ablehnt. Claude Code zeigt ihn nur in `claude mcp get <name>`.

255* `⊘ Disabled for this project (re-enable via /mcp)`: ein Server, den die [`disabledMcpServers`](#disable-a-server-without-removing-it)-Liste des Projekts nennt. Claude Code zeigt ihn sowohl in `claude mcp list` als auch in `claude mcp get <name>`. Schalten Sie den Server über das `/mcp`-Panel wieder ein.255* `⊘ Disabled for this project (re-enable via /mcp)`: ein Server, den die [`disabledMcpServers`](#disable-a-server-without-removing-it)-Liste des Projekts nennt. Claude Code zeigt ihn sowohl in `claude mcp list` als auch in `claude mcp get <name>`. Schalten Sie den Server über das `/mcp`-Panel wieder ein.

256 256 


384Diese Wiederholungsversuche gelten in folgenden Fällen nicht:384Diese Wiederholungsversuche gelten in folgenden Fällen nicht:

385 385 

386* Die erste Verbindung eines Stdio-Servers. Um es erneut zu versuchen, siehe [Stdio-Server, die beendet werden oder nicht starten](#stdio-servers-that-exit-or-fail-to-start)386* Die erste Verbindung eines Stdio-Servers. Um es erneut zu versuchen, siehe [Stdio-Server, die beendet werden oder nicht starten](#stdio-servers-that-exit-or-fail-to-start)

387* Die erste Verbindung eines WebSocket-Servers387* Die erste Verbindung eines WebSocket-Servers. Um es in einer interaktiven Terminal-Sitzung erneut zu versuchen, wählen Sie im Menü des Servers in `/mcp` **Reconnect** aus

388* Ein Authentifizierungs- oder Not-Found-Fehler, da er eine Konfigurationsänderung erfordert, um ihn zu beheben. Wenn ein [`headersHelper`](#use-dynamic-headers-for-custom-authentication) die einzige Quelle des `Authorization`-Headers des Servers ist, versucht Claude Code einen Authentifizierungsfehler trotzdem erneut, da es den Helper bei jedem Versuch erneut ausführt und frische Anmeldedaten abholen kann388* Ein Authentifizierungs- oder Not-Found-Fehler, da er eine Konfigurationsänderung erfordert, um ihn zu beheben. Wenn ein [`headersHelper`](#use-dynamic-headers-for-custom-authentication) die einzige Quelle des `Authorization`-Headers des Servers ist, versucht Claude Code einen Authentifizierungsfehler trotzdem erneut, da es den Helper bei jedem Versuch erneut ausführt und frische Anmeldedaten abholen kann

389 389 

390#### Stdio-Server, die beendet werden oder nicht starten390#### Stdio-Server, die beendet werden oder nicht starten


403 403 

404#### Fehlgeschlagene Server selbst erneut versuchen404#### Fehlgeschlagene Server selbst erneut versuchen

405 405 

406Um die Verbindung zu jedem Server, der fehlgeschlagen ist oder eine Authentifizierung benötigt, erneut zu versuchen, führen Sie `/mcp reconnect all` aus. Im interaktiven Terminal erfordert dies Claude Code v2.1.284 oder später, und frühere Versionen geben dort `MCP server "all" not found` aus.406Um alle Server erneut zu versuchen, die fehlgeschlagen sind oder eine Authentifizierung benötigen, führen Sie in einer interaktiven Terminal-Sitzung am Claude Code-Prompt `/mcp reconnect all` aus. Dies erfordert Claude Code v2.1.284 oder neuer. Ältere Versionen geben `MCP server "all" not found` aus.

407 407 

408#### Wie Claude erfährt, dass ein Server fehlgeschlagen ist408#### Wie Claude erfährt, dass ein Server fehlgeschlagen ist

409 409 


1332 1332 

1333Server von claude.ai werden in der Liste mit Indikatoren angezeigt, die zeigen, dass sie von claude.ai stammen.1333Server von claude.ai werden in der Liste mit Indikatoren angezeigt, die zeigen, dass sie von claude.ai stammen.

1334 1334 

1335Anthropic stellt auch einige Konnektoren selbst bereit, ohne dass Sie oder ein Admin sie hinzufügen. Bei Konten, auf denen [Claude Docs](https://code.claude.com/docs/de/artifacts.md#write-a-document-with-claude-docs) verfügbar ist, listet `/mcp` `claude.ai Claude Docs` ohne Setup auf, und Claude verwendet es, wenn Sie um ein Dokument für andere Personen bitten. Um es auszuschalten, fügen Sie einen `serverName`-Eintrag von `"claude.ai Claude Docs"` zu `deniedMcpServers` hinzu oder verwenden Sie den `/mcp`-Umschalter, beide beschrieben in [claude.ai-Konnektoren deaktivieren](#disable-claude-ai-connectors).1335Anthropic stellt auch einige Konnektoren selbst bereit, ohne dass Sie oder ein Admin sie hinzufügen. Bei Konten, auf denen [Claude Docs](https://code.claude.com/docs/de/artifacts.md#write-a-document-with-claude-docs) verfügbar ist, listet `/mcp` `claude.ai Claude Docs` ohne Setup auf, und Claude verwendet es, wenn Sie um ein Dokument für andere Personen bitten. Um nur diesen Konnektor auszuschalten, lesen Sie [claude.ai-Konnektoren deaktivieren](#disable-claude-ai-connectors).

1336 1336 

1337Claude Code markiert einen Konnektor als `managed` in `/mcp` und im [`/plugin`](https://code.claude.com/docs/de/plugins/install)-Manager, wenn Ihre Organisation dessen Authentifizierung in claude.ai verwaltet. Der Status „Managed“ ändert nicht, wie Claude Code sich mit dem Konnektor verbindet oder wie die [Tool-Kontrollen](#organization-controls-on-connector-tools) Ihrer Organisation angewendet werden.1337Claude Code markiert einen Konnektor als `managed` in `/mcp` und im [`/plugin`](https://code.claude.com/docs/de/plugins/install)-Manager, wenn Ihre Organisation dessen Authentifizierung in claude.ai verwaltet. Der Status „Managed“ ändert nicht, wie Claude Code sich mit dem Konnektor verbindet oder wie die [Tool-Kontrollen](#organization-controls-on-connector-tools) Ihrer Organisation angewendet werden.

1338 1338 

model-config.md +93 −88

Details

225 225 

226## Modellauswahl einschränken226## Modellauswahl einschränken

227 227 

228Unternehmensadministratoren können `availableModels` in [verwalteten oder Richtlinieneinstellungen](https://code.claude.com/docs/de/managed-settings.md) verwenden, um einzuschränken, welche Modelle Benutzer auswählen können. Einträge entsprechen einer Modellfamilie wie `sonnet`, einem Versionspräfix wie `claude-sonnet-4-5` oder einer vollständigen Modell-ID wie `claude-sonnet-4-5-20250929`. Ein Versionspräfix entspricht auch späteren Modell-IDs, die es um ein weiteres Segment erweitern, sodass `claude-fable-5` sowohl Fable 5 als auch Fable 5.1 zulässt, während `claude-fable-5-1` nur Fable 5.1 zulässt. Um ein Modell zu blockieren, das die Liste zulässt, oder um jede Modell-ID in der Liste nur die Version zuzulassen, die sie benennt, siehe [Spezifische Modelle oder Versionen blockieren](#block-specific-models-or-versions).228Administratoren können `availableModels` in [verwalteten oder Richtlinieneinstellungen](https://code.claude.com/docs/de/managed-settings.md) verwenden, um einzuschränken, welche Modelle Benutzer auswählen können. Einträge entsprechen einer Modellfamilie wie `sonnet`, einem Versionspräfix wie `claude-sonnet-4-5` oder einer vollständigen Modell-ID wie `claude-sonnet-4-5-20250929`. Ein Versionspräfix entspricht auch späteren Modell-IDs, die es um ein weiteres Segment erweitern, sodass `claude-fable-5` sowohl Fable 5 als auch Fable 5.1 zulässt, während `claude-fable-5-1` nur Fable 5.1 zulässt. Um ein Modell zu blockieren, das die Liste zulässt, oder um festzulegen, dass jeder Modell-ID-Eintrag nur die genannte Version zulässt, lesen Sie [Bestimmte Modelle oder Versionen blockieren](#block-specific-models-or-versions).

229 229 

230Auf Plattformen, die Claude Code einbetten und [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/de/env-vars) setzen, hat die Modellkonfiguration des Hosts Vorrang vor verwalteten Modelleinstellungen, während eine verwaltete `availableModels`-Allowlist in Kraft bleibt, es sei denn, der Host stellt seine eigene bereit; [Ausnahmen von der Vorrangigkeit verwalteter Einstellungen](https://code.claude.com/docs/de/settings.md#exceptions-to-managed-settings-precedence) gibt an, welche Schlüssel und Variablen der Host überschreibt.230Auf Plattformen, die Claude Code einbetten und [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/de/env-vars) setzen, hat die Modellkonfiguration des Hosts Vorrang vor verwalteten Modelleinstellungen, während eine verwaltete `availableModels`-Allowlist in Kraft bleibt, sofern der Host keine eigene bereitstellt; [Ausnahmen vom Vorrang verwalteter Einstellungen](https://code.claude.com/docs/de/settings.md#exceptions-to-managed-settings-precedence) gibt an, welche Schlüssel und Variablen der Host überschreibt.

231 231 

232Wenn `availableModels` gesetzt ist, gilt die Allowlist überall dort, wo ein Benutzer ein Modell angeben kann:232Wenn `availableModels` gesetzt ist, gilt die Allowlist überall, wo ein Benutzer ein Modell angeben kann:

233 233 

234* **Hauptsitzungsmodell**: `/model`, das Flag `--model`, die Umgebungsvariable `ANTHROPIC_MODEL`, die Einstellung `model`, [`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions) und das Modell, das beim [Fortsetzen einer Sitzung](#setting-your-model) wiederhergestellt wird234* **Modell der Hauptsitzung**: `/model`, das Flag `--model`, die Umgebungsvariable `ANTHROPIC_MODEL`, die Einstellung `model`, [`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions) und das Modell, das beim [Fortsetzen einer Sitzung](#setting-your-model) wiederhergestellt wird

235* **Alias-Auflösung**: die Umgebungsvariablen `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL` und `ANTHROPIC_DEFAULT_FABLE_MODEL` können einen zulässigen Alias nicht zu einem Modell außerhalb der Liste umleiten235* **Alias-Auflösung**: die Umgebungsvariablen `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL` und `ANTHROPIC_DEFAULT_FABLE_MODEL` können einen zulässigen Alias nicht auf ein Modell außerhalb der Liste umleiten

236* **Schnellmodus**: `/fast` weigert sich umzuschalten, wenn dies implizit zu einem Opus-Modell außerhalb der Liste führen würde, mit der Meldung „is not in your organization's allowed models“236* **Fast-Modus**: `/fast` verweigert das Umschalten, wenn dadurch implizit zu einem Opus-Modell außerhalb der Liste gewechselt würde, mit der Meldung "is not in your organization's allowed models"

237* **Subagent- und Teamkollegen-Modelle**: das Feld `model` in [Subagent](https://code.claude.com/docs/de/sub-agents.md#choose-a-model)-Frontmatter, der Parameter `model` des Agent-Tools, [Agent-Team](https://code.claude.com/docs/de/agent-teams.md#specify-teammates-and-models)-Teamkollegen-Modelle, `CLAUDE_CODE_SUBAGENT_MODEL` und in v2.1.197 und früher das Modellauswahlfeld im Assistenten `/agents`&#x20;237* **Modelle von Subagenten und Teammitgliedern**: das Feld `model` im Frontmatter von [Subagenten](https://code.claude.com/docs/de/sub-agents.md#choose-a-model), der Parameter `model` des Agent-Tools, Modelle von Teammitgliedern in [Agent-Teams](https://code.claude.com/docs/de/agent-teams.md#specify-teammates-and-models), `CLAUDE_CODE_SUBAGENT_MODEL` und, in v2.1.197 und früher, die Modellauswahl im `/agents`-Assistenten&#x20;

238* **Skill- und Befehlsmodelle**: das Frontmatter `model` in [Skills und Befehlen](https://code.claude.com/docs/de/skills.md)238* **Modelle von Skills und Befehlen**: das Frontmatter-Feld `model` in [Skills und Befehlen](https://code.claude.com/docs/de/skills.md)

239* **Advisor-Modell**: die konfigurierte Einstellung [`advisorModel`](https://code.claude.com/docs/de/advisor) und das Flag `--advisor`239* **Advisor-Modell**: die konfigurierte Einstellung [`advisorModel`](https://code.claude.com/docs/de/advisor) und das Flag `--advisor`

240* **Hintergrund-Agent-Modell**: das Modell, das in der [Dispatch-Auswahl](https://code.claude.com/docs/de/agent-view.md) ausgewählt ist240* **Modell für Hintergrund-Agenten**: das in der [Dispatch-Auswahl](https://code.claude.com/docs/de/agent-view.md) ausgewählte Modell

241 241 

242Auf der Anthropic API und [Claude Platform on AWS](https://code.claude.com/docs/de/claude-platform-on-aws.md) wird ein Modellfamilien-Alias, `opus`, `sonnet`, `haiku` oder `fable`, zu seinem üblichen Modell aufgelöst, wenn die Allowlist dieses Modell zulässt. Wenn die Allowlist dieses Modell blockiert, ersetzt Claude Code es durch die neueste Version der Familie, die die Allowlist zulässt, und zeigt einen Hinweis an, der sowohl das angeforderte als auch das ersetzte Modell benennt. Mit `["sonnet", "claude-opus-4-6"]` wählen beispielsweise sowohl `/model opus` als auch `--model opus` Claude Opus 4.6, das neueste zulässige Opus. Vor v2.1.205 wurde ein Alias, dessen neueste veröffentlichte Version außerhalb der Liste lag, wie jede andere blockierte Auswahl abgelehnt oder ersetzt, auch wenn die Liste eine ältere Version zulässt.242Bei der Anthropic API und [Claude Platform on AWS](https://code.claude.com/docs/de/claude-platform-on-aws.md) wird ein Modellfamilien-Alias, `opus`, `sonnet`, `haiku` oder `fable`, zu seinem üblichen Modell aufgelöst, wenn die Allowlist dieses Modell zulässt. Wenn die Allowlist dieses Modell blockiert, ersetzt Claude Code es durch die neueste Version der Familie, die die Allowlist zulässt, und zeigt einen Hinweis an, der sowohl das angeforderte als auch das ersetzte Modell nennt. Mit `["sonnet", "claude-opus-4-6"]` wählen beispielsweise sowohl `/model opus` als auch `--model opus` Claude Opus 4.6, das neueste zulässige Opus. Vor v2.1.205 wurde ein Alias, dessen neueste veröffentlichte Version außerhalb der Liste lag, wie jede andere blockierte Auswahl abgelehnt oder ersetzt, selbst wenn die Liste eine ältere Version zuließ.

243 243 

244Die Ersetzung benötigt eine zulässige Version zum Landen: Wenn die Allowlist keine Version der Aliasfamilie zulässt, folgt der Alias dem Ablehnungs- und Ersetzungsverhalten unten wie jeder andere blockierte Wert.244Die Ersetzung benötigt eine zulässige Version als Ziel: Wenn die Allowlist keine Version der Familie des Alias zulässt, folgt der Alias dem unten beschriebenen Ablehnungs- und Ersetzungsverhalten wie jeder andere blockierte Wert.

245 245 

246Claude Code behandelt jede andere blockierte Auswahl je nachdem, wo das Modell gesetzt wurde:246Claude Code behandelt jede andere blockierte Auswahl je nachdem, wo das Modell festgelegt wurde:

247 247 

248* **`/model`**: Claude Code lehnt den Wechsel mit einem Fehler ab248* **`/model`**: Claude Code lehnt den Wechsel mit einem Fehler ab

249* **Flag `--model`, `ANTHROPIC_MODEL` oder die Einstellung `model`**: Claude Code ersetzt den Wert beim Start durch eine Warnung, die sowohl das angeforderte als auch das ersetzte Modell benennt, und die Sitzung startet auf dem Standardmodell249* **Flag `--model`, `ANTHROPIC_MODEL` oder die Einstellung `model`**: Claude Code ersetzt den Wert beim Start mit einer Warnung, die sowohl das angeforderte als auch das ersetzte Modell nennt, und die Sitzung startet mit dem Standardmodell

250* **[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions)**: Claude Code ignoriert die Variable250* **[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions)**: Claude Code ignoriert die Variable

251* **Subagent- oder Teamkollegen-Überschreibung**: Claude Code führt den Subagent oder Teamkollegen auf einem Fallback-Modell aus, anstatt die Anfrage fehlschlagen zu lassen. Siehe [Modell auswählen](https://code.claude.com/docs/de/sub-agents.md#choose-a-model) für den Subagent-Fallback und [Teamkollegen und Modelle angeben](https://code.claude.com/docs/de/agent-teams.md#specify-teammates-and-models) für den Teamkollegen-Fallback.251* **Überschreibung für Subagenten oder Teammitglieder**: Claude Code führt den Subagenten oder das Teammitglied mit einem Fallback-Modell aus, anstatt die Anfrage fehlschlagen zu lassen. Siehe [Ein Modell auswählen](https://code.claude.com/docs/de/sub-agents.md#choose-a-model) für den Fallback bei Subagenten und [Teammitglieder und Modelle angeben](https://code.claude.com/docs/de/agent-teams.md#specify-teammates-and-models) für den Fallback bei Teammitgliedern.

252 252 

253 In interaktiven Sitzungen warnt Sie Claude Code, wenn es ein Subagent-Modell durch diesen Fallback oder durch die oben beschriebene Ersetzung der neuesten zulässigen Version ersetzt, und benennt die angeforderten und ersetzten Modelle; es meldet keinen Teamkollegen-Fallback.253 In interaktiven Sitzungen warnt Claude Code Sie, wenn es das Modell eines Subagenten ersetzt, sei es durch diesen Fallback oder durch die oben beschriebene Ersetzung durch die neueste zulässige Version, und nennt dabei das angeforderte und das ersetzte Modell; den Fallback eines Teammitglieds meldet es nicht.

254 254 

255 Wo die oben beschriebene Ersetzung der neuesten zulässigen Version gilt, folgt ein blockierter Familien-Alias stattdessen. Vor v2.1.222 fiel ein Alias auf jedem Provider wie jeder andere blockierte Wert zurück255 Wo die oben beschriebene Ersetzung durch die neueste zulässige Version greift, folgt ein blockierter Familien-Alias stattdessen dieser. Vor v2.1.222 fiel ein Alias bei jedem Anbieter wie jeder andere blockierte Wert auf den Fallback zurück

256* **Skill- oder Befehlsüberschreibung**: Claude Code ignoriert die Überschreibung, einschließlich eines blockierten Familien-Alias, und der Skill oder Befehl wird auf dem Sitzungsmodell ausgeführt. Ein Skill oder Befehl, der [in einem Subagent ausgeführt wird](https://code.claude.com/docs/de/skills.md#run-skills-in-a-subagent), folgt stattdessen dem Subagent-Verhalten oben256* **Überschreibung für Skills oder Befehle**: Claude Code ignoriert die Überschreibung, einschließlich eines blockierten Familien-Alias, und der Skill oder Befehl wird mit dem Sitzungsmodell ausgeführt. Ein Skill oder Befehl, der [in einem Subagenten ausgeführt wird](https://code.claude.com/docs/de/skills.md#run-skills-in-a-subagent), folgt stattdessen dem oben beschriebenen Verhalten für Subagenten

257* **Einstellung `advisorModel`**: der Advisor ist für die Sitzung deaktiviert257* **Einstellung `advisorModel`**: Der Advisor wird für die Sitzung deaktiviert

258* **Flag `--advisor`**: Claude Code beendet sich beim Start mit einem Fehler. In einer [Hintergrund-Sitzung](https://code.claude.com/docs/de/agent-view.md) startet es die Sitzung ohne den Advisor, anstatt sich zu beenden258* **Flag `--advisor`**: Claude Code wird beim Start mit einem Fehler beendet. In einer [Hintergrundsitzung](https://code.claude.com/docs/de/agent-view.md) startet es die Sitzung stattdessen ohne den Advisor, anstatt sich zu beenden

259* **`CLAUDE_CODE_AUTO_MODE_MODEL`**: Claude Code ignoriert die Variable und wählt das Modell für seine [Klassifikator-Anfragen im Auto-Modus](https://code.claude.com/docs/de/permission-modes.md#default-classifier-model) so, als hätten Sie sie nicht gesetzt259* **`CLAUDE_CODE_AUTO_MODE_MODEL`**: Claude Code ignoriert die Variable und wählt das Modell für seine [Anfragen des Auto-Modus-Klassifikators](https://code.claude.com/docs/de/permission-modes.md#default-classifier-model) so, als hätten Sie sie nicht gesetzt

260 260 

261Claude Code verbirgt ausgeschlossene Modelle in der Auswahl `/model`. Ob eine von Ihnen aufgeführte Modell-ID auch eine eigene Zeile erhält, hängt vom Provider ab:261Claude Code blendet ausgeschlossene Modelle in der `/model`-Auswahl aus. Ob eine von Ihnen aufgeführte Modell-ID auch eine eigene Zeile erhält, hängt vom Anbieter ab:

262 262 

263* **Anthropic API, [Claude Platform on AWS](https://code.claude.com/docs/de/claude-platform-on-aws.md), [Claude apps gateway](https://code.claude.com/docs/de/claude-apps-gateway) oder ein über `ANTHROPIC_BASE_URL` festgelegtes [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway)**: Eine von Ihnen aufgeführte Anthropic-Modell-ID ohne integrierte Auswahlzeile erscheint als eigene beschriftete Zeile. Claude Code fügt eine solche Zeile für Opus-, Sonnet- und Haiku-Versionen hinzu, etwa für eine ältere Version, die die Liste festlegt. Wenn Sie `replaceBuiltInOptions` in einer [`modelPicker`](https://code.claude.com/docs/de/settings-reference#modelpicker)-Aufstellung setzen, erscheint diese Zeile nicht. Vor v2.1.199 war eine solche ID nur durch Eingabe von `/model <id>` auswählbar.263* **Anthropic API, [Claude Platform on AWS](https://code.claude.com/docs/de/claude-platform-on-aws.md), [Claude apps gateway](https://code.claude.com/docs/de/claude-apps-gateway) oder ein über `ANTHROPIC_BASE_URL` festgelegtes [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway)**: Eine von Ihnen aufgeführte Anthropic-Modell-ID, für die es keine integrierte Zeile in der Auswahl gibt, erscheint als eigene beschriftete Zeile. Claude Code fügt eine solche Zeile für Opus-, Sonnet- und Haiku-Versionen hinzu, etwa für eine ältere Version, die die Liste festlegt. Wenn Sie `replaceBuiltInOptions` in einer [`modelPicker`](https://code.claude.com/docs/de/settings-reference#modelpicker)-Zusammenstellung setzen, erscheint diese Zeile nicht. Vor v2.1.199 war eine solche ID nur durch Eingabe von `/model <id>` auswählbar.

264* **Amazon Bedrock, Google Cloud's Agent Platform oder Microsoft Foundry**: Sofern eine von Ihnen aufgeführte Modell-ID nicht mit `anthropic.` beginnt, fügt Claude Code keine Zeile dafür hinzu, unabhängig davon, ob es sich um eine Anthropic-Modell-ID oder eine Provider-spezifische ID handelt. [Mantle-Modell-IDs](#mantle-model-ids) tragen dieses Präfix. Um eine aufgeführte Version ohne integrierte Zeile anzuzeigen, fügen Sie sie zusätzlich einer [`modelPicker`](https://code.claude.com/docs/de/settings-reference#modelpicker)-Aufstellung hinzu, die IDs im Format Ihres Providers akzeptiert.264* **Amazon Bedrock, Google Cloud's Agent Platform oder Microsoft Foundry**: Sofern eine von Ihnen aufgeführte Modell-ID nicht mit `anthropic.` beginnt, fügt Claude Code keine Zeile dafür hinzu, unabhängig davon, ob es sich um eine Anthropic-Modell-ID oder eine anbieterspezifische ID handelt. [Mantle-Modell-IDs](#mantle-model-ids) tragen dieses Präfix. Um eine aufgeführte Version anzuzeigen, die keine integrierte Zeile hat, fügen Sie sie zusätzlich einer [`modelPicker`](https://code.claude.com/docs/de/settings-reference#modelpicker)-Zusammenstellung hinzu, die IDs im Format Ihres Anbieters akzeptiert.

265 265 

266Modelländerungen, die Claude Code in Ihrem Namen vornimmt, werden auf die gleiche Weise überprüft:266Modelländerungen, die Claude Code in Ihrem Namen vornimmt, werden auf die gleiche Weise geprüft:

267 267 

268* **[Fallback-Modellketten](#fallback-model-chains)**: Einträge außerhalb der Allowlist werden gelöscht268* **[Fallback-Modellketten](#fallback-model-chains)**: Einträge außerhalb der Allowlist werden verworfen

269* **Plan-Modus-Upgrades**: Auf der Anthropic API und Claude Platform on AWS verwendet ein Upgrade wie [`opusplan`](#opusplan-model-setting) zu einem ausgeschlossenen Modell die neueste zulässige Version der Upgrade-Familie. Bei Providern mit Provider-spezifischen Modell-IDs und wenn keine Version zulässig ist, wird das Upgrade übersprungen und die Planung wird auf dem Sitzungsmodell fortgesetzt269* **Upgrades im Plan-Modus**: Bei der Anthropic API und Claude Platform on AWS verwendet ein Upgrade wie [`opusplan`](#opusplan-model-setting) auf ein ausgeschlossenes Modell die neueste zulässige Version der Upgrade-Familie. Bei Anbietern mit anbieterspezifischen Modell-IDs und wenn keine Version zulässig ist, wird das Upgrade übersprungen und die Planung mit dem Modell der Sitzung fortgesetzt

270* **[Automatischer Modell-Fallback](#automatic-model-fallback)**: Ein Fallback, dessen Ziel ausgeschlossen ist, wird nicht ausgeführt, sodass die gekennzeichnete Anfrage mit einer Ablehnung endet270* **[Automatischer Modell-Fallback](#automatic-model-fallback)**: Ein Fallback, dessen Ziel ausgeschlossen ist, wird nicht ausgeführt, sodass die gekennzeichnete Anfrage stattdessen mit einer Ablehnung endet

271* **[Auto-Modus-Klassifikator](https://code.claude.com/docs/de/permission-modes.md#eliminate-prompts-with-auto-mode)**: Wenn die Allowlist das [Standardmodell des Klassifikators](https://code.claude.com/docs/de/permission-modes.md#default-classifier-model) ausschließt, werden Klassifikator-Anfragen, die dieses Modell verwenden würden, auf dem Sitzungsmodell ausgeführt, oder in [Fable](#work-with-fable)-Sitzungen auf einem Opus-Modell. Bei Providern außer der Anthropic API wird dieser Opus-Fallback auf dem Modell ausgeführt, das Sie in `ANTHROPIC_DEFAULT_OPUS_MODEL` festlegen, andernfalls auf Opus 5, ohne die Allowlist zu konsultieren. Erfordert Claude Code v2.1.210 oder später271* **[Auto-Modus-Klassifikator](https://code.claude.com/docs/de/permission-modes.md#eliminate-prompts-with-auto-mode)**: Wenn die Allowlist das [Standardmodell des Klassifikators](https://code.claude.com/docs/de/permission-modes.md#default-classifier-model) ausschließt, werden Klassifikator-Anfragen, die dieses Modell verwenden würden, mit dem Sitzungsmodell ausgeführt oder in [Fable](#work-with-fable)-Sitzungen mit einem Opus-Modell. Bei anderen Anbietern als der Anthropic API läuft dieser Opus-Fallback mit dem Modell, das Sie in `ANTHROPIC_DEFAULT_OPUS_MODEL` festlegen, andernfalls mit Opus 5, ohne die Allowlist zu berücksichtigen. Erfordert Claude Code v2.1.210 oder höher

272* **[Schnellmodus](https://code.claude.com/docs/de/fast-mode.md)**: Das Aktivieren des Schnellmodus wird abgelehnt, wenn das Modell, auf dem die Sitzung danach läuft, außerhalb der Allowlist liegt272* **[Fast-Modus](https://code.claude.com/docs/de/fast-mode.md)**: Das Aktivieren des Fast-Modus wird verweigert, wenn das Modell, mit dem die Sitzung danach laufen würde, außerhalb der Allowlist liegt

273* **Verfügbarkeits-Fallback auf Amazon Bedrock und Google Cloud's Agent Platform**: Wenn Ihr Konto während einer Sitzung den Zugriff auf ein Modell verliert, überspringt der Wechsel zu einem anderen Modell ausgeschlossene Modelle. Die Modellprüfungen beim Start auf [Amazon Bedrock](https://code.claude.com/docs/de/amazon-bedrock.md#when-your-organization-enforces-a-model-allowlist) und [Google Cloud's Agent Platform](https://code.claude.com/docs/de/google-vertex-ai.md#when-your-organization-enforces-a-model-allowlist) überspringen ausgeschlossene Modelle nur, wenn die verwalteten Einstellungen zusätzlich [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) setzen273* **Verfügbarkeits-Fallback bei Amazon Bedrock und Google Cloud's Agent Platform**: Wenn Ihr Konto während einer Sitzung den Zugriff auf ein Modell verliert, überspringt der Wechsel zu einem anderen Modell ausgeschlossene Modelle. Die Prüfungen des Startmodells bei [Amazon Bedrock](https://code.claude.com/docs/de/amazon-bedrock.md#when-your-organization-enforces-a-model-allowlist) und [Google Cloud's Agent Platform](https://code.claude.com/docs/de/google-vertex-ai.md#when-your-organization-enforces-a-model-allowlist) überspringen ausgeschlossene Modelle nur, wenn die verwalteten Einstellungen zusätzlich [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) setzen

274 274 

275```json theme={null}275```json theme={null}

276{276{


278}278}

279```279```

280 280 

281### Oberflächenabdeckung281### Abdeckung der Oberflächen

282 282 

283Jede Oberfläche erzwingt die Allowlist, die sie erhält. Welcher Liefermechanismus jede Oberfläche erreicht, unterscheidet sich:283Jede Oberfläche setzt die Allowlist durch, die sie erhält. Welcher Bereitstellungsmechanismus welche Oberfläche erreicht, ist unterschiedlich:

284 284 

285| Liefermechanismus | CLI und IDE | Desktop-Lokalsitzungen | Web-, Mobil- und Cloud-Sitzungen | Agent SDK und nicht-interaktiv | Cowork |285| Bereitstellungsmechanismus | CLI und IDE | Lokale Desktop-Sitzungen | Web-, Mobil- und Cloud-Sitzungen | Agent SDK und nicht interaktiv | Cowork |

286| :- | :- | :- | :- | :- | :- |286| :- | :- | :- | :- | :- | :- |

287| [Server-verwaltete Einstellungen](https://code.claude.com/docs/de/server-managed-settings.md) aus der Admin-Konsole | Erzwungen | Erzwungen | Erzwungen, außer in [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen | Erzwungen | Remote-Cowork-Sitzungen: Der Server überprüft das Modell. Auf dem Gerät des Benutzers: nicht bereitgestellt. |287| [Serververwaltete Einstellungen](https://code.claude.com/docs/de/server-managed-settings.md) aus der Admin-Konsole | Durchgesetzt | Durchgesetzt | Durchgesetzt, außer in [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen | Durchgesetzt | Remote-Cowork-Sitzungen: Der Server prüft das Modell. Auf dem Rechner des Benutzers: nicht bereitgestellt. |

288| [MDM oder verwaltete Einstellungsdateien](https://code.claude.com/docs/de/managed-settings.md#delivery-mechanisms) | Erzwungen | Erzwungen | Nicht bereitgestellt in von Anthropic gehosteten Umgebungen; in [selbst gehosteten Umgebungen](https://code.claude.com/docs/de/self-hosted-environments) erzwungen aus dem Runner-Image gemäß [wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) | Erzwungen | Erzwungen, wo bereitgestellt |288| [MDM oder Dateien für verwaltete Einstellungen](https://code.claude.com/docs/de/managed-settings.md#delivery-mechanisms) | Durchgesetzt | Durchgesetzt | In von Anthropic gehosteten Umgebungen nicht bereitgestellt; in [selbst gehosteten Umgebungen](https://code.claude.com/docs/de/self-hosted-environments) aus dem Runner-Image durchgesetzt, gemäß [wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) | Durchgesetzt | Durchgesetzt, wo bereitgestellt |

289 289 

290* [Cloud-Sitzungen](https://code.claude.com/docs/de/claude-code-on-the-web.md), einschließlich derjenigen, die Sie aus der Desktop-App starten, laufen standardmäßig auf von Anthropic verwalteten VMs: Einstellungen, die auf Ihrem Gerät bereitgestellt werden, erreichen sie nicht, daher stellen Sie die Allowlist über server-verwaltete Einstellungen bereit. Sitzungen, die Ihre Organisation zu einer [selbst gehosteten Umgebung](https://code.claude.com/docs/de/self-hosted-environments) leitet, laufen auf Ihrem eigenen Compute und lesen auch die verwaltete Einstellungsdatei im Runner-Image. [Wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) gibt an, wann diese Datei gilt. Ein Modellwechsel in der Mitte einer Cloud-Sitzung wird abgelehnt, wenn das angeforderte Modell durch die Allowlist ausgeschlossen ist. Wenn die `availableModels`-Liste in Ihren server-verwalteten Einstellungen nicht leer ist, lehnt der Server eine Anfrage ab, eine Cloud-Sitzung auf claude.ai/code oder aus der Desktop-App auf einem Modell zu starten, das die Liste ausschließt.290* [Cloud-Sitzungen](https://code.claude.com/docs/de/claude-code-on-the-web.md), einschließlich derer, die Sie über die Desktop-App starten, laufen standardmäßig auf von Anthropic verwalteten VMs: Auf Ihrem Gerät bereitgestellte Einstellungen erreichen sie nicht, stellen Sie die Allowlist daher über serververwaltete Einstellungen bereit. Sitzungen, die Ihre Organisation an eine [selbst gehostete Umgebung](https://code.claude.com/docs/de/self-hosted-environments) weiterleitet, laufen auf Ihrer eigenen Rechenleistung und lesen zusätzlich die Datei für verwaltete Einstellungen im Runner-Image. [Wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) gibt an, wann diese Datei gilt. Ein Modellwechsel während einer Cloud-Sitzung wird abgelehnt, wenn das angeforderte Modell durch die Allowlist ausgeschlossen ist. Wenn die `availableModels`-Liste in Ihren serververwalteten Einstellungen nicht leer ist, lehnt der Server eine Anfrage ab, eine Cloud-Sitzung unter claude.ai/code oder über die Desktop-App mit einem Modell zu starten, das die Liste ausschließt.

291* [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen laufen in Cloud-Umgebungen, erhalten aber keine server-verwalteten Einstellungen; in einer [selbst gehosteten Umgebung](https://code.claude.com/docs/de/self-hosted-environments) lesen sie immer noch die verwaltete Einstellungsdatei im Runner-Image. Um das Modell für diese Sitzungen festzulegen, siehe [Modell für einen Bereich auswählen](https://claude.com/docs/claude-tag/admins/customize#choose-the-model-for-a-scope) im Claude Tag-Administratorhandbuch.291* [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen laufen in Cloud-Umgebungen, erhalten aber keine serververwalteten Einstellungen; in einer [selbst gehosteten Umgebung](https://code.claude.com/docs/de/self-hosted-environments) lesen sie dennoch die Datei für verwaltete Einstellungen im Runner-Image. Um das Modell für diese Sitzungen festzulegen, lesen Sie [Choose the model for a scope](https://claude.com/docs/claude-tag/admins/customize#choose-the-model-for-a-scope) im Admin-Leitfaden für Claude Tag.

292* Cowork, die agentengesteuerte Arbeit-Registerkarte in der Claude Desktop-App, führt ihre Sitzungen auf Claude Code aus, erhält aber absichtlich keine server-verwalteten Einstellungen aus der Admin-Konsole von claude.ai. Wenn die `availableModels`-Liste in Ihren server-verwalteten Einstellungen nicht leer ist und ein Benutzer ein Modell außerhalb davon auswählt, lehnt der Server dieses Modell für eine Remote-Cowork-Sitzung ab. Eine verwaltete Einstellungsdatei gilt für Cowork-Sitzungen, wenn sie dort vorhanden ist, wo die Sitzung läuft; Remote-Cowork-Sitzungen laufen auf von Anthropic verwalteten VMs, wo eine auf dem Gerät bereitgestellte Datei nicht vorhanden ist.292* Cowork, der Tab für agentisches Arbeiten in der Claude Desktop-App, führt seine Sitzungen mit Claude Code aus, erhält aber konstruktionsbedingt keine serververwalteten Einstellungen aus der Admin-Konsole von claude.ai. Wenn die `availableModels`-Liste in Ihren serververwalteten Einstellungen nicht leer ist und ein Benutzer ein Modell außerhalb dieser Liste auswählt, lehnt der Server dieses Modell für eine Remote-Cowork-Sitzung ab. Eine Datei für verwaltete Einstellungen gilt für Cowork-Sitzungen, wenn sie dort vorhanden ist, wo die Sitzung läuft; Remote-Cowork-Sitzungen laufen auf von Anthropic verwalteten VMs, auf denen eine auf dem Gerät bereitgestellte Datei nicht vorhanden ist.

293* Sitzungen auf [Drittanbieter-Providern](https://code.claude.com/docs/de/server-managed-settings.md#platform-availability) wie Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry und [Claude Platform on AWS](https://code.claude.com/docs/de/claude-platform-on-aws.md) erhalten keine server-verwalteten Einstellungen, daher stellen Sie die Allowlist dort über MDM oder verwaltete Einstellungsdateien bereit.293* Sitzungen bei [Drittanbietern](https://code.claude.com/docs/de/server-managed-settings.md#platform-availability) wie Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry und [Claude Platform on AWS](https://code.claude.com/docs/de/claude-platform-on-aws.md) erhalten keine serververwalteten Einstellungen, stellen Sie die Allowlist dort daher über MDM oder Dateien für verwaltete Einstellungen bereit.

294* Die Bereitstellung über die Admin-Konsole erfordert außerdem, dass die Sitzung die Einstellungen mit einem [zulässigen Login](https://code.claude.com/docs/de/server-managed-settings.md#platform-availability) bei Ihrer Organisation oder einem dafür ausgestellten OAuth-Token abruft. Für Flotten, die sich mit API-Schlüsseln authentifizieren, ob direkt konfiguriert oder durch ein [`apiKeyHelper`](https://code.claude.com/docs/de/settings-reference#apikeyhelper)-Skript generiert, stellen Sie die Allowlist über MDM oder verwaltete Einstellungsdateien bereit.294* Die Bereitstellung über die Admin-Konsole erfordert außerdem, dass die Sitzung die Einstellungen mit einer [berechtigten Anmeldung](https://code.claude.com/docs/de/server-managed-settings.md#platform-availability) bei Ihrer Organisation oder einem für sie ausgestellten OAuth-Token abruft. Für Geräteflotten, die sich mit API-Schlüsseln authentifizieren, ob direkt konfiguriert oder durch ein [`apiKeyHelper`](https://code.claude.com/docs/de/settings-reference#apikeyhelper)-Skript generiert, stellen Sie die Allowlist über MDM oder Dateien für verwaltete Einstellungen bereit.

295* Die Desktop-Code-Registerkarte hostet auch [SSH-Sitzungen](https://code.claude.com/docs/de/desktop.md#ssh-sessions), die die verwaltete Einstellungsdatei vom Remote-Host lesen, auf dem sie laufen. Siehe [Desktop-verwaltete Einstellungen](https://code.claude.com/docs/de/desktop.md#managed-settings).295* Der Code-Tab der Desktop-App hostet auch [SSH-Sitzungen](https://code.claude.com/docs/de/desktop.md#ssh-sessions), die die Datei für verwaltete Einstellungen vom Remote-Host lesen, auf dem sie laufen. Siehe [Verwaltete Einstellungen in Desktop](https://code.claude.com/docs/de/desktop.md#managed-settings).

296* Die Modellauswahlfelder auf claude.ai und in der Desktop-App verbergen oder grau aus Modelle, die durch die Allowlist Ihrer Organisation ausgeschlossen sind. Der Auswahlzustand ist eine Bequemlichkeit für Benutzer; die Erzwingung erfolgt in der Sitzung.296* Die Modellauswahlen auf claude.ai und in der Desktop-App blenden Modelle, die durch die Allowlist Ihrer Organisation ausgeschlossen sind, aus oder grauen sie aus. Der Zustand der Auswahl dient nur der Benutzerfreundlichkeit; er setzt die Allowlist nicht durch.

297 297 

298### Standardmodell-Verhalten298### Verhalten des Standardmodells

299 299 

300Mit dem Standard-Präfix-Matching lässt `availableModels` allein die Option Standard auf dem [Laufzeit-Standard](#default-model-setting) des Systems für das Konto, bis Sie auch [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) setzen. Wenn dieser Standard ein Modell ist, das Sie einschränken möchten, setzen Sie auch `enforceAvailableModels`, oder [blockieren Sie dieses Modell](#block-specific-models-or-versions).300Mit dem standardmäßigen Präfixabgleich belässt `availableModels` allein die Option „Default“ auf dem [Laufzeitstandard](#default-model-setting) des Systems für das Konto, bis Sie zusätzlich [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) setzen. Wenn dieser Standard ein Modell ist, das Sie einschränken möchten, setzen Sie zusätzlich `enforceAvailableModels` oder [blockieren Sie dieses Modell](#block-specific-models-or-versions).

301 301 

302Mit `availableModels: []` werden benannte Modellauswahlen blockiert und `enforceAvailableModels` hat keine Auswirkung.302Mit `availableModels: []` werden benannte Modellauswahlen blockiert, und `enforceAvailableModels` hat keine Wirkung.

303 303 

304### Allowlist für das Standardmodell erzwingen304### Die Allowlist für das Default-Modell durchsetzen

305 305 

306Setzen Sie `enforceAvailableModels: true` zusammen mit einem nicht leeren `availableModels` in verwalteten Einstellungen, um die Allowlist auf die Option Standard zu erweitern. Dies erfordert Claude Code v2.1.175 oder später.306Setzen Sie `enforceAvailableModels: true` zusammen mit einem nicht leeren `availableModels` in verwalteten Einstellungen, um die Allowlist auf die Option „Default“ auszuweiten. Dies erfordert Claude Code v2.1.175 oder höher.

307 307 

308```json theme={null}308```json theme={null}

309{309{


312}312}

313```313```

314 314 

315Für ein Mitglied ohne Modell [auf ihrem Konto aufgezeichnet](#setting-your-model) wird die Option Standard zu dem Kontotyp-Standard aufgelöst, oder zu dem [Organisationsstandardmodell](#organization-default-model), wenn ein Administrator eines gesetzt hat. Wenn dieses Modell nicht in der Allowlist ist, wird die Option Standard stattdessen zu dem ersten `availableModels`-Eintrag aufgelöst, der ein zulässiges, verfügbares Modell benennt, und die Zeile Standard der Auswahl `/model` zeigt dieses Modell. Dies gilt überall dort, wo der Standard erreicht wird: Sitzungsstart, Auswahl von Standard in `/model`, das Schlüsselwort `"default"` in [Fallback-Modellketten](#fallback-model-chains) und der Fallback, der verwendet wird, wenn eine ausgeschlossene Auswahl gelöscht wird. Ein auf dem Konto eines Mitglieds aufgezeichnetes Modell wird auch gegen `availableModels` überprüft; [Einstellung Ihres Modells](#setting-your-model) beschreibt, wie die Option Standard es behandelt.315Für ein Mitglied, für dessen Konto kein Modell [hinterlegt ist](#setting-your-model), wird die Option „Default“ zum Standard des Kontotyps aufgelöst oder zum [Standardmodell der Organisation](#organization-default-model), wenn ein Admin eines festgelegt hat. Wenn dieses Modell nicht in der Allowlist enthalten ist, wird die Option „Default“ stattdessen zum ersten `availableModels`-Eintrag aufgelöst, der ein zulässiges, verfügbares Modell nennt, und die Default-Zeile der `/model`-Auswahl zeigt dieses Modell an. Dies gilt überall, wo der Standard erreicht wird: beim Sitzungsstart, bei der Auswahl von Default in `/model`, beim Schlüsselwort `"default"` in [Fallback-Modellketten](#fallback-model-chains) und beim Fallback, der verwendet wird, wenn eine ausgeschlossene Auswahl verworfen wird. Ein für das Konto eines Mitglieds hinterlegtes Modell wird ebenfalls gegen `availableModels` geprüft; [Ihr Modell festlegen](#setting-your-model) beschreibt, wie die Option „Default“ damit umgeht.

316 316 

317`enforceAvailableModels` ordnet die Option Standard nur neu zu, wenn `availableModels` nicht leer ist. Wenn `availableModels` nicht leer ist, aber kein Eintrag zu einem zulässigen und verfügbaren Modell aufgelöst wird, wird die Erzwingung übersprungen und eine Warnung wird angezeigt, die nur unter `--debug` sichtbar ist. Behalten Sie mindestens einen garantiert verfügbaren Eintrag in der Liste, um dies zu vermeiden.317`enforceAvailableModels` ordnet die Option „Default“ nur neu zu, wenn `availableModels` nicht leer ist. Wenn `availableModels` nicht leer ist, aber kein Eintrag zu einem zulässigen und verfügbaren Modell aufgelöst wird, wird die Durchsetzung mit einer Warnung übersprungen, die nur unter `--debug` sichtbar ist. Behalten Sie mindestens einen garantiert verfügbaren Eintrag in der Liste, um dies zu vermeiden.

318 318 

319Stellen Sie beide Schlüssel zusammen in der höchstrangigen verwalteten Quelle bereit, die Sie bereitstellen. Standardmäßig liest Claude Code nur diese Quelle, daher wird ein Paar, das in einer verwalteten Einstellungsdatei platziert ist, ignoriert, wenn die Admin-Konsole Einstellungen bereitstellt; unter dem Opt-in-Merge in [wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) ignoriert Claude Code immer noch eine `modelOverrides`-Map aus einer Quelle, die unter der Quelle rangiert, die `availableModels` setzt.319Stellen Sie beide Schlüssel gemeinsam in der höchstrangigen verwalteten Quelle bereit, die Sie ausliefern. Standardmäßig liest Claude Code nur diese Quelle, sodass ein Paar in einer Datei für verwaltete Einstellungen ignoriert wird, wenn die Admin-Konsole irgendwelche Einstellungen bereitstellt; bei der optionalen Zusammenführung gemäß [wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) ignoriert Claude Code weiterhin eine `modelOverrides`-Zuordnung aus einer Quelle, die niedriger eingestuft ist als diejenige, die `availableModels` setzt.

320 320 

321### Kontrollieren Sie das Modell, auf dem Benutzer laufen321### Steuern, mit welchem Modell Benutzer arbeiten

322 322 

323Die Einstellung `model` ist eine anfängliche Auswahl, keine Erzwingung. Sie legt fest, welches Modell aktiv ist, wenn eine Sitzung startet, aber Benutzer können immer noch `/model` öffnen und Standard auswählen, das zu dem [Laufzeit-Standard](#default-model-setting) des Systems aufgelöst wird, unabhängig davon, was `model` gesetzt ist, es sei denn, [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) oder die [Schlüssel, die spezifische Versionen blockieren](#block-specific-models-or-versions) wenden sich darauf an.323Die Einstellung `model` ist eine Anfangsauswahl, keine Durchsetzung. Sie legt fest, welches Modell beim Start einer Sitzung aktiv ist, aber Benutzer können weiterhin `/model` öffnen und Default auswählen, was unabhängig vom Wert von `model` zum [Laufzeitstandard](#default-model-setting) des Systems aufgelöst wird, es sei denn, [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) oder die [Schlüssel, die bestimmte Versionen blockieren](#block-specific-models-or-versions), gelten dafür.

324 324 

325Um die Modellerfahrung vollständig zu kontrollieren, kombinieren Sie diese Einstellungen:325Um die Modellnutzung vollständig zu steuern, kombinieren Sie diese Einstellungen:

326 326 

327* **`availableModels`**: schränkt ein, welche benannten Modelle Benutzer wechseln können327* **`availableModels`**: schränkt ein, zu welchen benannten Modellen Benutzer wechseln können

328* **`enforceAvailableModels`**: erweitert die `availableModels`-Allowlist auf die Option Standard, sodass Standard nicht zu einem Modell außerhalb der Liste aufgelöst werden kann328* **`enforceAvailableModels`**: weitet die `availableModels`-Allowlist auf die Option „Default“ aus, sodass Default nicht zu einem Modell außerhalb der Liste aufgelöst werden kann

329* **`deniedModels`** und **`availableModelsMatch`**: [blockieren Sie spezifische Versionen](#block-specific-models-or-versions), die ein `availableModels`-Eintrag sonst zulassen würde329* **`deniedModels`** und **`availableModelsMatch`**: [blockieren bestimmte Versionen](#block-specific-models-or-versions), die ein `availableModels`-Eintrag andernfalls zulassen würde

330* **`model`**: legt die anfängliche Modellauswahl fest, wenn eine Sitzung startet330* **`model`**: legt die anfängliche Modellauswahl beim Start einer Sitzung fest

331* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`** / **`ANTHROPIC_DEFAULT_FABLE_MODEL`**: kontrollieren, zu welchen Modellen die Aliase `sonnet`, `opus`, `haiku` und `fable` aufgelöst werden, und welche Version der [Kontotyp-Standard](#default-model-setting) verwendet331* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`** / **`ANTHROPIC_DEFAULT_FABLE_MODEL`**: steuern, wozu die Aliase `sonnet`, `opus`, `haiku` und `fable` aufgelöst werden und welche Version der [Standard des Kontotyps](#default-model-setting) verwendet

332 332 

333Dieses Beispiel startet Benutzer auf Sonnet 4.5, begrenzt die Auswahl auf Sonnet und Haiku und stellt sicher, dass Standard zu einem Modell in der Allowlist aufgelöst wird, anstatt zum Tier-Standard:333Dieses Beispiel startet Benutzer mit Sonnet 4.5, beschränkt die Auswahl auf Sonnet und Haiku und stellt sicher, dass Default zu einem Modell auf der Allowlist statt zum Standard der Stufe aufgelöst wird:

334 334 

335```json theme={null}335```json theme={null}

336{336{


343}343}

344```344```

345 345 

346Ohne `enforceAvailableModels` oder den `env`-Block erhält ein Benutzer, der Standard in der Auswahl auswählt, den [Laufzeit-Standard](#default-model-setting) anstelle der in `model` festgelegten Version. Die beiden Einstellungen decken unterschiedliche Bereiche ab: `enforceAvailableModels` macht Standard der Allowlist gehorchen, während der `env`-Block festlegt, zu welcher Version ein zulässiger Alias wie `sonnet` aufgelöst wird. Verwenden Sie `enforceAvailableModels` allein, wenn das Einschränken von Modellfamilien ausreicht; fügen Sie den `env`-Block hinzu, wenn Sie auch eine bestimmte Version festlegen müssen.346Ohne `enforceAvailableModels` oder den `env`-Block erhält ein Benutzer, der in der Auswahl Default wählt, den [Laufzeitstandard](#default-model-setting) statt der in `model` festgelegten Version. Die beiden Einstellungen decken unterschiedliche Bereiche ab: `enforceAvailableModels` sorgt dafür, dass Default die Allowlist einhält, während der `env`-Block festlegt, zu welcher Version ein zulässiger Alias wie `sonnet` aufgelöst wird. Verwenden Sie `enforceAvailableModels` allein, wenn die Einschränkung von Modellfamilien ausreicht; fügen Sie den `env`-Block hinzu, wenn Sie zusätzlich eine bestimmte Version festlegen müssen.

347 347 

348### Merge-Verhalten348### Zusammenführungsverhalten

349 349 

350Wenn die verwalteten Einstellungen, die Claude Code anwendet, `availableModels` definieren, gilt diese Liste allein, abgesehen von einer [Host-Plattform, die ihre eigene bereitstellt](https://code.claude.com/docs/de/settings.md#exceptions-to-managed-settings-precedence): Einträge in Benutzer-, Projekt- oder lokalen Einstellungen können sie nicht erweitern, und Claude Code führt `availableModels` auch nie über verwaltete Quellen hinweg zusammen; [wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) gibt an, welche Quellenliste gilt. Andernfalls werden Listen aus Benutzer-, Projekt- und lokalen Einstellungen wie andere Array-Einstellungen [verkettet und dedupliziert](https://code.claude.com/docs/de/settings.md#settings-precedence). Vor Claude Code v2.1.175 wurden Einträge aus Bereichen mit niedrigerer Priorität in die verwaltete Liste zusammengeführt, anstatt sie zu ersetzen.350Wenn die verwalteten Einstellungen, die Claude Code anwendet, `availableModels` definieren, gilt ausschließlich diese Liste, abgesehen von einer [Host-Plattform, die ihre eigene bereitstellt](https://code.claude.com/docs/de/settings.md#exceptions-to-managed-settings-precedence): Einträge in Benutzer-, Projekt- oder lokalen Einstellungen können sie nicht erweitern, und Claude Code führt `availableModels` auch nie über verwaltete Quellen hinweg zusammen; [wie Claude Code verwaltete Quellen kombiniert](https://code.claude.com/docs/de/managed-settings.md#how-claude-code-combines-managed-sources) gibt an, welche Liste welcher Quelle gilt. Andernfalls werden Listen aus Benutzer-, Projekt- und lokalen Einstellungen wie andere Array-Einstellungen [verkettet und dedupliziert](https://code.claude.com/docs/de/settings.md#settings-precedence). Vor Claude Code v2.1.175 wurden Einträge aus Geltungsbereichen mit niedrigerem Vorrang in die verwaltete Liste zusammengeführt, anstatt durch sie ersetzt zu werden.

351 351 

352Innerhalb der effektiven Liste deaktiviert ein Eintrag, der ein bestimmtes Modell in einer Familie benennt, ob ein Versionspräfix oder eine vollständige Modell-ID, den Wildcard-Eintrag dieser Familie: `["sonnet", "claude-sonnet-4-5"]` erlaubt nur Sonnet 4.5-Versionen, nicht jedes Sonnet-Modell.352Innerhalb der wirksamen Liste deaktiviert ein Eintrag, der ein bestimmtes Modell einer Familie nennt, sei es ein Versionspräfix oder eine vollständige Modell-ID, den Platzhaltereintrag dieser Familie. Mit `["sonnet", "claude-sonnet-4-5"]` können Benutzer beispielsweise nur die Modell-IDs auswählen, denen `claude-sonnet-4-5` [entspricht](#restrict-model-selection), nicht jedes Sonnet-Modell.

353 353 

354### Mantle-Modell-IDs354### Mantle-Modell-IDs

355 355 

356Einträge in `availableModels`, die mit `anthropic.` beginnen, werden als benutzerdefinierte Optionen zur Auswahl `/model` hinzugefügt. Dies ist eine Ausnahme von der Alias-Zuordnung, die in [Modelle für Drittanbieter-Bereitstellungen festlegen](#pin-models-for-third-party-deployments) beschrieben ist. Wenn der [Amazon Bedrock Mantle-Endpunkt](https://code.claude.com/docs/de/amazon-bedrock.md#use-the-mantle-endpoint) aktiviert ist, leitet Claude Code die Einträge, die dem Mantle-Format entsprechen, an diesen Endpunkt weiter. Die Einstellung schränkt die Auswahl immer noch auf aufgelistete Einträge ein, und eine Mantle-ID bettet einen Familiennamen ein, daher zählt sie als spezifischer Eintrag und deaktiviert den Wildcard dieser Familie: Neben allen Mantle-IDs listen Sie die Versionspräfixe oder vollständigen IDs auf, die Sie auswählbar behalten möchten. Siehe [Merge-Verhalten](#merge-behavior).356Einträge in `availableModels`, die mit `anthropic.` beginnen, werden der `/model`-Auswahl als benutzerdefinierte Optionen hinzugefügt. Dies ist eine Ausnahme vom Alias-Abgleich, der in [Modelle für Drittanbieter-Bereitstellungen festlegen](#pin-models-for-third-party-deployments) beschrieben ist. Wenn der [Amazon Bedrock Mantle-Endpunkt](https://code.claude.com/docs/de/amazon-bedrock.md#use-the-mantle-endpoint) aktiviert ist, leitet Claude Code die Einträge, die dem Mantle-Format entsprechen, an diesen Endpunkt weiter. Die Einstellung beschränkt die Auswahl weiterhin auf aufgeführte Einträge, und eine Mantle-ID enthält einen Familiennamen, sodass sie als spezifischer Eintrag zählt und den Platzhaltereintrag dieser Familie deaktiviert: Führen Sie neben allen Mantle-IDs die Versionspräfixe oder vollständigen IDs auf, die auswählbar bleiben sollen. Siehe [Zusammenführungsverhalten](#merge-behavior).

357 357 

358### Spezifische Modelle oder Versionen blockieren358### Bestimmte Modelle oder Versionen blockieren

359 359 

360Ein `availableModels`-Eintrag wie `claude-opus-5` zulässt auch spätere Versionen, die ihn erweitern, wie Opus 5.5, sobald Claude Code sie unterstützt. Zwei verwaltete Einstellungen ermöglichen es Ihnen, eine Veröffentlichung zurückzuhalten, und beide erfordern Claude Code v2.1.283 oder später:360Ein `availableModels`-Eintrag wie `claude-opus-5` lässt auch spätere Releases zu, die ihn erweitern, etwa Opus 5.5, sobald Claude Code sie unterstützt. Mit zwei verwalteten Einstellungen können Sie ein Release zurückhalten; beide erfordern Claude Code v2.1.283 oder höher:

361 361 

362* [`deniedModels`](https://code.claude.com/docs/de/settings-reference#deniedmodels): listen Sie die zu blockierenden Modelle auf. Ein aufgelistetes Modell wird blockiert, auch wenn `availableModels` es zulässt, und der Schlüssel funktioniert auch ohne Allowlist. Eine Veröffentlichung, die kein Eintrag blockiert, bleibt zulässig362* [`deniedModels`](https://code.claude.com/docs/de/settings-reference#deniedmodels): Führen Sie die zu blockierenden Modelle auf. Ein aufgeführtes Modell wird auch dann blockiert, wenn `availableModels` es zulässt, und der Schlüssel funktioniert auch ganz ohne Allowlist. Ein Release, das kein Eintrag blockiert, bleibt zulässig

363* [`availableModelsMatch`](https://code.claude.com/docs/de/settings-reference#availablemodelsmatch): setzen Sie es auf `"exact"`, sodass jede Modell-ID in `availableModels` nur die Version zulässt, die sie benennt. Eine neuere Version einer aufgelisteten Modell-ID bleibt dann blockiert, bis Sie sie zur Liste hinzufügen363* [`availableModelsMatch`](https://code.claude.com/docs/de/settings-reference#availablemodelsmatch): Setzen Sie ihn auf `"exact"`, damit jede Modell-ID in `availableModels` nur die genannte Version zulässt. Eine neuere Version einer aufgeführten Modell-ID bleibt dann blockiert, bis Sie sie der Liste hinzufügen

364 364 

365Frühere Versionen ignorieren beide Schlüssel, daher setzen Sie auch [`requiredMinimumVersion`](https://code.claude.com/docs/de/settings-reference#requiredminimumversion), um zu verhindern, dass diese Versionen starten.365Frühere Versionen ignorieren beide Schlüssel, setzen Sie daher zusätzlich [`requiredMinimumVersion`](https://code.claude.com/docs/de/settings-reference#requiredminimumversion), um den Start dieser Versionen zu verhindern.

366 366 

367Dieses Beispiel zulässt Opus- und Sonnet-Modelle und blockiert Opus 5.5 in jeder Schreibweise, einschließlich datierter und Provider-spezifischer IDs:367Dieses Beispiel lässt Opus- und Sonnet-Modelle zu und blockiert Opus 5.5 in jeder Schreibweise, einschließlich datierter und anbieterspezifischer IDs:

368 368 

369```json theme={null}369```json theme={null}

370{370{


373}373}

374```374```

375 375 

376Ein blockiertes Modell, ob `deniedModels` es benennt oder eine `"exact"`-Liste es auslässt, wird überall dort als blockierte Auswahl behandelt, wo [die Allowlist gilt](#restrict-model-selection). Es ist in der Auswahl `/model` verborgen, und `/model <name>` lehnt es ab. Wenn Sie eine blockierte Modell-ID mit `--model`, `ANTHROPIC_MODEL` oder der Einstellung `model` benennen, löscht Claude Code sie beim Start und löst stattdessen die Option Standard auf. Wenn ein [Hook](https://code.claude.com/docs/de/hooks.md) oder eine Hintergrundanfrage ein Modell benennt, das `deniedModels` blockiert, wie das Feld `model` eines Agent-Hooks, wird diese Anfrage stattdessen auf dem Sitzungsmodell ausgeführt.376Ein blockiertes Modell, ob `deniedModels` es nennt oder eine `"exact"`-Liste es auslässt, wird überall dort, wo [die Allowlist gilt](#restrict-model-selection), als blockierte Auswahl behandelt. Es wird in der `/model`-Auswahl ausgeblendet, und `/model <name>` lehnt es ab. Wenn Sie eine blockierte Modell-ID mit `--model`, `ANTHROPIC_MODEL` oder der Einstellung `model` angeben, verwirft Claude Code sie beim Start und löst stattdessen die Option „Default“ auf. Wenn ein [Hook](https://code.claude.com/docs/de/hooks.md) oder eine Hintergrundanfrage ein Modell nennt, das `deniedModels` blockiert, etwa das Feld `model` eines Agent-Hooks, wird diese Anfrage stattdessen mit dem Modell der Sitzung ausgeführt.

377 377 

378Die Option Standard folgt beiden Schlüsseln auch, unabhängig davon, ob Sie [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) setzen. Wenn Sie es mit einem nicht leeren `availableModels` setzen, zählt ein blockierter Standard als ein Modell außerhalb der Allowlist. Andernfalls wird eine Option Standard, die zu einem blockierten Modell aufgelöst würde, in dieser Reihenfolge herabgestuft:378Auch die Option „Default“ folgt beiden Schlüsseln, unabhängig davon, ob Sie [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) setzen. Wenn Sie es mit einem nicht leeren `availableModels` setzen, zählt ein blockierter Standard als Modell außerhalb der Allowlist. Andernfalls weicht eine Option „Default“, die zu einem blockierten Modell aufgelöst würde, in dieser Reihenfolge aus:

379 379 

3801. Die neueste zulässige Version der gleichen Familie3801. Die neueste zulässige Version derselben Familie

3812. Das neueste zulässige Modell jeder Familie mit niedrigeren Kosten der Reihe nach: Sonnet, dann Haiku3812. Nacheinander das neueste zulässige Modell jeder kostengünstigeren Familie: Sonnet, dann Haiku

3823. Der erste `availableModels`-Eintrag, der ein zulässiges Modell benennt3823. Der erste `availableModels`-Eintrag, der ein zulässiges Modell nennt

383 383 

384Wenn keines davon zulässig ist, [weigert sich eine Sitzung, die auf der Option Standard startet](https://code.claude.com/docs/de/errors.md#managed-settings-block-the-default-model), mit einem Fehler zu starten, der den zu behebenden Schlüssel benennt. Eine `"exact"`-Liste wirkt sich auf die Option Standard nur aus, wenn die verwaltete `availableModels`-Liste mindestens ein Modell oder eine Familie benennt.384Wenn keines davon zulässig ist, [verweigert eine Sitzung, die mit der Option „Default“ startet, den Start](https://code.claude.com/docs/de/errors.md#managed-settings-block-the-default-model) mit einem Fehler, der den zu korrigierenden Schlüssel nennt. Eine `"exact"`-Liste wirkt sich nur dann auf die Option „Default“ aus, wenn die verwaltete `availableModels`-Liste mindestens ein Modell oder eine Familie nennt.

385 385 

386Claude Code liest beide Schlüssel nur aus verwalteten Einstellungen. Wenn Sie einen davon in Benutzer-, Projekt- oder lokalen Einstellungen oder mit `--settings` setzen, ignoriert Claude Code ihn mit einer Warnung.386Claude Code liest beide Schlüssel nur aus verwalteten Einstellungen. Wenn Sie einen davon in Benutzer-, Projekt- oder lokalen Einstellungen oder mit `--settings` setzen, ignoriert Claude Code ihn mit einer Warnung.

387 387 

388### Organisationsmodellbeschränkungen388### Modelleinschränkungen der Organisation

389 389 

390Organisationsadministratoren in Claude Enterprise-Plänen schränken ein, welche Modelle Mitglieder ausführen können, indem sie einzelne Modelle in der Admin-Konsole von claude.ai deaktivieren. Diese Beschränkung wird mit den Berechtigungen des Kontos bereitgestellt, wenn Claude Code sich authentifiziert, getrennt von jeder `availableModels`-Liste in Einstellungen, und der Server erzwingt die gleiche Beschränkung unabhängig, wenn eine Sitzung erstellt wird. Erfordert Claude Code v2.1.187 oder später.390Organisations-Admins in Claude Enterprise-Plänen schränken ein, welche Modelle Mitglieder ausführen können, indem sie einzelne Modelle in der Admin-Konsole von claude.ai deaktivieren. Diese Einschränkung wird mit den Berechtigungen des Kontos bereitgestellt, wenn sich Claude Code authentifiziert, getrennt von einer `availableModels`-Liste in den Einstellungen, und der Server setzt dieselbe Einschränkung beim Erstellen einer Sitzung unabhängig durch. Erfordert Claude Code v2.1.187 oder höher.

391 391 

392Die Beschränkung gilt, wenn sich ein Mitglied anmeldet oder seinen eigenen API-Schlüssel verwendet. Organisationsbezogene Anmeldedaten, wie Organisationsdienst-Schlüssel, sind nicht an einen Benutzer gebunden, daher gilt die Beschränkung nicht für sie.392Die Einschränkung gilt, wenn sich ein Mitglied anmeldet oder seinen eigenen API-Schlüssel verwendet. Anmeldedaten mit Organisationsbereich, etwa Organisations-Dienstschlüssel, sind keinem Benutzer zugeordnet, daher gilt die Einschränkung für sie nicht.

393 393 

394Die Claude Console hat keine Modellbeschränkungskontrolle. Organisationen ohne Claude Enterprise-Plan, einschließlich derjenigen, deren Mitglieder sich über die Anthropic API authentifizieren, schränken Modelle stattdessen mit [`availableModels`](#restrict-model-selection) in [verwalteten Einstellungen](https://code.claude.com/docs/de/managed-settings.md) ein und fügen [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) hinzu, um die Option Standard abzudecken. [Oberflächenabdeckung](#surface-coverage) gibt an, wie jede Oberfläche diese Einstellungen empfängt und erzwingt.394Die Claude Console bietet keine Steuerung für Modelleinschränkungen. Organisationen ohne Claude Enterprise-Plan, einschließlich derer, deren Mitglieder sich über die Anthropic API authentifizieren, schränken Modelle stattdessen mit [`availableModels`](#restrict-model-selection) in [verwalteten Einstellungen](https://code.claude.com/docs/de/managed-settings.md) ein und fügen [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) hinzu, um die Option „Default“ abzudecken. [Abdeckung der Oberflächen](#surface-coverage) gibt an, wie jede Oberfläche diese Einstellungen erhält und durchsetzt.

395 395 

396Ein eingeschränktes Modell ist in der Auswahl `/model` verborgen. Wenn Sie es mit `--model`, der Umgebungsvariable `ANTHROPIC_MODEL` oder der Einstellung `model` nach Name auswählen, wird die Meldung `Model "<name>" is restricted by your organization's settings. Using <model> instead.` angezeigt und die Sitzung startet auf einem zulässigen Modell. Wenn Sie `/model <name>` für ein eingeschränktes Modell eingeben, wird es mit `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.` abgelehnt und die Sitzung behält ihr aktuelles Modell.396Ein eingeschränktes Modell wird in der `/model`-Auswahl ausgeblendet. Wird es namentlich mit `--model`, der Umgebungsvariable `ANTHROPIC_MODEL` oder der Einstellung `model` ausgewählt, erscheint der Hinweis `Model "<name>" is restricted by your organization's settings. Using <model> instead.`, und die Sitzung startet mit einem zulässigen Modell. Die Eingabe von `/model <name>` für ein eingeschränktes Modell wird mit `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.` abgelehnt, und die Sitzung behält ihr aktuelles Modell.

397 397 

398Ein [Modellfamilien-Alias](#restrict-model-selection) wie `opus` wird zu seinem üblichen Modell aufgelöst, wenn die Organisation es zulässt. Wenn die Organisation dieses Modell einschränkt, ersetzt Claude Code es durch die neueste Version der Familie, die die Organisation zulässt, mit dem gleichen Ersetzungshinweis. `/model <alias>` wird nur abgelehnt, wenn jede Version seiner Familie eingeschränkt ist; ein Alias, der mit `--model`, `ANTHROPIC_MODEL` oder der Einstellung `model` gesetzt ist, wird in diesem Fall immer noch beim Start ersetzt. Vor v2.1.205 wurde ein Familien-Alias basierend auf seiner neuesten veröffentlichten Version allein ersetzt oder abgelehnt, auch wenn eine ältere Version zulässig war.398Ein [Modellfamilien-Alias](#restrict-model-selection) wie `opus` wird zu seinem üblichen Modell aufgelöst, wenn die Organisation es zulässt. Wenn die Organisation dieses Modell einschränkt, ersetzt Claude Code es durch die neueste Version der Familie, die die Organisation zulässt, mit demselben Ersetzungshinweis. `/model <alias>` wird nur abgelehnt, wenn jede Version seiner Familie eingeschränkt ist; ein mit `--model`, `ANTHROPIC_MODEL` oder der Einstellung `model` festgelegter Alias wird in diesem Fall weiterhin beim Start ersetzt. Vor v2.1.205 wurde ein Familien-Alias allein anhand seiner neuesten veröffentlichten Version ersetzt oder abgelehnt, selbst wenn eine ältere Version zulässig war.

399 399 

400Beschränkungen gelten organisationsweit oder pro Rolle:400Einschränkungen gelten organisationsweit oder pro Rolle:

401 401 

402* Das Deaktivieren eines Modells auf Organisationsebene entfernt es für jedes Mitglied.402* Das Deaktivieren eines Modells auf Organisationsebene entfernt es für jedes Mitglied.

403* Rollenbezogener Zugriff gewährt verschiedenen benutzerdefinierten Rollen unterschiedliche Modelle, und ein Mitglied, das mehrere Rollen innehat, kann jedes Modell verwenden, das eine seiner Rollen gewährt.403* Der Zugriff auf Rollenebene gewährt verschiedenen benutzerdefinierten Rollen unterschiedliche Modelle, und ein Mitglied mit mehreren Rollen kann jedes Modell verwenden, das eine seiner Rollen gewährt.

404* Haiku-Modelle sind immer verfügbar und können nicht deaktiviert werden, daher behält jedes Mitglied mindestens ein nutzbares Modell.404* Haiku-Modelle sind immer verfügbar und können nicht deaktiviert werden, sodass jedes Mitglied mindestens ein nutzbares Modell behält.

405* Eine Zugangsänderung tritt bei neuen Anfragen innerhalb von etwa einer Minute in Kraft; die Auswahl `/model` spiegelt dies wider, wenn eine Sitzung das nächste Mal startet.405* Eine Zugriffsänderung wird für neue Anfragen innerhalb von etwa einer Minute wirksam; die `/model`-Auswahl spiegelt sie beim nächsten Sitzungsstart wider.

406 406 

407Beide Beschränkungen gelten zusammen: Ein Modell ist nur auswählbar, wenn es durch `availableModels` zulässig ist und nicht durch die Organisation eingeschränkt ist. Organisationsbeschränkungen erreichen Sitzungen nur auf der Anthropic API und [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway)-Bereitstellungen; bei jedem anderen Provider verwenden Sie stattdessen `availableModels`.407Beide Einschränkungen gelten gemeinsam: Ein Modell ist nur auswählbar, wenn es von `availableModels` zugelassen und nicht von der Organisation eingeschränkt ist. Organisationseinschränkungen erreichen nur Sitzungen über die Anthropic API und Bereitstellungen mit [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway); bei allen anderen Anbietern verwenden Sie stattdessen `availableModels`.

408 408 

409## Organisationsstandardmodell409## Organisationsstandardmodell

410 410 


947>947>

948> Eine `availableModels`-Allowlist, die über [MDM oder eine verwaltete Einstellungsdatei](https://code.claude.com/docs/de/managed-settings.md#delivery-mechanisms) bereitgestellt wird, gilt weiterhin bei Verwendung von Drittanbieter-Anbietern; [server-verwaltete Einstellungen werden dort nicht bereitgestellt](https://code.claude.com/docs/de/server-managed-settings.md#platform-availability).948> Eine `availableModels`-Allowlist, die über [MDM oder eine verwaltete Einstellungsdatei](https://code.claude.com/docs/de/managed-settings.md#delivery-mechanisms) bereitgestellt wird, gilt weiterhin bei Verwendung von Drittanbieter-Anbietern; [server-verwaltete Einstellungen werden dort nicht bereitgestellt](https://code.claude.com/docs/de/server-managed-settings.md#platform-availability).

949>949>

950> Die Filterung stimmt mit einem Modellalias wie `opus`, einem Versionspräfix wie `claude-opus-4-8` oder der vollständigen Modell-ID in Anbieterform überein. Anbieterspezifische Präfixe wie `us.anthropic.` werden nicht entfernt, daher müssen Sie zum Zulassen eines bestimmten Modells die vollständige Anbieterform-ID auflisten oder sie durch [`modelOverrides`](#override-model-ids-per-version) zuordnen. Für ein fixiertes Modell ist diese ID der Wert, den Sie in seiner `ANTHROPIC_DEFAULT_*_MODEL`-Variable setzen. Alle `[1m]`-Suffixe werden sowohl aus dem Allowlist-Eintrag als auch aus dem angeforderten Modell vor dem Abgleich entfernt.950> Die Filterung stimmt mit einem Modellalias wie `opus`, einem Versionspräfix wie `claude-opus-4-8` oder der vollständigen Modell-ID in Anbieterform überein. Anbieterspezifische Präfixe wie `us.anthropic.` werden nicht entfernt. Um ein bestimmtes Modell zuzulassen, ordnen Sie es daher über [`modelOverrides`](#override-model-ids-per-version) zu oder listen Sie seine vollständige ID in Anbieterform auf:

951>

952> * **Google Cloud's Agent Platform**: Wenn die ID, die Claude Code anfragt, ein `@`-Datum enthält, wie `claude-sonnet-4-5@20250929`, nehmen Sie das Datum in Ihren Allowlist-Eintrag auf. Für sich allein stimmt `claude-sonnet-4-5` unter keiner der beiden [`availableModelsMatch`](https://code.claude.com/docs/de/settings-reference#availablemodelsmatch)-Einstellungen mit dieser ID überein.

953> * **Fixierte Modelle**: Listen Sie den Wert auf, den Sie in der `ANTHROPIC_DEFAULT_*_MODEL`-Variable des Modells setzen

954>

955> Alle `[1m]`-Suffixe werden sowohl aus dem Allowlist-Eintrag als auch aus dem angeforderten Modell vor dem Abgleich entfernt.

951 956 

952### Anzeige und Funktionen des fixierten Modells anpassen957### Anzeige und Funktionen des fixierten Modells anpassen

953 958 

Details

605 605 

606* `prompt.id`: UUID, die einen Benutzer-Prompt mit allen nachfolgenden Ereignissen bis zum nächsten Prompt verknüpft. Siehe [Attribute zur Ereigniskorrelation](#event-correlation-attributes).606* `prompt.id`: UUID, die einen Benutzer-Prompt mit allen nachfolgenden Ereignissen bis zum nächsten Prompt verknüpft. Siehe [Attribute zur Ereigniskorrelation](#event-correlation-attributes).

607* `workspace.host_paths`: in der Desktop-App ausgewählte Workspace-Verzeichnisse des Hosts, als String-Array607* `workspace.host_paths`: in der Desktop-App ausgewählte Workspace-Verzeichnisse des Hosts, als String-Array

608* `workflow.run_id`: Ausführungskennung mit dem Präfix `wf_`, bei den API- und Tool-Ereignissen, die von Agenten ausgegeben werden, die zu einer Ausführung des [Workflow](https://code.claude.com/docs/de/workflows.md)-Tools gehören. Wenn Sie Ereignisse nach einer `workflow.run_id` filtern, rekonstruieren Sie die API-Anfragen und Tool-Ergebnisse dieser Ausführung. Die Kennung umfasst die Agenten, die das Workflow-Skript startet, sowie alle Agenten, die diese wiederum starten, etwa Skill-Aufrufe. Sie entspricht der Ausführungskennung, die im Ergebnis des Workflow-Tools gemeldet wird. Fehlt bei allen anderen Ereignissen.608* `workflow.run_id`: Ausführungskennung mit dem Präfix `wf_` bei den API- und Tool-Events, die von Agenten ausgegeben werden, die zu einer Ausführung des [Workflow](https://code.claude.com/docs/de/workflows.md)-Tools gehören. Wenn Sie Events nach einer `workflow.run_id` filtern, rekonstruieren Sie die API-Anfragen und Tool-Ergebnisse dieser Ausführung. Die Kennung umfasst die Agenten, die das Workflow-Skript startet, sowie alle Agenten, die diese wiederum starten, etwa Skill-Aufrufe. Sie entspricht der im Ergebnis des Workflow-Tools gemeldeten Ausführungskennung.

609* `workflow.name`: Name des Workflows, das `meta.name` seines Skripts, ausgegeben zusammen mit `workflow.run_id`. Namen integrierter Workflows erscheinen unverändert, wenn die Ausführung das unveränderte integrierte Skript ausführt. Von Benutzern erstellte Namen, einschließlich bearbeiteter Kopien integrierter Skripte, werden durch `custom` ersetzt, sofern nicht `OTEL_LOG_TOOL_DETAILS=1` gesetzt ist.609* `workflow.name`: Name des Workflows, das `meta.name` seines Skripts, ausgegeben zusammen mit `workflow.run_id`. Namen integrierter Workflows erscheinen unverändert, wenn die Ausführung das unveränderte integrierte Skript ausführt. Von Benutzern erstellte Namen, einschließlich bearbeiteter Kopien integrierter Skripte, werden durch `custom` ersetzt, sofern nicht `OTEL_LOG_TOOL_DETAILS=1` gesetzt ist.

610* `agent_id`: Kennung des [Subagenten](https://code.claude.com/docs/de/sub-agents.md), der das Event ausgelöst hat, etwa `a3f2c1b4d5e6f7a80`. Zu den Events, die sie tragen, gehören die API- und Tool-Events eines Subagenten, seine [`assistant_response`](#assistant-response-event)-Events und [`subagent_completed`](#subagent-completed-event) für den abgeschlossenen Subagenten. Fehlt bei Events der Hauptsitzung und von [In-Process-Teammates](https://code.claude.com/docs/de/agent-teams.md#choose-a-display-mode). Die [Span-`agent_id`](#span-attributes) des Subagenten hat denselben Wert oder fügt nach dem führenden `a` eine Bezeichnung hinzu, wie in `acompact-3f2c1b4d5e6f7a80`. Erfordert Claude Code v2.1.310 oder höher

611* `parent_agent_id`: die `agent_id` des Agenten, der den Subagenten, der das Event ausgelöst hat, gestartet oder zuletzt fortgesetzt hat. Fehlt, wenn dieser Agent die Hauptsitzung ist. Erfordert Claude Code v2.1.310 oder höher

610 612 

611#### Repository-Attribute613#### Repository-Attribute

612 614 


755| `prompt.id` | UUID-v4-Kennung, die alle Ereignisse verknüpft, die bei der Verarbeitung eines einzelnen Benutzer-Prompts entstehen |757| `prompt.id` | UUID-v4-Kennung, die alle Ereignisse verknüpft, die bei der Verarbeitung eines einzelnen Benutzer-Prompts entstehen |

756| `event.sequence` | Nullbasierter Zähler zum Ordnen von Ereignissen, gezählt pro Claude Code-Prozess statt pro Sitzung |758| `event.sequence` | Nullbasierter Zähler zum Ordnen von Ereignissen, gezählt pro Claude Code-Prozess statt pro Sitzung |

757| `message.uuid` | UUID der Nachricht, wie sie im Sitzungstranskript gespeichert ist, den Dateien `~/.claude/projects/*/*.jsonl`. Vorhanden bei `assistant_response`, bei `api_response_body` und bei `user_prompt`, außer bei Befehlsaufrufen, die null oder viele Nachrichten erzeugen können. Bei `assistant_response` und `api_response_body` ist dies der letzte Transkripteintrag der Antwort, an den die `parentUuid` des nächsten Turns anknüpft. Erfordert bei `api_response_body` Claude Code v2.1.274 oder höher |759| `message.uuid` | UUID der Nachricht, wie sie im Sitzungstranskript gespeichert ist, den Dateien `~/.claude/projects/*/*.jsonl`. Vorhanden bei `assistant_response`, bei `api_response_body` und bei `user_prompt`, außer bei Befehlsaufrufen, die null oder viele Nachrichten erzeugen können. Bei `assistant_response` und `api_response_body` ist dies der letzte Transkripteintrag der Antwort, an den die `parentUuid` des nächsten Turns anknüpft. Erfordert bei `api_response_body` Claude Code v2.1.274 oder höher |

758| `request_id` | Vom Server zugewiesene ID der API-Anfrage, gelesen aus dem Response-Header `request-id`, etwa `req_011...`. Bei einer Antwort ohne `request-id`-Header, wie bei [Amazon Bedrock](https://code.claude.com/docs/de/amazon-bedrock.md), stammt der Wert stattdessen aus dem Header `x-amzn-requestid`. Vorhanden bei `api_request`, `api_error`, `api_refusal`, `assistant_response` und `api_response_body`, wenn die Antwort einen der beiden Header enthält. Entspricht demselben Attribut im Trace-Span `llm_request`. Die Quelle `x-amzn-requestid` erfordert Claude Code v2.1.282 oder höher |760| `request_id` | Vom Server vergebene ID der API-Anfrage, gelesen aus dem Response-Header `request-id`, etwa `req_011...`. Bei einer Antwort ohne `request-id`-Header, wie bei [Amazon Bedrock](https://code.claude.com/docs/de/amazon-bedrock.md), stammt der Wert stattdessen aus dem Header `x-amzn-requestid`. Vorhanden bei `api_request`, `api_error`, `api_refusal`, `assistant_response`, `api_response_body`, [`tool_result`](#tool-result-event) und [`tool_decision`](#tool-decision-event), wenn die Antwort einen der beiden Header enthält. Entspricht demselben Attribut im Trace-Span `llm_request`. Die Quelle `x-amzn-requestid` erfordert Claude Code v2.1.282 oder höher |

759| `client_request_id` | Vom Client generierte UUID, die als Request-Header `x-client-request-id` gesendet wird. Vorhanden bei `api_request` und `api_error` bei direkten API-Verbindungen zu Anthropic; nicht vorhanden bei Backends von Drittanbietern und wenn die Anfrage über den Nicht-Streaming-Fallback erneut versucht wurde. Ordnet eine Anfrage ihrer Antwort zu und bleibt auch bei Fehlern wie Timeouts verfügbar, die nie eine `request_id` vom Server erzeugt haben. Entspricht demselben Attribut im Trace-Span `llm_request` |761| `client_request_id` | Vom Client generierte UUID, die als Request-Header `x-client-request-id` gesendet wird. Vorhanden bei `api_request` und `api_error` bei direkten API-Verbindungen zu Anthropic; nicht vorhanden bei Backends von Drittanbietern und wenn die Anfrage über den Nicht-Streaming-Fallback erneut versucht wurde. Ordnet eine Anfrage ihrer Antwort zu und bleibt auch bei Fehlern wie Timeouts verfügbar, die nie eine `request_id` vom Server erzeugt haben. Entspricht demselben Attribut im Trace-Span `llm_request` |

760 762 

761Um alle Aktivitäten zu verfolgen, die durch einen einzelnen Prompt ausgelöst wurden, filtern Sie Ihre Ereignisse nach einem bestimmten `prompt.id`-Wert. Dadurch erhalten Sie das user\_prompt-Ereignis, alle api\_request-Ereignisse und alle tool\_result-Ereignisse, die während der Verarbeitung dieses Prompts aufgetreten sind.763Um alle Aktivitäten zu verfolgen, die durch einen einzelnen Prompt ausgelöst wurden, filtern Sie Ihre Ereignisse nach einem bestimmten `prompt.id`-Wert. Dadurch erhalten Sie das user\_prompt-Ereignis, alle api\_request-Ereignisse und alle tool\_result-Ereignisse, die während der Verarbeitung dieses Prompts aufgetreten sind.


820* `event.sequence`: prozessbezogener Zähler zum Ordnen von Ereignissen, beschrieben unter [Attribute zur Ereigniskorrelation](#event-correlation-attributes)822* `event.sequence`: prozessbezogener Zähler zum Ordnen von Ereignissen, beschrieben unter [Attribute zur Ereigniskorrelation](#event-correlation-attributes)

821* `tool_name`: Name des Tools823* `tool_name`: Name des Tools

822* `tool_use_id`: Eindeutige Kennung für diesen Tool-Aufruf. Entspricht der an Hooks übergebenen `tool_use_id` und ermöglicht so die Korrelation zwischen OTel-Ereignissen und von Hooks erfassten Daten.824* `tool_use_id`: Eindeutige Kennung für diesen Tool-Aufruf. Entspricht der an Hooks übergebenen `tool_use_id` und ermöglicht so die Korrelation zwischen OTel-Ereignissen und von Hooks erfassten Daten.

825* `request_id`: die [`request_id`](#event-correlation-attributes) der API-Antwort, die diesen Tool-Aufruf enthielt, sodass Sie den Aufruf mit den API-Events dieser Antwort verknüpfen können. Fehlt, wenn diese Antwort keine Anfrage-ID hatte oder wenn keine API-Antwort den Aufruf enthielt. Erfordert Claude Code v2.1.310 oder höher

823* `success`: `"true"` oder `"false"`826* `success`: `"true"` oder `"false"`

824* `duration_ms`: Ausführungszeit in Millisekunden827* `duration_ms`: Ausführungszeit in Millisekunden

825* `error_type`: String mit der Fehlerkategorie, wenn das Tool fehlgeschlagen ist, etwa `"Error:ENOENT"` oder `"ShellError"`828* `error_type`: String mit der Fehlerkategorie, wenn das Tool fehlgeschlagen ist, etwa `"Error:ENOENT"` oder `"ShellError"`


972* `event.sequence`: prozessbezogener Zähler zum Ordnen von Ereignissen, beschrieben unter [Attribute zur Ereigniskorrelation](#event-correlation-attributes)975* `event.sequence`: prozessbezogener Zähler zum Ordnen von Ereignissen, beschrieben unter [Attribute zur Ereigniskorrelation](#event-correlation-attributes)

973* `tool_name`: Name des Tools (zum Beispiel „Read“, „Edit“, „Write“, „NotebookEdit“)976* `tool_name`: Name des Tools (zum Beispiel „Read“, „Edit“, „Write“, „NotebookEdit“)

974* `tool_use_id`: Eindeutige Kennung für diesen Tool-Aufruf. Entspricht der an Hooks übergebenen `tool_use_id` und ermöglicht so die Korrelation zwischen OTel-Ereignissen und von Hooks erfassten Daten.977* `tool_use_id`: Eindeutige Kennung für diesen Tool-Aufruf. Entspricht der an Hooks übergebenen `tool_use_id` und ermöglicht so die Korrelation zwischen OTel-Ereignissen und von Hooks erfassten Daten.

978* `request_id`: die [`request_id`](#event-correlation-attributes) der API-Antwort, die diesen Tool-Aufruf enthielt, sodass Sie den Aufruf mit den API-Events dieser Antwort verknüpfen können. Fehlt, wenn diese Antwort keine Anfrage-ID hatte oder wenn keine API-Antwort den Aufruf enthielt. Erfordert Claude Code v2.1.310 oder höher

975* `decision`: Entweder `"accept"` oder `"reject"`979* `decision`: Entweder `"accept"` oder `"reject"`

976* `tool_source`: Immer vorhanden. Die Herkunft des Tools, als geschlossene Menge von der CLI festgelegter Werte:980* `tool_source`: Immer vorhanden. Die Herkunft des Tools, als geschlossene Menge von der CLI festgelegter Werte:

977 * `"builtin"`: die eigenen Tools der CLI981 * `"builtin"`: die eigenen Tools der CLI


1024 * Für das Skill-Tool: enthält `skill_name`1028 * Für das Skill-Tool: enthält `skill_name`

1025 * Für das Agent-Tool oder das ältere Task-Tool: enthält `subagent_type`1029 * Für das Agent-Tool oder das ältere Task-Tool: enthält `subagent_type`

1026 1030 

1027Wenn Sie `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` des OpenTelemetry SDK unter die Anzahl der Attribute eines `tool_decision`-Ereignisses senken, verwirft das SDK die Attribute, die Claude Code zuletzt gesetzt hat. Das SDK verwirft zuerst `permission_mode`, dann `classifier_category` und als Drittes `classifier_verdict` und verwirft die übrigen Attribute des Ereignisses erst nach diesen dreien. Diese Reihenfolge erfordert Claude Code v2.1.302 oder höher.1031Wenn Sie `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` des OpenTelemetry SDK unter die Anzahl der Attribute eines `tool_decision`-Events senken, verwirft das SDK die Attribute, die Claude Code zuletzt gesetzt hat. Das SDK verwirft diese vor allen anderen Attributen, in dieser Reihenfolge, wobei es diejenigen überspringt, die das Event nicht trägt:

1032 

10331. `parent_agent_id`

10342. `agent_id`

10353. `request_id`

10364. `permission_mode`

10375. `classifier_category`

10386. `classifier_verdict`

1039 

1040`permission_mode`, `classifier_category` und `classifier_verdict` werden ab Claude Code v2.1.302 in dieser Reihenfolge verworfen. `parent_agent_id`, `agent_id` und `request_id` erfordern v2.1.310 oder höher.

1028 1041 

1029#### Sicherheitsereignis1042#### Sicherheitsereignis

1030 1043 

Details

240 240 

241Die beiden Datadog-Intake-Hosts tragen nur optionale operationale Telemetrie, und das Setzen von [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/de/env-vars) deaktiviert beide. Sitzungen bei Drittanbietern senden niemals an diese Hosts, auch wenn eine Plattform [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/de/env-vars) setzt und Telemetrie-Metriken standardmäßig aktiviert sind. Siehe [Telemetry services](https://code.claude.com/docs/de/data-usage.md#telemetry-services) für alles, was Claude Code sendet, und wie Sie es deaktivieren, bevor Sie Ihre Allowlist finalisieren.241Die beiden Datadog-Intake-Hosts tragen nur optionale operationale Telemetrie, und das Setzen von [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/de/env-vars) deaktiviert beide. Sitzungen bei Drittanbietern senden niemals an diese Hosts, auch wenn eine Plattform [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/de/env-vars) setzt und Telemetrie-Metriken standardmäßig aktiviert sind. Siehe [Telemetry services](https://code.claude.com/docs/de/data-usage.md#telemetry-services) für alles, was Claude Code sendet, und wie Sie es deaktivieren, bevor Sie Ihre Allowlist finalisieren.

242 242 

243### Routing über Cloud-Anbieter und LLM-Gateways

244 

243Bei Verwendung von [Amazon Bedrock](https://code.claude.com/docs/de/amazon-bedrock.md), [Google Cloud's Agent Platform](https://code.claude.com/docs/de/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/de/microsoft-foundry.md) oder einer angemeldeten [Claude apps gateway](https://code.claude.com/docs/de/claude-apps-gateway) Sitzung gehen Modellverkehr und Authentifizierung stattdessen zu Ihrem Anbieter oder Gateway anstelle von `api.anthropic.com`, `claude.ai` oder `platform.claude.com`. Das WebFetch-Tool ruft immer noch `api.anthropic.com` für seine [Domänensicherheitsprüfung](https://code.claude.com/docs/de/data-usage.md#webfetch-domain-safety-check) auf, es sei denn, Sie setzen `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/de/settings.md).245Bei Verwendung von [Amazon Bedrock](https://code.claude.com/docs/de/amazon-bedrock.md), [Google Cloud's Agent Platform](https://code.claude.com/docs/de/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/de/microsoft-foundry.md) oder einer angemeldeten [Claude apps gateway](https://code.claude.com/docs/de/claude-apps-gateway) Sitzung gehen Modellverkehr und Authentifizierung stattdessen zu Ihrem Anbieter oder Gateway anstelle von `api.anthropic.com`, `claude.ai` oder `platform.claude.com`. Das WebFetch-Tool ruft immer noch `api.anthropic.com` für seine [Domänensicherheitsprüfung](https://code.claude.com/docs/de/data-usage.md#webfetch-domain-safety-check) auf, es sei denn, Sie setzen `skipWebFetchPreflight: true` in [settings](https://code.claude.com/docs/de/settings.md).

244 246 

245Beim Routing durch ein [LLM gateway](https://code.claude.com/docs/de/llm-gateway) mit [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential) ruft die [fast mode](https://code.claude.com/docs/de/fast-mode.md) Verfügbarkeitsprüfung immer noch `api.anthropic.com` anstelle der Gateway-Basis-URL auf. Die Prüfung berücksichtigt einen konfigurierten HTTP-Proxy, daher ist ein Allowlist-Eintrag für `api.anthropic.com` im Proxy die Lösung, wenn eine Netzwerkblockade die Ursache ist. Eine Netzwerkblockade schlägt die Prüfung nur fehl, wenn der Host selbst durch den Proxy nicht erreichbar ist, und fast mode meldet dann einen Konnektivitätsfehler. Der gleiche Konnektivitätsfehler tritt auf, wenn die Prüfung eine vom Gateway ausgestellte Anmeldedaten präsentiert, die Anthropic ablehnt; Allowlisting hilft dort nicht, da nichts blockiert ist. Siehe [use fast mode behind proxies and LLM gateways](https://code.claude.com/docs/de/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) für die Variablen, die es wiederherstellen.247Wenn Ihre Entwickler den [Fast-Modus](https://code.claude.com/docs/de/fast-mode.md) hinter einem mit [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/de/llm-gateway-connect#set-the-base-url-and-credential) festgelegten [LLM-Gateway](https://code.claude.com/docs/de/llm-gateway) verwenden, halten Sie `api.anthropic.com` über Ihren Proxy erreichbar. Wenn Claude Code die Verfügbarkeitsprüfung für den Fast-Modus sendet, geht diese über jeden konfigurierten HTTP-Proxy an diesen Host, niemals an das Gateway. Informationen dazu, wann die Prüfung nicht gesendet wird, und zu der Variablen, die den Fast-Modus im jeweiligen Fall wiederherstellt, finden Sie unter [Fast-Modus hinter Proxys und LLM-Gateways verwenden](https://code.claude.com/docs/de/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways).

246 248 

247### Organisations-IP-Allowlists und Proxy-Ausgang249### Organisations-IP-Allowlists und Proxy-Ausgang

248 250 

Details

106 106 

107Code im Hooks-Modul ist zu tief verschachtelt, oder seine Kette von Importen ist zu lang, als dass Claude Code ihn laden könnte. Die Zeile beginnt mit dem Namen des Mods und `hooks module did not load:`, gefolgt vom Namen einer Datei und diesem Grund.107Code im Hooks-Modul ist zu tief verschachtelt, oder seine Kette von Importen ist zu lang, als dass Claude Code ihn laden könnte. Die Zeile beginnt mit dem Namen des Mods und `hooks module did not load:`, gefolgt vom Namen einer Datei und diesem Grund.

108 108 

109Durchsuchen Sie diese Datei und die Dateien, die über ihre Importe erreicht werden, nach dem am tiefsten verschachtelten Teil und schreiben Sie ihn so um, dass er weniger tief verschachtelt ist, oder verkürzen Sie die Kette von Importen. Wenn Sie den Mod installiert und nicht selbst geschrieben haben, bitten Sie dessen Autor darum.109Durchsuchen Sie diese Datei und die Dateien, die über ihre Importe erreicht werden, nach dem am tiefsten verschachtelten Teil und schreiben Sie ihn so um, dass er weniger tief verschachtelt ist, oder verkürzen Sie die Kette von Importen. Wenn Sie den Mod nicht selbst geschrieben haben, bitten Sie dessen Autor, ihn zu beheben.

110 110 

111### `the parser stopped` oder `the engine ran out of stack loading the file`111### `the parser stopped` oder `the engine ran out of stack loading the file`

112 112 

routines.md +20 −2

Details

25* Eine Aufgabe mit nur einem API-Trigger wird ausgeführt, wenn Sie ihren Endpunkt aufrufen.25* Eine Aufgabe mit nur einem API-Trigger wird ausgeführt, wenn Sie ihren Endpunkt aufrufen.

26* Eine Aufgabe mit nur einem GitHub-Trigger wird ausgeführt, wenn ein passendes Repository-Ereignis eintritt.26* Eine Aufgabe mit nur einem GitHub-Trigger wird ausgeführt, wenn ein passendes Repository-Ereignis eintritt.

27 27 

28Geplante Aufgaben sind in den Plänen Pro, Max, Team und Enterprise verfügbar. Erstellen und verwalten Sie sie unter [claude.ai/code/routines](https://claude.ai/code/routines) oder über die CLI mit `/schedule`. Der frühere Name, Routinen, [erscheint weiterhin](#where-the-name-routines-still-appears) in der Webadresse, in der CLI und in der API.28Geplante Aufgaben sind in den Plänen Pro, Max, Team und Enterprise verfügbar. Erstellen und verwalten Sie sie unter [claude.ai/code/routines](https://claude.ai/code/routines) oder über die CLI mit `/schedule`. Der frühere Name, Routinen, [erscheint weiterhin](#where-the-name-routines-still-appears).

29 29 

30> [!NOTE]30> [!NOTE]

31>31>


66 66 

67**1. Öffnen Sie den Erstellungsdialog**67**1. Öffnen Sie den Erstellungsdialog**

68 68 

69Besuchen Sie [claude.ai/code/routines](https://claude.ai/code/routines) und klicken Sie auf **Neue Aufgabe**. Wenn sich zuerst ein Menü öffnet, wählen Sie **Manuell einrichten**. Der Dialog **Neue geplante Aufgabe** öffnet sich. Mit der anderen Option des Menüs, **Mit Claude erstellen**, können Sie die Aufgabe stattdessen in einem Chat beschreiben und von Claude erstellen lassen.69Besuchen Sie [claude.ai/code/routines](https://claude.ai/code/routines) und klicken Sie auf **Neue Aufgabe**, um den Dialog **Neue geplante Aufgabe** zu öffnen. Achten Sie auf diese Bildschirme, bevor Sie fortfahren:

70 

71* Wenn die Schaltfläche **Neue Routine** statt **Neue Aufgabe** lautet, klicken Sie auf **Neue Routine** und fahren Sie mit [Ganzseitiges Formular](#full-page-form) fort.

72* Wenn sich in der Desktop-App ein Menü mit **Lokal** und **Cloud** öffnet, wechseln Sie zu [Ganzseitiges Formular](#full-page-form).

73* Wenn sich ein Menü mit **Mit Claude erstellen** und **Manuell einrichten** öffnet, wählen Sie **Manuell einrichten**, um den Dialog zu öffnen. Mit **Mit Claude erstellen** können Sie die Aufgabe stattdessen in einem Chat beschreiben und von Claude erstellen lassen.

74* Wenn sich anstelle des Dialogs eine ganze Seite öffnet, wechseln Sie zu [Ganzseitiges Formular](#full-page-form).

70 75 

71Wenn **Repositorys** und **Umgebung** bereits beim Öffnen des Dialogs angezeigt werden, lesen Sie, [wie sich dieser Dialog unterscheidet](#dialog-with-repositories-and-environment-in-the-main-view). Andernfalls erstellt dieser Dialog auch geplante Aufgaben für Chats in claude.ai. Damit Ihre Aufgabe das wird, was der Dialog eine Claude Code-Aufgabe nennt, wählen Sie in den folgenden Schritten ein Repository aus oder fügen Sie einen GitHub-Ereignis- oder API-Trigger hinzu. Diese Art von Aufgabe führt Claude Code in einer Cloud-Sitzung aus.76Wenn **Repositorys** und **Umgebung** bereits beim Öffnen des Dialogs angezeigt werden, lesen Sie, [wie sich dieser Dialog unterscheidet](#dialog-with-repositories-and-environment-in-the-main-view). Andernfalls erstellt dieser Dialog auch geplante Aufgaben für Chats in claude.ai. Damit Ihre Aufgabe das wird, was der Dialog eine Claude Code-Aufgabe nennt, wählen Sie in den folgenden Schritten ein Repository aus oder fügen Sie einen GitHub-Ereignis- oder API-Trigger hinzu. Diese Art von Aufgabe führt Claude Code in einer Cloud-Sitzung aus.

72 77 


126 131 

127Wählen Sie das Repository aus, bevor Sie einen GitHub-Ereignis-Trigger hinzufügen, da dieser Trigger erst verfügbar ist, wenn ein Repository ausgewählt wurde.132Wählen Sie das Repository aus, bevor Sie einen GitHub-Ereignis-Trigger hinzufügen, da dieser Trigger erst verfügbar ist, wenn ein Repository ausgewählt wurde.

128 133 

134#### Ganzseitiges Formular

135 

136Wenn sich in der Desktop-App ein Menü mit **Lokal** und **Cloud** öffnet, wählen Sie **Cloud**. Eine Seite mit dem Titel **Neue Routine** oder **Neue geplante Aufgabe** öffnet sich. Füllen Sie ihre Felder aus:

137 

138* **Name**: Geben Sie einen ein.

139* **Anweisungen**: Geben Sie den Prompt ein. Wählen Sie im selben Feld das Modell, die Repositorys und die Umgebung aus. Was jede dieser Optionen steuert, erfahren Sie in den Schritten unter [Im Web erstellen](#create-from-the-web).

140* **Trigger auswählen**: Wählen Sie **Zeitplan**, **GitHub-Ereignis** oder **API**. Für einen Zeitplan siehe [Zeitplan-Trigger hinzufügen](#add-a-schedule-trigger). Für ein [GitHub-Ereignis](#add-a-github-trigger) wählen Sie ein Repository aus. Für einen [API-Trigger](#add-an-api-trigger) kopieren Sie das Token aus dem Dialog **API-Token**, der sich öffnet, nachdem Sie auf **Erstellen** geklickt haben, da es nur einmal angezeigt wird. Um mehrere Trigger zu kombinieren, klicken Sie auf **Weiteren Trigger hinzufügen**.

141* **Konnektoren**: Alle Ihre verbundenen Konnektoren sind standardmäßig enthalten. Entfernen Sie daher diejenigen, die die Aufgabe nicht benötigt.

142 

143Wenn **Erstellen** nicht verfügbar ist, bewegen Sie den Mauszeiger darüber, um zu sehen, was das Formular noch benötigt. Klicken Sie auf **Erstellen**, und die Detailseite der Aufgabe öffnet sich.

144 

129### In der CLI erstellen145### In der CLI erstellen

130 146 

131Führen Sie `/schedule` in einer beliebigen Sitzung aus, um eine geplante Aufgabe im Dialog mit Claude zu erstellen. Sie können auch direkt eine Beschreibung übergeben, für eine wiederkehrende Aufgabe wie `/schedule daily PR review at 9am` oder eine einmalige wie `/schedule clean up feature flag in one week`. Claude fragt dieselben Informationen ab, die der Web-Dialog erfasst, und speichert die Aufgabe dann in Ihrem Konto. Der Befehl ist auch unter dem Alias `/routines` verfügbar.147Führen Sie `/schedule` in einer beliebigen Sitzung aus, um eine geplante Aufgabe im Dialog mit Claude zu erstellen. Sie können auch direkt eine Beschreibung übergeben, für eine wiederkehrende Aufgabe wie `/schedule daily PR review at 9am` oder eine einmalige wie `/schedule clean up feature flag in one week`. Claude fragt dieselben Informationen ab, die der Web-Dialog erfasst, und speichert die Aufgabe dann in Ihrem Konto. Der Befehl ist auch unter dem Alias `/routines` verfügbar.


152* **Ausführungen zur vollen Stunde**: Wenn Sie eine Ausführung genau zur vollen Stunde planen, z. B. 9:00, kann sie mehrere Minuten später starten. Um nahe an der geplanten Zeit zu starten, wählen Sie ein paar Minuten nach der vollen Stunde, z. B. 9:07.168* **Ausführungen zur vollen Stunde**: Wenn Sie eine Ausführung genau zur vollen Stunde planen, z. B. 9:00, kann sie mehrere Minuten später starten. Um nahe an der geplanten Zeit zu starten, wählen Sie ein paar Minuten nach der vollen Stunde, z. B. 9:07.

153* **Benutzerdefinierte Intervalle**: Für einen Rhythmus, den die Voreinstellungen nicht abdecken, erstellen Sie die Aufgabe und wählen Sie in ihrem [Bearbeitungsdialog](#edit-and-control-scheduled-tasks) **Benutzerdefiniert** aus. Geben Sie dann einen Cron-Ausdruck ein, z. B. `0 */2 * * *` für alle zwei Stunden. Um einen Ausdruck über die CLI festzulegen, führen Sie [`/schedule update`](#manage-scheduled-tasks-from-the-cli) aus. Ausdrücke, die häufiger als einmal pro Stunde ausgeführt werden, werden abgelehnt.169* **Benutzerdefinierte Intervalle**: Für einen Rhythmus, den die Voreinstellungen nicht abdecken, erstellen Sie die Aufgabe und wählen Sie in ihrem [Bearbeitungsdialog](#edit-and-control-scheduled-tasks) **Benutzerdefiniert** aus. Geben Sie dann einen Cron-Ausdruck ein, z. B. `0 */2 * * *` für alle zwei Stunden. Um einen Ausdruck über die CLI festzulegen, führen Sie [`/schedule update`](#manage-scheduled-tasks-from-the-cli) aus. Ausdrücke, die häufiger als einmal pro Stunde ausgeführt werden, werden abgelehnt.

154* **Zeitzone**: Wenn Sie eine voreingestellte Häufigkeit wählen, geben Sie die Uhrzeit in Ihrer lokalen Zeitzone ein.170* **Zeitzone**: Wenn Sie eine voreingestellte Häufigkeit wählen, geben Sie die Uhrzeit in Ihrer lokalen Zeitzone ein.

171* **Zeitzone von Cron-Ausdrücken**: Wenn der Ausdruck nur aus fünf Feldern besteht, geben Sie die Stunden in UTC an, sodass `0 9 * * 1-5` werktags um 9:00 Uhr UTC ausgeführt wird. Wenn das Feld mit einem `CRON_TZ=`-Präfix beginnt, behalten Sie es bei und geben Sie die Stunden in dessen Zeitzone an, oder löschen Sie es und geben Sie die Stunden in UTC an.

155 172 

156#### Einmalige Ausführung planen173#### Einmalige Ausführung planen

157 174 


455 472 

456Geplante Aufgaben hießen früher Routinen (routines), und an den folgenden Stellen wird der frühere Name beibehalten. Jede davon bezieht sich auf dieselbe Funktion:473Geplante Aufgaben hießen früher Routinen (routines), und an den folgenden Stellen wird der frühere Name beibehalten. Jede davon bezieht sich auf dieselbe Funktion:

457 474 

475* **App**: In einigen Konten lauten der Eintrag in der Seitenleiste und der Seitentitel **Routines**, die Schaltfläche lautet **New routine**, und andere Beschriftungen verwenden routine. Informationen zum Erstellen einer Aufgabe dort finden Sie unter [Ganzseitiges Formular](#full-page-form).

458* **Webadresse**: `claude.ai/code/routines`476* **Webadresse**: `claude.ai/code/routines`

459* **CLI**: der Alias `/routines` für `/schedule`, die Beschreibung des Befehls und Claudes Antworten, während es eine Aufgabe einrichtet477* **CLI**: der Alias `/routines` für `/schedule`, die Beschreibung des Befehls und Claudes Antworten, während es eine Aufgabe einrichtet

460* **API**: der Pfad des `/fire`-Endpunkts, sein Beta-Header, das Feld `type` seiner Antwort, das Tag `<routine-fire-payload>` und die Referenzseite [Routine über API auslösen](https://platform.claude.com/docs/en/api/claude-code/routines-fire)478* **API**: der Pfad des `/fire`-Endpunkts, sein Beta-Header, das Feld `type` seiner Antwort, das Tag `<routine-fire-payload>` und die Referenzseite [Routine über API auslösen](https://platform.claude.com/docs/en/api/claude-code/routines-fire)

sandboxing.md +13 −1

Details

537 537 

538* **In Ihrem Arbeitsverzeichnis und den darüberliegenden Verzeichnissen**: die `.claude`-Einstellungsdateien, die Verzeichnisse `.claude/skills`, `.claude/agents`, `.claude/commands` und `.claude/hooks`, `.mcp.json` sowie die Dateien, die Claude Code selbstständig ausführt, etwa `.claude/workflows` und `.claude/scheduled_tasks.json`538* **In Ihrem Arbeitsverzeichnis und den darüberliegenden Verzeichnissen**: die `.claude`-Einstellungsdateien, die Verzeichnisse `.claude/skills`, `.claude/agents`, `.claude/commands` und `.claude/hooks`, `.mcp.json` sowie die Dateien, die Claude Code selbstständig ausführt, etwa `.claude/workflows` und `.claude/scheduled_tasks.json`

539* **Nur in Ihrem Arbeitsverzeichnis**: Shell-Startdateien wie `.bashrc` und `.zshrc`, `.gitconfig`, die Verzeichnisse `.vscode` und `.idea` sowie `hooks` und `config` innerhalb von `.git`539* **Nur in Ihrem Arbeitsverzeichnis**: Shell-Startdateien wie `.bashrc` und `.zshrc`, `.gitconfig`, die Verzeichnisse `.vscode` und `.idea` sowie `hooks` und `config` innerhalb von `.git`

540* **Dateien, die Ihr Arbeitsverzeichnis in ein Bare-Git-Repository verwandeln würden**: `HEAD`, `objects` und `refs` auf oberster Ebene sowie dort vorhandene `config`- und `hooks`-Einträge, wenn daneben ein `HEAD` liegt. Eine Datei namens `config` wird auch ohne `HEAD` gesperrt. Unter Linux und WSL2 löscht die Sandbox eine `HEAD`-Datei bzw. ein `objects`- oder `refs`-Verzeichnis auf oberster Ebene, das erscheint, während ein Befehl in der Sandbox läuft540* **Dateien, die Ihr Arbeitsverzeichnis in ein Bare-Git-Repository verwandeln würden**: `HEAD`, `objects` und `refs` auf oberster Ebene sowie dort vorhandene `config`- und `hooks`-Einträge, wenn daneben eine `HEAD`-Datei oder ein `HEAD`-Symlink liegt. Eine Datei namens `config` wird auch ohne `HEAD` gesperrt. [Ein später erscheinendes `HEAD`, `objects` oder `refs` kann gelöscht werden](#when-the-sandbox-deletes-head-objects-or-refs). Unter Linux und WSL2 kann ein in der Sandbox ausgeführter Befehl einen solchen Eintrag erstellen, wo keiner existiert.

541* **In `~/.claude` oder dem Verzeichnis, auf das `CLAUDE_CONFIG_DIR` verweist**: der Großteil des Inhalts sowie `~/.claude.json` und der Anmeldedatenspeicher `.credentials.json`541* **In `~/.claude` oder dem Verzeichnis, auf das `CLAUDE_CONFIG_DIR` verweist**: der Großteil des Inhalts sowie `~/.claude.json` und der Anmeldedatenspeicher `.credentials.json`

542 542 

543Wenn während der Sitzung ein Symlink am Pfad einer geschützten Einstellungsdatei erscheint, verweigert die Sandbox ab dem nächsten Befehl auch Schreibvorgänge in die Datei, auf die er verweist.543Wenn während der Sitzung ein Symlink am Pfad einer geschützten Einstellungsdatei erscheint, verweigert die Sandbox ab dem nächsten Befehl auch Schreibvorgänge in die Datei, auf die er verweist.


552 552 

553Wenn `git merge` oder `git checkout` bei einem dieser Pfade mit `unable to unlink old` fehlschlägt, lesen Sie [Ein Git-Befehl schlägt mit `unable to unlink old` fehl](#a-git-command-fails-with-unable-to-unlink-old).553Wenn `git merge` oder `git checkout` bei einem dieser Pfade mit `unable to unlink old` fehlschlägt, lesen Sie [Ein Git-Befehl schlägt mit `unable to unlink old` fehl](#a-git-command-fails-with-unable-to-unlink-old).

554 554 

555#### Wann die Sandbox `HEAD`, `objects` oder `refs` löscht

556 

557Nachdem ein in der Sandbox ausgeführter Befehl beendet ist, wird ein neuerer `HEAD`-, `objects`- oder `refs`-Eintrag auf oberster Ebene in Ihrem Arbeitsverzeichnis gelöscht, sofern es sich nicht um einen Ordner mit Inhalt handelt. Neuer bedeutet, dass der Eintrag nicht vorhanden war, als die Sandbox ihre Konfiguration zuletzt erstellt hat: beim Start der Sitzung oder nach einer Änderung wie [`/cd`](https://code.claude.com/docs/de/commands).

558 

559Ein neuerer `objects`- oder `refs`-Ordner mit Inhalt wird ebenfalls samt Inhalt gelöscht, wenn eine `HEAD`-Datei oder ein `HEAD`-Symlink vorhanden war, als die Sandbox ihre Konfiguration zuletzt erstellt hat. Um einen Ordner zu behalten, lesen Sie [Ein Ordner namens `objects` oder `refs` verschwindet nach einem Befehl](#a-folder-named-objects-or-refs-disappears-after-a-command).

560 

555#### Gesperrte Pfade, die über einen Symlink führen561#### Gesperrte Pfade, die über einen Symlink führen

556 562 

557Wenn unter macOS ein gesperrter Pfad über einen Symlink führt, etwa ein `~/.claude`, das ein Link in ein Dotfiles-Repository ist, sperrt die Sandbox auch den tatsächlichen Speicherort des Pfads. Dies umfasst die eigenen Sperren der Sandbox sowie Ihre wörtlichen `denyWrite`- und `denyRead`-Einträge.563Wenn unter macOS ein gesperrter Pfad über einen Symlink führt, etwa ein `~/.claude`, das ein Link in ein Dotfiles-Repository ist, sperrt die Sandbox auch den tatsächlichen Speicherort des Pfads. Dies umfasst die eigenen Sperren der Sandbox sowie Ihre wörtlichen `denyWrite`- und `denyRead`-Einträge.


881 887 

882Nach dem Fehler kann Claude [anbieten, den Befehl außerhalb der Sandbox erneut auszuführen](#the-unsandboxed-retry-escape-hatch). Genehmigen Sie diesen Wiederholungsversuch, oder führen Sie den git-Befehl selbst in einem anderen Terminal aus. Wenn Sie `allowUnsandboxedCommands` auf `false` gesetzt haben, kann Claude den Wiederholungsversuch nicht anbieten, also führen Sie den Befehl selbst aus.888Nach dem Fehler kann Claude [anbieten, den Befehl außerhalb der Sandbox erneut auszuführen](#the-unsandboxed-retry-escape-hatch). Genehmigen Sie diesen Wiederholungsversuch, oder führen Sie den git-Befehl selbst in einem anderen Terminal aus. Wenn Sie `allowUnsandboxedCommands` auf `false` gesetzt haben, kann Claude den Wiederholungsversuch nicht anbieten, also führen Sie den Befehl selbst aus.

883 889 

890### Ein Ordner namens `objects` oder `refs` verschwindet nach einem Befehl

891 

892Ein `objects`- oder `refs`-Ordner auf oberster Ebene, der während der Sitzung entstanden ist, kann [nach dem Ende eines in der Sandbox ausgeführten Befehls gelöscht werden](#when-the-sandbox-deletes-head-objects-or-refs). Dabei spielt es keine Rolle, ob ein Befehl, Claude oder Sie ihn erstellt haben. Um einen Ordner zu behalten, legen Sie etwas darin ab. Wenn sich während der Sitzung eine `HEAD`-Datei oder ein `HEAD`-Symlink auf oberster Ebene befunden hat, verschieben Sie diese bzw. diesen an einen anderen Ort, und starten Sie dann jede dort geöffnete Claude Code-Sitzung neu.

893 

894Vor v2.1.307 wurde der Ordner auch dann gelöscht, wenn sich etwas darin befand und kein `HEAD` vorhanden war. Wenn Sie eine ältere Version verwenden, [aktualisieren Sie Claude Code](https://code.claude.com/docs/de/setup.md#update-claude-code).

895 

884### Bubblewrap startet in einem Container nicht896### Bubblewrap startet in einem Container nicht

885 897 

886In einem unprivilegierten Container kann [bubblewrap](#os-level-enforcement) kein neues `/proc`-Dateisystem einhängen, daher schlagen in der Sandbox ausgeführte Befehle mit einem `bwrap`-Fehler wie `Can't mount proc on /newroot/proc: Operation not permitted` fehl. Setzen Sie [`enableWeakerNestedSandbox`](https://code.claude.com/docs/de/settings-reference#sandbox-enableweakernestedsandbox) auf `true`, damit die Sandbox stattdessen das vorhandene `/proc` des Containers per Bind-Mount einbindet. Verwenden Sie diese Einstellung nur, wenn der äußere Container bereits die Isolationsgrenze bietet, die Sie benötigen, da die Einstellung in der Sandbox ausgeführten Befehlen Prozessinformationen zugänglich macht, die ein neu eingehängtes `/proc` verbergen würde.898In einem unprivilegierten Container kann [bubblewrap](#os-level-enforcement) kein neues `/proc`-Dateisystem einhängen, daher schlagen in der Sandbox ausgeführte Befehle mit einem `bwrap`-Fehler wie `Can't mount proc on /newroot/proc: Operation not permitted` fehl. Setzen Sie [`enableWeakerNestedSandbox`](https://code.claude.com/docs/de/settings-reference#sandbox-enableweakernestedsandbox) auf `true`, damit die Sandbox stattdessen das vorhandene `/proc` des Containers per Bind-Mount einbindet. Verwenden Sie diese Einstellung nur, wenn der äußere Container bereits die Isolationsgrenze bietet, die Sie benötigen, da die Einstellung in der Sandbox ausgeführten Befehlen Prozessinformationen zugänglich macht, die ein neu eingehängtes `/proc` verbergen würde.

Details

30 30 

31Die zwei Claude Code-Boxen im Diagramm sind Sitzungsprozesse: ein Runner führt zwei Sitzungen gleichzeitig aus, bis zu seiner konfigurierten Kapazität. Ein Runner bedient einen [Besitzer](#key-concepts) auf einmal und sperrt sich auf diesen Besitzer, wenn er seine erste Sitzung beansprucht, sodass ausgecheckter Code sich niemals zwischen Besitzern vermischt; [Runner-Lebenszyklus](#runner-lifecycle) behandelt die Regel.31Die zwei Claude Code-Boxen im Diagramm sind Sitzungsprozesse: ein Runner führt zwei Sitzungen gleichzeitig aus, bis zu seiner konfigurierten Kapazität. Ein Runner bedient einen [Besitzer](#key-concepts) auf einmal und sperrt sich auf diesen Besitzer, wenn er seine erste Sitzung beansprucht, sodass ausgecheckter Code sich niemals zwischen Besitzern vermischt; [Runner-Lebenszyklus](#runner-lifecycle) behandelt die Regel.

32 32 

33Sie können Runner selbst starten und am Laufen halten, oder Sie führen den [Autoscaling-Orchestrator](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners) aus, einen zweiten Prozess, den Sie hosten, der Runner startet, wenn Sitzungen in der Warteschlange sind; jeder Runner beendet sich selbst, wenn seine Arbeit abgeschlossen ist. In jedem Fall richten Sie die Umgebung einmal ein, und sie wird in der Auswahl auf jeder unterstützten Oberfläche angezeigt.33Sie können Runner selbst starten und am Laufen halten, oder Sie führen den [Autoscaling-Orchestrator](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners) aus, einen zweiten Prozess, den Sie hosten, der Runner startet, wenn Sitzungen in der Warteschlange sind. In jedem Fall richten Sie die Umgebung einmal ein, und sie wird in der Auswahl auf jeder unterstützten Oberfläche angezeigt.

34 34 

35## Verfügbarkeit und Einschränkungen35## Verfügbarkeit und Einschränkungen

36 36 


122 122 

123Unternehmens-Egress-Proxys werden unterstützt. Der Runner und der optionale [Autoscaling-Orchestrator](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners) berücksichtigen die unter [Netzwerkkonfiguration](https://code.claude.com/docs/de/network-config.md) beschriebenen Proxy- und mTLS-Umgebungsvariablen, etwa `HTTPS_PROXY` und `NO_PROXY`; setzen Sie sie in der Umgebung jedes Prozesses. Die Variablen gelten für Aufrufe an die Control Plane, für den WebSocket des [SCM-Konnektors](https://code.claude.com/docs/de/self-hosted-environments-reference.md#scm-connector-flags) des Orchestrators und für den integrierten Klonvorgang bei HTTPS-Remotes, und Sitzungen erben sie vom Runner. Das Streaming von Sitzungen verwendet Server-Sent Events über HTTPS, daher darf ein Proxy im Pfad Antworten nicht puffern.123Unternehmens-Egress-Proxys werden unterstützt. Der Runner und der optionale [Autoscaling-Orchestrator](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners) berücksichtigen die unter [Netzwerkkonfiguration](https://code.claude.com/docs/de/network-config.md) beschriebenen Proxy- und mTLS-Umgebungsvariablen, etwa `HTTPS_PROXY` und `NO_PROXY`; setzen Sie sie in der Umgebung jedes Prozesses. Die Variablen gelten für Aufrufe an die Control Plane, für den WebSocket des [SCM-Konnektors](https://code.claude.com/docs/de/self-hosted-environments-reference.md#scm-connector-flags) des Orchestrators und für den integrierten Klonvorgang bei HTTPS-Remotes, und Sitzungen erben sie vom Runner. Das Streaming von Sitzungen verwendet Server-Sent Events über HTTPS, daher darf ein Proxy im Pfad Antworten nicht puffern.

124 124 

125Wenn Ihr Proxy zusätzlich einen `Proxy-Authorization`-Header erfordert, kann der Runner ihn jeder Verbindung hinzufügen, die er zum Proxy öffnet; siehe [Bei einem Egress-Proxy authentifizieren](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).125* **Proxy-Authentifizierung**: Wenn Ihr Proxy zusätzlich einen `Proxy-Authorization`-Header erfordert, kann der Runner ihn jeder Verbindung hinzufügen, die er zum Proxy öffnet; siehe [Bei einem Egress-Proxy authentifizieren](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).

126* **Langlebige Antworten**: Wenn ein Runner eine Sitzung übernimmt, Claude aber nie auf deren erste Nachricht antwortet, kann Ihr Proxy die Ursache sein. Siehe [Eine Sitzung wird übernommen, aber Claude antwortet nie auf die erste Nachricht](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#when-a-sessions-first-message-is-never-answered).

126 127 

127## Was auf Ihrer Infrastruktur bleibt128## Was auf Ihrer Infrastruktur bleibt

128 129 

Details

36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form, für Systeme, die auf UUIDs basieren. |36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form, für Systeme, die auf UUIDs basieren. |

37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Für eine [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzung, die zu einem Slack-Thread gehört, der Link zu diesem Thread. Für andere Sitzungen nicht gesetzt; kann auch bei einer Thread-Sitzung nicht gesetzt sein. |37| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Für eine [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzung, die zu einem Slack-Thread gehört, der Link zu diesem Thread. Für andere Sitzungen nicht gesetzt; kann auch bei einer Thread-Sitzung nicht gesetzt sein. |

38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Für eine Claude Tag-Sitzung, die zu einem Slack-Thread gehört, der Slack-Zeitstempel dieses Threads, etwa `1700000000.000100`. Kann nicht gesetzt sein und kann gesetzt sein, wenn `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` es nicht ist; prüfen Sie daher jede Variable einzeln. |38| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Für eine Claude Tag-Sitzung, die zu einem Slack-Thread gehört, der Slack-Zeitstempel dieses Threads, etwa `1700000000.000100`. Kann nicht gesetzt sein und kann gesetzt sein, wenn `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` es nicht ist; prüfen Sie daher jede Variable einzeln. |

39| `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` | Für eine Claude Tag-Sitzung die ID des Slack-Channels oder der Direktnachricht, die die Sitzung bedient oder in der ihr Thread liegt, etwa `C0123ABCDE`. Ein Slack-Zeitstempel identifiziert eine Nachricht innerhalb eines Channels; erfassen Sie diese ID daher zusammen mit `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`. Für andere Sitzungen nicht gesetzt; kann auch bei einer Claude Tag-Sitzung nicht gesetzt sein. |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Absoluter Pfad zu einer pro-Sitzungs-Datei, die das aktuelle Sitzungs-JWT enthält, das über Token-Aktualisierungen hinweg aktuell gehalten wird. Shell-Unterprozesse lesen es für ihren `Authorization`-Header beim Herunterladen von Anhängen, die der Benutzer zur Sitzung hinzugefügt hat. `exec` bewahrt die Variable automatisch; ein Wrapper, der die Umgebung des Kindes neu erstellt, muss die Variable übertragen, oder Anhang-Downloads funktionieren stillschweigend nicht mehr. |40| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Absoluter Pfad zu einer pro-Sitzungs-Datei, die das aktuelle Sitzungs-JWT enthält, das über Token-Aktualisierungen hinweg aktuell gehalten wird. Shell-Unterprozesse lesen es für ihren `Authorization`-Header beim Herunterladen von Anhängen, die der Benutzer zur Sitzung hinzugefügt hat. `exec` bewahrt die Variable automatisch; ein Wrapper, der die Umgebung des Kindes neu erstellt, muss die Variable übertragen, oder Anhang-Downloads funktionieren stillschweigend nicht mehr. |

40| `CLAUDE_CONFIG_DIR` | Pro-Sitzungs-Claude-Konfigurationsverzeichnis, geschrieben beim Sitzungsstart aus dem Snapshot der Konfiguration des Runner-Hosts, den der Runner beim Startup erfasst; siehe [Berechtigungen und Tool-Genehmigung](#permissions-and-tool-approval). Schreibvorgänge hier sind auf diese Sitzung isoliert. Das Verzeichnis bleibt unter `<base-dir>/_sessions/` nach dem Sitzungsende, es sei denn, Sie starten den Runner mit [`--remove-session-state`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags); siehe [Einen vorgewärmten Checkout wiederverwenden](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |41| `CLAUDE_CONFIG_DIR` | Pro-Sitzungs-Claude-Konfigurationsverzeichnis, geschrieben beim Sitzungsstart aus dem Snapshot der Konfiguration des Runner-Hosts, den der Runner beim Startup erfasst; siehe [Berechtigungen und Tool-Genehmigung](#permissions-and-tool-approval). Schreibvorgänge hier sind auf diese Sitzung isoliert. Das Verzeichnis bleibt unter `<base-dir>/_sessions/` nach dem Sitzungsende, es sei denn, Sie starten den Runner mit [`--remove-session-state`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags); siehe [Einen vorgewärmten Checkout wiederverwenden](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

41| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Pfad zu einer Datei in `CLAUDE_CONFIG_DIR`, die die MCP-Server-Definitionen enthält, die die Kontrollebene von Anthropic für diese Sitzung bereitgestellt hat. Wenn Ihr Wrapper die Umgebung des Kindes neu erstellt, übertragen Sie diese Variable. Ohne sie beendet das Kind, wenn die Kontrollebene die bereitgestellten Server aktualisiert, jeden stdio-, HTTP- oder SSE-Server, den Ihr Wrapper mit [`--mcp-config`](https://code.claude.com/docs/de/cli-reference#cli-flags) hinzufügt und der nicht in der Aktualisierung enthalten ist. Erfordert Claude Code v2.1.299 oder später. |42| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Pfad zu einer Datei in `CLAUDE_CONFIG_DIR`, die die MCP-Server-Definitionen enthält, die die Kontrollebene von Anthropic für diese Sitzung bereitgestellt hat. Wenn Ihr Wrapper die Umgebung des Kindes neu erstellt, übertragen Sie diese Variable. Ohne sie beendet das Kind, wenn die Kontrollebene die bereitgestellten Server aktualisiert, jeden stdio-, HTTP- oder SSE-Server, den Ihr Wrapper mit [`--mcp-config`](https://code.claude.com/docs/de/cli-reference#cli-flags) hinzufügt und der nicht in der Aktualisierung enthalten ist. Erfordert Claude Code v2.1.299 oder später. |


44 45 

45Der Wrapper erbt auch den Rest der verwalteten Umgebung des Kindes, einschließlich aller vom Server bereitgestellten Umgebungsvariablen. `exec` propagiert alles automatisch; wenn Ihr Wrapper das Kind auf andere Weise startet, leiten Sie die vollständige Umgebung weiter.46Der Wrapper erbt auch den Rest der verwalteten Umgebung des Kindes, einschließlich aller vom Server bereitgestellten Umgebungsvariablen. `exec` propagiert alles automatisch; wenn Ihr Wrapper das Kind auf andere Weise startet, leiten Sie die vollständige Umgebung weiter.

46 47 

47`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` und `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` erreichen Ihren Wrapper oder [`command`-Hook](#command). Sie erreichen auch das, was die Sitzung ausführt, etwa Shell-Befehle, Git-Hooks und Claude Code-Hooks. Die Hooks `checkout`, `post-session` und `spawn-runner` erhalten sie nicht.48Sie können die Variablen `CLAUDE_CODE_REMOTE_SLACK_*` in Ihrem Wrapper oder [`command`-Hook](#command) lesen sowie in dem, was die Sitzung ausführt, etwa Shell-Befehle, Git-Hooks und Claude Code-Hooks. Die Hooks `checkout`, `post-session` und `spawn-runner` erhalten sie nicht.

48 49 

49### Variablen, die nicht gesetzt sein können, mit einem Standardwert versehen50### Variablen, die nicht gesetzt sein können, mit einem Standardwert versehen

50 51 

51`CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` und `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` können jeweils nicht gesetzt sein. Wenn Ihr Skript `set -u` verwendet, bricht Bash mit `unbound variable` ab, sobald es eine nicht gesetzte Variable expandiert. Expandieren Sie sie daher mit einem Standardwert, etwa `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`.52Wenn Ihr Skript `set -u` verwendet, expandieren Sie `CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` und `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` mit einem Standardwert, etwa `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`. Jede davon kann nicht gesetzt sein, und unter `set -u` bricht Bash mit `unbound variable` ab, sobald es eine nicht gesetzte Variable expandiert.

52 53 

53### Argumente und Variablen, die Ihr Skript expandiert, in Anführungszeichen setzen54### Argumente und Variablen, die Ihr Skript expandiert, in Anführungszeichen setzen

54 55 


89* **Reichen Sie sie durch**: Beenden Sie den Wrapper mit `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, wodurch die Datei-Flags zusammen mit allen anderen Argumenten weitergeleitet werden. Entfernen oder ändern Sie sie nicht. Wenn einer Sitzung ein Prompt-Datei-Flag verloren geht, läuft sie ohne die Anweisungen, die die Kontrollebene für sie gesendet hat.90* **Reichen Sie sie durch**: Beenden Sie den Wrapper mit `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, wodurch die Datei-Flags zusammen mit allen anderen Argumenten weitergeleitet werden. Entfernen oder ändern Sie sie nicht. Wenn einer Sitzung ein Prompt-Datei-Flag verloren geht, läuft sie ohne die Anweisungen, die die Kontrollebene für sie gesendet hat.

90* **Auf einem Runner ab v2.1.281 ersetzt ein von Ihnen angehängtes Datei-Flag das des Servers, statt es zu ergänzen**: Jedes Prompt-Datei-Flag nimmt einen einzelnen Wert an, und Claude Code behält das letzte Vorkommen. Wenn Sie also `--append-system-prompt-file <path>` nach `"$@"` anhängen, ersetzt der Inhalt Ihrer Datei die angehängten Anweisungen des Servers. Um Anweisungen zusätzlich zu denen des Servers hinzuzufügen, legen Sie sie in der `CLAUDE.md` des Runner-Images ab, die der Runner [in die Konfiguration auf Benutzerebene jeder Sitzung einspielt](#how-each-session’s-config-is-assembled).91* **Auf einem Runner ab v2.1.281 ersetzt ein von Ihnen angehängtes Datei-Flag das des Servers, statt es zu ergänzen**: Jedes Prompt-Datei-Flag nimmt einen einzelnen Wert an, und Claude Code behält das letzte Vorkommen. Wenn Sie also `--append-system-prompt-file <path>` nach `"$@"` anhängen, ersetzt der Inhalt Ihrer Datei die angehängten Anweisungen des Servers. Um Anweisungen zusätzlich zu denen des Servers hinzuzufügen, legen Sie sie in der `CLAUDE.md` des Runner-Images ab, die der Runner [in die Konfiguration auf Benutzerebene jeder Sitzung einspielt](#how-each-session’s-config-is-assembled).

91 92 

93#### `Argument list too long` beim Sitzungsstart beheben

94 

95Wenn Sie unter Linux den Prompt der Kontrollebene und Ihren eigenen Text zu einem einzigen `--append-system-prompt`-Argument zusammenfügen, protokolliert der Runner eine Zeile wie diese, sobald das Argument 128 KB erreicht:

96 

97```text theme={null}

98Session <id> finished: failed — reason: child exited 126: /opt/wrapper.sh: line 9: /usr/local/bin/claude: Argument list too long

99```

100 

101Linux begrenzt jedes einzelne Argument auf 32 Speicherseiten bzw. 128 KB bei den üblichen 4-KB-Seiten. Der Wert von `getconf ARG_MAX`, oft 2 MB, ist ein separates Limit für alle Argumente und die Umgebung zusammen.

102 

103Lassen Sie ab Claude Code v2.1.283 die Datei-Flags in `"$@"` und übergeben Sie nur Ihren eigenen Text als `--append-system-prompt`. Claude Code [verwendet beide](https://code.claude.com/docs/de/cli-reference.md#system-prompt-flags), zuerst den Prompt der Kontrollebene und dann Ihren eigenen Text:

104 

105```bash theme={null}

106exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --append-system-prompt "$(cat /opt/team-instructions.md)"

107```

108 

109Wenn Ihr eigener Text unter Linux 128 KB erreicht, verschieben Sie ihn in die `CLAUDE.md` des Runner-Images, da er weiterhin ein einziges Argument ist.

110 

111Unter v2.1.281 oder v2.1.282 beendet sich dieser Befehl mit `Cannot use both --append-system-prompt and --append-system-prompt-file`. Bei früheren Versionen ersetzt Ihr Text den Prompt der Kontrollebene ohne Fehlermeldung. Aktualisieren Sie in all diesen Fällen zuerst, oder verschieben Sie Ihren eigenen Text in die `CLAUDE.md`.

112 

92### Anmeldedaten mit Bereich auf den Sitzungsersteller bereitstellen113### Anmeldedaten mit Bereich auf den Sitzungsersteller bereitstellen

93 114 

94Verwenden Sie den Unterbefehl `decode-token`, um Ansprüche aus dem Sitzungs-JWT zu lesen. Er liest das Token aus einem Argument, aus `CLAUDE_CODE_SESSION_ACCESS_TOKEN` oder aus stdin, in dieser Reihenfolge; siehe [Token innerhalb der Sitzung überprüfen](https://code.claude.com/docs/de/self-hosted-environments-identity.md#verify-the-token-inside-the-session) für das, was es überprüft. Das folgende Beispiel dekodiert die Ersteller-Identität, tauscht sie gegen kurzlebige AWS-Anmeldedaten aus und führt in Claude Code aus:115Verwenden Sie den Unterbefehl `decode-token`, um Ansprüche aus dem Sitzungs-JWT zu lesen. Er liest das Token aus einem Argument, aus `CLAUDE_CODE_SESSION_ACCESS_TOKEN` oder aus stdin, in dieser Reihenfolge; siehe [Token innerhalb der Sitzung überprüfen](https://code.claude.com/docs/de/self-hosted-environments-identity.md#verify-the-token-inside-the-session) für das, was es überprüft. Das folgende Beispiel dekodiert die Ersteller-Identität, tauscht sie gegen kurzlebige AWS-Anmeldedaten aus und führt in Claude Code aus:


122| Variable | Beschreibung |143| Variable | Beschreibung |

123| :- | :- |144| :- | :- |

124| `CLAUDE_RUNNER_REPO_URL` | Repository-URL zum Klonen, nachdem alle `--git-host-rewrite` und `--git-ssh-rewrite` angewendet wurden |145| `CLAUDE_RUNNER_REPO_URL` | Repository-URL zum Klonen, nachdem alle `--git-host-rewrite` und `--git-ssh-rewrite` angewendet wurden |

125| `CLAUDE_RUNNER_REPO_REF` | Revision zum Auschecken, wie die Sitzung sie angefordert hat: ein Branch, Tag, Commit-SHA oder vollständiger Referenzname wie `refs/pull/<number>/head`. Leer bedeutet den Standard-Branch des Repositorys. |146| `CLAUDE_RUNNER_REPO_REF` | Revision zum Auschecken, wie die Sitzung sie angefordert hat: ein Branch, Tag, Commit-SHA oder vollständiger Referenzname wie `refs/heads/<branch>` oder `refs/pull/<number>/head`. Leer bedeutet den Standard-Branch des Repositorys. |

126| `CLAUDE_RUNNER_CHECKOUT_PATH` | Absoluter Pfad, wo der Arbeitsbaum hinterlassen werden muss |147| `CLAUDE_RUNNER_CHECKOUT_PATH` | Absoluter Pfad, wo der Arbeitsbaum hinterlassen werden muss |

127| `CLAUDE_RUNNER_SESSION_ID` | Sitzungs-ID in der getaggten Form `session_...`, für Protokollierung und Korrelation |148| `CLAUDE_RUNNER_SESSION_ID` | Sitzungs-ID in der getaggten Form `session_...`, für Protokollierung und Korrelation |

128| `CLAUDE_RUNNER_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form |149| `CLAUDE_RUNNER_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form |


303 324 

304Der Vertrag hat vier Regeln, unabhängig davon, auf welcher Plattform Ihr Hook provisioniert:325Der Vertrag hat vier Regeln, unabhängig davon, auf welcher Plattform Ihr Hook provisioniert:

305 326 

3061. **Seien Sie idempotent auf `CLAUDE_RUNNER_ORDER_ID`.** Neulieferung derselben Anfrage muss höchstens einen Runner spawnen. Leiten Sie einen deterministischen Ressourcennamen von der Order-ID ab und lassen Sie Ihre Plattform das Duplikat ablehnen. Keying Sie nicht auf `CLAUDE_RUNNER_SESSION_ID` stattdessen. Jede Neuanfrage für eine Sitzung trägt dieselbe Sitzungs-ID mit einer neuen Order-ID, daher wird eine Workload, die nach der Sitzungs-ID benannt oder dedupliziert ist, einmal erstellt und nie wieder für diese Sitzung.3271. **Seien Sie idempotent auf `CLAUDE_RUNNER_ORDER_ID`.** Neulieferung derselben Anfrage muss höchstens einen Runner spawnen. Leiten Sie einen deterministischen Ressourcennamen von der Order-ID ab und lassen Sie Ihre Plattform das Duplikat ablehnen. Verwenden Sie nicht stattdessen `CLAUDE_RUNNER_SESSION_ID` als Schlüssel. Jede Neuanfrage für eine Sitzung trägt dieselbe Sitzungs-ID mit einer neuen Order-ID. Eine Workload, die nach der Sitzungs-ID benannt oder dedupliziert ist, wird nicht erneut erstellt, solange die erste noch existiert.

3072. **Versuchen Sie nicht, die Workload erneut zu versuchen.** Eine Order-ID bedeutet höchstens eine erstellte Workload. Wenn sich der Runner nie registriert, fordert Anthropic nach `--expected-spawn-seconds` mit einer frischen Order-ID erneut an.3282. **Versuchen Sie nicht, die Workload erneut zu versuchen.** Eine Order-ID bedeutet höchstens eine erstellte Workload. Wenn sich der Runner nie registriert, fordert Anthropic nach `--expected-spawn-seconds` mit einer frischen Order-ID erneut an.

3083. **Verwenden Sie den Exit-Code-Vertrag.** Beenden Sie den Hook mit dem Status, der dem Ergebnis entspricht:3293. **Verwenden Sie den Exit-Code-Vertrag.** Beenden Sie den Hook mit dem Status, der dem Ergebnis entspricht:

309 330 

310 * **Exit 0**: eingereicht.331 * **Exit 0**: eingereicht.

311 * **Exit 1 oder Hook läuft bei Ablauf von `--hook-timeout` noch**: wiederholbarer Fehler. Die Sitzung wartet mit Backoff und wird erneut angeboten.332 * **Exit 1 oder Hook läuft bei Ablauf von `--hook-timeout` noch**: wiederholbarer Fehler. Die Sitzung wartet mit Backoff und wird erneut angeboten. Nach 10 fehlgeschlagenen Anfragen in Folge wird sie blockiert, wie nach Exit 2 oder höher.

312 * **Exit 2 oder höher**: nicht wiederholbarer Fehler. Die Sitzung wird für weitere Spawns blockiert, bis ein Benutzer ihr eine neue Nachricht sendet oder ein [Owner](https://code.claude.com/docs/de/cloud-environments.md#organization-shared-environments) auf der Registerkarte **Aktivität** der Umgebung **Erneut versuchen** auswählt.333 * **Exit 2 oder höher**: nicht wiederholbarer Fehler. Die Sitzung wird für weitere Spawns blockiert, bis ein Benutzer ihr eine neue Nachricht sendet oder ein [Owner](https://code.claude.com/docs/de/cloud-environments.md#organization-shared-environments) auf der Registerkarte **Aktivität** der Umgebung **Erneut versuchen** auswählt.

313 334 

314 Während eine Sitzung mit Backoff wartet, wird sie auf der Registerkarte **Aktivität** als **In Warteschlange** ohne Spawn-Fehler angezeigt; lesen Sie daher die Ausgabe des Hooks im Log des Orchestrators. Sobald die Sitzung blockiert ist, wird sie als **Fehlgeschlagen** angezeigt. Erweitern Sie sie, um den Spawn-Fehler zu lesen, der aus den letzten 512 Zeichen der stderr-Ausgabe des Hooks stammt. Schreiben Sie einen umsetzbaren Fehler auf stderr und keine Geheimnisse. In einem Shell-Hook [halten Sie vorübergehende Fehler wiederholbar](#keep-transient-failures-retryable-in-a-shell-hook).335 Während eine Sitzung mit Backoff wartet, wird sie auf der Registerkarte **Aktivität** als **In Warteschlange** ohne Spawn-Fehler angezeigt; lesen Sie daher die Ausgabe des Hooks im Log des Orchestrators. Sobald die Sitzung blockiert ist, wird sie als **Fehlgeschlagen** angezeigt. Erweitern Sie sie, um den Spawn-Fehler zu lesen, der aus den letzten 512 Zeichen der stderr-Ausgabe des Hooks stammt. Schreiben Sie einen umsetzbaren Fehler auf stderr und keine Geheimnisse. In einem Shell-Hook [halten Sie vorübergehende Fehler wiederholbar](#keep-transient-failures-retryable-in-a-shell-hook).


318 339 

319Alles, was der Hook auf stdout oder stderr schreibt, erscheint im Protokoll des Orchestrators mit automatisch redigierten Anmeldedaten. Wenn Sitzungen in der Warteschlange bleiben, überprüfen Sie den `/healthz`-Body des Orchestrators auf Warteschlangen-Zählungen, öffnen Sie dann die Registerkarte **Aktivität** Ihrer Umgebung auf der [**Cloud-Umgebungen**-Administratorseite](https://claude.ai/admin-settings/cloud-environments): Erweitern Sie eine fehlgeschlagene Sitzung dort für ihren Spawn-Fehler und wählen Sie **Erneut versuchen**, um sie erneut anzufordern.340Alles, was der Hook auf stdout oder stderr schreibt, erscheint im Protokoll des Orchestrators mit automatisch redigierten Anmeldedaten. Wenn Sitzungen in der Warteschlange bleiben, überprüfen Sie den `/healthz`-Body des Orchestrators auf Warteschlangen-Zählungen, öffnen Sie dann die Registerkarte **Aktivität** Ihrer Umgebung auf der [**Cloud-Umgebungen**-Administratorseite](https://claude.ai/admin-settings/cloud-environments): Erweitern Sie eine fehlgeschlagene Sitzung dort für ihren Spawn-Fehler und wählen Sie **Erneut versuchen**, um sie erneut anzufordern.

320 341 

321Eine Sitzung, die in der Warteschlange bleibt, ohne dass ein Spawn-Fehler auf der Registerkarte **Aktivität** vorhanden ist, kann bedeuten, dass der Hook nach der Sitzungs-ID keyed ist. Um dies zu bestätigen, überprüfen Sie, ob Ihre Plattform eine Workload für die erste Spawn-Anfrage dieser Sitzung hat und keine für die Neuanfragen. Wenn ja, keying Sie die Workload auf `CLAUDE_RUNNER_ORDER_ID` stattdessen.342#### Erneut geöffnete Sitzungen beheben, die „In Warteschlange“ bleiben oder „Fehlgeschlagen“ anzeigen

343 

344Wenn erneut geöffnete Sitzungen **In Warteschlange** bleiben oder **Fehlgeschlagen** anzeigen oder Ihr Hook bei ihnen einen Timeout erreicht, kann eine Ursache ein Hook sein, der Workloads nach der Sitzungs-ID benennt oder dedupliziert. Eine Sitzung wird erneut geöffnet, wenn ihr Benutzer ihr eine Nachricht sendet, nachdem sich ihr Runner beendet hat. Nehmen Sie als Beispiel einen Hook, der den Namen jeder Workload so bildet:

345 

346```bash theme={null}

347name="runner-${CLAUDE_RUNNER_SESSION_ID}"

348```

349 

3501. Bei der ersten Spawn-Anfrage der Sitzung erstellt der Hook eine Workload mit diesem Namen, und ein Runner startet

3512. Der Runner beendet sich, zum Beispiel nach [`--release-idle-session-min`](#make-on-demand-runners-exit-when-idle), und der Benutzer öffnet die Sitzung später erneut

3523. Die nächste Spawn-Anfrage der Sitzung trägt dieselbe Sitzungs-ID und eine neue Order-ID, sodass der Hook denselben Namen bildet

3534. Wenn Ihre Plattform die Workload aus der ersten Anfrage noch hat, weil nichts sie beim Beenden ihres Runners [entfernt](#make-on-demand-runners-exit-when-idle) hat, erstellt der Hook keine neue Workload, und kein Runner startet

3545. Jede weitere Spawn-Anfrage für die Sitzung endet auf dieselbe Weise

355 

356Öffnen Sie Ihren eigenen Hook und lesen Sie nach, was er tut, wenn die Workload bereits existiert, zum Beispiel wenn Ihre Plattform den doppelten Namen ablehnt. Suchen Sie dieses Verhalten in der ersten Spalte, um zu sehen, was die erneut geöffnete Sitzung auf der Registerkarte **Aktivität** anzeigt:

357 

358| Wenn die Workload existiert, Ihr Hook | **In Warteschlange** wechselt zu **Fehlgeschlagen** | Spawn-Fehler |

359| :- | :- | :- |

360| Endet mit 0, ohne etwas zu erstellen | Nach 10 solchen Anfragen in Folge | `runner did not register within ETA after max attempts` |

361| Endet mit 1 | Nach 10 solchen Anfragen in Folge | Das Ende der stderr-Ausgabe Ihres Hooks oder `exit 1`, wenn er nichts auf stderr geschrieben hat |

362| Endet mit 2 oder höher | Sofort | Das Ende der stderr-Ausgabe Ihres Hooks oder `exit` mit dem Code, etwa `exit 2`, wenn er nichts auf stderr geschrieben hat |

363| Wartet, bis `--hook-timeout` abläuft | Nach 10 solchen Anfragen in Folge | Das Ende der stderr-Ausgabe Ihres Hooks oder `spawn-runner hook timed out after 60000ms`, wenn er nichts auf stderr geschrieben hat |

364 

365Im Spawn-Fehler der letzten Zeile ist `60000` Ihr `--hook-timeout` in Millisekunden. Wenn ein Hook wartet, bis `--hook-timeout` abläuft, erhält das Log des Orchestrators außerdem eine `timed out after`-Zeile.

366 

367Um den Hook zu korrigieren, bilden Sie jeden Namen oder Schlüssel aus `CLAUDE_RUNNER_ORDER_ID`, wie es [Regel 1 des Hook-Vertrags](#the-spawn-runner-hook) verlangt. Im Beispiel wird der Name zu:

368 

369```bash theme={null}

370name="runner-${CLAUDE_RUNNER_ORDER_ID}"

371```

372 

373Wenn Ihr Hook wartet, sorgen Sie außerdem dafür, dass er sich beendet, sobald er die Workload eingereicht hat, da ein wartender Hook [die nächsten Hooks seines Orchestrators verzögert](https://code.claude.com/docs/de/self-hosted-environments-reference.md#orchestrator-cli-flags). Nachdem Sie den Hook geändert haben, prüfen Sie den Status jeder hängenden Sitzung auf der Registerkarte **Aktivität**:

374 

375* **In Warteschlange**: Die Sitzung erhält ihre nächste Spawn-Anfrage von selbst

376* **Fehlgeschlagen**: Wählen Sie als Owner **Erneut versuchen** für sie aus, oder lassen Sie ihren Benutzer ihr eine neue Nachricht senden

322 377 

323#### On-Demand-Runner im Leerlauf beenden378#### On-Demand-Runner im Leerlauf beenden

324 379 


740 795 

741Der Snapshot, den der Runner vom `~/.claude/` des Hosts erstellt, lässt das Verzeichnis `projects/` aus. Der standardmäßige Speicherort von Auto-Memory liegt unterhalb dieses Verzeichnisses. Wenn Sie dort Memory-Dateien ablegen, übernimmt der Runner sie nicht in Sitzungen, und sie schalten Auto-Memory nicht ein.796Der Snapshot, den der Runner vom `~/.claude/` des Hosts erstellt, lässt das Verzeichnis `projects/` aus. Der standardmäßige Speicherort von Auto-Memory liegt unterhalb dieses Verzeichnisses. Wenn Sie dort Memory-Dateien ablegen, übernimmt der Runner sie nicht in Sitzungen, und sie schalten Auto-Memory nicht ein.

742 797 

798### Sitzungen stoppen, die serververwaltete Einstellungen nicht abrufen können

799 

800Um zu verhindern, dass eine Sitzung, die [serververwaltete Einstellungen](https://code.claude.com/docs/de/server-managed-settings.md) abruft, startet, wenn dieser Abruf fehlschlägt, setzen Sie [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/de/settings-reference#forceremotesettingsrefresh) in der [`managed-settings.json`](https://code.claude.com/docs/de/settings#where-settings-live) in Ihrem Runner-Image auf `true`. Eine Antwort der API von Anthropic, dass Ihre Organisation keine serververwalteten Einstellungen hat, gilt als erfolgreicher Abruf.

801 

802Prüfen Sie vor dem Hinzufügen des Schlüssels, ob die Umgebung Claude Tag-Channel-Sitzungen ausführt oder Modellanfragen an Bedrock oder Agent Platform sendet:

803 

804* **Claude Tag-Channel-Sitzungen**: Lassen Sie den Schlüssel auf Runnern in einer Umgebung weg, an die ein Owner [Claude Tag-Channels weiterleitet](https://code.claude.com/docs/de/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses). Die API von Anthropic lehnt die Anfrage dieser Sitzungen nach serververwalteten Einstellungen ab, sodass sie bei gesetztem Schlüssel nicht starten. Legen Sie ihre Regeln in der `managed-settings.json` des Runner-Images ab, die [sie weiterhin lesen](https://code.claude.com/docs/de/managed-settings.md#where-and-when-a-policy-applies). Um den Schlüssel für Ihre anderen Sitzungen zu verwenden, führen Sie diese in einer separaten Umgebung aus.

805* **Bedrock oder Agent Platform**: Sitzungen bei diesen Anbietern [rufen keine serververwalteten Einstellungen ab](#what-differs-from-sessions-on-the-anthropic-api), daher starten sie unabhängig davon, ob Sie den Schlüssel setzen. Setzen Sie Ihre Regeln stattdessen über dieselbe `managed-settings.json` durch.

806 

807Diese `managed-settings.json` setzt den Schlüssel:

808 

809```json managed-settings.json theme={null}

810{

811 "forceRemoteSettingsRefresh": true

812}

813```

814 

815Setzen Sie den Schlüssel in dieser Datei, auch wenn Sie ihn zusätzlich in der Admin-Konsole von claude.ai setzen. Eine neue Sitzung hat keine [zwischengespeicherte Kopie](https://code.claude.com/docs/de/server-managed-settings.md#fetch-and-caching-behavior) Ihrer serververwalteten Einstellungen. Wenn Sie den Schlüssel also nur in der Konsole setzen, liegt er der Sitzung noch nicht vor. Schlägt ihr Abruf dann fehl, läuft die Sitzung ohne diese Einstellungen, bis ein späterer Abruf erfolgreich ist.

816 

817Um zu bestätigen, dass ein fehlgeschlagener Abruf der Einstellungen der Grund ist, warum eine Sitzung nicht gestartet ist, sehen Sie sich die [letzte Ausgabe von Claude Code](#keep-stdin-and-file-descriptor-3-attached) in der Sitzung oder im Log des Runners an. Sie enthält `Your organization requires remote managed settings to load, but they could not be loaded.`

818 

743### Repository-Einstellungen in Sitzungen mit mehreren Repositorys819### Repository-Einstellungen in Sitzungen mit mehreren Repositorys

744 820 

745In einem Thread in einem [Projekt](https://code.claude.com/docs/de/claude-projects.md#what-threads-pick-up-from-your-repositories) wird die `.claude/settings.json` keines Repositorys als Projekteinstellungen wirksam, und weder die `.mcp.json` noch die Skills eines Repositorys werden geladen, unabhängig davon, wo der Thread startet. Um diesen Threads einen Skill bereitzustellen, fügen Sie ihn Ihrem Runner-Image hinzu.821In einem Thread in einem [Projekt](https://code.claude.com/docs/de/claude-projects.md#what-threads-pick-up-from-your-repositories) wird die `.claude/settings.json` keines Repositorys als Projekteinstellungen wirksam, und weder die `.mcp.json` noch die Skills eines Repositorys werden geladen, unabhängig davon, wo der Thread startet. Um diesen Threads einen Skill bereitzustellen, fügen Sie ihn Ihrem Runner-Image hinzu.

Details

313 313 

314Für jede Sitzung, die Anthropic-verwaltetes Git verwendet, protokolliert der Runner auch eine `[runner:warn]`-Zeile, die mit `governed git: GIT_SSL_CAINFO is set` oder `governed git: GIT_SSL_NO_VERIFY is set` beginnt. Die Zeile sagt, was der Runner mit dieser Variable für sein eigenes Git, für Git innerhalb der Sitzung und für Ihre Lebenszyklus-Hooks getan hat. Sie endet damit, ob Sie etwas ändern müssen.314Für jede Sitzung, die Anthropic-verwaltetes Git verwendet, protokolliert der Runner auch eine `[runner:warn]`-Zeile, die mit `governed git: GIT_SSL_CAINFO is set` oder `governed git: GIT_SSL_NO_VERIFY is set` beginnt. Die Zeile sagt, was der Runner mit dieser Variable für sein eigenes Git, für Git innerhalb der Sitzung und für Ihre Lebenszyklus-Hooks getan hat. Sie endet damit, ob Sie etwas ändern müssen.

315 315 

316### github.com-Repositorys zu Claude Tag-Channel-Sitzungen hinzufügen

317 

318Wenn Claude ein github.com-Repository nicht zu einer Claude Tag-Channel-Sitzung hinzufügen kann, stellen Sie sicher, dass der Channel Zugriff darauf hat, auch wenn Ihr Runner es klonen kann. Dieser Zugriff ergibt sich aus Einstellungen auf GitHub und in Ihrer Claude-Organisation, nicht aus den Git-Anmeldedaten Ihres Runners.

319 

320**1. Die Claude GitHub App installieren**

321 

322Installieren Sie die [Claude GitHub App](https://github.com/apps/claude) in der GitHub-Organisation oder dem GitHub-Konto, dem das Repository gehört, und nehmen Sie dieses Repository in die Installation auf.

323 

324**2. Die GitHub-Organisation oder das GitHub-Konto verknüpfen**

325 

326Verknüpfen Sie unter [**Organization settings > Git providers**](https://claude.ai/admin-settings/source-control) diese Organisation oder dieses Konto mit Ihrer Claude-Organisation. Ein Owner Ihrer Claude-Organisation, der auch Eigentümer der GitHub-Organisation ist, kann sie verknüpfen. Siehe [Ihre GitHub-Organisation verknüpfen](https://claude.com/docs/claude-tag/admins/configure-github#link-your-github-organization).

327 

328**3. Das Repository freigeben**

329 

330Geben Sie in den [Claude Tag-Admin-Einstellungen](https://claude.ai/admin-settings/claude-tag) das Repository für den Channel oder für einen weiteren Geltungsbereich frei, der den Channel einschließt: seinen Slack-Workspace oder ganz Slack. Jemand mit der Owner-Rolle oder der Berechtigung Claude Tag Admin kann es freigeben. Ein Channel-Manager kann es auch zu seinem eigenen Channel hinzufügen, wenn sein GitHub-Konto Admin des Repositorys ist. Siehe [Repository-Zugriff gewähren](https://claude.com/docs/claude-tag/admins/configure-github#grant-repository-access).

331 

332Starten Sie dann einen neuen Thread im Channel und [nennen Sie das Repository](https://claude.com/docs/claude-tag/admins/configure-github#how-granted-repositories-reach-a-session) in Ihrer ersten Nachricht.

333 

334Wenn Claude das Repository weiterhin nicht hinzufügen kann, erfahren Sie unter [Wenn Claude ein Repository nicht erreichen kann](https://claude.com/docs/claude-tag/admins/configure-github#if-claude-can%E2%80%99t-reach-a-repository), wo Sie die GitHub-Verknüpfung und die Repository-Freigabe überprüfen.

335 

316### Schreiben Sie Git-URLs für private Netzwerke um336### Schreiben Sie Git-URLs für private Netzwerke um

317 337 

318Repository-URLs kommen von der Kontrollebene als HTTPS mit dem Hostnamen Ihres Git-Hosts; für GitHub Enterprise ist das der Hostname, den Sie für die [GitHub Enterprise-Integration](https://code.claude.com/docs/de/github-enterprise-server.md) auf claude.ai konfiguriert haben. Zwei wiederholbare Flags schreiben diese URLs vor dem Clone um:338Repository-URLs kommen von der Kontrollebene als HTTPS mit dem Hostnamen Ihres Git-Hosts; für GitHub Enterprise ist das der Hostname, den Sie für die [GitHub Enterprise-Integration](https://code.claude.com/docs/de/github-enterprise-server.md) auf claude.ai konfiguriert haben. Zwei wiederholbare Flags schreiben diese URLs vor dem Clone um:


376 396 

377Builds und Tests sind normalerweise der größte und variabelste Teil der Last einer Sitzung, daher führen Sie einen repräsentativen Build Ihres Repositorys aus, messen Sie seinen Peak-CPU und Speicher, und erhöhen Sie jeden Startwert, der keinen Platz für den Claude Code-Prozess auf diesem Peak lässt.397Builds und Tests sind normalerweise der größte und variabelste Teil der Last einer Sitzung, daher führen Sie einen repräsentativen Build Ihres Repositorys aus, messen Sie seinen Peak-CPU und Speicher, und erhöhen Sie jeden Startwert, der keinen Platz für den Claude Code-Prozess auf diesem Peak lässt.

378 398 

379Der Runner verwendet `--capacity`, um zu begrenzen, wie viele Sitzungen er gleichzeitig ausführt. Er teilt CPU oder Speicher nicht zwischen ihnen, daher teilen sich die Sitzungen auf einem Runner die CPU und den Speicher des Containers. Um die Freigabe einer Sitzung zu begrenzen, wenden Sie Limits aus Ihrem [Wrapper-Skript](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#wrapper-scripts) an. Was Sie einem Container geben, hängt daher davon ab, wie viele Sitzungen er gleichzeitig bedient:399Der Runner verwendet `--capacity`, um zu begrenzen, wie viele Sitzungen er gleichzeitig ausführt. Er teilt CPU oder Speicher nicht zwischen ihnen, daher teilen sich die Sitzungen auf einem Runner die CPU und den Speicher des Containers. Damit die Speichernutzung einer Sitzung die anderen nicht beendet, führen Sie eine Sitzung pro Runner mit [einem eigenen Speicherlimit](#give-each-session-its-own-memory-limit) aus.

380 400 

381* **Eine Sitzung pro Runner**: Geben Sie jedem Container die Werte einer Sitzung. Verwenden Sie diese Dimensionierung bei `--capacity 1`, das der [Härtungsabschnitt](#harden-your-deployment) empfiehlt, und für [On-Demand-Runner](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners), wo Sie die Werte auf der Workload setzen, die Ihr [`spawn-runner`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#the-spawn-runner-hook) einreicht, wie ein Kubernetes Job's Pod-Template.401* **Eine Sitzung pro Runner**: Geben Sie jedem Container die Werte einer Sitzung. Verwenden Sie diese Dimensionierung bei `--capacity 1`, das der [Härtungsabschnitt](#harden-your-deployment) empfiehlt, und für [On-Demand-Runner](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners), wo Sie die Werte auf der Workload setzen, die Ihr [`spawn-runner`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#the-spawn-runner-hook) einreicht, wie ein Kubernetes Job's Pod-Template.

382* **Mehrere Sitzungen pro Runner**: Bei einem `--capacity` über eins multiplizieren Sie die Werte einer Sitzung mit der Kapazität, weil bis zu so viele Sitzungen gleichzeitig im Container laufen können. Die [Kubernetes](#kubernetes)- und [Docker Compose](#docker-compose)-Rezepte führen `--capacity 4` ohne CPU- oder Speicherlimits aus, daher fügen Sie Limits hinzu, die für die Kapazität dimensioniert sind, die Sie ausführen.402* **Mehrere Sitzungen pro Runner**: Bei einem `--capacity` über eins multiplizieren Sie die Werte einer Sitzung mit der Kapazität, weil bis zu so viele Sitzungen gleichzeitig im Container laufen können. Die [Kubernetes](#kubernetes)- und [Docker Compose](#docker-compose)-Rezepte führen `--capacity 4` ohne CPU- oder Speicherlimits aus, daher fügen Sie Limits hinzu, die für die Kapazität dimensioniert sind, die Sie ausführen.

403* **Mehrere Runner-Container auf einem Host**: Dimensionieren Sie den Host für die Summe der Kapazitäten der Runner, weil jeder Runner nur seine eigenen Sitzungen auf `--capacity` anrechnet:

404 

405 * **Speicher**: Multiplizieren Sie den Speicher einer Sitzung mit der Summe und addieren Sie dann, was die eigenen Prozesse des Hosts verwenden

406 * **CPU**: Multiplizieren Sie die CPU-Anfrage einer Sitzung mit der Summe. Damit jede Sitzung gleichzeitig über ihre Anfrage hinausgehen kann, multiplizieren Sie stattdessen ihr CPU-Limit.

407 

408 Geben Sie jedem Runner einen eigenen Container. Verwenden Sie in jedem [denselben `--base-dir`-Pfad](#keep-the-base-directory-and-capacity-identical-across-runners), auf einem Datenspeicher, den kein Container eines anderen Runners einbindet, damit jeder Runner [ein eigenes Arbeitsverzeichnis](#harden-your-deployment) hat.

409 

410### Geben Sie jeder Sitzung ein eigenes Speicherlimit

411 

412Um zu verhindern, dass eine Sitzung die anderen beendet, wenn der Speicher ausgeht, führen Sie jeden Runner bei `--capacity 1` unter einem eigenen Speicherlimit aus, das auf den Speicher einer Sitzung gesetzt ist:

413 

414* **In einem Container**: Führen Sie einen Runner pro Container aus und setzen Sie das Speicherlimit des Containers, etwa `limits.memory` unter Kubernetes, `--memory` unter Docker oder `mem_limit` in einer Compose-Datei. Halten Sie die Summe der Limits der Container unter dem Speicher des Hosts, denn wenn dem Host selbst der Speicher ausgeht, kann der Kernel Prozesse an beliebiger Stelle auf dem Host beenden.

415* **Unter systemd ohne Container**: Setzen Sie `MemoryMax` für die Unit des Runners und führen Sie einen Runner pro Host aus, denn Runner, die [dasselbe `--base-dir`](#keep-the-base-directory-and-capacity-identical-across-runners) auf einem Dateisystem verwenden, teilen sich die dort geklonten Repositorys. Beispielsweise können ihre Sitzungen bei `--capacity 1` ohne `checkout`-Hook gleichzeitig im selben Checkout eines Repositorys arbeiten. Um mehrere Runner auf einem Host auszuführen, geben Sie jedem einen Container.

416 

417Wenn ein Container oder eine Unit das Speicherlimit erreicht, beendet der Kernel nur Prozesse darin. Wenn Sie `--capacity` über eins setzen, teilen sich die Sitzungen ein Limit. Wenn sie es erreichen, wählt der Kernel die zu beendenden Prozesse nicht nach Sitzung aus, sodass die Speichernutzung einer Sitzung die anderen beenden kann.

418 

419Unter Kubernetes können Sie die Sitzungen mit keinem der beiden Werte der kubelet-Einstellung `singleProcessOOMKill` voneinander trennen. Ebenso wenig können Sie den Gesamtspeicher einer Sitzung mit einem Speicher-`ulimit` in Ihrem [Wrapper-Skript](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#wrapper-scripts) begrenzen. Der Kernel wendet einen Wert wie `ulimit -v` auf jeden Prozess einzeln an.

420 

421### Lassen Sie Spielraum unter Prozess- und Thread-Limits

422 

423Um ein Prozess- und Thread-Limit zu dimensionieren, messen Sie, was eine Sitzung benötigt, und multiplizieren Sie dies mit der Anzahl der Sitzungen, die sich das Limit teilen. Wenn diese Sitzungen das Limit erreichen, verweigert der Kernel neue Prozesse und Threads, sodass Befehle, Builds und Tests in jeder von ihnen fehlschlagen können. Der verweigerte Aufruf gibt `EAGAIN` zurück, dessen Standardmeldung `Resource temporarily unavailable` lautet.

424 

425Angenommen, eine Sitzung erreicht in der Spitze 300 Prozesse und Threads, und vier Sitzungen teilen sich das Limit. Zusammen benötigen sie 1.200, und mit einem Limit von 2.400 lassen Sie Spielraum für Builds, die doppelt so viel benötigen.

426 

427#### Wo Sie jedes Limit setzen

428 

429Jedes Limit in dieser Tabelle zählt sowohl Threads als auch Prozesse, und `pids.max` ist die Datei, die das Limit einer cgroup enthält:

430 

431| Limit | Wo Sie es setzen | Wer es sich teilt |

432| :- | :- | :- |

433| `pids.max` unter Kubernetes | `podPidsLimit` in der kubelet-Konfiguration der Nodes, auf denen Runner laufen. Sie können es nicht in einer Pod-Spezifikation setzen. | Die Container eines Pods |

434| `pids.max` unter Docker | `--pids-limit` oder `pids_limit` in einer Compose-Datei | Ein Container |

435| `pids.max` unter systemd | `TasksMax` für die Unit des Runners | Eine Unit |

436| `ulimit -u` | Die Shell oder der Dienst, der den Runner startet | Alles auf dem Host, was unter der Benutzer-ID des Runners läuft. Wird für root nicht durchgesetzt. |

437 

438Wenn Sie `TasksMax` nicht setzen, wendet systemd `DefaultTasksMax` an, das standardmäßig 15 % des niedrigsten Werts von `kernel.pid_max`, `kernel.threads-max` und `pids.max` der Root-cgroup beträgt.

439 

440#### Messen Sie den Spitzenwert einer Sitzung

441 

442Um die Werte für Ihre eigenen Runner zu ermitteln, messen Sie eine Sitzung auf ihrem Host, unter Kubernetes also auf dem Node:

443 

444**1. Starten Sie einen einzelnen Runner**

445 

446Starten Sie einen Runner bei `--capacity 1` ohne weitere Inhalte in seinem Container oder seiner systemd-Unit, allein auf seinem Host und in seiner Umgebung:

447 

448* **Sein Host**: Verwenden Sie einen, auf dem kein anderer Runner läuft. So können Sie seinen Prozess im nächsten Schritt identifizieren.

449* **Seine Umgebung**: Machen Sie ihn zum einzigen Runner dort, zum Beispiel in einer Umgebung, die Sie [für den Test erstellen](https://code.claude.com/docs/de/self-hosted-environments-quickstart.md#set-up-manually). Sitzungen werden an eine Umgebung geleitet und nicht an einen Runner.

450 

451Starten Sie noch keine Sitzung, denn Sie benötigen das Verzeichnis aus dem nächsten Schritt, bevor der Build beginnt.

452 

453**2. Ermitteln Sie das cgroup-Verzeichnis des Runners**

454 

455Ermitteln Sie auf dem Host, nicht im Container, die Prozess-ID des Runners, zum Beispiel mit `ps`. Lesen Sie `/proc/<pid>/cgroup` für diese ID:

456 

457* **Eine Zeile enthält `:pids:`**: Der Host verwendet cgroup v1, und das Verzeichnis ist `/sys/fs/cgroup/pids`, gefolgt vom Text nach `:pids:`

458* **Die einzige Zeile beginnt mit `0::`**: Der Host verwendet cgroup v2, und das Verzeichnis ist `/sys/fs/cgroup`, gefolgt vom Text nach `0::`

459 

460**3. Führen Sie einen repräsentativen Build aus und erfassen Sie den Spitzenwert**

461 

462Führen Sie eine Sitzung durch einen repräsentativen Build und entnehmen Sie den Spitzenwert dem cgroup-Verzeichnis des Runners:

463 

464* **Das Verzeichnis enthält `pids.peak`**: Lesen Sie die Datei, nachdem der Build abgeschlossen ist

465* **Das Verzeichnis enthält kein `pids.peak`**: Lesen Sie `pids.current` einmal pro Sekunde, während der Build läuft, und behalten Sie den höchsten Wert. Ein Spitzenwert zwischen zwei Lesevorgängen bleibt unbemerkt, behandeln Sie diesen Wert daher als niedrige Schätzung.

466 

467**4. Multiplizieren Sie mit den Sitzungen, die sich das Limit teilen**

468 

469* **Pod, Container oder Unit eines Runners**: Multiplizieren Sie den Spitzenwert mit der `--capacity` des Runners

470* **Ein Limit, das sich mehrere Runner teilen**: Multiplizieren Sie den Spitzenwert mit der Summe ihrer Kapazitäten

471 

472Addieren Sie dann den Spitzenwert von allem anderen, was sich das Limit teilt, etwa eines weiteren Containers im Pod.

473 

474**5. Setzen Sie das Limit über dem Ergebnis**

475 

476Mit einem höheren Limit lassen Sie Spielraum für aufwendigere Builds, und mit einem niedrigeren stoppen Sie eine Fork-Bombe früher.

477 

478#### Prüfen Sie ein `pids.max`-Limit

479 

480* **Prüfen, ob `pids.max` erreicht wurde**: Durchsuchen Sie das Kernel-Log des Hosts, zum Beispiel mit `dmesg`, nach einer Zeile, die `cgroup: fork rejected by pids controller in` und den Pfad einer cgroup enthält. Der Kernel protokolliert sie nur beim ersten Mal, wenn er in dieser cgroup einen Prozess oder Thread verweigert, durchsuchen Sie daher das gesamte Log.

481* **Das geltende Limit anzeigen**: Lesen Sie `pids.max` im cgroup-Verzeichnis des Runners und in jedem darüberliegenden Verzeichnis. Der niedrigste Wert ist das geltende Limit, und `max` bedeutet, dass auf dieser Ebene kein Limit besteht.

383 482 

384## Kubernetes483## Kubernetes

385 484 


577 676 

578Was der Wiederverwendungspfad garantiert und nicht garantiert:677Was der Wiederverwendungspfad garantiert und nicht garantiert:

579 678 

580* **Jede Klonform funktioniert**: Ein vollständiger, flacher oder Single-Branch-Klon unter dem Pfad wird unverändert verwendet. Der Runner übergibt niemals `--depth` beim Abrufen in einen vorhandenen Klon, daher behält ein vollständiger Vorwärm seine vollständige Historie und ein flacher bleibt flach. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0` oder eine Zahl; Standard 50) steuert nur den kalten Klon, den der Runner erstellt, wenn noch kein Klon vorhanden ist.679* **Klontiefe**: Erstellen Sie den Klon ohne `--depth`, mit oder ohne `--single-branch`. Der Runner übergibt niemals `--depth`, wenn er in einen Klon mit einem `origin`-Remote abruft, selbst wenn Sie [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/de/self-hosted-environments-reference#environment-variable-only-settings) festlegen. Bei einem vollständigen Klon lädt jede Sitzung nur die Commits herunter, die dem Klon fehlen. Bei einem flachen Klon lädt eine Sitzung auf einem Branch, der vor dem ältesten Commit des Klons abgezweigt wurde, die gesamte Historie dieses Branches herunter.

581* **Nachverfolgte Änderungen werden zurückgesetzt, nicht nachverfolgte Dateien bleiben erhalten**: Bei `--capacity 1` beginnt jede Sitzung mit einem harten Zurücksetzen, das die nachverfolgten Änderungen der vorherigen Sitzung löscht, aber der Runner führt niemals `git clean` aus, daher bleiben nicht nachverfolgte Dateien aus früheren Sitzungen des gesperrten Besitzers im Baum.680* **Nachverfolgte Änderungen werden zurückgesetzt, nicht nachverfolgte Dateien bleiben erhalten**: Bei `--capacity 1` beginnt jede Sitzung mit einem harten Zurücksetzen, das die nachverfolgten Änderungen der vorherigen Sitzung löscht, aber der Runner führt niemals `git clean` aus, daher bleiben nicht nachverfolgte Dateien aus früheren Sitzungen des gesperrten Besitzers im Baum.

582* **Per-Session-Verzeichnisse bleiben ebenfalls erhalten**: Neben dem Checkout erstellt der Runner für jede Sitzung, die er ausführt, Einträge pro Sitzung unter `<base-dir>/_sessions/`. Das Claude-Konfigurationsverzeichnis der Sitzung enthält eine lokale Kopie des Gesprächstranskripts. Daneben befinden sich die hochgeladenen Dateien der Sitzung, falls die Sitzung welche hat. Das Sitzungsverzeichnis befindet sich auch dort: Es enthält alle Pro-Session-Worktrees und `checkout` Hook-Checkouts während der Sitzung ausgeführt wird, und es behält alles andere, was Claude darin geschrieben hat.681* **Per-Session-Verzeichnisse bleiben ebenfalls erhalten**: Neben dem Checkout erstellt der Runner für jede Sitzung, die er ausführt, Einträge pro Sitzung unter `<base-dir>/_sessions/`. Das Claude-Konfigurationsverzeichnis der Sitzung enthält eine lokale Kopie des Gesprächstranskripts. Daneben befinden sich die hochgeladenen Dateien der Sitzung, falls die Sitzung welche hat. Das Sitzungsverzeichnis befindet sich auch dort: Es enthält alle Pro-Session-Worktrees und `checkout` Hook-Checkouts während der Sitzung ausgeführt wird, und es behält alles andere, was Claude darin geschrieben hat.

583 682 


587* **Mit dem Git-Proxy verliert ein `reftable`-Vorwärm seine Referenzen**: Wenn der Runner `.git/` vor jeder Sitzung bereinigt, behält er `.git/refs/` und entfernt das Verzeichnis `.git/reftable/`. Ein im `reftable`-Referenzformat von Git vorgewärmter Klon verliert auf diese Weise seine Referenzen. Wärmen Sie den Klon daher stattdessen im `files`-Referenzformat von Git vor.686* **Mit dem Git-Proxy verliert ein `reftable`-Vorwärm seine Referenzen**: Wenn der Runner `.git/` vor jeder Sitzung bereinigt, behält er `.git/refs/` und entfernt das Verzeichnis `.git/reftable/`. Ein im `reftable`-Referenzformat von Git vorgewärmter Klon verliert auf diese Weise seine Referenzen. Wärmen Sie den Klon daher stattdessen im `files`-Referenzformat von Git vor.

588* **Lange Klone benötigen keine Umgehung**: Der Runner begrenzt jede Git-Operation mit einem 120-Sekunden-Watchdog ohne Fortschritt und einer 30-Minuten-Obergrenze, nicht mit einem flachen Timeout, daher wird ein langsamer kalter Klon, der weiterhin Fortschritt meldet, abgeschlossen.687* **Lange Klone benötigen keine Umgehung**: Der Runner begrenzt jede Git-Operation mit einem 120-Sekunden-Watchdog ohne Fortschritt und einer 30-Minuten-Obergrenze, nicht mit einem flachen Timeout, daher wird ein langsamer kalter Klon, der weiterhin Fortschritt meldet, abgeschlossen.

589 688 

689### Bestätigen, dass der Runner Ihren Klon verwendet

690 

691Um zu bestätigen, dass der Runner Ihren Klon verwendet, starten Sie ihn mit [`--log-level debug`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags) und starten Sie eine Sitzung für das Repository. Der Runner protokolliert `Prefetched repo found at` und den Pfad des Klons. Wenn er stattdessen `No prefetched repo, fresh init at` protokolliert, hat er unter dem Pfad in dieser Zeile keinen verwendbaren Klon gefunden. Prüfen Sie, ob sich Ihr Klon unter diesem Pfad befindet, dem Benutzer des Runners gehört und ein Remote namens `origin` hat.

692 

693Wenn der Runner Ihren Klon findet und Sitzungen dennoch langsam starten, prüfen Sie, ob der Klon flach ist.

694 

590## Pinnen Sie die Version695## Pinnen Sie die Version

591 696 

592Der Kindprozess jeder Sitzung führt standardmäßig die eigene Binärdatei des Runners aus, und der Runner schaltet Auto-Update in den Sitzungen, die er startet, aus. Mit dieser Standardeinstellung führt jede Sitzung die Version aus, die Sie auf dem Host installiert oder in das Image eingebaut haben. Ein Host-Level-Update wird wirksam, das nächste Mal, wenn der Runner startet.697Der Kindprozess jeder Sitzung führt standardmäßig die eigene Binärdatei des Runners aus, und der Runner schaltet Auto-Update in den Sitzungen, die er startet, aus. Mit dieser Standardeinstellung führt jede Sitzung die Version aus, die Sie auf dem Host installiert oder in das Image eingebaut haben. Ein Host-Level-Update wird wirksam, das nächste Mal, wenn der Runner startet.


609* **Feste Flotte**: Führen Sie einen statischen Satz von Runner-Replicas aus und skalieren Sie auf den [Prometheus-Metriken](https://code.claude.com/docs/de/self-hosted-environments-reference.md#prometheus-metrics), die jeder Runner bedient714* **Feste Flotte**: Führen Sie einen statischen Satz von Runner-Replicas aus und skalieren Sie auf den [Prometheus-Metriken](https://code.claude.com/docs/de/self-hosted-environments-reference.md#prometheus-metrics), die jeder Runner bedient

610* **On-Demand-Runner**: Führen Sie den `claude self-hosted-runner orchestrator`-Subcommand aus, der Anthropic auf Sitzungen abfragt, die mit keinem verfügbaren Runner in die Warteschlange eingereiht sind und Ihren `spawn-runner`-Hook aufruft, um einen pro Sitzung zu starten. Siehe [On-Demand-Runner](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners).715* **On-Demand-Runner**: Führen Sie den `claude self-hosted-runner orchestrator`-Subcommand aus, der Anthropic auf Sitzungen abfragt, die mit keinem verfügbaren Runner in die Warteschlange eingereiht sind und Ihren `spawn-runner`-Hook aufruft, um einen pro Sitzung zu starten. Siehe [On-Demand-Runner](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners).

611 716 

717### Inaktive Sitzungen in einer festen Flotte freigeben

718 

719Wenn Sitzungen in einer festen Flotte in der Warteschlange bleiben, obwohl alle Runner online sind, können inaktive Sitzungen die Ursache sein. Standardmäßig behält eine Sitzung ihren Slot, nachdem ihr Turn abgeschlossen ist, und ihr Runner bleibt an den [Owner](https://code.claude.com/docs/de/self-hosted-environments#key-concepts) dieser Sitzung gebunden. Wenn die [geplante Cloud-Aufgabe](https://code.claude.com/docs/de/routines.md) Ihres Teams bei jeder Ausführung eine neue Sitzung startet, können deren inaktive Sitzungen alle Slots belegen.

720 

721Lesen Sie zur Überprüfung `claude_code_self_hosted_runner_session_idle_seconds` in den [Prometheus-Metriken](https://code.claude.com/docs/de/self-hosted-environments-reference.md#prometheus-metrics) jedes Runners aus. Jede Sitzung, die ein Runner hält, hat ihre eigene Zeitreihe: `0`, solange die Sitzung beschäftigt ist, andernfalls die Sekunden seit Beginn der Inaktivität. Wählen Sie die Inaktivitätsdauer, die Sie zulassen möchten: länger als die Pausen, die Personen mitten in einer Aufgabe einlegen, und kurz genug, dass jede Ausführung freigegeben wird, bevor die nächste Ausführung der geplanten Aufgabe beginnt. Vergleichen Sie die Zeitreihen mit diesem Wert.

722 

723* **Zeitreihen über diesem Wert, etwa `1800` für 30 Minuten**: Inaktive Sitzungen belegen diese Slots, setzen Sie daher `--release-idle-session-min`

724* **Alle Zeitreihen darunter**: Keine Sitzung war so lange inaktiv. Fügen Sie Runner hinzu oder setzen Sie [`--kill-session-after-min`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags) für [Sitzungen, die nie inaktiv werden](#some-sessions-don’t-count-as-idle).

725* **Ein Runner ohne Zeitreihe**: Keine Sitzung belegt ihn. Siehe **Sitzungen bleiben in der Warteschlange** unter [Fehlerbehebung](#troubleshooting).

726* **Ein Runner, dessen Metriken nicht antworten**: Sein Prozess wurde möglicherweise beendet. Siehe **Eine Umgebung, die fehlerfrei aussieht** unter [Wenn der Runner beendet wird](#when-the-runner-exits).

727 

728Um inaktive Sitzungen freizugeben, starten Sie jeden Runner mit [`--release-idle-session-min`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags) und dieser Dauer in Minuten, etwa `--release-idle-session-min 30`. Der Runner gibt dann jede Sitzung frei, die so lange inaktiv bleibt, unabhängig davon, ob eine geplante Aufgabe oder eine Person sie gestartet hat.

729 

730* **Nicht gepushte Arbeit**: Eine freigegebene Sitzung wird bei ihrer nächsten Nachricht fortgesetzt, jedoch ohne die Arbeit, die sie nicht gepusht hatte. Wie Sie ihre Commits behalten, erfahren Sie unter [Fortgesetzte Sitzungen verlieren nicht gepushte Arbeit](#additional-limitations).

731* **Runner wird beendet**: Ein Runner, der seine letzte Sitzung freigibt, leitet ein [normales Beenden](#when-the-runner-exits) ein. Lassen Sie ihn von Ihrem Supervisor auf einem frischen Dateisystem neu starten, wie unter [Härten Sie Ihr Deployment](#harden-your-deployment) beschrieben.

732* **Sitzungen, die nie inaktiv werden**: Setzen Sie zusätzlich [`--kill-session-after-min`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags), da [manche Sitzungen nicht als inaktiv gelten](#some-sessions-don’t-count-as-idle)

733 

612## Bekannte Probleme und Einschränkungen734## Bekannte Probleme und Einschränkungen

613 735 

614Die folgenden sind die Einschränkungen in dieser Version, mit Umgehungen, wo eine existiert.736Die folgenden sind die Einschränkungen in dieser Version, mit Umgehungen, wo eine existiert.


642### Zusätzliche Einschränkungen764### Zusätzliche Einschränkungen

643 765 

644* **Fortgesetzte Sitzungen verlieren nicht gepushte Arbeit**: Ein frischer Runner klont das Repository erneut von seinem Start-Branch, daher ist Arbeit, die die Sitzung nicht gepusht hat, verloren.766* **Fortgesetzte Sitzungen verlieren nicht gepushte Arbeit**: Ein frischer Runner klont das Repository erneut von seinem Start-Branch, daher ist Arbeit, die die Sitzung nicht gepusht hat, verloren.

645 * **Um committete Arbeit zu behalten**: Setzen Sie [`--push-outcome-on-release`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags) auf jedem Runner in der Umgebung, da ein Runner ohne das Flag die Sitzung von ihrem Start-Branch aus fortsetzt. Ein Runner mit dem Flag führt vor der Freigabe einen Best-Effort-Push der Ergebnis-Branches der Sitzung durch, und die fortgesetzte Sitzung startet von diesen Commits. Der Push verwendet die eigenen Git-Anmeldedaten des Runner-Hosts, auch auf einem Runner, der [von Anthropic verwaltetes Git](#use-the-anthropic-git-proxy) verwendet. Nicht committete Änderungen gehen weiterhin verloren.767 * **Um committete Arbeit zu behalten**: Setzen Sie [`--push-outcome-on-release`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags) auf jedem Runner in der Umgebung, da ein Runner ohne das Flag die Sitzung von ihrem Start-Branch aus fortsetzt. Ein Runner mit dem Flag führt vor der Freigabe einen Best-Effort-Push der Ergebnis-Branches der Sitzung durch, und die fortgesetzte Sitzung startet von diesen Commits. Der Push verwendet die eigenen Git-Anmeldedaten des Runner-Hosts, auch auf einem Runner, der [von Anthropic verwaltetes Git](#use-the-anthropic-git-proxy) verwendet.

646 * **Mit einem `checkout`-Hook**: Repositorys, die über einen [`checkout`-Lifecycle-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#checkout) ausgecheckt werden, werden nicht gepusht. Sichern Sie diese stattdessen über den [`post-session`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session).768 * **Mit einem `checkout`-Hook**: Repositorys, die über einen [`checkout`-Lifecycle-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#checkout) ausgecheckt werden, werden nicht gepusht. Sichern Sie diese stattdessen über den [`post-session`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session).

647 * **Bevor Sie das Flag aktivieren**: Beschränken Sie, wer zu `claude/*`-Refs auf dem Quell-Remote pushen kann. Beim Fortsetzen ruft der Runner den zuvor gepushten Branch ab, ohne zu überprüfen, wer ihn gepusht hat.769 * **Bevor Sie das Flag aktivieren**: Beschränken Sie, wer zu `claude/*`-Refs auf dem Quell-Remote pushen kann. Beim Fortsetzen ruft der Runner den zuvor gepushten Branch ab, ohne zu überprüfen, wer ihn gepusht hat.

770 * **Nicht committete Änderungen gehen weiterhin verloren**: Wie Sie Claude per Prompt anweisen, nach Abschluss seiner Antwort zu committen und zu pushen, erfahren Sie unter [Sitzungen zum Pushen ihrer Arbeit auffordern](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)

648* **Ein während der Sitzung hinzugefügtes Repository kann beim Klonen fehlschlagen**: Claude klont es mit `git clone` über HTTPS. Auf einem Runner ohne [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) schlägt das Klonen mit einem Git-Authentifizierungsfehler fehl, wenn nichts auf dem Host das Repository lesen kann. Wählen Sie nach Möglichkeit jedes Repository, das die Sitzung benötigt, bereits beim Erstellen aus.771* **Ein während der Sitzung hinzugefügtes Repository kann beim Klonen fehlschlagen**: Claude klont es mit `git clone` über HTTPS. Auf einem Runner ohne [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) schlägt das Klonen mit einem Git-Authentifizierungsfehler fehl, wenn nichts auf dem Host das Repository lesen kann. Wählen Sie nach Möglichkeit jedes Repository, das die Sitzung benötigt, bereits beim Erstellen aus.

649* **Einige Connectoren erscheinen nicht in selbstgehosteten Sitzungen**: Ein Connector, den Sie noch nicht in claude.ai Settings verbunden haben, wird nicht in einer selbstgehosteten Sitzung aufgelistet, und die Sitzung wird Sie nicht auffordern, ihn zu verbinden. Verbinden Sie ihn zuerst in Settings, dann starten Sie eine frische Sitzung. Das Hinzufügen eines Connectors zu einer bereits laufenden Sitzung macht seine Tools auch nicht für Claude verfügbar; starten Sie eine frische Sitzung, um einen neu hinzugefügten Connector aufzugreifen.772* **Einige Connectoren erscheinen nicht in selbstgehosteten Sitzungen**: Ein Connector, den Sie noch nicht in claude.ai Settings verbunden haben, wird nicht in einer selbstgehosteten Sitzung aufgelistet, und die Sitzung wird Sie nicht auffordern, ihn zu verbinden. Verbinden Sie ihn zuerst in Settings, dann starten Sie eine frische Sitzung. Das Hinzufügen eines Connectors zu einer bereits laufenden Sitzung macht seine Tools auch nicht für Claude verfügbar; starten Sie eine frische Sitzung, um einen neu hinzugefügten Connector aufzugreifen.

650* **Wenn jemand eine Sitzung archiviert oder löscht oder ihren Runner über das Menü der Sitzung freigibt**: Verlassen Sie sich nicht auf den Push durch [`--push-outcome-on-release`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags). Um Commits in diesen Fällen zu sichern, pushen Sie `HEAD` aus einem [`post-session`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session) in einen Rettungs-Branch. Wenn Sie vom dortigen Beispiel ausgehen, sorgen Sie dafür, dass es auch dann pusht, wenn nichts uncommittet ist, da es nur nach einem Snapshot-Commit pusht.773* **Wenn jemand eine Sitzung archiviert oder löscht oder ihren Runner über das Menü der Sitzung freigibt**: Verlassen Sie sich nicht auf den Push durch [`--push-outcome-on-release`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags). Um Commits in diesen Fällen zu sichern, pushen Sie `HEAD` aus einem [`post-session`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session) in einen Rettungs-Branch. Wenn Sie vom dortigen Beispiel ausgehen, sorgen Sie dafür, dass es auch dann pusht, wenn nichts uncommittet ist, da es nur nach einem Snapshot-Commit pusht.


684* **Sitzungen schlagen sofort nach der Aufnahme fehl**: Öffnen Sie die Sitzung in claude.ai/code, um den Fehler zu sehen. Wenn der Fehler zeigt, dass Git sich nicht authentifizieren konnte, überprüfen Sie die [Git-Anmeldedaten](#configure-git) des Runners. Bei einem Runner, der mit `--use-anthropic-git-proxy` gestartet wurde, siehe [Wenn Sitzungen auf einem Runner mit dem Git-Proxy nicht starten](#when-anthropic-doesnt-serve-a-session).807* **Sitzungen schlagen sofort nach der Aufnahme fehl**: Öffnen Sie die Sitzung in claude.ai/code, um den Fehler zu sehen. Wenn der Fehler zeigt, dass Git sich nicht authentifizieren konnte, überprüfen Sie die [Git-Anmeldedaten](#configure-git) des Runners. Bei einem Runner, der mit `--use-anthropic-git-proxy` gestartet wurde, siehe [Wenn Sitzungen auf einem Runner mit dem Git-Proxy nicht starten](#when-anthropic-doesnt-serve-a-session).

685 808 

686 Ein nicht beschreibbares Basis-Verzeichnis stoppt den Runner beim Start, anstatt Sitzungen fehlschlagen zu lassen. Siehe den **Runner beendet sich beim Start mit `cannot create or write to base directory`**-Eintrag in dieser Liste.809 Ein nicht beschreibbares Basis-Verzeichnis stoppt den Runner beim Start, anstatt Sitzungen fehlschlagen zu lassen. Siehe den **Runner beendet sich beim Start mit `cannot create or write to base directory`**-Eintrag in dieser Liste.

810* **Eine Sitzung wird aufgenommen, aber Claude beantwortet ihre erste Nachricht nie**: Wenn Ihre Runner `api.anthropic.com` über einen Proxy erreichen, konfigurieren Sie ihn so, dass er die `/worker/events/stream`-Antwort der Sitzung so durchreicht, wie sie eintrifft. Das Erhöhen der Timeouts des Runners hilft nicht. Um die Ursache im Log des Runners zu bestätigen, siehe [Eine Sitzung wird aufgenommen, aber Claude beantwortet ihre erste Nachricht nie](#when-a-sessions-first-message-is-never-answered).

687* **Sitzungen starten nicht auf einem Runner, der `--use-anthropic-git-proxy` gesetzt hat**: Suchen Sie im Log des Runners nach `access denied by the git proxy` oder nach einem Git-Fehler, der eine `api.anthropic.com`-Adresse mit `/git_proxy/` nennt. Um festzustellen, ob Anthropic die Sitzung bedient hat, und die Ursache zu beheben, siehe [Wenn Sitzungen auf einem Runner mit dem Git-Proxy nicht starten](#when-anthropic-doesnt-serve-a-session).811* **Sitzungen starten nicht auf einem Runner, der `--use-anthropic-git-proxy` gesetzt hat**: Suchen Sie im Log des Runners nach `access denied by the git proxy` oder nach einem Git-Fehler, der eine `api.anthropic.com`-Adresse mit `/git_proxy/` nennt. Um festzustellen, ob Anthropic die Sitzung bedient hat, und die Ursache zu beheben, siehe [Wenn Sitzungen auf einem Runner mit dem Git-Proxy nicht starten](#when-anthropic-doesnt-serve-a-session).

688* **Sitzungen können das Netzwerk nicht durch einen authentifizierenden Egress-Proxy erreichen**: Wenn die Quelle, die Sie mit [`--proxy-authorization-command` oder `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) setzen, fehlschlägt, nach 30 Sekunden abläuft oder einen leeren Wert ergibt, antwortet der Runner dieser Verbindung `502 Bad Gateway` und protokolliert warum. Der Runner redigiert das Kommando's stderr in diesem Log und protokolliert niemals den Header-Wert. Mit `--proxy-authorization-command` führen Sie das Kommando selbst auf dem Host aus, um zu bestätigen, dass es den ganzen Header-Wert auf stdout druckt. Wenn der Runner stattdessen beim Start mit `could not start the proxy-authorization listener` beendet wird, konnte er seinen Loopback-Listener nicht öffnen.812* **Sitzungen können das Netzwerk nicht durch einen authentifizierenden Egress-Proxy erreichen**: Wenn die Quelle, die Sie mit [`--proxy-authorization-command` oder `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) setzen, fehlschlägt, nach 30 Sekunden abläuft oder einen leeren Wert ergibt, antwortet der Runner dieser Verbindung `502 Bad Gateway` und protokolliert warum. Der Runner redigiert das Kommando's stderr in diesem Log und protokolliert niemals den Header-Wert. Mit `--proxy-authorization-command` führen Sie das Kommando selbst auf dem Host aus, um zu bestätigen, dass es den ganzen Header-Wert auf stdout druckt. Wenn der Runner stattdessen beim Start mit `could not start the proxy-authorization listener` beendet wird, konnte er seinen Loopback-Listener nicht öffnen.

689* **Runner protokolliert `Poll failed`-Zeilen, die `rejecting the malformed poll response` enthalten**: Der Runner erhielt eine Work-Poll-Antwort, deren Body nicht das erwartete JSON der Warteschlange ist. Eine mögliche Ursache ist ein abfangender Proxy oder ein Captive Portal, der mit seiner eigenen Seite antwortet. Wenn sich der Runner über einen Proxy verbindet, konfigurieren Sie den Proxy so, dass er Antworten von `api.anthropic.com` unverändert durchlässt.813* **Runner protokolliert `Poll failed`-Zeilen, die `rejecting the malformed poll response` enthalten**: Der Runner erhielt eine Work-Poll-Antwort, deren Body nicht das erwartete JSON der Warteschlange ist. Eine mögliche Ursache ist ein abfangender Proxy oder ein Captive Portal, der mit seiner eigenen Seite antwortet. Wenn sich der Runner über einen Proxy verbindet, konfigurieren Sie den Proxy so, dass er Antworten von `api.anthropic.com` unverändert durchlässt.


708* **Eine Sitzung startet nicht mit `This runner couldn't read`**: Der Runner hat den Git-Host mit seinen [Git-Anmeldedaten](#configure-git) nach einem Repository gefragt und die Antwort erhalten, dass es nicht gefunden wurde. Das Repository existiert nicht, oder diese Anmeldedaten können das Repository nicht erreichen.832* **Eine Sitzung startet nicht mit `This runner couldn't read`**: Der Runner hat den Git-Host mit seinen [Git-Anmeldedaten](#configure-git) nach einem Repository gefragt und die Antwort erhalten, dass es nicht gefunden wurde. Das Repository existiert nicht, oder diese Anmeldedaten können das Repository nicht erreichen.

709 * **Wenn Sie den Runner administrieren**: Gewähren Sie seinen Git-Anmeldedaten Lesezugriff auf das Repository, und starten Sie dann eine neue Sitzung.833 * **Wenn Sie den Runner administrieren**: Gewähren Sie seinen Git-Anmeldedaten Lesezugriff auf das Repository, und starten Sie dann eine neue Sitzung.

710 * **Wenn Sie die Sitzung gestartet haben**: Wenn das Repository nicht existiert, starten Sie eine neue Sitzung mit dem richtigen Repository. Wenn der Runner das Repository nicht erreichen kann, bitten Sie den Administrator des Runners, Zugriff zu gewähren, und starten Sie dann eine neue Sitzung.834 * **Wenn Sie die Sitzung gestartet haben**: Wenn das Repository nicht existiert, starten Sie eine neue Sitzung mit dem richtigen Repository. Wenn der Runner das Repository nicht erreichen kann, bitten Sie den Administrator des Runners, Zugriff zu gewähren, und starten Sie dann eine neue Sitzung.

711* **Sitzungen dauern Minuten zum Start**: Der anfängliche Clone dominiert normalerweise. Beobachten Sie die `claude_code_self_hosted_runner_session_init_duration_seconds`-[Metrik](https://code.claude.com/docs/de/self-hosted-environments-reference.md#prometheus-metrics), um zu bestätigen, und schneiden Sie den Clone mit einem [vorgewärmten Checkout](#reuse-a-pre-warmed-checkout) oder einem kleineren `CLAUDE_RUNNER_FETCH_DEPTH`.835* **Sitzungen brauchen Minuten zum Starten oder Fortsetzen**: Eine Ursache ist ein frischer Clone. In einer Flotte, die jeden Runner auf einer leeren Festplatte startet, ohne [`checkout`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#checkout), klont der Runner die Repositorys der Sitzung neu, bevor er Claude Code startet. Eine Sitzung, die auf einer leeren Festplatte fortgesetzt wird, wartet erneut auf denselben Clone.

836 

837 Um den frischen Clone zu überspringen, stellen Sie einen [vorgewärmten Checkout](#reuse-a-pre-warmed-checkout) bereit. Wenn Sie bereits einen bereitstellen, [bestätigen Sie, dass der Runner ihn verwendet](#confirm-that-the-runner-uses-your-clone). Wo der Runner den Clone selbst erstellt und sich nach einer Sitzung beendet, senken Sie [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/de/self-hosted-environments-reference#environment-variable-only-settings) von seinem Standardwert von 50 Commits, um weniger Verlauf abzurufen.

838 

839 Wenn Sie einen Hook verwenden, läuft er anstelle des Clones des Runners, prüfen Sie also stattdessen, was Ihr Hook tut. Beobachten Sie die `claude_code_self_hosted_runner_session_init_duration_seconds`-[Metrik](https://code.claude.com/docs/de/self-hosted-environments-reference.md#prometheus-metrics), um zu sehen, wie lange Starts dauern.

712* **Turns schlagen mit einem 401 fehl**: Wenn ein Turn mit einem 401 oder 403 von der Anthropic API endet, ruft der Runner ein frisches [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/de/self-hosted-environments-configuration#wrapper-scripts) von Anthropic ab und übergibt es der Sitzung. Der fehlgeschlagene Turn wird nicht erneut versucht. Dieses Token ist kurzlebig, und der Runner rotiert es über die stdin der Sitzung.840* **Turns schlagen mit einem 401 fehl**: Wenn ein Turn mit einem 401 oder 403 von der Anthropic API endet, ruft der Runner ein frisches [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/de/self-hosted-environments-configuration#wrapper-scripts) von Anthropic ab und übergibt es der Sitzung. Der fehlgeschlagene Turn wird nicht erneut versucht. Dieses Token ist kurzlebig, und der Runner rotiert es über die stdin der Sitzung.

713 841 

714 Wenn ein Abruf fehlschlägt, protokolliert der Runner eine `inference_token refresh failed`-Zeile, die sagt, wann er erneut versuchen wird, und er versucht es weiterhin erneut, solange die Sitzung läuft.842 Wenn ein Abruf fehlschlägt, protokolliert der Runner eine `inference_token refresh failed`-Zeile, die sagt, wann er erneut versuchen wird, und er versucht es weiterhin erneut, solange die Sitzung läuft.


788 916 

789Für geführte Diagnose auf dem Runner-Host führen Sie den [Doctor-Subcommand](#troubleshooting) aus.917Für geführte Diagnose auf dem Runner-Host führen Sie den [Doctor-Subcommand](#troubleshooting) aus.

790 918 

919### Eine Sitzung wird aufgenommen, aber Claude beantwortet ihre erste Nachricht nie

920 

921Wenn ein Runner eine Sitzung aufnimmt, Claude aber nie auf die erste Nachricht antwortet, und Ihre Runner `api.anthropic.com` über einen Proxy erreichen, kann der Proxy die Ursache sein. Anthropic sendet einer Sitzung ihre Nachrichten über eine einzige Streaming-Antwort, die offen bleibt. Wenn Ihr Proxy sie puffert oder beendet, bevor er etwas weitergibt, kommt die erste Nachricht nie an. Andere Anfragen der Sitzung sind weiterhin erfolgreich.

922 

923Um das zu beheben, ändern Sie, wie der Proxy diese Anfrage behandelt:

924 

925```text theme={null}

926GET https://api.anthropic.com/v1/code/sessions/<session-id>/worker/events/stream

927```

928 

929* **Puffern Sie die Antwort nicht**: Reichen Sie sie so durch, wie sie eintrifft. Ihr Content-Type ist `text/event-stream`.

930* **Lassen Sie die Antwort offen**: Sie kann bis zu einer Stunde offen bleiben. Wenn der Proxy einen Leerlauf-Timeout hat, halten Sie ihn deutlich über 15 Sekunden, da Anthropic standardmäßig mindestens so oft ein Keep-alive sendet.

931 

932Starten Sie dann eine neue Sitzung und prüfen Sie, ob Claude antwortet. Das Erhöhen der Timeouts des Runners hilft nicht: Sie warten nur länger, bevor der Runner die Sitzung stoppt.

933 

934#### Bestätigen Sie die Ursache im Log des Runners

935 

936Diese Schritte gelten für Runner mit Claude Code v2.1.287 oder neuer auf der Standardstufe `--log-level info`. Ältere Runner protokollieren diese Zeilen später oder gar nicht.

937 

9381. Warten Sie, bis [`--startup-timeout-min`](https://code.claude.com/docs/de/self-hosted-environments-reference#runner-cli-flags) abgelaufen ist, standardmäßig 15 Minuten. Der Runner stoppt dann die Sitzung und protokolliert eine Zeile, die `no child output for` enthält und mit `— releasing` endet.

9392. Durchsuchen Sie das Log des Runners nach `SDKStartup: SSE`. Diese Zeilen folgen auf eine `finished: interrupted`-Zeile, einige Zeilen nach der aus Schritt 1. Die meisten haben keinen Zeitstempel, daher zeigt ein Log-Collector sie möglicherweise an anderer Stelle an.

9403. Suchen Sie die Zeile in dieser Tabelle:

941 

942| Log-Zeile enthält | Vorgehen |

943| :- | :- |

944| `SSE connect failed (no response in 30s)` oder `SSE liveness timeout` | Prüfen Sie, ob der Proxy die Anfrage weiterleitet, die Header und Daten der Antwort so durchreicht, wie sie eintreffen, und die Verbindung nicht trennt |

945| `SSE connect failed (HTTP` und ein Statuscode | Prüfen Sie das eigene Log des Proxys. Wenn der Proxy die Anfrage selbst beantwortet hat, lassen Sie die Anfrage durch ihn hindurch. |

946| `SSE connect failed (` und beliebiger anderer Text | Der Text in den Klammern ist der Fehler. Suchen Sie dieselbe Verbindung im eigenen Log des Proxys. |

947| `SSE stream ended by server`, immer wieder | Prüfen Sie das Zeitlimit des Proxys für langlebige Antworten. Eine einzelne solche Zeile ist normal. |

948| `SSE reconnected after` | Suchen Sie nach einer der anderen Zeilen danach. Diese Zeile bedeutet nicht, dass etwas die Sitzung erreicht hat. |

949 

950Wenn das Log keine dieser Zeilen enthält oder das Log des Proxys nichts Auffälliges zeigt, [melden Sie ein Problem](#report-an-issue).

951 

952#### Verhindern Sie, dass die Sitzung es erneut versucht

953 

954Die Sitzung hält die Nachricht ausstehend, und ein Runner, der den Owner der Sitzung bedienen kann, nimmt die Sitzung erneut auf. Bis Sie den Proxy ändern, wartet die Sitzung jedes Mal auf die gleiche Weise. Um das zu beenden, archivieren Sie die Sitzung in claude.ai/code.

955 

791## Was kommt als nächstes956## Was kommt als nächstes

792 957 

793* [Passen Sie Sitzungen an](https://code.claude.com/docs/de/self-hosted-environments-configuration.md): Wrapper-Skripte, Lebenszyklus-Hooks, On-Demand-Runner, MCP-Server und Berechtigungen958* [Passen Sie Sitzungen an](https://code.claude.com/docs/de/self-hosted-environments-configuration.md): Wrapper-Skripte, Lebenszyklus-Hooks, On-Demand-Runner, MCP-Server und Berechtigungen

Details

121* **Die Sitzung startet nicht und zeigt einen Git-Fehler**: Wenn der Fehler Gits `could not read Username for` gefolgt von der URL Ihres Git-Hosts enthält, hatte der Runner keine HTTPS-Anmeldedaten für diesen Host.121* **Die Sitzung startet nicht und zeigt einen Git-Fehler**: Wenn der Fehler Gits `could not read Username for` gefolgt von der URL Ihres Git-Hosts enthält, hatte der Runner keine HTTPS-Anmeldedaten für diesen Host.

122 * **HTTPS-Anmeldedaten bereitstellen**: Siehe [Git konfigurieren](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#configure-git)122 * **HTTPS-Anmeldedaten bereitstellen**: Siehe [Git konfigurieren](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#configure-git)

123 * **Stattdessen über SSH klonen**: Wenn der Runner-Host bereits einen SSH-Schlüssel hat, siehe [Git-URLs für private Netzwerke umschreiben](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)123 * **Stattdessen über SSH klonen**: Wenn der Runner-Host bereits einen SSH-Schlüssel hat, siehe [Git-URLs für private Netzwerke umschreiben](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)

124 * **Nach einer der beiden Korrekturen**: Starten Sie den Runner erneut und beobachten Sie die fehlgeschlagene Sitzung, statt eine neue zu starten. Wenn sie mehrmals fehlgeschlagen ist, warten Sie einige Minuten, bis der Runner `Picked up session` protokolliert.

125 * **Um stattdessen ein anderes Repository zu verwenden**: [Archivieren](https://code.claude.com/docs/de/claude-code-on-the-web.md#archive-sessions) oder [löschen](https://code.claude.com/docs/de/claude-code-on-the-web.md#delete-sessions) Sie die fehlgeschlagene Sitzung, starten Sie dann den Runner erneut und starten Sie eine neue Sitzung. Andernfalls kann der Runner die fehlgeschlagene Sitzung statt der neuen aufnehmen.

124 126 

125### Wenn der Runner sich beendet127### Wenn der Runner sich beendet

126 128 

Details

83 83 

84| Flag | Standard | Beschreibung |84| Flag | Standard | Beschreibung |

85| :- | :- | :- |85| :- | :- | :- |

86| `--hook-concurrency <n>` | `4` | Maximale `spawn-runner` Hooks, die parallel laufen. Begrenzt auch, wie viele Spawn-Anfragen pro Abfrage beansprucht werden. |86| `--hook-concurrency <n>` | `4` | Maximale `spawn-runner` Hooks, die parallel laufen. Begrenzt auch, wie viele Spawn-Anfragen pro Abfrage beansprucht werden. Der Orchestrator sucht erst dann nach neuen Spawn-Anfragen, wenn jeder von ihm gestartete Hook beendet ist, sodass ein langsamer Hook die nächsten Hooks dieses Orchestrators verzögert. |

87| `--hook-timeout <sec>` | `60` | Beenden Sie den Prozessbaum des Hooks nach dieser vielen Sekunden. Das Timeout plus seine 5-Sekunden-Kill-Gnadenfrist müssen unter `--expected-spawn-seconds` bleiben; der Orchestrator erzwingt dies beim Start. |87| `--hook-timeout <sec>` | `60` | Beenden Sie den Prozessbaum des Hooks nach dieser vielen Sekunden. Das Timeout plus seine 5-Sekunden-Kill-Gnadenfrist müssen unter `--expected-spawn-seconds` bleiben; der Orchestrator erzwingt dies beim Start. |

88| `--expected-spawn-seconds <sec>` | `120` | Erwartete p99-Zeit vom Empfang einer Spawn-Anfrage durch den Orchestrator bis zur Registrierung des Runners, einschließlich einer etwaigen Wartezeit auf Kapazität auf Ihrer Plattform. Der Server erzwingt einen Bereich von 10 bis 3600. Wird bei jeder Abfrage als Server-seitige Lease gesendet: Wenn sich kein Runner registriert, bevor sie verstreicht, wird die Sitzung mit einer frischen Bestellungs-ID erneut angeboten. Alle Replikas müssen diesen Wert teilen. |88| `--expected-spawn-seconds <sec>` | `120` | Erwartete p99-Zeit vom Empfang einer Spawn-Anfrage durch den Orchestrator bis zur Registrierung des Runners, einschließlich einer etwaigen Wartezeit auf Kapazität auf Ihrer Plattform. Der Server erzwingt einen Bereich von 10 bis 3600. Wird bei jeder Abfrage als Server-seitige Lease gesendet: Wenn sich kein Runner registriert, bevor sie verstreicht, wird die Sitzung mit einer frischen Bestellungs-ID erneut angeboten. Alle Replikas müssen diesen Wert teilen. |

89| `--min-idle <n>` | `0` | Halten Sie mindestens N untätige Session-Slots frei, indem Sie proaktiv Standby-Runner erzeugen. `0` deaktiviert Vorwärmung. Koppeln Sie mit dem `--exit-if-unused-min` des Runners, sodass überschüssige Standby-Runner sich selbst zurückfordern. |89| `--min-idle <n>` | `0` | Halten Sie mindestens N untätige Session-Slots frei, indem Sie proaktiv Standby-Runner erzeugen. `0` deaktiviert Vorwärmung. Koppeln Sie mit dem `--exit-if-unused-min` des Runners, sodass überschüssige Standby-Runner sich selbst zurückfordern. |


116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Wie lange der Runner wartet, nachdem eine Sitzung ihr `--kill-session-after-min` Limit erreicht hat, damit ein laufender Zug beendet wird oder die Freigabe abgeschlossen wird, bevor die Sitzung beendet wird |116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Wie lange der Runner wartet, nachdem eine Sitzung ihr `--kill-session-after-min` Limit erreicht hat, damit ein laufender Zug beendet wird oder die Freigabe abgeschlossen wird, bevor die Sitzung beendet wird |

117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Obergrenze für die Zeit, die der Runner eine Sitzung als beschäftigt für die `--drain-wait-sec` Entleerung nach Abschluss eines Zugs zählt, während der Prozess der Sitzung das Ende des Zugs an Anthropic meldet. `0` oder ein unbrauchbarer Wert fällt auf den Standard zurück, sodass die Sperre nicht ausgeschaltet werden kann. Erfordert Claude Code v2.1.275 oder später. |117| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Obergrenze für die Zeit, die der Runner eine Sitzung als beschäftigt für die `--drain-wait-sec` Entleerung nach Abschluss eines Zugs zählt, während der Prozess der Sitzung das Ende des Zugs an Anthropic meldet. `0` oder ein unbrauchbarer Wert fällt auf den Standard zurück, sodass die Sperre nicht ausgeschaltet werden kann. Erfordert Claude Code v2.1.275 oder später. |

118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Wie lange der Runner wartet, bis das Betriebssystem `SIGKILL` an ein Kind sendet, das in nicht unterbrechbarem I/O steckt, bevor es sich selbst beendet. Auf `--post-session-hook-timeout-sec` plus 15 Sekunden begrenzt, und 30 weitere, wenn `--push-outcome-on-release` gesetzt ist, sodass das effektive Minimum 75 Sekunden bei Standardwerten ist. |118| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Wie lange der Runner wartet, bis das Betriebssystem `SIGKILL` an ein Kind sendet, das in nicht unterbrechbarem I/O steckt, bevor es sich selbst beendet. Auf `--post-session-hook-timeout-sec` plus 15 Sekunden begrenzt, und 30 weitere, wenn `--push-outcome-on-release` gesetzt ist, sodass das effektive Minimum 75 Sekunden bei Standardwerten ist. |

119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Git-Fetch-Tiefe für frische Klone. Setzen Sie eine positive Ganzzahl oder `full` oder `0` für einen vollständigen Fetch. Repositories, die bereits im Arbeitsbereich vorhanden sind, behalten ihre bestehende Tiefe. |119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Git-Fetch-Tiefe für frische Klone. Setzen Sie eine positive Ganzzahl oder `full` oder `0` für einen vollständigen Fetch. Informationen zu einem Klon, der sich bereits im Arbeitsbereich befindet, finden Sie unter [Einen vorgewärmten Checkout wiederverwenden](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Wie lange in Millisekunden pro Versuch ein Git-Fetch auf seine ersten Daten warten darf, während die eigenen Fortschrittszahlen des Git-Servers weiter steigen, etwa wenn der Server das Pack für ein großes Repository vorbereitet. `0` oder `off` schaltet das Warten aus: Ein solcher Fetch wird dann nach zwei Minuten ohne Daten abgebrochen. Jede andere Ganzzahl wird auf einen Wert zwischen `120000` und `1800000` begrenzt, also 2 bis 30 Minuten. Erfordert Claude Code v2.1.295 oder später. |120| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Wie lange in Millisekunden pro Versuch ein Git-Fetch auf seine ersten Daten warten darf, während die eigenen Fortschrittszahlen des Git-Servers weiter steigen, etwa wenn der Server das Pack für ein großes Repository vorbereitet. `0` oder `off` schaltet das Warten aus: Ein solcher Fetch wird dann nach zwei Minuten ohne Daten abgebrochen. Jede andere Ganzzahl wird auf einen Wert zwischen `120000` und `1800000` begrenzt, also 2 bis 30 Minuten. Erfordert Claude Code v2.1.295 oder später. |

121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | nicht gesetzt | Wenn `1`, überspringen Sie die `.git` Präsenzprüfung, nachdem ein `checkout` Hook ausgeführt wird. Setzen Sie dies, wenn Ihr Hook eine Nicht-Git-Quelle materialisiert. |121| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | nicht gesetzt | Wenn `1`, überspringen Sie die `.git` Präsenzprüfung, nachdem ein `checkout` Hook ausgeführt wird. Setzen Sie dies, wenn Ihr Hook eine Nicht-Git-Quelle materialisiert. |

122| `FORCE_AUTOUPDATE_PLUGINS` | nicht gesetzt | Wenn `1`, lassen Sie Plugin-Marktplätze automatisch aktualisieren, obwohl die Binärdatei angeheftet ist |122| `FORCE_AUTOUPDATE_PLUGINS` | nicht gesetzt | Wenn `1`, lassen Sie Plugin-Marktplätze automatisch aktualisieren, obwohl die Binärdatei angeheftet ist |


152 152 

153## Prometheus-Metriken153## Prometheus-Metriken

154 154 

155Jeder Runner bedient Prometheus-Metriken bei `GET /metrics` auf demselben Port wie `/healthz`. Wichtige Reihen:155Jeder Runner stellt Prometheus-Metriken unter `GET /metrics` auf demselben Port wie `/healthz` bereit. Wichtige Serien:

156 156 

157| Reihe | Notizen |157| Serie | Hinweise |

158| :- | :- |158| :- | :- |

159| `claude_code_self_hosted_runner_info{runner_id,version,client_label}` | Immer `1`; nützlich für Fleet-Inventar und Versions-Drift-Erkennung |159| `claude_code_self_hosted_runner_info{runner_id,version,client_label}` | Immer `1`; nützlich für die Inventarisierung der Flotte und die Erkennung von Versionsabweichungen |

160| `claude_code_self_hosted_runner_capacity` | Konfiguriert `--capacity` |160| `claude_code_self_hosted_runner_capacity` | Konfigurierter Wert von `--capacity` |

161| `claude_code_self_hosted_runner_active_sessions` | Sitzungen, die derzeit laufen |161| `claude_code_self_hosted_runner_active_sessions` | Aktuell laufende Sitzungen |

162| `claude_code_self_hosted_runner_locked_account{email}` | Vorhanden, sobald sich der Runner auf einen Benutzer gesperrt hat und ein Session-Token mit einem `act.email` Anspruch ausgestellt wurde. Die Reihe fehlt auf einem Runner, der auf einen Claude Tag-Agent gesperrt ist, dessen Session-Tokens keinen `act.email` Anspruch tragen. Der Labelwert ist die Konto-E-Mail; wenn Ihr Metrik-Store weit lesbar ist, löschen oder hashen Sie das Label zum Scrape-Zeitpunkt, zum Beispiel mit Prometheus `metric_relabel_configs`. |162| `claude_code_self_hosted_runner_locked_account{email}` | Vorhanden, sobald der Runner an einen Benutzer gebunden wurde und ein Sitzungs-Token mit einem `act.email`-Claim ausgestellt wurde. Auf einem Runner, der an einen Claude Tag-Agenten gebunden ist, fehlt die Serie, da dessen Sitzungs-Token kein `act.email` enthalten. Der Labelwert ist die E-Mail-Adresse des Kontos; wenn Ihr Metrikspeicher allgemein lesbar ist, verwerfen oder hashen Sie das Label beim Scrapen, zum Beispiel mit Prometheus `metric_relabel_configs`. |

163| `claude_code_self_hosted_runner_last_poll_age_seconds` | Sekunden seit der letzten erfolgreichen Abfrage. Warnung, wenn über 60. |163| `claude_code_self_hosted_runner_last_poll_age_seconds` | Sekunden seit dem letzten erfolgreichen Poll. Alarmieren Sie bei einem Wert über 60. |

164| `claude_code_self_hosted_runner_poll_errors_total{error_kind}` | Kumulative PollWork-Fehler nach Art: `transport`, `timeout`, `5xx`, `429` oder `4xx`. Alle fünf Reihen sind vom Prozessstart vorhanden; Warnung bei `rate(...[5m]) > 0`. |164| `claude_code_self_hosted_runner_poll_errors_total{error_kind}` | Kumulierte PollWork-Fehler nach Art: `transport`, `timeout`, `5xx`, `429` oder `4xx`. Alle fünf Serien sind ab Prozessstart vorhanden; alarmieren Sie bei `rate(...[5m]) > 0`. |

165| `claude_code_self_hosted_runner_sessions_started_total{client_platform}` | Session-Kindprozesse, die über die Lebensdauer des Runners erzeugt wurden, eine Reihe pro Session-Ursprung wie `web_claude_ai`, `ios`, `android`, `desktop_app` oder `claude_code_cli`, oder `unknown`, wenn der Server einen nicht gesendet hat. Slack-Sitzungen tragen entweder `claude_in_slack` oder `claude-in-slack`, je nachdem, welche Slack-Integration sie erstellt hat, also passen Sie beide mit einem Regex-Selektor wie `{client_platform=~"claude[-_]in[-_]slack"}` an. Verwenden Sie `sum()` für die Fleet-Summe. |165| `claude_code_self_hosted_runner_sessions_started_total{client_platform}` | Über die Lebensdauer des Runners gestartete Kindprozesse von Sitzungen, eine Serie pro Sitzungsursprung wie `web_claude_ai`, `ios`, `android`, `desktop_app` oder `claude_code_cli`, oder `unknown`, wenn der Server keinen Ursprung gesendet hat. Slack-Sitzungen tragen je nach der Slack-Integration, die sie erstellt hat, entweder `claude_in_slack` oder `claude-in-slack`; erfassen Sie daher beide mit einem Regex-Selektor wie `{client_platform=~"claude[-_]in[-_]slack"}`. Verwenden Sie `sum()` für die Gesamtsumme der Flotte. |

166| `claude_code_self_hosted_runner_sessions_completed_total{client_platform}` | Sitzungen, die sauber endeten, mit denselben Labels. Breiter als ein einfacher sauberer Ausstieg: siehe [Session-Lebenszyklus-Zähler-Semantik](#session-lifecycle-counter-semantics) für das, was zählt. |166| `claude_code_self_hosted_runner_sessions_completed_total{client_platform}` | Sitzungen, die sauber beendet wurden, gleich gelabelt. Weiter gefasst als ein einfacher sauberer Exit: Was hier zählt, finden Sie unter [Semantik der Zähler für den Sitzungslebenszyklus](#session-lifecycle-counter-semantics). |

167| `claude_code_self_hosted_runner_sessions_failed_total{client_platform}` | Sitzungen, die in Fehler endeten, mit denselben Labels. Gleicher Vorbehalt: siehe [Session-Lebenszyklus-Zähler-Semantik](#session-lifecycle-counter-semantics). |167| `claude_code_self_hosted_runner_sessions_failed_total{client_platform}` | Sitzungen, die mit einem Fehler endeten, gleich gelabelt. Gleicher Vorbehalt: siehe [Semantik der Zähler für den Sitzungslebenszyklus](#session-lifecycle-counter-semantics). |

168| `claude_code_self_hosted_runner_sessions_interrupted_total{client_platform}` | Sitzungen, die der Runner aus operativen Gründen beendete, anstatt aus einem Session-Ergebnis oder Runner-Fehler, mit denselben Labels. Siehe [Session-Lebenszyklus-Zähler-Semantik](#session-lifecycle-counter-semantics). |168| `claude_code_self_hosted_runner_sessions_interrupted_total{client_platform}` | Sitzungen, die der Runner aus einem betrieblichen Grund statt wegen eines Sitzungsergebnisses beendet hat, gleich gelabelt. Siehe [Semantik der Zähler für den Sitzungslebenszyklus](#session-lifecycle-counter-semantics). |

169| `claude_code_self_hosted_runner_initializing_sessions` | Sitzungen, die sich derzeit in der Init-Phase befinden, von der Zuweisung bis zum Init-Ereignis des Kindes |169| `claude_code_self_hosted_runner_initializing_sessions` | Sitzungen, die sich aktuell in der Init-Phase befinden, von der Zuweisung bis zum Init-Ereignis des Kindprozesses |

170| `claude_code_self_hosted_runner_session_init_duration_seconds` | Histogramm der Session-Init-Dauern |170| `claude_code_self_hosted_runner_session_init_duration_seconds` | Histogramm der Init-Dauern von Sitzungen |

171| `claude_code_self_hosted_runner_session_init_errors_total` | Sitzungen, die vor Erreichen von Init fehlschlugen: ein Checkout-Hook-Fehler, Git-Vorbereitung, Token-Problem oder ein Pre-Init-Kind-Crash |171| `claude_code_self_hosted_runner_session_init_errors_total` | Sitzungen, die vor Erreichen von Init fehlgeschlagen sind: ein Fehler im Checkout-Hook, bei der Git-Vorbereitung, ein Token-Problem oder ein Absturz des Kindprozesses vor Init |

172| `claude_code_self_hosted_runner_session_start_hook_errors_total` | `SessionStart` Hooks, die ein Fehler-Ergebnis meldeten, einer pro fehlgeschlagener Hook-Ausführung |172| `claude_code_self_hosted_runner_session_start_hook_errors_total` | `SessionStart`-Hooks, die ein Fehlerergebnis gemeldet haben, einer pro fehlgeschlagener Hook-Ausführung |

173| `claude_code_self_hosted_runner_session_idle_seconds{session_id,client_platform}` | Pro-Session-Gauge von Sekunden, seit die Sitzung untätig wurde. Nützlich zum Beenden von Sitzungen, die auf einer unbeantworteten Berechtigungsaufforderung stecken. |173| `claude_code_self_hosted_runner_session_idle_seconds{session_id,client_platform}` | Gauge pro Sitzung mit den Sekunden, seit die Sitzung inaktiv wurde. Nützlich, um Sitzungen zu beenden, die an einer unbeantworteten Berechtigungsabfrage hängen. |

174 174 

175Der Orchestrator bedient seine eigenen Reihen bei `GET /metrics` auf demselben Port wie sein `/healthz`:175Der Orchestrator stellt seine eigenen Serien unter `GET /metrics` auf demselben Port wie sein `/healthz` bereit:

176 176 

177| Reihe | Notizen |177| Serie | Hinweise |

178| :- | :- |178| :- | :- |

179| `claude_code_self_hosted_orchestrator_info{version,pool_id,orchestrator_uuid,hostname}` | Immer `1` |179| `claude_code_self_hosted_orchestrator_info{version,pool_id,orchestrator_uuid,hostname}` | Immer `1` |

180| `claude_code_self_hosted_orchestrator_connected` | `1`, wenn die letzte Abfrage erfolgreich war; fällt auf `0` nach jeder fehlgeschlagenen Abfrage, unabhängig von der Fehlerart |180| `claude_code_self_hosted_orchestrator_connected` | `1`, wenn der letzte Poll erfolgreich war; fällt nach jedem fehlgeschlagenen Poll auf `0`, unabhängig von der Art des Fehlers |

181| `claude_code_self_hosted_orchestrator_last_poll_age_seconds` | Sekunden seit dem letzten Abfrageversuch, Erfolg oder Fehler, anders als die identisch benannte Metrik des Runners, die seit dem letzten Erfolg misst; koppeln Sie mit `connected`, um fehlgeschlagene Abfragen zu erfassen. Die Abfrageschleife des Orchestrators wartet auf Hook-Ausführung, also Warnung über `--hook-timeout` plus eine Marge, etwa 90 Sekunden bei Standardwerten, anstatt einer flachen 60. |181| `claude_code_self_hosted_orchestrator_last_poll_age_seconds` | Sekunden seit dem letzten Poll-Versuch, ob erfolgreich oder fehlgeschlagen – anders als die gleichnamige Metrik des Runners, die ab dem letzten Erfolg misst; kombinieren Sie sie mit `connected`, um fehlschlagende Polls zu erkennen. Die Poll-Schleife des Orchestrators wartet auf die Hook-Ausführung; alarmieren Sie daher oberhalb von `--hook-timeout` plus einer Marge, bei Standardwerten etwa 90 Sekunden, statt pauschal bei 60. |

182| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Kumulative PollSpawnHints-Fehler nach Art: `transport`, `timeout`, `5xx`, `429` oder `4xx`. Alle fünf Reihen sind vom Prozessstart vorhanden; Warnung bei `rate(...[5m]) > 0`. |182| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Kumulierte PollSpawnHints-Fehler nach Art: `transport`, `timeout`, `5xx`, `429` oder `4xx`. Alle fünf Serien sind ab Prozessstart vorhanden; alarmieren Sie bei `rate(...[5m]) > 0`. |

183| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Spawn-Anfragen, die jetzt beanspruchbar sind |183| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Spawn-Anfragen, die aktuell übernommen werden können |

184| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Spawn-Anfragen in Retry-Backoff nach einem wiederholbaren Hook-Fehler |184| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Spawn-Anfragen im Backoff für Wiederholungsversuche nach einem wiederholbaren Hook-Fehler |

185| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Sitzungen, deren Erzeugung blockiert ist. Jede bleibt blockiert, bis ein Benutzer ihr eine neue Nachricht sendet oder ein Owner sie über die Registerkarte **Aktivität** der Umgebung erneut versucht. Der Wert kann über Null bleiben, nachdem Sie die Ursache behoben haben. Warnung, wenn über Null. |185| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Sitzungen, deren Start blockiert ist. Jede bleibt blockiert, bis ein Benutzer ihr eine neue Nachricht sendet oder ein Owner sie über den Tab **Activity** der Umgebung erneut versucht. Der Wert kann über null bleiben, nachdem Sie die Ursache behoben haben. Alarmieren Sie bei einem Wert über null. |

186| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Gesamtsitzungen, die auf einen Runner für diese Umgebung warten. Umgebungsweites Aggregat, identisch auf jeder Orchestrator-Instanz: Verwenden Sie `MAX` statt `SUM` über Instanzen. |186| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Gesamtzahl der Sitzungen, die in dieser Umgebung auf einen Runner warten. Umgebungsweites Aggregat, identisch auf jeder Orchestrator-Instanz: Verwenden Sie über Instanzen hinweg `MAX` statt `SUM`. |

187| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sitzungen, die derzeit einem lebenden Runner in dieser Umgebung zugewiesen sind. Umgebungsweites Aggregat, identisch auf jeder Orchestrator-Instanz: Verwenden Sie `MAX` statt `SUM` über Instanzen. |187| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sitzungen, die aktuell einem aktiven Runner in dieser Umgebung zugewiesen sind. Umgebungsweites Aggregat, identisch auf jeder Orchestrator-Instanz: Verwenden Sie über Instanzen hinweg `MAX` statt `SUM`. |

188| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Kumulative `spawn-runner` Hook-Ergebnisse: `ok`, `retryable`, `non_retryable`. Zählt Orchestrator-Hook-Aufrufe, nicht Session-Kinder, die die Runner erzeugen: nicht vergleichbar mit `sessions_started_total`, da Kapazität über eins, warme Pools und Runner, die erneut für dieselbe Sitzung erzeugt werden, die beiden divergieren. |188| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Kumulierte Ergebnisse des `spawn-runner`-Hooks: `ok`, `retryable`, `non_retryable`. Zählt Hook-Aufrufe des Orchestrators, nicht die von den Runnern gestarteten Kindprozesse von Sitzungen: nicht vergleichbar mit `sessions_started_total`, da eine Kapazität über eins, Warm-Pools und für dieselbe Sitzung erneut gestartete Runner die beiden Werte auseinanderlaufen lassen. |

189| `claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds` | Histogramm der Hook-Dauern |189| `claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds` | Histogramm der Hook-Dauern |

190| `claude_code_self_hosted_orchestrator_warm_hints_dispatched_total` | Standby-Spawn-Anfragen, die seit Prozessstart versendet wurden |190| `claude_code_self_hosted_orchestrator_warm_hints_dispatched_total` | Seit Prozessstart versendete Standby-Spawn-Anfragen |

191| `claude_code_self_hosted_orchestrator_session_queue_wait_seconds` | Histogramm von Sekunden, die jede Sitzung in der Warteschlange wartete, bevor der Orchestrator sie zum Erzeugen beanspruchte, aufgezeichnet vom Queue-Wait-Zeitstempel, den die Kontrolleben mit jeder Spawn-Anfrage der Sitzung sendet. Verwenden Sie für p50/p99 Queue-Zeit-Warnungen. Vorwärm-Spawns werden nicht gesampelt. |191| `claude_code_self_hosted_orchestrator_session_queue_wait_seconds` | Histogramm der Sekunden, die jede Sitzung in der Warteschlange gewartet hat, bevor der Orchestrator sie zum Starten übernommen hat, erfasst anhand des Wartezeit-Zeitstempels, den die Steuerungsebene mit der Spawn-Anfrage jeder Sitzung sendet. Verwenden Sie es für Alarme auf p50/p99 der Wartezeit. Starts zum Vorwärmen werden nicht erfasst. |

192| `claude_code_self_hosted_orchestrator_clock_skew_seconds` | Lokale-minus-Server-Uhr-Skew; diagnostisch, vorhanden, sobald gemessen |192| `claude_code_self_hosted_orchestrator_clock_skew_seconds` | Uhrenabweichung lokal minus Server; diagnostisch, vorhanden, sobald gemessen |

193| `claude_code_self_hosted_orchestrator_scm_connector_connected` | `1`, wenn der [SCM-Connector](#scm-connector-flags) WebSocket offen ist; `0` während Wählen oder Backoff. Fehlt, wenn `--scm-connector-host` nicht gesetzt ist. |193| `claude_code_self_hosted_orchestrator_scm_connector_connected` | `1`, wenn der WebSocket des [SCM-Konnektors](#scm-connector-flags) geöffnet ist; `0` während des Verbindungsaufbaus oder im Backoff. Fehlt, wenn `--scm-connector-host` nicht gesetzt ist. |

194| `claude_code_self_hosted_orchestrator_scm_connector_requests_forwarded_total` | Kumulative HTTP-Anfragen, die seit Prozessstart zum konfigurierten SCM-Host weitergeleitet wurden. Fehlt, wenn `--scm-connector-host` nicht gesetzt ist. |194| `claude_code_self_hosted_orchestrator_scm_connector_requests_forwarded_total` | Kumulierte HTTP-Anfragen, die seit Prozessstart an den konfigurierten SCM-Host weitergeleitet wurden. Fehlt, wenn `--scm-connector-host` nicht gesetzt ist. |

195 195 

196Für Autoscaling wählen Sie die Reihe, die zu Ihrem Skalierungsstil passt, und gaten Sie sie, bevor sie den Scaler speist:196Wählen Sie für das Autoscaling die Serie, die zu Ihrer Skalierungsart passt, und filtern Sie sie, bevor sie in den Scaler eingespeist wird:

197 197 

198* **Queue-Tiefe-Skalierung**: Speisen Sie `claude_code_self_hosted_orchestrator_pool_pending_sessions` in Ihren HPA- oder KEDA-Scaler, nicht `queue_pending_sessions`.198* **Skalierung nach Warteschlangentiefe**: Speisen Sie `claude_code_self_hosted_orchestrator_pool_pending_sessions` in Ihren HPA- oder KEDA-Scaler ein, nicht `queue_pending_sessions`.

199* **Kapazitäts-Skalierung**: Skalieren Sie auf das Verhältnis der `active_sessions` des Runners zu `capacity`.199* **Skalierung nach Kapazität**: Skalieren Sie anhand des Verhältnisses von `active_sessions` zu `capacity` des Runners.

200* **Gate auf `connected`**: Filtern Sie die Abfrage mit `claude_code_self_hosted_orchestrator_connected == 1` pro Instanz, sodass der veraltete Wert eines getrennten Replikas nicht den Scaler speist.200* **Filtern nach `connected`**: Filtern Sie die Abfrage pro Instanz mit `claude_code_self_hosted_orchestrator_connected == 1`, damit der veraltete Wert eines getrennten Replikats nicht in den Scaler gelangt.

201 201 

202Während eines vollständigen Abfrageausfalls, jedes Replikat getrennt, gibt die gated-Abfrage keine Daten zurück. HPA hält die aktuelle Replikaanzahl bei einer fehlenden Metrik, aber KADAs Prometheus-Scaler bei seinem Standard `ignoreNullValues: "true"` liest das leere Ergebnis als Null und skaliert ein; setzen Sie `ignoreNullValues: "false"` auf dem ScaledObject, optional mit einem `fallback` Replikafloor.202Bei einem vollständigen Poll-Ausfall, bei dem alle Replikate getrennt sind, liefert die gefilterte Abfrage keine Daten. HPA behält bei einer fehlenden Metrik die aktuelle Replikatanzahl bei, der Prometheus-Scaler von KEDA liest das leere Ergebnis bei seinem Standardwert `ignoreNullValues: "true"` jedoch als null und skaliert herunter; setzen Sie `ignoreNullValues: "false"` im ScaledObject, optional mit einer `fallback`-Untergrenze für Replikate.

203 203 

204Der folgende Prometheus Operator `PodMonitor` deckt beide Prozesse ab. Er wählt Pods nach dem Label `app.kubernetes.io/part-of: claude-code-self-hosted-runner` und dem benannten Port `health`, den das [Kubernetes-Rezept](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#kubernetes) setzt; passen Sie die Namespaces an Ihre Bereitstellung an:204Der folgende `PodMonitor` für den Prometheus Operator deckt beide Prozesse ab. Er wählt Pods anhand des Labels `app.kubernetes.io/part-of: claude-code-self-hosted-runner` und des benannten Ports `health` aus, die das [Kubernetes-Rezept](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#kubernetes) festlegt; passen Sie die Namespaces an Ihr Deployment an:

205 205 

206```yaml theme={null}206```yaml theme={null}

207# Beispiel Prometheus Operator PodMonitor für den Claude Code Self-Hosted207# Example Prometheus Operator PodMonitor for the Claude Code self-hosted

208# Runner + Orchestrator. Passen Sie die Namespace- und Label-Selektoren an Ihre208# runner + orchestrator. Adjust the namespace and label selectors to match

209# Bereitstellung an. Sowohl der Runner als auch der Orchestrator bedienen /metrics auf209# your deployment. Both the runner and the orchestrator serve /metrics on

210# ihrem --health-port (Standard 8080).210# their --health-port (default 8080).

211apiVersion: monitoring.coreos.com/v1211apiVersion: monitoring.coreos.com/v1

212kind: PodMonitor212kind: PodMonitor

213metadata:213metadata:


219 - claude-runners219 - claude-runners

220 selector:220 selector:

221 matchExpressions:221 matchExpressions:

222 # Passt die Runner-Bereitstellung aus dem Kubernetes-Rezept sowie alle222 # Matches the runner Deployment from the Kubernetes recipe, plus any

223 # On-Demand-Runner-Jobs und Orchestrator-Pods an, die Sie gleich beschriften223 # on-demand runner Jobs and orchestrator pods you label the same way

224 # und einen benannten 'health' containerPort geben.224 # and give a named 'health' containerPort.

225 - key: app.kubernetes.io/part-of225 - key: app.kubernetes.io/part-of

226 operator: In226 operator: In

227 values: [claude-code-self-hosted-runner]227 values: [claude-code-self-hosted-runner]


231 interval: 30s231 interval: 30s

232```232```

233 233 

234Diese Beispiel-Warnregeln sind ein Ausgangspunkt; stimmen Sie die Schwellwerte für Ihre Fleet-Größe ab:234### Beispiel-Alarmregeln

235 

236Diese Beispiel-Alarmregeln sind ein Ausgangspunkt; passen Sie die Schwellenwerte an die Größe Ihrer Flotte an:

235 237 

236```yaml theme={null}238```yaml theme={null}

237# Beispiel Prometheus-Warnregeln für den Claude Code Self-Hosted Runner239# Example Prometheus alert rules for the Claude Code self-hosted runner

238# + Orchestrator. Stimmen Sie die Schwellwerte für Ihre Fleet-Größe und SLOs ab.240# + orchestrator. Tune thresholds for your fleet size and SLOs.

239groups:241groups:

240 - name: claude-code-self-hosted-runner242 - name: claude-code-self-hosted-runner

241 rules:243 rules:


244 for: 2m246 for: 2m

245 labels: {severity: warning}247 labels: {severity: warning}

246 annotations:248 annotations:

247 summary: "Runner {{ $labels.pod }} hat nicht in >60s abgefragt"249 summary: "Runner {{ $labels.pod }} has not polled in >60s"

248 - alert: ClaudeRunnerVersionDrift250 - alert: ClaudeRunnerVersionDrift

249 expr: count(count by (version) (claude_code_self_hosted_runner_info)) > 1251 expr: count(count by (version) (claude_code_self_hosted_runner_info)) > 1

250 for: 30m252 for: 30m

251 labels: {severity: info}253 labels: {severity: info}

252 annotations:254 annotations:

253 summary: "Runner führen gemischte Versionen aus"255 summary: "Runners are running mixed versions"

254 - alert: ClaudeRunnerInitErrorsHigh256 - alert: ClaudeRunnerInitErrorsHigh

255 expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3257 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_init_errors_total[10m])) > 3

256 for: 5m258 for: 5m

257 labels: {severity: warning}259 labels: {severity: warning}

258 annotations:260 annotations:

259 summary: "Runner {{ $labels.pod }}: >3 Session-Init-Fehler in 10m (Checkout-Hook / Git / Token / Pre-Init-Kind-Crash)"261 summary: "Sessions are failing before init (checkout hook / git / token / pre-init crash)"

260 - alert: ClaudeRunnerPollErrors262 - alert: ClaudeRunnerPollErrors

261 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0263 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0

262 for: 2m264 for: 2m

263 labels: {severity: warning}265 labels: {severity: warning}

264 annotations:266 annotations:

265 summary: "Runner {{ $labels.pod }}: PollWork fehlgeschlagen ({{ $value | humanize }}/s über 5m)"267 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"

266 - alert: ClaudeRunnerSessionStartHookErrors268 - alert: ClaudeRunnerSessionStartHookErrors

267 expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3269 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m])) > 3

268 for: 5m270 for: 5m

269 labels: {severity: warning}271 labels: {severity: warning}

270 annotations:272 annotations:

271 summary: "Runner {{ $labels.pod }}: >3 SessionStart-Hook-Fehler in 10m"273 summary: "SessionStart hooks are failing"

272 274 

273 - name: claude-code-self-hosted-orchestrator275 - name: claude-code-self-hosted-orchestrator

274 rules:276 rules:


277 for: 2m279 for: 2m

278 labels: {severity: critical}280 labels: {severity: critical}

279 annotations:281 annotations:

280 summary: "Orchestrator {{ $labels.pod }} kann die Anthropic-Kontrollebene nicht erreichen"282 summary: "Orchestrator {{ $labels.pod }} cannot reach the Anthropic control plane"

281 - alert: ClaudeOrchestratorPollStale283 - alert: ClaudeOrchestratorPollStale

282 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90284 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90

283 for: 2m285 for: 2m

284 labels: {severity: warning}286 labels: {severity: warning}

285 annotations:287 annotations:

286 summary: "Orchestrator {{ $labels.pod }} hat nicht in >90s abgefragt (Abfrageschleife wartet auf Hook-Ausführung)"288 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"

287 - alert: ClaudeOrchestratorCircuitBroken289 - alert: ClaudeOrchestratorCircuitBroken

288 expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0290 expr: max by (namespace) (claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions and on (instance) max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1) > 0

289 for: 1m291 for: 1m

290 labels: {severity: critical}292 labels: {severity: critical}

291 annotations:293 annotations:

292 summary: "Sitzungen mit blockierter Erzeugung: {{ $value }}. Lesen Sie den Fehler jeder Sitzung auf der Registerkarte Aktivität, beheben Sie die Ursache und wählen Sie dann Retry"294 summary: "Sessions blocked from spawning: {{ $value }}. Read each one's error in the Activity tab, fix the cause, then select Retry"

293 - alert: ClaudeOrchestratorPollErrors295 - alert: ClaudeOrchestratorPollErrors

294 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0296 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

295 for: 2m297 for: 2m

296 labels: {severity: warning}298 labels: {severity: warning}

297 annotations:299 annotations:

298 summary: "Orchestrator {{ $labels.pod }}: PollSpawnHints fehlgeschlagen ({{ $value | humanize }}/s über 5m)"300 summary: "Orchestrator {{ $labels.pod }}: PollSpawnHints failing ({{ $value | humanize }}/s over 5m)"

299 - alert: ClaudeOrchestratorSpawnHookFailing301 - alert: ClaudeOrchestratorSpawnHookFailing

300 expr: sum by (pod) (increase(claude_code_self_hosted_orchestrator_spawn_hooks_total{result!="ok"}[5m])) > 3302 expr: sum by (pod) (increase(claude_code_self_hosted_orchestrator_spawn_hooks_total{result!="ok"}[5m])) > 3

301 for: 5m303 for: 5m

302 labels: {severity: warning}304 labels: {severity: warning}

303 annotations:305 annotations:

304 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner Hook-Fehler in 5m"306 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"

305```307```

306 308 

307### Durchlauf-Session-Kind-Metriken309### Bei verlorenen Runnern und wartenden Sitzungen alarmieren

310 

311Laden Sie bei einer [festen Flotte](https://code.claude.com/docs/de/self-hosted-environments-deploy.md#scale-the-fleet) `ClaudeRunnersBelowFloor`. Laden Sie bei [On-Demand-Runnern](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners) stattdessen `ClaudeOrchestratorSessionsWaiting` und `ClaudeOrchestratorQueueWaitHigh`.

312 

313#### Alarmieren, wenn eine feste Flotte Runner verliert

314 

315`ClaudeRunnersBelowFloor` wird ausgelöst, wenn 10 Minuten lang weniger registrierte und gescrapte Runner als die Untergrenze übrig sind:

316 

317```yaml theme={null}

318groups:

319 # Fixed fleets only. With on-demand runners the count follows demand,

320 # so ClaudeRunnersBelowFloor would fire whenever demand is low.

321 - name: claude-code-self-hosted-fixed-fleet-capacity

322 rules:

323 - alert: ClaudeRunnersBelowFloor

324 expr: (count(claude_code_self_hosted_runner_info{namespace="claude-runners"}) or vector(0)) < 2

325 for: 10m

326 labels: {severity: critical, namespace: claude-runners}

327 annotations:

328 summary: "Runners registered and scraped: {{ $value }}, below the floor. Check the runner workloads first, then the scrape targets if all are running."

329```

330 

331* **Untergrenze**: Setzen Sie die `2` in `expr` auf etwa die Hälfte Ihrer Replikatanzahl, aufgerundet. Behalten Sie bei drei Replikaten `2` bei; der Alarm wird dann ausgelöst, wenn nur noch ein Runner oder keiner übrig ist.

332* **Namespace**: Ersetzen Sie `claude-runners` im Matcher und in `labels`, und kopieren Sie den Alarm für jeden weiteren Namespace. Wenn Ihre Ziele kein `namespace`-Label haben, entfernen Sie den Matcher und das Label, da der Alarm sonst 0 liest und ausgelöst wird.

333* **`ClaudeRunnerPollStale` und `ClaudeRunnerPollErrors`**: Lassen Sie diese aus den [Beispiel-Alarmregeln](#sample-alert-rules) geladen, da `ClaudeRunnersBelowFloor` einen Runner, der nicht pollen kann, weiterhin mitzählt

334 

335#### Alarmieren, wenn Sitzungen auf On-Demand-Runner warten

336 

337`ClaudeOrchestratorSessionsWaiting` wird ausgelöst, wenn die Anzahl der Sitzungen, die auf einen Runner warten, 10 Minuten lang über 0 bleibt. `ClaudeOrchestratorQueueWaitHigh` wird ausgelöst, wenn mehr als 1 % der Wartezeiten in der Warteschlange in den letzten 10 Minuten 160 Sekunden überschritten haben und dies 5 Minuten lang anhält:

338 

339```yaml theme={null}

340groups:

341 # On-demand runners only. Needs no edit for the namespace.

342 - name: claude-code-self-hosted-on-demand-capacity

343 rules:

344 - alert: ClaudeOrchestratorSessionsWaiting

345 expr: |

346 max by (namespace) (

347 claude_code_self_hosted_orchestrator_pool_pending_sessions

348 and on (instance)

349 max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1

350 ) > 0

351 for: 10m

352 labels: {severity: warning}

353 annotations:

354 summary: "Sessions waiting for a runner: {{ $value }}, above the threshold for 10 minutes. Check claude_code_self_hosted_orchestrator_spawn_hooks_total by result, then runner workloads that don't start."

355 - alert: ClaudeOrchestratorQueueWaitHigh

356 expr: |

357 histogram_quantile(0.99, sum by (namespace, le) (

358 rate(claude_code_self_hosted_orchestrator_session_queue_wait_seconds_bucket[10m])

359 )) > 160

360 for: 5m

361 labels: {severity: warning}

362 annotations:

363 summary: "Over 1% of queue waits in the last 10 minutes exceeded 160 seconds. Check whether ClaudeOrchestratorDisconnected is firing, then claude_code_self_hosted_orchestrator_spawn_hooks_total by result and claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds."

364```

365 

366* **Schwellenwert**: Wenn ständig irgendeine Sitzung wartet, erhöhen Sie das `> 0` in `ClaudeOrchestratorSessionsWaiting` über die Anzahl, die Sie üblicherweise sehen

367* **`ClaudeOrchestratorDisconnected`**: Lassen Sie diesen Alarm aus den [Beispiel-Alarmregeln](#sample-alert-rules) geladen, da `ClaudeOrchestratorSessionsWaiting` etwa 2 Minuten, nachdem der letzte Orchestrator im Namespace die Verbindung verloren hat, nicht mehr ausgelöst wird

368 

369### Metriken der Sitzungs-Kindprozesse durchreichen

308 370 

309Jede Sitzung läuft in ihrem eigenen Kind-Prozess mit ihren eigenen OpenTelemetry-Metriken; bei `--capacity` über eins schreibt der Runner um, wie diese Kind-Metriken verfügbar gemacht werden. Das Setzen von `OTEL_METRICS_EXPORTER=prometheus` auf dem Runner-Host und `CLAUDE_CODE_ENABLE_TELEMETRY=1` in der Umgebung der Sitzung, zum Beispiel aus Ihrem [Wrapper-Skript](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#wrapper-scripts) oder der Umgebung des Runners selbst, die Sitzungen erben, macht die Zähler- und Gauge-Instrumente jedes Kindes auf dem `/metrics` Endpunkt des Runners erneut verfügbar, neben den Reihen des Runners. Der Runner schreibt den Exporter des Kindes um, um über OTLP zu einem Loopback-only-Receiver auf dem Health-Port zu pushen, markiert jede Reihe mit `session_id`- und `client_platform`-Labels und entfernt die Reihen einer Sitzung, wenn diese Sitzung endet. Histogramme gehen nicht durch, und eine Kind-Metrik, deren Name mit dem eigenen Präfix des Runners kollidieren würde, wird gelöscht.371Jede Sitzung läuft in ihrem eigenen Kindprozess mit eigenen OpenTelemetry-Metriken; bei einem `--capacity`-Wert über eins schreibt der Runner um, wie diese Metriken der Kindprozesse bereitgestellt werden. Wenn Sie `OTEL_METRICS_EXPORTER=prometheus` auf dem Runner-Host und `CLAUDE_CODE_ENABLE_TELEMETRY=1` in der Umgebung der Sitzung setzen, zum Beispiel über Ihr [Wrapper-Skript](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#wrapper-scripts) oder die eigene Umgebung des Runners, die Sitzungen erben, werden die Counter- und Gauge-Instrumente jedes Kindprozesses zusätzlich auf dem eigenen `/metrics`-Endpunkt des Runners neben den Serien des Runners bereitgestellt. Der Runner schreibt den Exporter des Kindprozesses so um, dass er per OTLP an einen nur über Loopback erreichbaren Empfänger auf dem Health-Port sendet, versieht jede Serie mit den Labels `session_id` und `client_platform` und entfernt die Serien einer Sitzung, wenn diese Sitzung endet. Histogramme werden nicht durchgereicht, und eine Metrik des Kindprozesses, deren Name mit dem eigenen Präfix des Runners kollidieren würde, wird verworfen.

310 372 

311Bei der Standard `--capacity 1` gilt die Umschreibung nicht: Das Kind des Kindes bindet seinen eigenen Prometheus-Endpunkt auf Port 9464 wie üblich.373Beim Standardwert `--capacity 1` greift diese Umschreibung nicht: Der Kindprozess der Sitzung bindet wie gewohnt seinen eigenen Prometheus-Endpunkt an Port 9464.

312 374 

313#### Metriken einer Sitzung mit denen des Runners verknüpfen375#### Metriken einer Sitzung mit denen des Runners verknüpfen

314 376 

315Um die eigenen Metriken einer Sitzung neben `claude_code_self_hosted_runner_session_idle_seconds` zu stellen, verknüpfen Sie sie über die `session_id` des Runners:377Um die eigenen Metriken einer Sitzung neben `claude_code_self_hosted_runner_session_idle_seconds` zu stellen, verknüpfen Sie sie über die `session_id` des Runners:

316 378 

317* **Bei `--capacity` über eins**: Verknüpfen Sie direkt. Auf dem `/metrics` des Runners tragen die Reihen der Sitzung dieselbe `session_id` wie diese Metrik, in der Form `session_...`.379* **Bei `--capacity` über eins**: Verknüpfen Sie direkt. Auf dem `/metrics` des Runners tragen die Serien der Sitzung dieselbe `session_id` wie diese Metrik, in der Form `session_...`.

318* **Bei `--capacity 1`**: Verknüpfen Sie über eine konvertierte `ccr_session_id`. Standardmäßig trägt jede Claude Code-Metrik auf Port 9464 dieses Label, das die Sitzungs-ID in der Form `cse_...` enthält. Ersetzen Sie in einem neuen Label das Präfix `cse_` durch `session_`, um die `session_id` des Runners zu erhalten. Die eigene `session_id` der Metrik enthält die eigene [`session.id`](https://code.claude.com/docs/de/monitoring-usage#standard-attributes) von Claude Code, die zu keiner Runner-Reihe passt.380* **Bei `--capacity 1`**: Verknüpfen Sie über eine umgewandelte `ccr_session_id`. Standardmäßig trägt jede Claude Code-Metrik auf Port 9464 dieses Label, das die Sitzungs-ID in der Form `cse_...` enthält. Ersetzen Sie in einem neuen Label das Präfix `cse_` durch `session_`, um die `session_id` des Runners zu erhalten. Die eigene `session_id` der Metrik enthält die eigene [`session.id`](https://code.claude.com/docs/de/monitoring-usage#standard-attributes) von Claude Code, die zu keiner Serie des Runners passt.

319 381 

320### Session-Lebenszyklus-Zähler-Semantik382### Semantik der Zähler für den Sitzungslebenszyklus

321 383 

322Die Zähler `sessions_started_total`, `sessions_completed_total`, `sessions_failed_total` und `sessions_interrupted_total` klassifizieren jede Sitzung danach, wie sie endete. Jedes erzeugte Session-Kind erhöht `sessions_started_total` zum Spawn-Zeitpunkt, und genau einer der anderen drei erhöht sich beim Beenden, sodass `sessions_started_total` minus die Summe der anderen drei der Anzahl der derzeit laufenden Session-Kinder entspricht.384Die Zähler `sessions_started_total`, `sessions_completed_total`, `sessions_failed_total` und `sessions_interrupted_total` klassifizieren jede Sitzung danach, wie sie beendet wurde. Jeder gestartete Kindprozess einer Sitzung erhöht `sessions_started_total` beim Start, und genau einer der anderen drei Zähler wird beim Beenden erhöht; `sessions_started_total` minus der Summe der anderen drei entspricht also der Anzahl der aktuell laufenden Kindprozesse von Sitzungen.

323 385 

324* `completed`: Die Sitzung endete sauber. Dies deckt das Kind ab, das auf eigene Faust mit Code `0` beendet wird, die Sitzung wird archiviert oder gelöscht, während das Kind noch verbunden war, und der Runner gibt den Slot sauber zurück: Freigabe der Sitzung beim Idle-Timeout, zur Retire-Zeit oder am `--kill-session-after-min` Limit; ein Startup-Timeout; oder ein serverseitiges Deassign, das die Abfrageschleife bemerkte, bevor das Kind beendet wurde. Erhöht `sessions_completed_total`.386* `completed`: Die Sitzung wurde sauber beendet. Dazu gehört, dass der Kindprozess sich selbst mit Code `0` beendet, dass die Sitzung archiviert oder gelöscht wird, während der Kindprozess noch verbunden war, und dass der Runner den Slot sauber zurückgibt: durch Freigabe der Sitzung beim Inaktivitäts-Timeout, zum Ausmusterungszeitpunkt oder beim Limit `--kill-session-after-min`; durch einen Start-Timeout; oder durch eine serverseitige Aufhebung der Zuweisung, die die Poll-Schleife bemerkt hat, bevor der Kindprozess beendet wurde. Erhöht `sessions_completed_total`.

325* `failed`: Das Kind beendete sich auf eigene Faust mit einem Nicht-Null-Code, entweder ein Crash oder ein Setup-Fehler nach dem Erzeugen. Erhöht `sessions_failed_total`.387* `failed`: Der Kindprozess hat sich selbst mit einem Code ungleich null beendet, entweder durch einen Absturz oder einen Einrichtungsfehler nach dem Start. Erhöht `sessions_failed_total`.

326* `interrupted`: Der Runner beendete das Kind aus operativen Gründen, die weder ein Session-Erfolg noch ein Runner-Fehler sind, wie eine Entleerung oder die Beendigung einer Sitzung, die sich noch auf dem Runner befand, wenn das [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) Kulanzfenster nach seinem `--kill-session-after-min` Limit endete. Ein Kubernetes-Rolling-Restart, der `SIGTERM` sendet, ist ein Beispiel für eine Entleerung. Erhöht `sessions_interrupted_total`.388* `interrupted`: Der Runner hat den Kindprozess aus einem betrieblichen Grund beendet, der weder ein Erfolg der Sitzung noch ein Fehler des Runners ist, etwa ein Drain oder das Beenden einer Sitzung, die sich noch auf dem Runner befand, als das Kulanzfenster [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](#environment-variable-only-settings) nach ihrem Limit `--kill-session-after-min` endete. Ein rollierender Kubernetes-Neustart, der `SIGTERM` sendet, ist ein Beispiel für einen Drain. Erhöht `sessions_interrupted_total`.

327 389 

328Vor v2.1.260 beendete der Runner jede Sitzung, die ihr `--kill-session-after-min` Limit erreichte, und zählte sie in `sessions_interrupted_total`.390Vor v2.1.260 beendete der Runner jede Sitzung, die ihr Limit `--kill-session-after-min` erreichte, und zählte sie in `sessions_interrupted_total`.

329 391 

330Der [`post-session` Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session) `CLAUDE_RUNNER_EXIT_REASON` klassifiziert saubere Übergaben unterschiedlich. Der Hook meldet diese als `interrupted`, da der Runner das Kind stoppte: eine Freigabe, ein Startup-Timeout, ein Server-Deassign sowie ein Archivieren oder Löschen, das die Abfrage zuerst bemerkte. Diese Zähler zeichnen die gleichen Ereignisse als `completed` auf, da der Slot sauber zurückgegeben wurde.392Die Variable `CLAUDE_RUNNER_EXIT_REASON` des [`post-session`-Hooks](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session) klassifiziert saubere Übergaben anders. Der Hook meldet diese als `interrupted`, weil der Runner den Kindprozess gestoppt hat: eine Freigabe, einen Start-Timeout, eine serverseitige Aufhebung der Zuweisung sowie ein Archivieren oder Löschen, das der Poll zuerst bemerkt hat. Diese Zähler erfassen dieselben Ereignisse als `completed`, weil der Slot sauber zurückgegeben wurde.

331 393 

332Wenn Sie Hook-Quittungen direkt gegen `sessions_completed_total` abstimmen, unterzählen Sie Abschlüsse. Verwenden Sie den Hook für Pro-Session-Garantien und die Zähler für Aggregatraten.394Wenn Sie Hook-Empfangsbestätigungen direkt mit `sessions_completed_total` abgleichen, zählen Sie zu wenige abgeschlossene Sitzungen. Verwenden Sie den Hook für Garantien pro Sitzung und die Zähler für aggregierte Raten.

333 395 

334In einer One-Shot-Umgebung, `--capacity 1` mit dem Standard `--drain-grace-sec 0`, beendet sich jeder Runner-Prozess Momente nach seiner einen Sitzung endet. `sessions_completed_total`, `sessions_failed_total` und `sessions_interrupted_total` erhöhen sich nur beim Session-Ende, direkt bevor dieser Ausstieg, sodass ein Prometheus-Scrape alle 15 bis 60 Sekunden die Erhöhung selten erfasst, bevor die Reihen des Runners verschwinden; diese drei End-of-Session-Zähler sind die Terminal-Zähler, auf die sich der Rest dieses Abschnitts bezieht. `sessions_started_total` erhöht sich beim Erzeugen und bleibt für die Lebensdauer der Sitzung sichtbar, sodass es zuverlässig angezeigt wird, aber in einer One-Shot-Umgebung liest es näher an "Sitzungen, die derzeit laufen" als an einer kumulativen Anzahl.396In einer One-Shot-Umgebung, also `--capacity 1` mit dem Standardwert `--drain-grace-sec 0`, wird jeder Runner-Prozess kurz nach dem Ende seiner einen Sitzung beendet. `sessions_completed_total`, `sessions_failed_total` und `sessions_interrupted_total` werden erst am Sitzungsende erhöht, unmittelbar vor diesem Beenden; ein Prometheus-Scrape alle 15 bis 60 Sekunden erfasst die Erhöhung daher selten, bevor die Serie des Runners verschwindet. Diese drei Zähler für das Sitzungsende sind die Endzähler, auf die sich der Rest dieses Abschnitts bezieht. `sessions_started_total` wird beim Start erhöht und bleibt während der gesamten Lebensdauer der Sitzung sichtbar, sodass er zuverlässig erscheint; in einer One-Shot-Umgebung entspricht er jedoch eher „aktuell laufenden Sitzungen“ als einer kumulierten Zählung.

335 397 

336Verwenden Sie die Reihe in dieser Tabelle für das entsprechende Ziel statt der Terminal-Zähler:398Verwenden Sie für das jeweilige Ziel die Serien in dieser Tabelle statt der Endzähler:

337 399 

338| Ziel | Verwenden |400| Ziel | Verwenden |

339| :- | :- |401| :- | :- |

340| Durchsatz | `claude_code_self_hosted_orchestrator_spawn_hooks_total{result="ok"}`, ein Zähler auf dem langlebigen Orchestrator, der sich einmal pro erfolgreichem `spawn-runner` Hook erhöht und unter `rate()` aussagekräftig bleibt. Er zählt Hook-Aufrufe statt Sitzungen, sodass Vorwärmung und wiederholte Spawns für dieselbe Sitzung ihn von Session-Zählungen divergieren. |402| Durchsatz | `claude_code_self_hosted_orchestrator_spawn_hooks_total{result="ok"}`, ein Zähler auf dem langlebigen Orchestrator, der pro erfolgreichem `spawn-runner`-Hook einmal erhöht wird und unter `rate()` aussagekräftig bleibt. Er zählt Hook-Aufrufe statt Sitzungen, sodass Vorwärmen und wiederholte Starts für dieselbe Sitzung ihn von den Sitzungszahlen abweichen lassen. |

341| Auslastung | `sum(claude_code_self_hosted_runner_active_sessions)` gegen `sum(claude_code_self_hosted_runner_capacity)`, beide Gauges gültig bei jedem Scrape unabhängig von der Runner-Lebensdauer |403| Auslastung | `sum(claude_code_self_hosted_runner_active_sessions)` im Verhältnis zu `sum(claude_code_self_hosted_runner_capacity)`, beides Gauges, die bei jedem Scrape unabhängig von der Lebensdauer des Runners gültig sind |

342| Rückstand | `claude_code_self_hosted_orchestrator_pool_pending_sessions` für Queue-Tiefe und `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions`, Warnung, wenn über Null |404| Rückstau | `claude_code_self_hosted_orchestrator_pool_pending_sessions` für die Warteschlangentiefe und `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` mit einem Alarm bei einem Wert über null |

343| Fehler | `claude_code_self_hosted_runner_sessions_failed_total`, Best-Effort: echte Crashes nach dem Erzeugen erhöhen ihn, und `rate()` ist aussagekräftig auf Runnern, die ihre Sitzungen mit `--drain-grace-sec` über `0` überleben. Eine One-Shot-Umgebung hat das gleiche Scrape-Fenster-Problem wie die anderen Terminal-Zähler, also behandeln Sie jeden Nicht-Null-Wert, den Sie sehen, als wert, untersucht zu werden. Fehler vor dem Erzeugen, wie ein Checkout-Hook-Fehler, Git-Vorbereitung oder ein Token-Problem, erscheinen nur in `session_init_errors_total`. |405| Fehler | `claude_code_self_hosted_runner_sessions_failed_total`, nach bestem Bemühen: Echte Abstürze nach dem Start erhöhen ihn, und `rate()` ist auf Runnern aussagekräftig, die ihre Sitzungen mit einem `--drain-grace-sec`-Wert über `0` überdauern. Eine One-Shot-Umgebung hat dasselbe Problem mit dem Scrape-Fenster wie die anderen Endzähler; betrachten Sie daher jeden Wert ungleich null, den Sie sehen, als untersuchungswürdig. Fehler vor dem Start, etwa ein Fehler im Checkout-Hook, bei der Git-Vorbereitung oder ein Token-Problem, erscheinen nur in `session_init_errors_total`. |

344 406 

345Die `orchestrator_*` Zeilen existieren nur auf Umgebungen, die den [On-Demand-Orchestrator](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners) ausführen. In einer festen Fleet, deren Runner ihre Sitzungen mit `--drain-grace-sec` über `0` überleben, verwenden Sie `sum(rate(claude_code_self_hosted_runner_sessions_started_total[5m]))` für Durchsatz; in einer One-Shot-Fleet hat diese Reihe das gleiche Scrape-Fenster-Problem wie die Terminal-Zähler, also verlassen Sie sich stattdessen auf die Zählung der Sitzungen in der Warteschlange. Überprüfen Sie den Rückstand auf der Registerkarte **Aktivität** der Umgebung, auf der [**Cloud-Umgebungen**-Administratorseite](https://claude.ai/admin-settings/cloud-environments): Die Runner exportieren keine Queue-Tiefe-Reihe.407Die `orchestrator_*`-Zeilen gibt es nur in Umgebungen, in denen der [On-Demand-Orchestrator](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#on-demand-runners) läuft. Verwenden Sie bei einer festen Flotte, deren Runner ihre Sitzungen mit einem `--drain-grace-sec`-Wert über `0` überdauern, `sum(rate(claude_code_self_hosted_runner_sessions_started_total[5m]))` für den Durchsatz; bei einer One-Shot-Flotte hat diese Serie dasselbe Problem mit dem Scrape-Fenster wie die Endzähler, verlassen Sie sich daher stattdessen auf die Anzahl der wartenden Sitzungen. Prüfen Sie den Rückstau im Tab **Activity** der Umgebung auf der [Admin-Seite **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): Die Runner exportieren keine Serie für die Warteschlangentiefe.

346 408 

347Für Pro-Session-Ergebnis-Berichterstattung verwenden Sie stattdessen den [`post-session` Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session): Er wird bei jedem Session-Ende ausgelöst, wo ein Kind-Prozess erzeugt wurde, abgesehen von abruptem Runner-Beendigung wie eine VM-Preemption, pro dem [eigenen Vertrag des Hooks](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#post-session).409Verwenden Sie für die Berichterstattung über Ergebnisse pro Sitzung stattdessen den [`post-session`-Hook](https://code.claude.com/docs/de/self-hosted-environments-configuration#post-session): Er wird bei jedem Sitzungsende ausgelöst, bei dem ein Kindprozess gestartet wurde, abgesehen von einem abrupten Beenden des Runners wie einer VM-Preemption, gemäß dem [eigenen Vertrag des Hooks](https://code.claude.com/docs/de/self-hosted-environments-configuration.md#post-session).

348 410 

349## Nächste Schritte411## Nächste Schritte

350 412 

Details

324}324}

325```325```

326 326 

327Ein Modell-ID-Eintrag wie `"claude-opus-5"` erlaubt auch spätere Versionen, die ihn erweitern, wie Opus 5.5. Um eine dieser Versionen zu blockieren, verwenden Sie [`deniedModels`](#deniedmodels). Damit jeder Modell-ID-Eintrag nur die genannte Version erlaubt, verwenden Sie [`availableModelsMatch`](#availablemodelsmatch). Siehe [Modellauswahl einschränken](https://code.claude.com/docs/de/model-config.md#restrict-model-selection).327Ein Modell-ID-Eintrag wie `"claude-opus-5"` erlaubt auch spätere Versionen, die ihn erweitern, wie Opus 5.5. Um eine dieser Versionen zu blockieren, verwenden Sie [`deniedModels`](#deniedmodels). Damit jeder Modell-ID-Eintrag nur die genannte Version erlaubt, verwenden Sie [`availableModelsMatch`](#availablemodelsmatch). Siehe [Modellauswahl einschränken](https://code.claude.com/docs/de/model-config.md#restrict-model-selection). Informationen zu Provider-IDs von Drittanbietern finden Sie unter [Modelle für Drittanbieter-Bereitstellungen festlegen](https://code.claude.com/docs/de/model-config.md#pin-models-for-third-party-deployments).

328 328 

329### `availableModelsMatch`329### `availableModelsMatch`

330 330 


333* **Geltungsbereich**: [`Verwaltet`](#scopes). Claude Code ignoriert den Schlüssel in Benutzer-, Projekt- und lokalen Einstellungen sowie in `--settings` mit einer Warnung333* **Geltungsbereich**: [`Verwaltet`](#scopes). Claude Code ignoriert den Schlüssel in Benutzer-, Projekt- und lokalen Einstellungen sowie in `--settings` mit einer Warnung

334* **Typ**: String, einer von:334* **Typ**: String, einer von:

335 * `"prefix"`: ein Modell-ID-Eintrag erlaubt seine Version und jede Modell-ID, die ihn um ein weiteres Segment erweitert335 * `"prefix"`: ein Modell-ID-Eintrag erlaubt seine Version und jede Modell-ID, die ihn um ein weiteres Segment erweitert

336 * `"exact"`: ein Modell-ID-Eintrag erlaubt nur die genannte Version, einschließlich der datierten IDs dieser Version, sodass `"claude-opus-5"` Opus 5 erlaubt, aber nicht `claude-opus-5-5`. Ein Familienalias wie `"opus"` erlaubt weiterhin die gesamte Familie, und Einträge `best`, `opusplan` und `default` werden ignoriert336 * `"exact"`: ein Modell-ID-Eintrag erlaubt nur die genannte Version, sodass `"claude-opus-5"` Opus 5 erlaubt, aber nicht `claude-opus-5-5`. Ein Eintrag wie `"claude-opus-4-5"` erlaubt auch seine datierte Anthropic-Modell-ID `claude-opus-4-5-20251101`. Ein Familienalias wie `"opus"` erlaubt weiterhin die gesamte Familie, und Einträge `best`, `opusplan` und `default` werden ignoriert

337* **Standard**: `"prefix"`337* **Standard**: `"prefix"`

338 338 

339Dieses Beispiel erlaubt Opus 5 und Sonnet 5, aber keine spätere Version eines der beiden:339Dieses Beispiel erlaubt Opus 5 und Sonnet 5, aber keine spätere Version eines der beiden:


1371 1371 

1372Claude Code entfernt einen nachgestellten Schrägstrich aus einem Verzeichnispfad, daher entsprechen `~/.aws` und `~/.aws/` demselben Verzeichnis. Vor v2.1.224 gab Claude Code den nachgestellten Schrägstrich an die Sandbox weiter, und Claude konnte weiterhin Pfade unter einem `denyRead`- oder `denyWrite`-Eintrag lesen oder schreiben, der mit einem solchen Schrägstrich geschrieben war.1372Claude Code entfernt einen nachgestellten Schrägstrich aus einem Verzeichnispfad, daher entsprechen `~/.aws` und `~/.aws/` demselben Verzeichnis. Vor v2.1.224 gab Claude Code den nachgestellten Schrägstrich an die Sandbox weiter, und Claude konnte weiterhin Pfade unter einem `denyRead`- oder `denyWrite`-Eintrag lesen oder schreiben, der mit einem solchen Schrägstrich geschrieben war.

1373 1373 

1374Claude Code entfernt auch ein nachgestelltes `/**`, daher decken `~/build/**` und `~/build` dasselbe Verzeichnis ab. Ob eine Wildcard wie `*` funktioniert, hängt davon ab, in welcher Liste sich der Eintrag befindet, und von der Plattform:1374##### Wo Platzhalter in Sandbox-Pfaden funktionieren

1375 1375 

1376* **`allowWrite` und `denyWrite`**: Auf macOS funktionieren Wildcards. Auf Linux und WSL2 mountet die Sandbox konkrete Pfade, daher überspringt Claude Code einen Eintrag, der nach dem Entfernen des nachgestellten `/**` noch `*`, `?` oder `[` enthält, und dieser Eintrag hat keine Wirkung. Claude Code fügt die Pfade aus Ihren `Edit`-Berechtigungsregeln zu diesen Listen hinzu, daher gilt für sie dieselbe Einschränkung, und die **Config**-Registerkarte von `/sandbox` warnt vor `Edit`- und `Read`-Berechtigungsregeln, die Wildcards enthalten.1376Die Platzhalter `*`, `?` und `**` funktionieren unter macOS in allen vier `sandbox.filesystem`-Pfadlisten und unter Linux und WSL2 an weniger Stellen:

1377* **`denyRead` und `allowRead`**: Wildcards funktionieren auf jeder Plattform. Auf Linux und WSL2 erweitert Claude Code einen Leseeintrag auf die konkreten Pfade, auf die er passt, was es für die Schreiblisten nicht tut.

1378 1377 

1379Geschweifte Klammern werden in einem Namen als gewöhnliche Zeichen abgeglichen, daher deckt `~/data/{keys,tokens}` ein Verzeichnis ab, das wörtlich `{keys,tokens}` heißt, und nicht zwei Alternativen. Um `~/data/keys` und `~/data/tokens` abzudecken, fügen Sie jeden Pfad als eigenen Eintrag hinzu.1378| `sandbox.filesystem`-Liste | Was unter Linux und WSL2 funktioniert | Beispiel, das unter Linux und WSL2 nicht funktioniert | Was Sie stattdessen schreiben |

1379| :- | :- | :- | :- |

1380| `denyRead`, `allowRead` | Ein abschließendes `/**` funktioniert, sodass `~/build/**` dasselbe Verzeichnis abdeckt wie `~/build`. Jeder andere Platzhalter funktioniert nur nach dem ersten Verzeichnisnamen des [vollständigen Pfads](#sandbox-path-prefixes) des Eintrags. | `/**/*.pem` in `denyRead` deckt nichts ab und blockiert daher keine Lesezugriffe | `/srv/**/*.pem`, mit einem Eintrag für jedes Verzeichnis der obersten Ebene |

1381| `allowWrite`, `denyWrite` | Nur ein abschließendes `/**` funktioniert, sodass `~/build/**` dasselbe Verzeichnis abdeckt wie `~/build` | `./src/*` deckt nur eine Datei oder ein Verzeichnis in `src` ab, das selbst `*` heißt, und nichts, wenn es keines gibt | `./src`, das alles unter `src` abdeckt, oder ein Eintrag für jeden Pfad |

1382 

1383In `~/keys/*.pem` steht der Platzhalter nach dem ersten Verzeichnisnamen, der bei einem Home-Verzeichnis `/home/alice` `home` lautet:

1384 

1385```text theme={null}

1386~/keys/*.pem the entry

1387/home/alice/keys/*.pem its full path

1388 ^^^^ the first directory name, home

1389```

1390 

1391Unter Linux und WSL2 warnt der Tab **Config** von `/sandbox` in einer Sitzung vor `Edit`-Berechtigungsregeln, die einen anderen Platzhalter als ein abschließendes `/**` enthalten. Diese Platzhalter funktionieren für in der Sandbox ausgeführte Befehle nicht. Fügen Sie jeden Pfad, den die Regel abdecken soll, oder das Verzeichnis, das sie enthält, bei einer allow-Regel zu `allowWrite` oder bei einer deny-Regel zu `denyWrite` hinzu.

1392 

1393##### Verzeichnisnamen mit eckigen, geschweiften oder runden Klammern

1394 

1395Um ein Verzeichnis zu erlauben oder zu blockieren, dessen Name eckige Klammern enthält, schreiben Sie den Namen so, wie er ist, etwa `./app/[slug]`. In diesem Eintrag ist `[slug]` der tatsächliche Name des Verzeichnisses, einschließlich der Klammern:

1396 

1397```text theme={null}

1398app/

1399└── [slug]/

1400 └── page.tsx

1401```

1402 

1403Dieser Eintrag deckt alles unter dem Verzeichnis ab, lassen Sie also ein abschließendes `/**` weg. Unter macOS sowie unter Linux und WSL2 muss das Verzeichnis `app/[slug]` existieren, wenn der in der Sandbox ausgeführte Befehl startet.

1404 

1405* **Eckige Klammern wie `[slug]`**: In jeder Liste unter macOS sowie in `denyRead` und `allowRead` unter Linux und WSL2 sind die Klammern in `./app/[slug]` zugleich ein Muster. Der Eintrag passt dann auch auf jeden Pfad unter `app`, der aus einem Zeichen aus `slug` besteht, etwa `app/s` oder `app/g`. Steht dieser Eintrag in `allowRead` oder unter macOS in `allowWrite`, können in der Sandbox ausgeführte Befehle auch diese Pfade erreichen. Benennen Sie alle um, die sie nicht erreichen sollen.

1406* **Eckige Klammern wie `[user-id]` oder `[post-id]`, bei denen das Zeichen links vom Bindestrich nach dem rechten einsortiert wird**: `./app/[user-id]` deckt nur das Verzeichnis mit genau diesem Namen ab, in jeder Liste auf jeder Plattform. Vor v2.1.304 konnten in der Sandbox ausgeführte Befehle unter Linux und WSL2 nicht starten, solange `denyRead` oder `allowRead` einen solchen Eintrag enthielt.

1407* **Geschweifte und runde Klammern**: Diese sind gewöhnliche Zeichen, sodass `~/data/{keys,tokens}` ein Verzeichnis namens `{keys,tokens}` abdeckt, nicht zwei Alternativen. Um `~/data/keys` und `~/data/tokens` abzudecken, fügen Sie jedes als eigenen Eintrag hinzu.

1380 1408 

1381### `sandbox.filesystem.allowWrite`1409### `sandbox.filesystem.allowWrite`

1382 1410 


3470 3498 

3471Der Hostname-Abgleich ist nicht case-sensitiv und behandelt `hooks.example.com.` mit dem nachgestellten Punkt, der einen vollständig qualifizierten Domänennamen kennzeichnet, genauso wie `hooks.example.com`, wie DNS es behandelt. Die Zulassungsliste gilt für Hooks aus jeder Quelle, einschließlich verwalteter Einstellungen.3499Der Hostname-Abgleich ist nicht case-sensitiv und behandelt `hooks.example.com.` mit dem nachgestellten Punkt, der einen vollständig qualifizierten Domänennamen kennzeichnet, genauso wie `hooks.example.com`, wie DNS es behandelt. Die Zulassungsliste gilt für Hooks aus jeder Quelle, einschließlich verwalteter Einstellungen.

3472 3500 

3473In der Option `managedSettings` des Agent SDK ignoriert Claude Code diesen Schlüssel, wenn seine Liste Einträge enthält; übergeben Sie die Liste daher stattdessen in der Option `settings` des SDK. Siehe [was jeder Wert in übergeordneten Einstellungen bewirkt](https://code.claude.com/docs/de/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3501In der Option `managedSettings` des Agent SDK ignoriert Claude Code eine Liste mit Einträgen; übergeben Sie sie daher stattdessen in der [Option `settings`](https://code.claude.com/docs/de/agent-sdk/typescript#options) des SDK. Siehe [was eine leere Liste in übergeordneten Einstellungen bewirkt](https://code.claude.com/docs/de/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3474 3502 

3475### `allowManagedHooksOnly`3503### `allowManagedHooksOnly`

3476 3504 


3520Die Reichweite hängt davon ab, welche Datei den Schlüssel trägt:3548Die Reichweite hängt davon ab, welche Datei den Schlüssel trägt:

3521 3549 

3522* **In verwalteten Einstellungen**: Claude Code deaktiviert jeden konfigurierten Hook, einschließlich verwalteter, und führt weiterhin die Hooks aus, die das [Agent SDK](https://code.claude.com/docs/de/agent-sdk/overview.md) im Prozess registriert3550* **In verwalteten Einstellungen**: Claude Code deaktiviert jeden konfigurierten Hook, einschließlich verwalteter, und führt weiterhin die Hooks aus, die das [Agent SDK](https://code.claude.com/docs/de/agent-sdk/overview.md) im Prozess registriert

3523* **In der Option `managedSettings` des Agent SDK**: Claude Code behandelt den Schlüssel als `allowManagedHooksOnly: true`; welche Hooks dadurch gestoppt werden, erfahren Sie unter [Was wird unter `allowManagedHooksOnly` ausgeführt](#what-runs-under-allowmanagedhooksonly). Auf einem Rechner, auf dem ein Administrator verwaltete Einstellungen bereitstellt, ignoriert Claude Code diesen Schlüssel, es sei denn, der Administrator [erlaubt einem einbettenden Host, Richtlinien hinzuzufügen](https://code.claude.com/docs/de/managed-settings.md#let-an-embedding-host-add-policy). Erfordert Claude Code v2.1.309 oder später.3551* **In der Option `managedSettings` des Agent SDK**: Auf einem Rechner, auf dem ein Administrator verwaltete Einstellungen bereitstellt, ignoriert Claude Code diesen Schlüssel, es sei denn, der Administrator [erlaubt einem einbettenden Host, Richtlinien hinzuzufügen](https://code.claude.com/docs/de/managed-settings.md#let-an-embedding-host-add-policy). Wo der Schlüssel wirksam wird, werden Benutzer-, Projekt-, lokale und Plugin-Hooks gestoppt, ebenso alle Hooks in der Option `settings` des SDK. Die verwalteten Hooks eines Administrators, die Hooks [erzwungen aktivierter](#enabledplugins) Plugins und Ihre [SDK-Hook-Callbacks](https://code.claude.com/docs/de/agent-sdk/hooks.md) werden weiterhin ausgeführt. Erfordert Claude Code v2.1.309 oder später.

3524* **In jeder anderen Einstellungsdatei**: Claude Code deaktiviert Benutzer-, Projekt-, lokale und Plugin-Hooks; verwaltete Hooks, Agent SDK Hooks und Hooks aus Plugins, die in verwalteten [`enabledPlugins`](#enabledplugins) erzwungen werden, werden weiterhin ausgeführt3552* **In jeder anderen Einstellungsdatei**: Claude Code deaktiviert Benutzer-, Projekt-, lokale und Plugin-Hooks; verwaltete Hooks, Agent SDK Hooks und Hooks aus Plugins, die in verwalteten [`enabledPlugins`](#enabledplugins) erzwungen werden, werden weiterhin ausgeführt

3525 3553 

3526Der Schlüssel stoppt auch [Mods](https://code.claude.com/docs/de/plugins/mods/overview.md), also Plugins, deren Code Hooks registriert:3554Der Schlüssel stoppt auch [Mods](https://code.claude.com/docs/de/plugins/mods/overview.md), also Plugins, deren Code Hooks registriert:


3624 3652 

3625Die Zulassungsliste gilt für Hooks aus jeder Quelle, einschließlich verwalteter Einstellungen.3653Die Zulassungsliste gilt für Hooks aus jeder Quelle, einschließlich verwalteter Einstellungen.

3626 3654 

3627In der Option `managedSettings` des Agent SDK ignoriert Claude Code diesen Schlüssel, wenn seine Liste Einträge enthält; übergeben Sie die Liste daher stattdessen in der Option `settings` des SDK. Siehe [was jeder Wert in übergeordneten Einstellungen bewirkt](https://code.claude.com/docs/de/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3655In der Option `managedSettings` des Agent SDK ignoriert Claude Code eine Liste mit Einträgen; übergeben Sie sie daher stattdessen in der [Option `settings`](https://code.claude.com/docs/de/agent-sdk/typescript#options) des SDK. Siehe [was eine leere Liste in übergeordneten Einstellungen bewirkt](https://code.claude.com/docs/de/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3628 3656 

3629### `workflowKeywordTriggerEnabled`3657### `workflowKeywordTriggerEnabled`

3630 3658 


3841* **Typ**: Boolean3869* **Typ**: Boolean

3842 * `true`: Claude Code führt den von Marketplace deklarierten Befehl niemals aus, installiert oder aktualisiert keine Befehls-Quellen-Plugins und stoppt das Laden der bereits installierten3870 * `true`: Claude Code führt den von Marketplace deklarierten Befehl niemals aus, installiert oder aktualisiert keine Befehls-Quellen-Plugins und stoppt das Laden der bereits installierten

3843 * `false`: Claude Code erlaubt Befehls-Quellen-Plugins explizit3871 * `false`: Claude Code erlaubt Befehls-Quellen-Plugins explizit

3844* **Standard**: nicht gesetzt, daher folgt Claude Code [`allowManagedHooksOnly`](#allowmanagedhooksonly): eine Organisation, die die Hook-Ausführung auf verwaltete Einstellungen beschränkt, bekommt auch Befehlsquellen deaktiviert3872* **Standard**: nicht gesetzt, daher folgt Claude Code [`allowManagedHooksOnly`](#allowmanagedhooksonly): eine Organisation, die die Hook-Ausführung auf verwaltete Einstellungen beschränkt, bekommt auch Befehlsquellen deaktiviert. Eine Anwendung, die [`disableAllHooks: true`](#disableallhooks) in der Option `managedSettings` des Agent SDK übergibt, deaktiviert Befehlsquellen dadurch allein nicht.

3845 3873 

3846```json managed-settings.json theme={null}3874```json managed-settings.json theme={null}

3847{3875{

Details

127 127 

128```bash ~/.tmux.conf theme={null}128```bash ~/.tmux.conf theme={null}

129set -g allow-passthrough on129set -g allow-passthrough on

130set -g focus-events on

130set -s extended-keys on131set -s extended-keys on

131set -as terminal-features 'xterm*:extkeys'132set -as terminal-features 'xterm*:extkeys'

132```133```

133 134 

134Die `allow-passthrough`-Zeile ermöglicht es, dass Benachrichtigungen und Fortschrittsaktualisierungen das äußere Terminal erreichen, anstatt von tmux aufgenommen zu werden. Die `extended-keys`-Zeilen ermöglichen es tmux, Shift+Enter von einfachem Enter zu unterscheiden, damit die Zeilenumbruch-Verknüpfung funktioniert.135Die `allow-passthrough`-Zeile ermöglicht es, dass Benachrichtigungen und Fortschrittsaktualisierungen das äußere Terminal erreichen, anstatt von tmux aufgenommen zu werden. Die `extended-keys`-Zeilen ermöglichen es tmux, Shift+Enter von einfachem Enter zu unterscheiden, damit die Zeilenumbruch-Verknüpfung funktioniert.

135 136 

137Ein [`Image` eines Mods](https://code.claude.com/docs/de/plugins/mods/reference#elements) benötigt die Zeilen `allow-passthrough` und `focus-events` sowie die weiteren [Voraussetzungen für das Zeichnen innerhalb von tmux](https://code.claude.com/docs/de/plugins/mods/gallery.md#draw-an-image-inside-tmux). Nachdem Sie die Zeilen hinzugefügt haben, trennen Sie außerdem die Verbindung zu tmux, verbinden Sie sich erneut und starten Sie Claude Code neu.

138 

136## Behebung: Rücktaste löscht auf Windows ein ganzes Wort139## Behebung: Rücktaste löscht auf Windows ein ganzes Wort

137 140 

138Unter Windows liest Claude Code eine Rücktaste, die als `^H` ankommt, als Strg+Rücktaste, was [das vorherige Wort löscht](https://code.claude.com/docs/de/interactive-mode.md#text-editing), außer wenn `TERM_PROGRAM` `mintty` oder `TERM` `cygwin` ist. Auf macOS und Linux liest Claude Code sie als einfache Rücktaste.141Unter Windows liest Claude Code eine Rücktaste, die als `^H` ankommt, als Strg+Rücktaste, was [das vorherige Wort löscht](https://code.claude.com/docs/de/interactive-mode.md#text-editing), außer wenn `TERM_PROGRAM` `mintty` oder `TERM` `cygwin` ist. Auf macOS und Linux liest Claude Code sie als einfache Rücktaste.

ultrareview.md +2 −2

Details

176Der Unterbefehl beendet sich mit einem von drei Codes:176Der Unterbefehl beendet sich mit einem von drei Codes:

177 177 

178* **0**: Die Review wurde abgeschlossen, mit oder ohne Ergebnisse178* **0**: Die Review wurde abgeschlossen, mit oder ohne Ergebnisse

179* **1**: Die Review konnte nicht gestartet werden oder wurde vor dem Abschluss gestoppt, die Cloud-Sitzung ist fehlgeschlagen, oder das Timeout ist abgelaufen. Der Code ist ebenfalls 1, wenn dem [Ordner nicht vertraut wird](#trust-the-folder-before-the-review-runs), auch wenn Sie bei der Vertrauensabfrage mit `n` antworten oder Strg+C drücken.179* **1**: Die Review konnte nicht gestartet werden oder wurde vor dem Abschluss gestoppt, die Cloud-Sitzung ist fehlgeschlagen, oder der Timeout ist abgelaufen. Der Code ist ebenfalls 1, wenn dem [Ordner nicht vertraut wird](#trust-the-folder-before-the-review-runs), auch wenn Sie bei der Vertrauensabfrage mit `n` antworten, die Eingabetaste drücken oder Strg+C drücken.

180* **130**: Sie haben Strg+C gedrückt, während der Unterbefehl die Review gestartet, auf die Ergebnisse gewartet oder den `--post`-Kommentar gesendet hat, und nicht bei der Vertrauensabfrage180* **130**: Sie haben Strg+C gedrückt, während der Unterbefehl die Review gestartet, auf die Ergebnisse gewartet oder den `--post`-Kommentar gesendet hat, und nicht bei der Vertrauensabfrage

181 181 

182Wenn sich der Unterbefehl beendet, bevor die Ergebnisse eintreffen, erreichen diese Ihr Terminal nie. Die Review läuft möglicherweise noch in der Cloud. Ein erneutes Ausführen des Unterbefehls startet eine neue Review, statt die bisherige fortzusetzen, und die neue Review [verbraucht eine kostenlose Ausführung oder wird über Nutzungsguthaben abgerechnet](#pricing-and-free-runs).182Wenn sich der Unterbefehl beendet, bevor die Ergebnisse eintreffen, erreichen diese Ihr Terminal nie. Die Review läuft möglicherweise noch in der Cloud. Ein erneutes Ausführen des Unterbefehls startet eine neue Review, statt die bisherige fortzusetzen, und die neue Review [verbraucht eine kostenlose Ausführung oder wird über Nutzungsguthaben abgerechnet](#pricing-and-free-runs).


198claude ultrareview 1234 --trust-workspace198claude ultrareview 1234 --trust-workspace

199```199```

200 200 

201Um einen nicht vertrauenswürdigen Pull Request zu überprüfen, führen Sie `claude ultrareview <PR number> --trust-workspace` von einem Branch aus, dem Sie vertrauen. Anders als `y` speichert das Flag nichts. Der PR wird [in der Cloud geklont](#review-a-pull-request), sodass Sie seinen Branch nicht lokal benötigen.201Um einen nicht vertrauenswürdigen Pull Request zu überprüfen, führen Sie `claude ultrareview <PR number> --trust-workspace` von einem Branch aus, dem Sie vertrauen. Der PR wird [in der Cloud geklont](#review-a-pull-request), sodass Sie seinen Branch nicht lokal benötigen.

202 202 

203## Wie Ultrareview mit /code-review verglichen wird203## Wie Ultrareview mit /code-review verglichen wird

204 204 

vs-code.md +6 −1

Details

1001 1001 

1002### Diktierfunktion oder Web-Tab schlägt hinter einem TLS-inspizierenden Proxy fehl1002### Diktierfunktion oder Web-Tab schlägt hinter einem TLS-inspizierenden Proxy fehl

1003 1003 

1004Wenn die Diktierfunktion oder der Web-Tab mit einem Zertifikatsfehler wie `unable to get local issuer certificate` fehlschlägt, setzen Sie [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/de/network-config#custom-ca-certificates) im `env`-Block von `~/.claude/settings.json`. Setzen Sie den Wert auf den Pfad einer PEM-Datei mit dem Root-CA-Zertifikat Ihres Proxys, die Ihnen Ihr IT-Team geben kann. Dieser Fehlertext steht auf der Mikrofonschaltfläche oder in den Logs der Erweiterung:1004Wenn die Diktierfunktion oder der Web-Tab mit einem Zertifikatsfehler wie `unable to get local issuer certificate` fehlschlägt, setzen Sie [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/de/network-config#custom-ca-certificates) im `env`-Block von `~/.claude/settings.json`. Setzen Sie den Wert auf den Pfad einer PEM-Datei mit dem Root-CA-Zertifikat Ihres Proxys, die Ihnen Ihr IT-Team geben kann. Der Fehler erscheint auf der Mikrofonschaltfläche oder dem Web-Tab oder in den Logs:

1005 1005 

1006* **Diktierfunktion**: Die Mikrofonschaltfläche zeigt den Fehlertext nach `Dictation error: WebSocket error:` an.1006* **Diktierfunktion**: Die Mikrofonschaltfläche zeigt den Fehlertext nach `Dictation error: WebSocket error:` an.

1007* **Web-Tab**: Der Tab, der [Cloud-Sitzungen](#resume-cloud-sessions-from-claude-ai) auflistet, zeigt `Remote server is not connected` ohne den Fehlertext an. So lesen Sie ihn in den Logs:1007* **Web-Tab**: Der Tab, der [Cloud-Sitzungen](#resume-cloud-sessions-from-claude-ai) auflistet, zeigt `Remote server is not connected` ohne den Fehlertext an. So lesen Sie ihn in den Logs:

1008 1. Führen Sie **Claude Code: Show Logs** über die [Befehlspalette](#vs-code-commands-and-shortcuts) aus, um den Ausgabekanal `Claude VSCode` zu öffnen.1008 1. Führen Sie **Claude Code: Show Logs** über die [Befehlspalette](#vs-code-commands-and-shortcuts) aus, um den Ausgabekanal `Claude VSCode` zu öffnen.

1009 2. Klicken Sie auf dem Tab auf **Reconnect** und warten Sie, bis er nicht mehr `Connecting…` anzeigt.1009 2. Klicken Sie auf dem Tab auf **Reconnect** und warten Sie, bis er nicht mehr `Connecting…` anzeigt.

1010 3. Durchsuchen Sie den Kanal nach `Error fetching remote sessions:` oder `Failed to fetch organization UUID:` und lesen Sie dann den Fehlertext nach diesem Präfix in der neuesten passenden Zeile.1010 3. Durchsuchen Sie den Kanal nach `Error fetching remote sessions:` oder `Failed to fetch organization UUID:` und lesen Sie dann den Fehlertext nach diesem Präfix in der neuesten passenden Zeile.

1011* **Log-Warnung**: Eine Warnung, die `an authority that Claude Code does not trust` nennt, meldet einen Zertifikatsfehler. Setzen Sie hinter einem TLS-inspizierenden Proxy `NODE_EXTRA_CA_CERTS` in `env` in `~/.claude/settings.json`. Versionen vor v2.1.309 protokollieren diese Warnung nicht.

1011 1012 

1012Diese Lösung erfordert die Erweiterungsversion 2.1.307 oder höher, aktualisieren Sie daher zuerst die Erweiterung. Setzen Sie dann `NODE_EXTRA_CA_CERTS` auf den vollständigen Pfad der Zertifikatsdatei, ohne `~` geschrieben. Schreiben Sie bei einem Windows-Pfad in `settings.json` jeden Backslash doppelt, etwa `C:\\certs\\example-ca.pem`.1013Diese Lösung erfordert die Erweiterungsversion 2.1.307 oder höher, aktualisieren Sie daher zuerst die Erweiterung. Setzen Sie dann `NODE_EXTRA_CA_CERTS` auf den vollständigen Pfad der Zertifikatsdatei, ohne `~` geschrieben. Schreiben Sie bei einem Windows-Pfad in `settings.json` jeden Backslash doppelt, etwa `C:\\certs\\example-ca.pem`.

1013 1014 

1015> [!NOTE]

1016>

1017> Speichern Sie in einem Fenster, das mit WSL, einem SSH-Host, einem Dev-Container oder einem anderen System verbunden ist, die Zertifikatsdatei auf diesem System und bearbeiten Sie dort `~/.claude/settings.json`, nicht auf Ihrem lokalen Computer.

1018 

1014Dieses Beispiel verweist auf eine Zertifikatsdatei unter dem Linux- oder macOS-Pfad `/etc/ssl/certs/example-ca.pem`:1019Dieses Beispiel verweist auf eine Zertifikatsdatei unter dem Linux- oder macOS-Pfad `/etc/ssl/certs/example-ca.pem`:

1015 1020 

1016```json ~/.claude/settings.json theme={null}1021```json ~/.claude/settings.json theme={null}