SpyBara
Go Premium

Documentation 2026-10-09 23:02 UTC to 2026-10-10 08:02 UTC

19 files changed +449 −101. View all changes and history on the product overview
2026
Sat 10 09:00 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
Details

124 124 

125Ohne aktivierte Teilnachrichten erhalten Sie alle Nachrichtentypen außer `StreamEvent`. Häufige Typen sind `SystemMessage` (Sitzungsinitialisierung), `AssistantMessage` (vollständige Inhaltsblöcke), `ResultMessage` (Endergebnis) und eine kompakte Grenzmarkierungsnachricht, die anzeigt, wann der Gesprächsverlauf komprimiert wurde (`SDKCompactBoundaryMessage` in TypeScript; `SystemMessage` mit Subtyp `"compact_boundary"` in Python).125Ohne aktivierte Teilnachrichten erhalten Sie alle Nachrichtentypen außer `StreamEvent`. Häufige Typen sind `SystemMessage` (Sitzungsinitialisierung), `AssistantMessage` (vollständige Inhaltsblöcke), `ResultMessage` (Endergebnis) und eine kompakte Grenzmarkierungsnachricht, die anzeigt, wann der Gesprächsverlauf komprimiert wurde (`SDKCompactBoundaryMessage` in TypeScript; `SystemMessage` mit Subtyp `"compact_boundary"` in Python).

126 126 

127<h3 id="handle-a-stream-that’s-cut-off">

128 Einen abgebrochenen Stream behandeln

129</h3>

130 

131Wenn ein Stream mitten in einer Nachricht abbricht, etwa weil Sie den Turn unterbrechen oder die Verbindung abreißt, erhalten Sie vor dem Ende des Turns trotzdem das `message_stop` dieser Nachricht. Ein abgebrochener Text- oder Thinking-Block erhält außerdem sein `content_block_stop`. Ein abgebrochener Tool-Aufruf dagegen nicht. Wenn also `message_stop` eintrifft, während der Block eines Tool-Aufrufs noch offen ist, behandeln Sie die Eingabe dieses Aufrufs als unvollständig.

132 

133Vor Claude Code v2.1.290 konnte ein abgebrochener Stream den Turn ohne `message_stop` beenden, sodass eine Antwort, die Sie aus Stream-Ereignissen rendern, weiterhin als laufend angezeigt werden konnte. Das TypeScript Agent SDK enthält ab v0.3.290 Claude Code v2.1.290 oder neuer, das Python Agent SDK ab v0.2.164. Wenn eine Antwort nach dem Ende des Turns weiterhin als laufend angezeigt wird, aktualisieren Sie das SDK.

134 

127<h2 id="stream-tool-calls">135<h2 id="stream-tool-calls">

128 Tool-Aufrufe streamen136 Tool-Aufrufe streamen

129</h2>137</h2>


229 Streaming-UI erstellen237 Streaming-UI erstellen

230</h2>238</h2>

231 239 

232Dieses Beispiel kombiniert Text- und Tool-Streaming in eine kohärente Benutzeroberfläche. Es verfolgt, ob der Agent gerade ein Tool ausführt (mit einem `in_tool`-Flag), um Statusanzeigen wie `[Using Read...]` anzuzeigen, während Tools ausgeführt werden. Text wird normal gestreamt, wenn nicht in einem Tool, und die Tool-Fertigstellung löst eine „done"-Nachricht aus. Dieses Muster ist nützlich für Chat-Schnittstellen, die während mehrstufiger Agent-Aufgaben Fortschritt anzeigen müssen.240Dieses Beispiel kombiniert Text- und Tool-Streaming in eine kohärente Benutzeroberfläche. Es verfolgt, ob der Agent gerade ein Tool ausführt (mit einem `in_tool`-Flag), um Statusanzeigen wie `[Using Read...]` anzuzeigen, während Tools ausgeführt werden. Text wird normal gestreamt, wenn nicht in einem Tool, und die Tool-Fertigstellung löst eine „done“-Nachricht aus. Dieses Muster ist nützlich für Chat-Schnittstellen, die während mehrstufiger Agent-Aufgaben Fortschritt anzeigen müssen.

233 241 

234<CodeGroup>242<CodeGroup>

235 ```python Python theme={null}243 ```python Python theme={null}

Details

1588 1588 

1589Ordnen Sie die Nachrichten eines Subagenten seinen Task-Ereignissen über `agent_id` zu, statt die `parent_tool_use_id` einer Nachricht mit der `tool_use_id` eines Task-Ereignisses zu paaren. Wenn ein Tool-Aufruf den Subagenten fortsetzt, tragen die Task-Ereignisse die `tool_use_id` dieses Aufrufs, während die Nachrichten die `parent_tool_use_id` des Tool-Aufrufs behalten, der den Subagenten ursprünglich gestartet hat, sodass die beiden nicht mehr übereinstimmen.1589Ordnen Sie die Nachrichten eines Subagenten seinen Task-Ereignissen über `agent_id` zu, statt die `parent_tool_use_id` einer Nachricht mit der `tool_use_id` eines Task-Ereignisses zu paaren. Wenn ein Tool-Aufruf den Subagenten fortsetzt, tragen die Task-Ereignisse die `tool_use_id` dieses Aufrufs, während die Nachrichten die `parent_tool_use_id` des Tool-Aufrufs behalten, der den Subagenten ursprünglich gestartet hat, sodass die beiden nicht mehr übereinstimmen.

1590 1590 

1591Claude Code setzt `user_message_uuid` und `user_message_uuids` auf die erste Assistenten-Nachricht des Turns unter den Bedingungen in [`user_message_uuid`](#user_message_uuid). Wenn Claude Code einen Turn erneut ausführt, den ein Neustart unterbrochen hat, tragen die Assistenten-Nachrichten des erneuten Durchlaufs, die diese Felder tragen, auch [`resume_reason`](#resume_reason).1591Claude Code setzt `user_message_uuid` und `user_message_uuids` in der ersten Assistentennachricht des Turns, unter den in [`user_message_uuid`](#user_message_uuid) beschriebenen Bedingungen. Wenn der Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde, tragen die Assistentennachrichten mit diesen Feldern auch [`resume_reason`](#resume_reason).

1592 1592 

1593`timestamp` ist die ISO-8601-Zeit, wenn die Generierung des Nachrichteninhalts auf dem Prozess, der ihn erzeugt hat, beendet wurde. Der Wert stammt von der Uhr dieser Maschine, daher verwenden Sie ihn nur zur Anzeige und ordnen Sie Nachrichten nicht danach. Ein API-Turn kann mehrere Assistenten-Nachrichten erzeugen, die eine `message.id` teilen, jede mit ihrem eigenen `timestamp`. Wenn das Feld fehlt, greifen Sie auf die Zeit zurück, zu der Sie die Nachricht erhalten haben.1593`timestamp` ist die ISO-8601-Zeit, wenn die Generierung des Nachrichteninhalts auf dem Prozess, der ihn erzeugt hat, beendet wurde. Der Wert stammt von der Uhr dieser Maschine, daher verwenden Sie ihn nur zur Anzeige und ordnen Sie Nachrichten nicht danach. Ein API-Turn kann mehrere Assistenten-Nachrichten erzeugen, die eine `message.id` teilen, jede mit ihrem eigenen `timestamp`. Wenn das Feld fehlt, greifen Sie auf die Zeit zurück, zu der Sie die Nachricht erhalten haben.

1594 1594 


1631 1631 

1632Setzen Sie `inline_pastes`, um Claude Code mitzuteilen, welche Teile von `message.content` der Benutzer eingefügt statt eingetippt hat, ein String pro Einfügung. Der Prompt-Text bleibt dort, wo der Benutzer ihn platziert hat. Claude Code kann jede aufgeführte Einfügung an ihrer Stelle in `<pasted_content>`-Tags einschließen, damit Claude eingefügtes Material von den eigenen Worten des Benutzers unterscheiden kann. Nur Einfügungen im letzten Textblock des Prompts werden eingeschlossen. Erfordert TypeScript Agent SDK v0.3.280 oder höher.1632Setzen Sie `inline_pastes`, um Claude Code mitzuteilen, welche Teile von `message.content` der Benutzer eingefügt statt eingetippt hat, ein String pro Einfügung. Der Prompt-Text bleibt dort, wo der Benutzer ihn platziert hat. Claude Code kann jede aufgeführte Einfügung an ihrer Stelle in `<pasted_content>`-Tags einschließen, damit Claude eingefügtes Material von den eigenen Worten des Benutzers unterscheiden kann. Nur Einfügungen im letzten Textblock des Prompts werden eingeschlossen. Erfordert TypeScript Agent SDK v0.3.280 oder höher.

1633 1633 

1634Jedes Einfügefeld hat eine Größenbeschränkung:

1635 

1636* `pasted_content`: Wenn die Einträge zusammen mit den darin enthaltenen Inhaltsblöcken mehr als 1.000 ergeben, ignoriert Claude Code das gesamte Feld.

1637* `inline_pastes`: Claude Code verwendet die ersten 100 nicht leeren Einträge und ignoriert den Rest.

1638 

1634Setzen Sie `shouldQuery`, `client_composed` oder `priority`, um zu ändern, wie Claude Code eine von Ihnen gesendete Nachricht behandelt:1639Setzen Sie `shouldQuery`, `client_composed` oder `priority`, um zu ändern, wie Claude Code eine von Ihnen gesendete Nachricht behandelt:

1635 1640 

1636* `shouldQuery`: Setzen Sie es auf `false`, um die Nachricht zum Transkript hinzuzufügen, ohne einen Assistenten-Turn auszulösen. Die Nachricht wird gehalten und in die nächste Benutzer-Nachricht zusammengeführt, die einen Turn auslöst. Verwenden Sie dies, um Kontext einzufügen, z. B. die Ausgabe eines Befehls, den Sie außerhalb des Bands ausgeführt haben, ohne einen Modell-Aufruf dafür auszugeben.1641* `shouldQuery`: Setzen Sie es auf `false`, um die Nachricht zum Transkript hinzuzufügen, ohne einen Assistenten-Turn auszulösen. Die Nachricht wird gehalten und in die nächste Benutzer-Nachricht zusammengeführt, die einen Turn auslöst. Verwenden Sie dies, um Kontext einzufügen, z. B. die Ausgabe eines Befehls, den Sie außerhalb des Bands ausgeführt haben, ohne einen Modell-Aufruf dafür auszugeben.


1775* `ttft_stream_ms`: Zeit in Millisekunden bis zum ersten `message_start`-Stream-Ereignis, wenn der Response-Stream öffnet. Niedriger als `ttft_ms`; die Lücke zwischen den beiden ist die Zeit, die zum Streamen der ersten Nachricht benötigt wird. Nur auf dem Success-Arm vorhanden.1780* `ttft_stream_ms`: Zeit in Millisekunden bis zum ersten `message_start`-Stream-Ereignis, wenn der Response-Stream öffnet. Niedriger als `ttft_ms`; die Lücke zwischen den beiden ist die Zeit, die zum Streamen der ersten Nachricht benötigt wird. Nur auf dem Success-Arm vorhanden.

1776* `user_message_uuid`: Die `uuid` der Nachricht, die Sie gesendet haben und die dieser Turn beantwortet hat. Siehe [`user_message_uuid`](#user_message_uuid) dazu, welche Ergebnisse sie tragen.1781* `user_message_uuid`: Die `uuid` der Nachricht, die Sie gesendet haben und die dieser Turn beantwortet hat. Siehe [`user_message_uuid`](#user_message_uuid) dazu, welche Ergebnisse sie tragen.

1777* `user_message_uuids`: Die `uuid`s jeder Nachricht, die Sie gesendet haben und die Claude Code in diesem Turn beantwortet hat. Siehe [`user_message_uuids`](#user_message_uuids).1782* `user_message_uuids`: Die `uuid`s jeder Nachricht, die Sie gesendet haben und die Claude Code in diesem Turn beantwortet hat. Siehe [`user_message_uuids`](#user_message_uuids).

1778* `resume_reason`: warum Claude Code diesen Turn erneut ausgeführt hat, nachdem ein Neustart ihn unterbrochen hatte. In beiden Zweigen vorhanden. Siehe [`resume_reason`](#resume_reason).1783* `resume_reason`: warum dieser Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde. In beiden Zweigen vorhanden. Siehe [`resume_reason`](#resume_reason).

1779* `local_command`: Der Name des Befehls, den der Turn versendet hat, auf dem Success-Ergebnis eines Turns, den ein Befehl abgeschlossen hat, ohne die Agentenschleife zu betreten, wie `/compact`. Der Name wird auf Kleinbuchstaben und Unterstriche gefaltet, daher meldet `/reload-plugins` `reload_plugins`. Ein Befehl, den ein MCP-Server bereitstellt, und das integrierte `/mcp` melden `mcp`. Ein Befehl, den Sie selbst definiert haben, meldet `custom`. Die Argumente sind nie enthalten. Fehlt bei jedem Turn, der die Agentenschleife betreten hat, und bei Sends, die keinen Befehl ausgeführt haben. Erfordert Agent SDK v0.3.268 oder später.1784* `local_command`: Der Name des Befehls, den der Turn versendet hat, auf dem Success-Ergebnis eines Turns, den ein Befehl abgeschlossen hat, ohne die Agentenschleife zu betreten, wie `/compact`. Der Name wird auf Kleinbuchstaben und Unterstriche gefaltet, daher meldet `/reload-plugins` `reload_plugins`. Ein Befehl, den ein MCP-Server bereitstellt, und das integrierte `/mcp` melden `mcp`. Ein Befehl, den Sie selbst definiert haben, meldet `custom`. Die Argumente sind nie enthalten. Fehlt bei jedem Turn, der die Agentenschleife betreten hat, und bei Sends, die keinen Befehl ausgeführt haben. Erfordert Agent SDK v0.3.268 oder später.

1780* `request_sent_wall_ms`: Epoch-Millisekunden, zu denen Claude Code die API-Anfrage versendet hat, für Joins gegen Server-seitige Zeitstempel. Nur zusammen mit [`user_message_uuid`](#user_message_uuid) vorhanden, auf einem Success-Ergebnis mit `is_error` false, dessen Turn eine API-Anfrage versendet hat.1785* `request_sent_wall_ms`: Epoch-Millisekunden, zu denen Claude Code die API-Anfrage versendet hat, für Joins gegen Server-seitige Zeitstempel. Nur zusammen mit [`user_message_uuid`](#user_message_uuid) vorhanden, auf einem Success-Ergebnis mit `is_error` false, dessen Turn eine API-Anfrage versendet hat.

1781* `first_content_frame_ms`: Zeit in Millisekunden bis zum ersten `content_block_start`- oder `content_block_delta`-Stream-Ereignis, wobei Thinking-Blöcke als Inhalt gezählt werden. Nur auf dem Success-Arm vorhanden, wenn `is_error` false ist. Erfordert Agent SDK v0.3.260 oder später.1786* `first_content_frame_ms`: Zeit in Millisekunden bis zum ersten `content_block_start`- oder `content_block_delta`-Stream-Ereignis, wobei Thinking-Blöcke als Inhalt gezählt werden. Nur auf dem Success-Arm vorhanden, wenn `is_error` false ist. Erfordert Agent SDK v0.3.260 oder später.


1825 1830 

1826* **Eine reguläre Nachricht, die Sie gesendet haben**, d. h. eine ohne `isSynthetic: true`: Der Turn beantwortet diese Nachricht für seinen gesamten Lauf. Wenn Sie mehrere Nachrichten dicht beieinander senden, kann Claude Code sie in einen Turn zusammenführen, und das Feld trägt dann nur die `uuid` der letzten Nachricht. Um die Antwort mit einer der zusammengeführten Nachrichten abzugleichen, verwenden Sie [`user_message_uuids`](#user_message_uuids).1831* **Eine reguläre Nachricht, die Sie gesendet haben**, d. h. eine ohne `isSynthetic: true`: Der Turn beantwortet diese Nachricht für seinen gesamten Lauf. Wenn Sie mehrere Nachrichten dicht beieinander senden, kann Claude Code sie in einen Turn zusammenführen, und das Feld trägt dann nur die `uuid` der letzten Nachricht. Um die Antwort mit einer der zusammengeführten Nachrichten abzugleichen, verwenden Sie [`user_message_uuids`](#user_message_uuids).

1827* **Eine Nachricht, die Sie mit `isSynthetic: true` gesendet haben**: Der Turn beantwortet diese Nachricht zunächst. Wenn Claude Code eine reguläre Nachricht von Ihnen zwischen Tool-Aufrufen aufgreift, beantwortet der Turn die aufgegriffene Nachricht von da an. Das Wiederholen der `uuid` einer synthetischen Nachricht erfordert Agent SDK v0.3.265 oder später; frühere Versionen wiederholen nichts bei synthetischen Turns.1832* **Eine Nachricht, die Sie mit `isSynthetic: true` gesendet haben**: Der Turn beantwortet diese Nachricht zunächst. Wenn Claude Code eine reguläre Nachricht von Ihnen zwischen Tool-Aufrufen aufgreift, beantwortet der Turn die aufgegriffene Nachricht von da an. Das Wiederholen der `uuid` einer synthetischen Nachricht erfordert Agent SDK v0.3.265 oder später; frühere Versionen wiederholen nichts bei synthetischen Turns.

1828* **Der Prompt, den Claude Code generiert, um einen unterbrochenen Turn unter [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/de/env-vars) erneut auszuführen**: Wenn der letzte Prompt des unterbrochenen Turns eine reguläre Nachricht ist, die Sie gesendet haben, ob sie den Turn öffnete oder Claude Code sie während des Turns aufgriff, beantwortet der erneute Durchlauf diese Nachricht zunächst. [`resume_reason`](#resume_reason) unterscheidet die Frames des erneuten Durchlaufs von denen des unterbrochenen Versuchs. Wenn der letzte Prompt keine reguläre Nachricht von Ihnen ist, beantwortet der erneute Durchlauf zunächst keine Nachricht von Ihnen. Wenn Claude Code eine reguläre Nachricht von Ihnen zwischen Tool-Aufrufen aufgreift, beantwortet der Turn die aufgegriffene Nachricht von da an. Das Wiederholen des Prompts des unterbrochenen Turns erfordert Agent SDK v0.3.268 oder später.1833* **Der Prompt, den Claude Code erzeugt, um einen unterbrochenen Turn unter [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/de/env-vars) fortzusetzen**: Wenn der letzte Prompt des unterbrochenen Turns eine reguläre, von Ihnen gesendete Nachricht ist, unabhängig davon, ob sie den Turn eröffnet hat oder von Claude Code während des Turns aufgenommen wurde, beantwortet der fortgesetzte Turn zunächst diese Nachricht. [`resume_reason`](#resume_reason) unterscheidet die Frames des fortgesetzten Turns von denen des unterbrochenen Versuchs. Wenn der letzte Prompt keine reguläre Nachricht von Ihnen ist, beantwortet der fortgesetzte Turn zunächst keine Ihrer Nachrichten. Wenn Claude Code zwischen Tool-Aufrufen eine reguläre Nachricht von Ihnen aufnimmt, beantwortet der Turn ab dann die aufgenommene Nachricht. Die Rückgabe des Prompts des unterbrochenen Turns erfordert Agent SDK v0.3.268 oder höher.

1829* **Jeder andere Prompt, den Claude Code selbst generiert hat**: Der Turn beantwortet zunächst keine Nachricht von Ihnen und seine Frames tragen keine Wiederholung. Wenn Claude Code eine reguläre Nachricht von Ihnen zwischen Tool-Aufrufen aufgreift, beantwortet der Turn diese Nachricht von da an. Die Aufgreif-Wiederholung erfordert Agent SDK v0.3.265 oder später; frühere Versionen wiederholen nichts bei diesen Turns.1834* **Jeder andere Prompt, den Claude Code selbst generiert hat**: Der Turn beantwortet zunächst keine Nachricht von Ihnen und seine Frames tragen keine Wiederholung. Wenn Claude Code eine reguläre Nachricht von Ihnen zwischen Tool-Aufrufen aufgreift, beantwortet der Turn diese Nachricht von da an. Die Aufgreif-Wiederholung erfordert Agent SDK v0.3.265 oder später; frühere Versionen wiederholen nichts bei diesen Turns.

1830 1835 

1831Claude Code wiederholt die `uuid` der beantworteten Nachricht auf drei Arten von Frames:1836Claude Code wiederholt die `uuid` der beantworteten Nachricht auf drei Arten von Frames:


1857 `resume_reason`1862 `resume_reason`

1858</h4>1863</h4>

1859 1864 

1860Warum Claude Code diesen Turn nach einem Neustart erneut ausgeführt hat. Claude Code setzt dieses Feld auf einen Turn, den es unter [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/de/env-vars) erneut ausgeführt hat, damit Sie Antwort und Ergebnis des erneuten Durchlaufs von denen des unterbrochenen Versuchs unterscheiden können. Erfordert Agent SDK v0.3.268 oder später.1865Warum dieser Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde. Claude Code setzt dieses Feld bei einem Turn, der einen unterbrochenen Turn unter [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/de/env-vars) fortsetzt, damit Sie Antwort und Ergebnis des fortgesetzten Turns von denen des unterbrochenen Versuchs unterscheiden können. Erfordert Agent SDK v0.3.268 oder höher.

1861 1866 

1862Claude Code setzt das Feld auf zwei Arten von Frames:1867Claude Code setzt das Feld auf zwei Arten von Frames:

1863 1868 

1864* **Das Ergebnis des erneuten Durchlaufs**: auf den Success- und Error-Armen gleichermaßen, unabhängig davon, ob das Ergebnis `user_message_uuid` trägt.1869* **Das Ergebnis des fortgesetzten Turns**: im Erfolgs- wie im Fehlerzweig, unabhängig davon, ob das Ergebnis `user_message_uuid` trägt.

1865* **Die Antwort-Frames des erneuten Durchlaufs**: diejenigen, die [`user_message_uuid`](#user_message_uuid) tragen.1870* **Die Antwort-Frames des fortgesetzten Turns**: diejenigen, die [`user_message_uuid`](#user_message_uuid) tragen.

1866 1871 

1867Der Wert ist ein kurzes Token in Kleinbuchstaben, das benennt, warum der Turn erneut ausgeführt wurde, etwa `interrupted_turn`.1872Der Wert ist ein kurzes Token in Kleinbuchstaben, etwa `interrupted_turn`.

1868 1873 

1869<h4 id="queued_turn_count">1874<h4 id="queued_turn_count">

1870 `queued_turn_count`1875 `queued_turn_count`


2029};2034};

2030```2035```

2031 2036 

2032Claude Code setzt `user_message_uuid` und `user_message_uuids` auf das erste Nicht-Ping-Stream-Ereignis des Turns und erneut, wenn sich die Nachricht, die der Turn beantwortet, ändert, unter den Bedingungen in [`user_message_uuid`](#user_message_uuid). Wenn Claude Code einen Turn erneut ausführt, den ein Neustart unterbrochen hat, tragen die Stream-Ereignisse des erneuten Durchlaufs, die diese Felder tragen, auch [`resume_reason`](#resume_reason).2037Claude Code setzt `user_message_uuid` und `user_message_uuids` im ersten Nicht-Ping-Stream-Ereignis des Turns und erneut, wenn sich die Nachricht ändert, die der Turn beantwortet, unter den in [`user_message_uuid`](#user_message_uuid) beschriebenen Bedingungen. Wenn der Turn einen Turn fortsetzt, der durch einen Neustart unterbrochen wurde, tragen die Stream-Ereignisse mit diesen Feldern auch [`resume_reason`](#resume_reason).

2033 2038 

2034<h3 id="sdkcompactboundarymessage">2039<h3 id="sdkcompactboundarymessage">

2035 `SDKCompactBoundaryMessage`2040 `SDKCompactBoundaryMessage`


3558| - | - | - |3563| - | - | - |

3559| `script` | `string` | Inline-Workflow-Skript. Muss mit `export const meta = { name, description }` als Literal beginnen, gefolgt vom Skript-Body mit `agent()`, `parallel()`, `pipeline()` und `phase()`. Ein optionales `phases`-Array in `meta` gruppiert Agenten unter benannten Phasen in der Fortschrittsansicht |3564| `script` | `string` | Inline-Workflow-Skript. Muss mit `export const meta = { name, description }` als Literal beginnen, gefolgt vom Skript-Body mit `agent()`, `parallel()`, `pipeline()` und `phase()`. Ein optionales `phases`-Array in `meta` gruppiert Agenten unter benannten Phasen in der Fortschrittsansicht |

3560| `name` | `string` | Name eines integrierten Workflows oder eines in `.claude/workflows/` gespeicherten. Wird zu einem Skript aufgelöst |3565| `name` | `string` | Name eines integrierten Workflows oder eines in `.claude/workflows/` gespeicherten. Wird zu einem Skript aufgelöst |

3561| `scriptPath` | `string` | Pfad zu einer Workflow-Skriptdatei auf der Festplatte. Hat Vorrang vor `script` und `name`. Claude Code speichert jede Aufrufs-Skript und gibt den Pfad im Ergebnis zurück, damit Sie diese Datei bearbeiten und mit demselben `scriptPath` erneut aufrufen können, um zu iterieren |3566| `scriptPath` | `string` | Pfad zu einer Workflow-Skriptdatei auf der Festplatte, etwa der `scriptPath`, den ein vorheriger Lauf zurückgegeben hat. Hat Vorrang vor `script` und `name`. Claude Code lehnt `scriptPath` mit einem Fehler ab, wenn die Tools der Sitzung `Read` nicht enthalten |

3562| `args` | `unknown` | Eingabewert, der dem Skript als globales `args` verfügbar gemacht wird, für parametrisierte benannte Workflows wie eine Forschungsfrage oder eine Liste von Dateipfaden. Übergeben Sie Arrays und Objekte als tatsächliche JSON-Werte, nicht als JSON-codierter String |3567| `args` | `unknown` | Eingabewert, der dem Skript als globales `args` verfügbar gemacht wird, für parametrisierte benannte Workflows wie eine Forschungsfrage oder eine Liste von Dateipfaden. Übergeben Sie Arrays und Objekte als tatsächliche JSON-Werte, nicht als JSON-codierter String |

3563| `resumeFromRunId` | `string` | Run-ID eines vorherigen `Workflow`-Aufrufs zum Fortsetzen. Abgeschlossene `agent()`-Aufrufe mit unveränderten Eingaben geben normalerweise zwischengespeicherte Ergebnisse zurück; der Rest läuft live. [Nach einer Pause fortsetzen](/docs/de/workflows#resume-after-a-pause) behandelt, welche abgeschlossenen Aufrufe erneut ausgeführt werden. Nur gleiche Sitzung |3568| `resumeFromRunId` | `string` | Run-ID eines vorherigen `Workflow`-Aufrufs zum Fortsetzen. Abgeschlossene `agent()`-Aufrufe mit unveränderten Eingaben geben normalerweise zwischengespeicherte Ergebnisse zurück; der Rest läuft live. [Nach einer Pause fortsetzen](/docs/de/workflows#resume-after-a-pause) behandelt, welche abgeschlossenen Aufrufe erneut ausgeführt werden. Nur gleiche Sitzung |

3564| `title` | `string` | Ignoriert; der `meta`-Block des Skripts setzt den Titel |3569| `title` | `string` | Ignoriert; der `meta`-Block des Skripts setzt den Titel |

chrome.md +3 −4

Details

129 Berechtigungsabfragen in VS Code-Sitzungen129 Berechtigungsabfragen in VS Code-Sitzungen

130</h3>130</h3>

131 131 

132In einer VS Code-Sitzung hängt es davon ab, wie die Sitzung mit Ihrem Browser verbunden wurde, ob Claude Code vor einer Browser-Aktion bei Ihnen nachfragt:132Wenn Claude Code in einer VS Code-Sitzung vor einer Browser-Aktion bei Ihnen nachfragt, erscheint die Abfrage als Karte im Chat-Panel. Wenn die Aktion auf eine Website abzielt, die Sie nicht zugelassen haben, bietet die Karte außerdem an, diese Website zuzulassen.

133 133 

134* **Sie haben `@browser` eingegeben**: Die Erweiterung genehmigt jede Browser-Aktion, bei der Claude Code sonst bei Ihnen nachfragen würde.134In einer Sitzung, die sich beim Start mit Ihrem Browser verbunden hat, weil [Enabled by default](#enable-chrome-by-default) aktiviert ist, fragt Claude Code vor Browser-Aktionen auf einer Website, die Sie nicht zugelassen haben, in den Berechtigungsmodi Manual, Edit automatically, Auto und Bypass permissions bei Ihnen nach. In den Berechtigungsmodi Auto und Bypass permissions gilt dies, bis Sie in dieser Sitzung `@browser` eingeben.

135* **Die Einstellung [Enabled by default](#enable-chrome-by-default) hat sie beim Start verbunden**: Claude Code fragt vor Browser-Aktionen auf einer Website, die Sie nicht zugelassen haben, in den Berechtigungsmodi Manual, Edit automatically, Auto und Bypass permissions bei Ihnen nach, bis Sie in dieser Sitzung `@browser` eingeben.

136 135 

137<h3 id="browser-tools-in-plan-mode">136<h3 id="browser-tools-in-plan-mode">

138 Browser-Tools im Plan-Modus137 Browser-Tools im Plan-Modus

139</h3>138</h3>

140 139 

141Im [Plan-Modus](/docs/de/permission-modes#analyze-before-you-edit-with-plan-mode) wird eine Berechtigungsabfrage angezeigt, bevor Claude ein GIF aufzeichnet, einen neuen Tab öffnet oder eine Verknüpfung ausführt, außer in einer VS Code-Sitzung, in der Sie [`@browser`](#permission-prompts-in-vs-code-sessions) eingegeben haben. Wenn in einer interaktiven CLI-Sitzung der [Bypass-Berechtigungsmodus verfügbar ist](/docs/de/permission-modes#skip-all-checks-with-bypasspermissions-mode) und das [Feature-Flag-Abrufen](/docs/de/env-vars#features-that-need-feature-flag-fetching) deaktiviert ist, werden diese Aufrufe ohne Abfrage ausgeführt.140Im [Plan-Modus](/docs/de/permission-modes#analyze-before-you-edit-with-plan-mode) wird eine Berechtigungsabfrage angezeigt, bevor Claude ein GIF aufzeichnet, einen neuen Tab öffnet oder eine Verknüpfung ausführt. Wenn in einer interaktiven CLI-Sitzung der [Bypass-Berechtigungsmodus verfügbar ist](/docs/de/permission-modes#skip-all-checks-with-bypasspermissions-mode) und das [Feature-Flag-Abrufen](/docs/de/env-vars#features-that-need-feature-flag-fetching) deaktiviert ist, werden diese Aufrufe ohne Abfrage ausgeführt.

142 141 

143Ein `tabs_context_mcp`-Aufruf fordert auch eine Genehmigung an, wenn er `createIfEmpty` setzt, und ebenso ein `browser_batch`-Aufruf, der eine dieser Aktionen enthält.142Ein `tabs_context_mcp`-Aufruf fordert auch eine Genehmigung an, wenn er `createIfEmpty` setzt, und ebenso ein `browser_batch`-Aufruf, der eine dieser Aktionen enthält.

144 143 

Details

981 * **Gemischte Schlüssel**: Eine Datei, die sowohl `code` als auch `cli` oder dessen frühere Schreibweise `settings` enthält, stoppt das Gateway beim Start. Stellen Sie alle Blöcke unter einen Schlüssel, in einer einzigen Bearbeitung.981 * **Gemischte Schlüssel**: Eine Datei, die sowohl `code` als auch `cli` oder dessen frühere Schreibweise `settings` enthält, stoppt das Gateway beim Start. Stellen Sie alle Blöcke unter einen Schlüssel, in einer einzigen Bearbeitung.

982</Warning>982</Warning>

983 983 

984Die Claude-Code-Einstellungen einer Richtlinie, etwa eine Regel, die das Lesen von `.env`-Dateien verweigert, gehören in einen Block unter dem Schlüssel `cli` oder `code`. Beide Schlüssel nehmen denselben Inhalt auf. Der Schlüssel entscheidet, wo die Einstellungen durchgesetzt werden:984Die Claude-Code-Einstellungen einer Richtlinie, etwa eine Regel, die das Lesen von `.env`-Dateien verweigert, gehören in einen Block unter dem Schlüssel `cli` oder `code`. `code` ist der empfohlene Schlüssel, `cli` der Legacy-Schlüssel. Beide Schlüssel nehmen denselben Inhalt auf. Der Schlüssel bestimmt, wo die Einstellungen durchgesetzt werden:

985 985 

986* **`cli`**: das Terminal, die Erweiterungen für VS Code und JetBrains sowie das Agent SDK. Unter `cli` erhält der Code-Tab von Claude Desktop die [abgeleiteten Einstellungen](#claude-desktop-overlay), sodass eine eingeschränkte Regel wie `Read(./.env)` einen Benutzer dort nicht aufhält.986* **`cli`**: das Terminal, die Erweiterungen für VS Code und JetBrains sowie das Agent SDK. Unter `cli` erhält der Code-Tab von Claude Desktop die [abgeleiteten Einstellungen](#claude-desktop-overlay), sodass eine eingeschränkte Regel wie `Read(./.env)` einen Benutzer dort nicht aufhält.

987* **`code`**: dieselben Orte, und auch der Code-Tab von Claude Desktop kann abgedeckt werden.987* **`code`**: dieselben Orte, und auch der Code-Tab von Claude Desktop kann abgedeckt werden.

988 988 

989Die Entscheidung lautet, ob diese Einstellungen auch den Code-Tab abdecken sollen. Falls nicht, ändern Sie nichts. Eine Datei, die `cli` verwendet, funktioniert wie bisher, und ein Gateway, das `cli` in einer Richtlinie mit einem [`desktop`](#claude-desktop-overlay)-Schlüssel findet, warnt beim Start und startet trotzdem. Um den Code-Tab abzudecken, wechseln Sie zu `code`, dem empfohlenen Schlüssel.989Eine Datei, die `cli` verwendet, funktioniert wie bisher, und ein Gateway, das `cli` in einer Richtlinie mit einem [`desktop`](#claude-desktop-overlay)-Schlüssel findet, warnt beim Start und startet trotzdem. Wechseln Sie zu `code`, damit die Einstellungen auch den Code-Tab abdecken können.

990 990 

991Lesen Sie vor dem Wechsel [`code`-Einstellungen im Code-Tab anwenden](#apply-code-settings-in-the-code-tab). Die Richtlinie benötigt einen `desktop`-Schlüssel, und die Rechner der Benutzer müssen eingerichtet werden, bevor die Einstellungen dort gelten; außerdem wird die Websuche in Claude Desktop deaktiviert.991Lesen Sie vor dem Wechsel [`code`-Einstellungen im Code-Tab anwenden](#apply-code-settings-in-the-code-tab). Die Richtlinie benötigt einen `desktop`-Schlüssel, und die Rechner der Benutzer müssen eingerichtet werden, bevor die Einstellungen dort gelten; außerdem wird die Websuche in Claude Desktop deaktiviert.

992 992 

Details

277 277 

278Threads laufen im [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode), wenn das Modell des Threads dies unterstützt, sodass die meisten Tool-Aufrufe ohne Nachfrage ausgeführt werden. Wenn ein Thread Ihre Genehmigung benötigt, befindet sich die Aufforderung in diesem Thread und der Thread wartet, bis Sie dort antworten. Claude in der Projektkonversation zu sagen, dass er fortfahren soll, erreicht ihn nicht.278Threads laufen im [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode), wenn das Modell des Threads dies unterstützt, sodass die meisten Tool-Aufrufe ohne Nachfrage ausgeführt werden. Wenn ein Thread Ihre Genehmigung benötigt, befindet sich die Aufforderung in diesem Thread und der Thread wartet, bis Sie dort antworten. Claude in der Projektkonversation zu sagen, dass er fortfahren soll, erreicht ihn nicht.

279 279 

280Jede Genehmigung deckt diese Aufforderung oder den Rest dieses Threads ab, wenn Sie die breitere Option wählen. Um jeden Thread bestimmte Befehle ohne Nachfrage ausführen zu lassen, oder um einige zu blockieren, fügen Sie [Berechtigungsregeln](/docs/de/permissions) zur `.claude/settings.json` des Repositorys hinzu. Cloud-Threads wenden sie nur in einem Projekt mit einem Repository an; siehe [Was Threads aus Ihren Repositorys aufgreifen](#what-threads-pick-up-from-your-repositories). In einem Projekt mit mehreren Repositorys erreichen die Berechtigungsregeln eines Repositorys keinen Cloud-Thread, daher verlassen Sie sich auf Auto-Modus und auf die Genehmigungen, die Sie in jedem Thread geben.280Jede Genehmigung deckt diese Abfrage oder den Rest dieses Threads ab, wenn Sie die breitere Option wählen.

281 

282Um jeden Thread bestimmte Befehle ohne Nachfrage ausführen zu lassen, oder um einige zu blockieren, fügen Sie [Berechtigungsregeln](/docs/de/permissions) zur `.claude/settings.json` des Repositorys hinzu. Prüfen Sie, ob Cloud-Threads in Ihrem Projekt sie anwenden:

283 

284* **Ein Repository**: Cloud-Threads wenden die Regeln an. Siehe [Was Threads aus Ihren Repositorys aufgreifen](#what-threads-pick-up-from-your-repositories).

285* **Mehrere Repositorys, von Anthropic gehostete Umgebung**: Die Berechtigungsregeln keines Repositorys erreichen einen Cloud-Thread, daher verlassen Sie sich auf den Auto-Modus und auf die Genehmigungen, die Sie in jedem Thread geben.

286* **Mehrere Repositorys, selbst gehostete Umgebung**: siehe [welche Repository-Einstellungen gelten](/docs/de/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

281 287 

282<h3 id="run-a-thread-on-your-own-computer">288<h3 id="run-a-thread-on-your-own-computer">

283 Führen Sie einen Thread auf Ihrem eigenen Computer aus289 Führen Sie einen Thread auf Ihrem eigenen Computer aus


381 Was Threads aus Ihren Repositories aufgreifen387 Was Threads aus Ihren Repositories aufgreifen

382</h3>388</h3>

383 389 

384Jeder Cloud-Thread klont jedes Repository im Projekt und lädt `CLAUDE.md` und Skills aus allen. Berechtigungsregeln, Hooks und `env` kommen nur aus der `.claude/settings.json` in dem Verzeichnis, in dem der Thread startet: innerhalb des Repositorys, wenn das Projekt eines hat, und über den Klonen, wenn es mehrere hat, wo keine Datei eines Repositorys dafür gelesen wird.390Jeder Cloud-Thread klont jedes Repository im Projekt und lädt `CLAUDE.md` und Skills aus allen. Berechtigungsregeln, Hooks und `env` kommen nur aus der `.claude/settings.json` in dem Verzeichnis, in dem der Thread startet.

385 391 

386| In jedem Repository | Ein Repository | Mehrere Repositories |392| In jedem Repository | Ein Repository | Mehrere Repositories |

387| :- | :- | :- |393| :- | :- | :- |

388| `CLAUDE.md` | Geladen, wenn der Thread startet | Geladen aus jedem Repository, wenn der Thread startet |394| `CLAUDE.md` | Geladen, wenn der Thread startet | Geladen aus jedem Repository, wenn der Thread startet |

389| Skills, Agenten und Befehle unter `.claude/` | Geladen | Geladen aus jedem Repository |395| Skills, Agenten und Befehle unter `.claude/` | Geladen | Geladen aus jedem Repository |

390| Plugins, die in `.claude/settings.json` aktiviert sind | Nicht geladen. Fügen Sie das Plugin stattdessen in **Projekteinstellungen > Plugins** hinzu | Nicht geladen. Fügen Sie das Plugin stattdessen in **Projekteinstellungen > Plugins** hinzu |396| Plugins, die in `.claude/settings.json` aktiviert sind | Nicht geladen. Fügen Sie das Plugin stattdessen in **Projekteinstellungen > Plugins** hinzu | Nicht geladen. Fügen Sie das Plugin stattdessen in **Projekteinstellungen > Plugins** hinzu |

391| Berechtigungsregeln, Hooks und `env`, die in `.claude/settings.json` definiert sind | Gelten für den Thread, außer den `env`-Schlüsseln, die [keine Cloud-Sitzung berücksichtigt](/docs/de/cloud-environments#what-carries-over-from-your-setup) | Gelten nicht |397| Berechtigungsregeln, Hooks und `env`, die in `.claude/settings.json` definiert sind | Gelten für den Thread, außer den `env`-Schlüsseln, die [keine Cloud-Sitzung berücksichtigt](/docs/de/cloud-environments#what-carries-over-from-your-setup) | Gelten nicht in einer von Anthropic gehosteten Umgebung. Für eine selbst gehostete Umgebung siehe [welche Repository-Einstellungen gelten](/docs/de/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

392 398 

393In einem Projekt mit mehreren Repositories ist jeder Klon an den Thread als [zusätzliches Verzeichnis](/docs/de/memory#load-from-additional-directories) mit aktiviertem `CLAUDE.md`-Laden angehängt, weshalb die `CLAUDE.md` und Skills jedes Repositorys beim Start geladen werden, obwohl der Thread über ihnen startet. Legen Sie in einem solchen Projekt stehende Regeln in Projektanweisungen fest und geben Sie Threads Umgebungsvariablen über die [Cloud-Umgebung](#choose-an-environment-for-threads).399Legen Sie in einem Projekt mit mehreren Repositories stehende Regeln in Projektanweisungen fest und geben Sie Threads Umgebungsvariablen über die [Cloud-Umgebung](#choose-an-environment-for-threads).

394 400 

395<h3 id="choose-an-environment-for-threads">401<h3 id="choose-an-environment-for-threads">

396 Wählen Sie eine Umgebung für Threads402 Wählen Sie eine Umgebung für Threads


406 412 

407Cloud-Threads haben nicht die Skills, MCP-Server, Plugins und Tools, die nur auf Ihrem Computer installiert sind. Ein Thread, den Claude auf Ihrem Computer über [Remote Control](/docs/de/remote-control) ausführt, verwendet das, was dort installiert ist. Um jedes dieser Elemente für Cloud-Threads verfügbar zu machen:413Cloud-Threads haben nicht die Skills, MCP-Server, Plugins und Tools, die nur auf Ihrem Computer installiert sind. Ein Thread, den Claude auf Ihrem Computer über [Remote Control](/docs/de/remote-control) ausführt, verwendet das, was dort installiert ist. Um jedes dieser Elemente für Cloud-Threads verfügbar zu machen:

408 414 

409* Skills, Subagenten und Befehle: Committen Sie sie in ein Repository, das Sie zum Projekt hinzugefügt haben, zum Beispiel einen Skill unter `.claude/skills/<skill-name>/SKILL.md`. Jeder Cloud-Thread klont jedes Repository im Projekt und lädt `.claude/skills/`, `.claude/agents/` und `.claude/commands/` aus jedem davon, also ist ein Skill, der in ein Repository committet wird, in jedem Cloud-Thread verfügbar. Cloud-Threads laden auch die Skills, die Sie für Ihr claude.ai-Konto aktivieren.415* Skills, Subagenten und Befehle: Committen Sie sie in ein Repository, das Sie zum Projekt hinzugefügt haben, zum Beispiel einen Skill unter `.claude/skills/<skill-name>/SKILL.md`. Jeder Cloud-Thread klont jedes Repository im Projekt und lädt `.claude/skills/`, `.claude/agents/` und `.claude/commands/` aus jedem davon, also ist ein Skill, der in ein Repository committet wird, in jedem Cloud-Thread verfügbar. Cloud-Threads laden auch die [Skills, die Sie für Ihr claude.ai-Konto aktivieren](/docs/de/skills#skills-in-cowork-and-cloud-sessions).

410* Plugins: Fügen Sie sie in **Projekteinstellungen > Plugins** hinzu; sie werden in jeden neuen Cloud-Thread geladen. Plugins, die ein Repository in seiner `.claude/settings.json` deklariert, [werden nicht in Cloud-Threads geladen](/docs/de/cloud-environments#what-carries-over-from-your-setup).416* Plugins: Fügen Sie sie in **Projekteinstellungen > Plugins** hinzu; sie werden in jeden neuen Cloud-Thread geladen. Plugins, die ein Repository in seiner `.claude/settings.json` deklariert, [werden nicht in Cloud-Threads geladen](/docs/de/cloud-environments#what-carries-over-from-your-setup).

411* MCP-Server: Cloud-Threads erhalten ihre MCP-Tools von den Konnektoren in Ihrem claude.ai-Konto, also MCP-Servern, die Sie einmal unter [claude.ai/customize/connectors](https://claude.ai/customize/connectors) oder über den Link **Konnektoren verwalten** in **Projekteinstellungen > Umgebung** verbinden. Jeder Cloud-Thread kann alle ohne projektspezifische Einrichtung verwenden. Die Projektkonversation selbst hat keine Konnektoren, also senden Sie Arbeit, die einen benötigt, als Aufgabe für einen Cloud-Thread. In einem Projekt mit einem Repository laden Cloud-Threads auch MCP-Server aus der [`.mcp.json`](/docs/de/cloud-environments#what-carries-over-from-your-setup) dieses Repositorys. [Wie Konnektoren Claude Code erreichen](/docs/de/mcp#how-connectors-reach-claude-code) listet die Regeln für Cloud-Sitzungen und die Einstellungen auf, die Konnektoren ausschalten.417* MCP-Server: Cloud-Threads erhalten ihre MCP-Tools von den Konnektoren in Ihrem claude.ai-Konto, also MCP-Servern, die Sie einmal unter [claude.ai/customize/connectors](https://claude.ai/customize/connectors) oder über den Link **Konnektoren verwalten** in **Projekteinstellungen > Umgebung** verbinden. Jeder Cloud-Thread kann alle ohne projektspezifische Einrichtung verwenden. Die Projektkonversation selbst hat keine Konnektoren, also senden Sie Arbeit, die einen benötigt, als Aufgabe für einen Cloud-Thread. In einem Projekt mit einem Repository laden Cloud-Threads auch MCP-Server aus der [`.mcp.json`](/docs/de/cloud-environments#what-carries-over-from-your-setup) dieses Repositorys. [Wie Konnektoren Claude Code erreichen](/docs/de/mcp#how-connectors-reach-claude-code) listet die Regeln für Cloud-Sitzungen und die Einstellungen auf, die Konnektoren ausschalten.

412* Befehlszeilen-Tools und Pakete: Installieren Sie sie im [Setup-Skript](/docs/de/cloud-environments#setup-scripts) der Umgebung.418* Befehlszeilen-Tools und Pakete: Installieren Sie sie im [Setup-Skript](/docs/de/cloud-environments#setup-scripts) der Umgebung.

Details

108| `--maintenance` | Führen Sie [Setup-Hooks](/docs/de/hooks#setup) mit dem `maintenance`-Matcher vor der Sitzung aus (nur Print-Modus) | `claude -p --maintenance "query"` |108| `--maintenance` | Führen Sie [Setup-Hooks](/docs/de/hooks#setup) mit dem `maintenance`-Matcher vor der Sitzung aus (nur Print-Modus) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Stoppt den Lauf, sobald die geschätzten Ausgaben für API-Aufrufe diesen Betrag erreichen (nur Print-Modus). Claude Code prüft die Obergrenze anhand seiner [clientseitigen Kostenschätzung](/docs/de/agent-sdk/cost-tracking#estimates-not-billing), die von Ihrer Rechnung abweichen kann. Ausgaben von [Subagenten](/docs/de/sub-agents) zählen zur Obergrenze. Die Ausgaben können die Obergrenze überschreiten, [planen Sie daher Spielraum ein](/docs/de/agent-sdk/agent-loop#budget-headroom). Wenn Sie mit `--continue` oder `--resume` zu einer Konversation zurückkehren, zählen [aus früheren Läufen wiederhergestellte](/docs/de/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) Gesamtsummen nicht zur Obergrenze. Sobald die Ausgaben die Obergrenze erreichen, schlägt das Spawnen eines weiteren Subagenten mit `Budget limit reached` fehl, und Claude Code stoppt Hintergrund-Subagenten, die noch laufen; die Obergrenzendurchsetzungsverhalten erfordern Claude Code v2.1.217 oder später | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Stoppt den Lauf, sobald die geschätzten Ausgaben für API-Aufrufe diesen Betrag erreichen (nur Print-Modus). Claude Code prüft die Obergrenze anhand seiner [clientseitigen Kostenschätzung](/docs/de/agent-sdk/cost-tracking#estimates-not-billing), die von Ihrer Rechnung abweichen kann. Ausgaben von [Subagenten](/docs/de/sub-agents) zählen zur Obergrenze. Die Ausgaben können die Obergrenze überschreiten, [planen Sie daher Spielraum ein](/docs/de/agent-sdk/agent-loop#budget-headroom). Wenn Sie mit `--continue` oder `--resume` zu einer Konversation zurückkehren, zählen [aus früheren Läufen wiederhergestellte](/docs/de/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) Gesamtsummen nicht zur Obergrenze. Sobald die Ausgaben die Obergrenze erreichen, schlägt das Spawnen eines weiteren Subagenten mit `Budget limit reached` fehl, und Claude Code stoppt Hintergrund-Subagenten, die noch laufen; die Obergrenzendurchsetzungsverhalten erfordern Claude Code v2.1.217 oder später | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Begrenzen Sie die Anzahl der agentengesteuerten Turns (nur Print-Modus). Beendet sich mit einem Fehler, wenn die Grenze erreicht wird. Standardmäßig keine Grenze. Mit `--input-format stream-json` bleibt eine Nachricht, die noch in die Warteschlange eingereiht ist, wenn die Grenze einen Turn beendet, in der Warteschlange und startet einen neuen Turn mit seiner eigenen Grenze | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Begrenzen Sie die Anzahl der agentengesteuerten Turns (nur Print-Modus). Beendet sich mit einem Fehler, wenn die Grenze erreicht wird. Standardmäßig keine Grenze. Mit `--input-format stream-json` bleibt eine Nachricht, die noch in die Warteschlange eingereiht ist, wenn die Grenze einen Turn beendet, in der Warteschlange und startet einen neuen Turn mit seiner eigenen Grenze | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Laden Sie MCP-Server aus JSON-Dateien oder Strings (durch Leerzeichen getrennt). Wenn Sie diesen Flag mit `-p` übergeben, wartet Claude Code darauf, dass noch ausstehende Server verbunden werden, bevor der erste Turn ausgeführt wird, bis zum [`MCP_TIMEOUT`](/docs/de/env-vars)-Startup-Timeout, standardmäßig 30 Sekunden; ein Server mit einer [zwischengespeicherten Tool-Liste](/docs/de/mcp#managing-your-servers) überspringt das Warten und verbindet sich bei der ersten Verwendung. Das Warten erfordert Claude Code v2.1.221 oder später | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Laden Sie MCP-Server aus JSON-Dateien oder Strings (durch Leerzeichen getrennt). Wenn Sie diesen Flag mit `-p` übergeben, wartet Claude Code darauf, dass noch ausstehende Server verbunden werden, bevor der erste Turn ausgeführt wird, bis zum [`MCP_TIMEOUT`](/docs/de/env-vars)-Startup-Timeout, standardmäßig 30 Sekunden; ein Server mit einer [zwischengespeicherten Tool-Liste](/docs/de/mcp#managing-your-servers) überspringt das Warten und verbindet sich bei der ersten Verwendung. In einer [selbstgehosteten Umgebung](/docs/de/self-hosted-environments-configuration#connection-timing) gilt stattdessen eine kürzere Wartezeit. Das Warten erfordert Claude Code v2.1.221 oder später | `claude --mcp-config ./mcp.json` |

112| `--model` | Legt das Modell für die aktuelle Sitzung mit einem [Modellalias](/docs/de/model-config#model-aliases) wie `sonnet`, `opus`, `haiku` oder `fable` oder einem vollständigen Modellnamen fest. Überschreibt die [`model`](/docs/de/settings-reference#model)-Einstellung und [`ANTHROPIC_MODEL`](/docs/de/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Legt das Modell für die aktuelle Sitzung mit einem [Modellalias](/docs/de/model-config#model-aliases) wie `sonnet`, `opus`, `haiku` oder `fable` oder einem vollständigen Modellnamen fest. Überschreibt die [`model`](/docs/de/settings-reference#model)-Einstellung und [`ANTHROPIC_MODEL`](/docs/de/model-config#environment-variables) | `claude --model claude-sonnet-5` |

113| `--name`, `-n` | Legen Sie einen Anzeigenamen für die Sitzung fest, der in `/resume` und der Terminalleiste angezeigt wird. Sie können eine benannte Sitzung mit `claude --resume <name>` fortsetzen. In einer interaktiven Sitzung, wenn eine andere Live-Sitzung auf dieser Maschine bereits den Namen verwendet, wendet Claude Code [eine Variante davon](/docs/de/sessions#name-your-sessions) an. <br /><br />[`/rename`](/docs/de/commands) ändert den Namen während der Sitzung und zeigt ihn auch in der Eingabeaufforderungsleiste an | `claude -n "my-feature-work"` |113| `--name`, `-n` | Legen Sie einen Anzeigenamen für die Sitzung fest, der in `/resume` und der Terminalleiste angezeigt wird. Sie können eine benannte Sitzung mit `claude --resume <name>` fortsetzen. In einer interaktiven Sitzung, wenn eine andere Live-Sitzung auf dieser Maschine bereits den Namen verwendet, wendet Claude Code [eine Variante davon](/docs/de/sessions#name-your-sessions) an. <br /><br />[`/rename`](/docs/de/commands) ändert den Namen während der Sitzung und zeigt ihn auch in der Eingabeaufforderungsleiste an | `claude -n "my-feature-work"` |

114| `--no-chrome` | Deaktivieren Sie [Chrome-Browser-Integration](/docs/de/chrome) für diese Sitzung | `claude --no-chrome` |114| `--no-chrome` | Deaktivieren Sie [Chrome-Browser-Integration](/docs/de/chrome) für diese Sitzung | `claude --no-chrome` |

Details

314| Plugins und Marketplaces, die in der `.claude/settings.json` Ihres Repos deklariert sind | Nein | Eine Cloud-Sitzung installiert nicht die Plugins, die ein Repository unter [`enabledPlugins`](/docs/de/settings-reference#enabledplugins) aktiviert, einschließlich solcher aus den Marketplaces, die es unter [`extraKnownMarketplaces`](/docs/de/settings-reference#extraknownmarketplaces) auflistet |314| Plugins und Marketplaces, die in der `.claude/settings.json` Ihres Repos deklariert sind | Nein | Eine Cloud-Sitzung installiert nicht die Plugins, die ein Repository unter [`enabledPlugins`](/docs/de/settings-reference#enabledplugins) aktiviert, einschließlich solcher aus den Marketplaces, die es unter [`extraKnownMarketplaces`](/docs/de/settings-reference#extraknownmarketplaces) auflistet |

315| Die [Server-verwalteten Einstellungen](/docs/de/server-managed-settings) Ihrer Organisation | Ja, außer in [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen | Abgerufen von Anthropic-Servern, wenn die Sitzung startet. Siehe [Surface coverage](/docs/de/model-config#surface-coverage) für die Durchsetzung von `availableModels` in Cloud-Sitzungen. Einstellungen, die auf Ihrem Gerät über MDM oder verwaltete Einstellungsdateien bereitgestellt werden, gelten nicht, da die Sitzung auf einer von Anthropic verwalteten VM läuft; in einer [selbstgehosteten Umgebung](/docs/de/self-hosted-environments) lesen Sitzungen auch die verwaltete Einstellungsdatei im Runner-Image, gemäß [wie Claude Code verwaltete Quellen kombiniert](/docs/de/managed-settings#how-claude-code-combines-managed-sources) |315| Die [Server-verwalteten Einstellungen](/docs/de/server-managed-settings) Ihrer Organisation | Ja, außer in [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen | Abgerufen von Anthropic-Servern, wenn die Sitzung startet. Siehe [Surface coverage](/docs/de/model-config#surface-coverage) für die Durchsetzung von `availableModels` in Cloud-Sitzungen. Einstellungen, die auf Ihrem Gerät über MDM oder verwaltete Einstellungsdateien bereitgestellt werden, gelten nicht, da die Sitzung auf einer von Anthropic verwalteten VM läuft; in einer [selbstgehosteten Umgebung](/docs/de/self-hosted-environments) lesen Sitzungen auch die verwaltete Einstellungsdatei im Runner-Image, gemäß [wie Claude Code verwaltete Quellen kombiniert](/docs/de/managed-settings#how-claude-code-combines-managed-sources) |

316| Ihre Benutzer `~/.claude/CLAUDE.md` | Nein | Lebt auf Ihrem Computer, nicht im Repo. Siehe [Persönliche Präferenzen hinzufügen, ohne sie in das Repo zu committen](#add-personal-preferences-without-committing-to-the-repo) |316| Ihre Benutzer `~/.claude/CLAUDE.md` | Nein | Lebt auf Ihrem Computer, nicht im Repo. Siehe [Persönliche Präferenzen hinzufügen, ohne sie in das Repo zu committen](#add-personal-preferences-without-committing-to-the-repo) |

317| Ihre Benutzer `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | Nein | Leben auf Ihrem Computer, nicht im Repo. Committen Sie sie stattdessen in das Verzeichnis `.claude/` des Repos. Cloud-Sitzungen laden automatisch Skills, die Sie auf claude.ai aktivieren |317| Ihre Benutzer `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` | Nein | Leben auf Ihrem Computer, nicht im Repo. Committen Sie sie stattdessen in das Verzeichnis `.claude/` des Repos. Cloud-Sitzungen laden automatisch [Skills, die Sie auf claude.ai aktivieren](/docs/de/skills#skills-in-cowork-and-cloud-sessions) |

318| Plugins, die nur in Ihren Benutzereinstellungen aktiviert sind | Nein | `enabledPlugins` im Benutzer-Geltungsbereich lebt in `~/.claude/settings.json` auf Ihrem Computer |318| Plugins, die nur in Ihren Benutzereinstellungen aktiviert sind | Nein | `enabledPlugins` im Benutzer-Geltungsbereich lebt in `~/.claude/settings.json` auf Ihrem Computer |

319| MCP-Server, die Sie mit `claude mcp add` im standardmäßigen lokalen Geltungsbereich oder im Benutzer-Geltungsbereich hinzugefügt haben | Nein | Diese schreiben in `~/.claude.json` auf Ihrem Computer, nicht im Repo. Fügen Sie den Server mit `claude mcp add --scope project` hinzu, das die [`.mcp.json`](/docs/de/mcp#project-scope) des Repos schreibt, und committen Sie diese Datei. Eine Sitzung mit einem Repository lädt sie |319| MCP-Server, die Sie mit `claude mcp add` im standardmäßigen lokalen Geltungsbereich oder im Benutzer-Geltungsbereich hinzugefügt haben | Nein | Diese schreiben in `~/.claude.json` auf Ihrem Computer, nicht im Repo. Fügen Sie den Server mit `claude mcp add --scope project` hinzu, das die [`.mcp.json`](/docs/de/mcp#project-scope) des Repos schreibt, und committen Sie diese Datei. Eine Sitzung mit einem Repository lädt sie |

320| Transport-Variablen im `env`-Block der `.claude/settings.json` Ihres Repos, wie `NODE_EXTRA_CA_CERTS` und die [mTLS-Client-Zertifikat-Variablen](/docs/de/network-config#mtls-authentication) | Nein | Die Hosting-Umgebung verwaltet die API-Verbindung der Sitzung, daher ignoriert Claude Code diese Schlüssel und notiert jeden ignorierten Schlüssel im Debug-Log der Sitzung |320| Transport-Variablen im `env`-Block der `.claude/settings.json` Ihres Repos, wie `NODE_EXTRA_CA_CERTS` und die [mTLS-Client-Zertifikat-Variablen](/docs/de/network-config#mtls-authentication) | Nein | Die Hosting-Umgebung verwaltet die API-Verbindung der Sitzung, daher ignoriert Claude Code diese Schlüssel und notiert jeden ignorierten Schlüssel im Debug-Log der Sitzung |

env-vars.md +1 −1

Details

340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Obergrenze für [WebSearch](/docs/de/tools-reference#session-search-limit)-Aufrufe (Standard: 200). Wenn Claude die Obergrenze erreicht, geben weitere WebSearch-Aufrufe einen Hinweis zurück, der Claude anweist, mit den bereits gesammelten Informationen fortzufahren. Akzeptiert eine positive ganze Zahl ohne Obergrenze. Alles andere wird ignoriert, und der Standard gilt, sodass die Obergrenze erhöht, aber nicht ausgeschaltet werden kann. Erfordert Claude Code v2.1.212 oder höher |340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Obergrenze für [WebSearch](/docs/de/tools-reference#session-search-limit)-Aufrufe (Standard: 200). Wenn Claude die Obergrenze erreicht, geben weitere WebSearch-Aufrufe einen Hinweis zurück, der Claude anweist, mit den bereits gesammelten Informationen fortzufahren. Akzeptiert eine positive ganze Zahl ohne Obergrenze. Alles andere wird ignoriert, und der Standard gilt, sodass die Obergrenze erhöht, aber nicht ausgeschaltet werden kann. Erfordert Claude Code v2.1.212 oder höher |

341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Auf `1` setzen, um stdio-MCP-Server nur mit einer sicheren Basisumgebung plus dem konfigurierten `env` des Servers zu starten, statt Ihre Shell-Umgebung zu erben |341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Auf `1` setzen, um stdio-MCP-Server nur mit einer sicheren Basisumgebung plus dem konfigurierten `env` des Servers zu starten, statt Ihre Shell-Umgebung zu erben |

342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Verstrichene Zeit in Millisekunden, bevor ein noch laufender MCP-Tool-Aufruf [in eine Hintergrundaufgabe verschoben wird](/docs/de/mcp#automatic-backgrounding-of-long-tool-calls) (Standard: 120000, also 2 Minuten). Auf `0` setzen, um das automatische Verschieben in den Hintergrund auszuschalten. Erfordert Claude Code v2.1.212 oder höher |342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Verstrichene Zeit in Millisekunden, bevor ein noch laufender MCP-Tool-Aufruf [in eine Hintergrundaufgabe verschoben wird](/docs/de/mcp#automatic-backgrounding-of-long-tool-calls) (Standard: 120000, also 2 Minuten). Auf `0` setzen, um das automatische Verschieben in den Hintergrund auszuschalten. Erfordert Claude Code v2.1.212 oder höher |

343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Wie lange in Millisekunden der erste Turn einer [nicht interaktiven](/docs/de/headless) Sitzung auf MCP-Server wartet, die noch eine Verbindung herstellen, anstelle der standardmäßigen [Wartezeit im ersten Turn](/docs/de/agent-sdk/mcp#connection-timing). Wenn gesetzt, gilt die Wartezeit für jeden ausstehenden Server. Auf `0` setzen, um das Warten zu überspringen. Ein [`--permission-prompt-tool`](/docs/de/cli-reference#cli-flags)-Server behält unabhängig vom Wert seine eigene `MCP_TIMEOUT`-Wartezeit. Erfordert Claude Code v2.1.274 oder höher |343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Wie lange in Millisekunden der erste Turn einer [nicht interaktiven](/docs/de/headless) Sitzung auf MCP-Server wartet, die sich noch verbinden, anstelle der standardmäßigen [Wartezeit im ersten Turn](/docs/de/agent-sdk/mcp#connection-timing). Wenn gesetzt, gilt die Wartezeit für jeden ausstehenden Server; in einer [selbst gehosteten Umgebung](/docs/de/self-hosted-environments-configuration#connection-timing) ändert sie nur, wie lange die Wartezeit dauert. Auf `0` setzen, um die Wartezeit zu überspringen. Ein [`--permission-prompt-tool`](/docs/de/cli-reference#cli-flags)-Server behält unabhängig vom Wert seine eigene `MCP_TIMEOUT`-Wartezeit. Erfordert Claude Code v2.1.274 oder höher |

344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Leerlauf-Timeout in Millisekunden für MCP-Tool-Aufrufe. Wenn ein stdio-, HTTP-, SSE-, WebSocket- oder [claude.ai-Konnektor](/docs/de/mcp#use-mcp-servers-from-claude-ai)-MCP-Server so lange weder eine Antwort noch eine Fortschrittsbenachrichtigung sendet, bricht der Tool-Aufruf mit einem Fehler ab, statt auf den gesamten `MCP_TOOL_TIMEOUT` zu warten. Überschreibt die transportspezifischen Standardwerte von 300000 (5 Minuten) für Netzwerkserver und 1800000 (30 Minuten) für stdio-Server. Auf `0` setzen, um die Leerlaufprüfung zu deaktivieren. Werte unter 1000 werden auf eine Sekunde angehoben, und der Wert ist auf den effektiven `MCP_TOOL_TIMEOUT` begrenzt. Ein serverspezifischer `timeout` in `.mcp.json` von mindestens 1000 hebt das Leerlauffenster dieses Servers auf mindestens den `timeout`-Wert an. Gilt nicht für IDE-Server oder prozessinterne SDK-Server. Erfordert Claude Code v2.1.187 oder höher. Vor v2.1.203 waren stdio-Server vom Leerlauf-Timeout ausgenommen |344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Leerlauf-Timeout in Millisekunden für MCP-Tool-Aufrufe. Wenn ein stdio-, HTTP-, SSE-, WebSocket- oder [claude.ai-Konnektor](/docs/de/mcp#use-mcp-servers-from-claude-ai)-MCP-Server so lange weder eine Antwort noch eine Fortschrittsbenachrichtigung sendet, bricht der Tool-Aufruf mit einem Fehler ab, statt auf den gesamten `MCP_TOOL_TIMEOUT` zu warten. Überschreibt die transportspezifischen Standardwerte von 300000 (5 Minuten) für Netzwerkserver und 1800000 (30 Minuten) für stdio-Server. Auf `0` setzen, um die Leerlaufprüfung zu deaktivieren. Werte unter 1000 werden auf eine Sekunde angehoben, und der Wert ist auf den effektiven `MCP_TOOL_TIMEOUT` begrenzt. Ein serverspezifischer `timeout` in `.mcp.json` von mindestens 1000 hebt das Leerlauffenster dieses Servers auf mindestens den `timeout`-Wert an. Gilt nicht für IDE-Server oder prozessinterne SDK-Server. Erfordert Claude Code v2.1.187 oder höher. Vor v2.1.203 waren stdio-Server vom Leerlauf-Timeout ausgenommen |

345| `CLAUDE_CODE_MESSAGING_SOCKET` | Wird von Claude Code gesetzt, nicht von Ihnen: In Sitzungen, die einen [Inbox-Socket](/docs/de/cross-session-messaging#the-sessions-inbox-socket) binden, exportiert Claude Code den Pfad dieses Sockets an Hooks und Bash-Befehle, wenn es den Socket bindet. In einer Sitzung, die mit aktiviertem Messaging startet, bindet Claude Code den Socket, bevor ein Hook ausgeführt wird. Andere Sitzungen auf dem Rechner stellen Nachrichten an diesen Pfad zu. Jede Sitzung exportiert ihren eigenen Socket statt eines von einem übergeordneten Prozess geerbten, und darauf eingehende Nachrichten durchlaufen die [Steuerung eingehender Nachrichten](/docs/de/cross-session-messaging#control-inbound-messages) der Sitzung. `env`-Blöcke in Einstellungen können die Variable nicht setzen. Erfordert Claude Code v2.1.224 oder höher |345| `CLAUDE_CODE_MESSAGING_SOCKET` | Wird von Claude Code gesetzt, nicht von Ihnen: In Sitzungen, die einen [Inbox-Socket](/docs/de/cross-session-messaging#the-sessions-inbox-socket) binden, exportiert Claude Code den Pfad dieses Sockets an Hooks und Bash-Befehle, wenn es den Socket bindet. In einer Sitzung, die mit aktiviertem Messaging startet, bindet Claude Code den Socket, bevor ein Hook ausgeführt wird. Andere Sitzungen auf dem Rechner stellen Nachrichten an diesen Pfad zu. Jede Sitzung exportiert ihren eigenen Socket statt eines von einem übergeordneten Prozess geerbten, und darauf eingehende Nachrichten durchlaufen die [Steuerung eingehender Nachrichten](/docs/de/cross-session-messaging#control-inbound-messages) der Sitzung. `env`-Blöcke in Einstellungen können die Variable nicht setzen. Erfordert Claude Code v2.1.224 oder höher |

346| `CLAUDE_CODE_MESSAGING_TOKEN` | Wird von Claude Code gesetzt, nicht von Ihnen: In Sitzungen, die einen [Inbox-Socket](/docs/de/cross-session-messaging#the-sessions-inbox-socket) binden, exportiert Claude Code dieses sitzungsspezifische Token zusammen mit `CLAUDE_CODE_MESSAGING_SOCKET` an Hooks und Bash-Befehle. Ein Skript, das an den Socket sendet, kann `{"type":"auth","token":"<token>"}` als erste Zeile senden, um nachzuweisen, dass es zur Sitzung gehört. Unter nativem Windows verlangt Claude Code diese Zeile und schließt jede Verbindung, die nicht mit einer gültigen Zeile beginnt. Die [Regeln für eigene Kindprozesse](/docs/de/cross-session-messaging#the-sessions-inbox-socket) legen fest, wann Claude Code das Token heranzieht. Jede Sitzung exportiert ihr eigenes Token, nie eines, das von einer übergeordneten Sitzung geerbt wurde. `env`-Blöcke in Einstellungen können die Variable nicht setzen. Erfordert Claude Code v2.1.228 oder höher |346| `CLAUDE_CODE_MESSAGING_TOKEN` | Wird von Claude Code gesetzt, nicht von Ihnen: In Sitzungen, die einen [Inbox-Socket](/docs/de/cross-session-messaging#the-sessions-inbox-socket) binden, exportiert Claude Code dieses sitzungsspezifische Token zusammen mit `CLAUDE_CODE_MESSAGING_SOCKET` an Hooks und Bash-Befehle. Ein Skript, das an den Socket sendet, kann `{"type":"auth","token":"<token>"}` als erste Zeile senden, um nachzuweisen, dass es zur Sitzung gehört. Unter nativem Windows verlangt Claude Code diese Zeile und schließt jede Verbindung, die nicht mit einer gültigen Zeile beginnt. Die [Regeln für eigene Kindprozesse](/docs/de/cross-session-messaging#the-sessions-inbox-socket) legen fest, wann Claude Code das Token heranzieht. Jede Sitzung exportiert ihr eigenes Token, nie eines, das von einer übergeordneten Sitzung geerbt wurde. `env`-Blöcke in Einstellungen können die Variable nicht setzen. Erfordert Claude Code v2.1.228 oder höher |

errors.md +46 −9

Details

247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Befehlszeilenfehler](#windows-reported-an-error-ebadf) |247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Befehlszeilenfehler](#windows-reported-an-error-ebadf) |

248| `Cannot switch renderers in this session` | [Befehlszeilenfehler](#cannot-switch-renderers-in-this-session) |248| `Cannot switch renderers in this session` | [Befehlszeilenfehler](#cannot-switch-renderers-in-this-session) |

249| `Cannot switch renderers while work is running in the background` | [Befehlszeilenfehler](#cannot-switch-renderers-in-this-session) |249| `Cannot switch renderers while work is running in the background` | [Befehlszeilenfehler](#cannot-switch-renderers-in-this-session) |

250| `Claude Code couldn't restart` | [Befehlszeilenfehler](#claude-code-couldnt-restart) |

250| `Couldn't open Claude Desktop` | [Befehlszeilenfehler](#couldnt-open-claude-desktop) |251| `Couldn't open Claude Desktop` | [Befehlszeilenfehler](#couldnt-open-claude-desktop) |

251| `Failed to open Claude Desktop. Please try opening it manually.` | [Befehlszeilenfehler](#couldnt-open-claude-desktop) |252| `Failed to open Claude Desktop. Please try opening it manually.` | [Befehlszeilenfehler](#couldnt-open-claude-desktop) |

252| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Befehlszeilenfehler](#terminal-setup-left-your-zed-keymap-unchanged) |253| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Befehlszeilenfehler](#terminal-setup-left-your-zed-keymap-unchanged) |


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Fehler in Hintergrund-Sitzungen](#session-isnt-responding) |335| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Fehler in Hintergrund-Sitzungen](#session-isnt-responding) |

335| `Session <id> was stopped while the respawn was in flight` | [Fehler in Hintergrund-Sitzungen](#session-was-stopped-while-the-respawn-was-in-flight) |336| `Session <id> was stopped while the respawn was in flight` | [Fehler in Hintergrund-Sitzungen](#session-was-stopped-while-the-respawn-was-in-flight) |

336| `This session was running agent '<name>', which is no longer available` | [Fehler in Hintergrund-Sitzungen](#session-agent-no-longer-available) |337| `This session was running agent '<name>', which is no longer available` | [Fehler in Hintergrund-Sitzungen](#session-agent-no-longer-available) |

338| `This session restarted <time> after its next /loop wakeup was due, so that wakeup will not fire` | [Fehler in Hintergrund-Sitzungen](#restarted-after-its-next-loop-wakeup-was-due) |

337| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Fehler in Hintergrund-Sitzungen](#claude_code_process_wrapper-launcher-errors) |339| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Fehler in Hintergrund-Sitzungen](#claude_code_process_wrapper-launcher-errors) |

338| `EUNKNOWN: unknown error, uv_spawn` | [Fehler in Hintergrund-Sitzungen](#eunknown-when-starting-a-background-session) |340| `EUNKNOWN: unknown error, uv_spawn` | [Fehler in Hintergrund-Sitzungen](#eunknown-when-starting-a-background-session) |

339| `EACCES: permission denied, posix_spawn` | [Fehler in Hintergrund-Sitzungen](#eacces-when-starting-a-background-session) |341| `EACCES: permission denied, posix_spawn` | [Fehler in Hintergrund-Sitzungen](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |441| :- | :- | :- |

440| [`CLAUDE_CODE_MAX_RETRIES`](/docs/de/env-vars) | 10 | Anzahl der Wiederholungsversuche. Ab v2.1.186 auf 15 begrenzt; ab v2.1.199 erhöht `CLAUDE_CODE_RETRY_WATCHDOG` den Standardwert und hebt die Begrenzung auf. Verringern Sie den Wert, damit Fehler in Skripten schneller sichtbar werden. |442| [`CLAUDE_CODE_MAX_RETRIES`](/docs/de/env-vars) | 10 | Anzahl der Wiederholungsversuche. Ab v2.1.186 auf 15 begrenzt; ab v2.1.199 erhöht `CLAUDE_CODE_RETRY_WATCHDOG` den Standardwert und hebt die Begrenzung auf. Verringern Sie den Wert, damit Fehler in Skripten schneller sichtbar werden. |

441| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/de/env-vars) | nicht gesetzt | Setzen Sie den Wert in unbeaufsichtigten Sitzungen wie CI-Jobs auf `1`, um `429`- und `529`-Kapazitätsfehler unbegrenzt erneut zu versuchen, statt nach `CLAUDE_CODE_MAX_RETRIES` Versuchen abzubrechen. Claude Code bricht sofort ab, wenn eine Anfrage mit Standardgeschwindigkeit eine `429` erhält, die ein Ausgabenlimit oder aufgebrauchtes Nutzungsguthaben meldet, auch wenn sie von einer [Ausgabenobergrenze eines Gateways](#spend-limit-reached) stammt, die nach einem Zeitplan zurückgesetzt wird. Vor v2.1.239 versuchte der Watchdog diese unbegrenzt erneut. Für Anfragen im Fast-Modus siehe [Rate-Limits handhaben](/docs/de/fast-mode#handle-rate-limits). Ab v2.1.199 erhöht sie außerdem die Standardanzahl der Wiederholungsversuche für andere vorübergehende Fehler wie Serverfehler, Timeouts und unterbrochene Verbindungen auf 300, was etwa drei Stunden Backoff entspricht, und hebt die Begrenzung von `CLAUDE_CODE_MAX_RETRIES` auf 15 auf, wenn Sie diese Variable explizit setzen. |443| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/de/env-vars) | nicht gesetzt | Setzen Sie den Wert in unbeaufsichtigten Sitzungen wie CI-Jobs auf `1`, um `429`- und `529`-Kapazitätsfehler unbegrenzt erneut zu versuchen, statt nach `CLAUDE_CODE_MAX_RETRIES` Versuchen abzubrechen. Claude Code bricht sofort ab, wenn eine Anfrage mit Standardgeschwindigkeit eine `429` erhält, die ein Ausgabenlimit oder aufgebrauchtes Nutzungsguthaben meldet, auch wenn sie von einer [Ausgabenobergrenze eines Gateways](#spend-limit-reached) stammt, die nach einem Zeitplan zurückgesetzt wird. Vor v2.1.239 versuchte der Watchdog diese unbegrenzt erneut. Für Anfragen im Fast-Modus siehe [Rate-Limits handhaben](/docs/de/fast-mode#handle-rate-limits). Ab v2.1.199 erhöht sie außerdem die Standardanzahl der Wiederholungsversuche für andere vorübergehende Fehler wie Serverfehler, Timeouts und unterbrochene Verbindungen auf 300, was etwa drei Stunden Backoff entspricht, und hebt die Begrenzung von `CLAUDE_CODE_MAX_RETRIES` auf 15 auf, wenn Sie diese Variable explizit setzen. |

444| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](/docs/de/env-vars) | nicht gesetzt | Maximale Zeit in Millisekunden, die jede API-Anfrage mit dem Abwarten von `429`- und `529`-Fehlern verbringt, wenn `CLAUDE_CODE_RETRY_WATCHDOG` gesetzt ist. Ist die Variable nicht gesetzt, ist die Wartezeit unbegrenzt. Erfordert Claude Code v2.1.295 oder höher. |

442| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/de/env-vars) | 500 | Anfängliche Verzögerung des Backoffs in Millisekunden zwischen Wiederholungsversuchen einer Anfrage, die die API mit einem `529`-Überlastungsfehler ablehnt. Erhöhen Sie den Wert auf bis zu 32000, um die Wiederholungsversuche über einen längeren Zeitraum zu verteilen, wenn die API ausgelastet ist. Hat keine Wirkung, wenn `CLAUDE_CODE_RETRY_WATCHDOG` auf `1` gesetzt ist oder wenn die abgelehnte Anfrage im [Fast-Modus](/docs/de/fast-mode#handle-rate-limits) gesendet wurde. Erfordert Claude Code v2.1.292 oder höher. |445| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/de/env-vars) | 500 | Anfängliche Verzögerung des Backoffs in Millisekunden zwischen Wiederholungsversuchen einer Anfrage, die die API mit einem `529`-Überlastungsfehler ablehnt. Erhöhen Sie den Wert auf bis zu 32000, um die Wiederholungsversuche über einen längeren Zeitraum zu verteilen, wenn die API ausgelastet ist. Hat keine Wirkung, wenn `CLAUDE_CODE_RETRY_WATCHDOG` auf `1` gesetzt ist oder wenn die abgelehnte Anfrage im [Fast-Modus](/docs/de/fast-mode#handle-rate-limits) gesendet wurde. Erfordert Claude Code v2.1.292 oder höher. |

443| [`API_TIMEOUT_MS`](/docs/de/env-vars) | 600000 | Timeout pro Anfrage in Millisekunden. Erhöhen Sie den Wert bei langsamen Netzwerken oder Proxys. Er begrenzt außerdem, wie lange Claude Code auf Response-Header wartet, wie unter [No response from API](#no-response-from-api) beschrieben. |446| [`API_TIMEOUT_MS`](/docs/de/env-vars) | 600000 | Timeout pro Anfrage in Millisekunden. Erhöhen Sie den Wert bei langsamen Netzwerken oder Proxys. Er begrenzt außerdem, wie lange Claude Code auf Response-Header wartet, wie unter [No response from API](#no-response-from-api) beschrieben. |

444| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/de/env-vars) | nicht gesetzt | Begrenzung für das erneute Senden einer [Anfrage ohne Streaming](#streaming-response-ended-before-any-complete-data-was-received), bei der eine Zeitüberschreitung auftritt. Ist die Grenze erreicht, schlägt die Anfrage fehl. Eine Antwort von Claude, deren Generierung länger als der Timeout dauert, läuft bei jedem erneuten Senden wieder in eine Zeitüberschreitung; setzen Sie daher einen niedrigen Wert wie `0`, damit die Anfrage schneller fehlschlägt. Jeder Versuch ohne Streaming läuft in einer lokalen Sitzung nach 300 Sekunden in eine Zeitüberschreitung oder nach `API_TIMEOUT_MS`, wenn Sie einen positiven Wert setzen. Erfordert Claude Code v2.1.285 oder höher. |447| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/de/env-vars) | nicht gesetzt | Begrenzung für das erneute Senden einer [Anfrage ohne Streaming](#streaming-response-ended-before-any-complete-data-was-received), bei der eine Zeitüberschreitung auftritt. Ist die Grenze erreicht, schlägt die Anfrage fehl. Eine Antwort von Claude, deren Generierung länger als der Timeout dauert, läuft bei jedem erneuten Senden wieder in eine Zeitüberschreitung; setzen Sie daher einen niedrigen Wert wie `0`, damit die Anfrage schneller fehlschlägt. Jeder Versuch ohne Streaming läuft in einer lokalen Sitzung nach 300 Sekunden in eine Zeitüberschreitung oder nach `API_TIMEOUT_MS`, wenn Sie einen positiven Wert setzen. Erfordert Claude Code v2.1.285 oder höher. |


3412 3415 

3413Claude Code zeigt denselben Fehler für jeden Skill an, der [dynamischen Kontext einfügt](/docs/de/skills#when-an-injected-command-fails), und ein fehlgeschlagener eingefügter Befehl bricht den Aufruf dieses Skills ab. Zwei verwandte Meldungen werden ausgelöst, bevor der Befehl überhaupt ausgeführt wird:3416Claude Code zeigt denselben Fehler für jeden Skill an, der [dynamischen Kontext einfügt](/docs/de/skills#when-an-injected-command-fails), und ein fehlgeschlagener eingefügter Befehl bricht den Aufruf dieses Skills ab. Zwei verwandte Meldungen werden ausgelöst, bevor der Befehl überhaupt ausgeführt wird:

3414 3417 

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

3416* ``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 zu `shell: powershell`. Siehe [Wie eingefügte Befehle ausgeführt werden](/docs/de/skills#how-injected-commands-run)3419* ``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 auf `shell: powershell`. Siehe [Wie eingefügte Befehle ausgeführt werden](/docs/de/skills#how-injected-commands-run)

3417 3420 

3418**Vorgehensweise:**3421**Vorgehensweise:**

3419 3422 


3562 3565 

3563* **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 Beispiel3566* **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

3564* **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>`)``3567* **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>`)``

3565* **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 `git fetch --unshallow origin` für jeden abgerufenen Basis-Branch vor, und bei einem vollständigen Klon schlägt dieser Befehl mit `fatal: --unshallow on a complete repository does not make sense` fehl.3568* **Sie haben einen Basis-Branch übergeben, der nicht in Ihrem Clone 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 Clone 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 Clone schlägt dieser Befehl mit `fatal: --unshallow on a complete repository does not make sense` fehl.

3566 3569 

3567**Vorgehensweise:**3570**Vorgehensweise:**

3568 3571 


3816 3819 

3817* Führen Sie in einer Sitzung, die ohne diese Einschränkungen gestartet wurde, `/tui fullscreen` aus, oder `/tui default`, um zurückzuwechseln. Claude Code speichert dort die [Einstellung `tui`](/docs/de/settings-reference#tui)3820* Führen Sie in einer Sitzung, die ohne diese Einschränkungen gestartet wurde, `/tui fullscreen` aus, oder `/tui default`, um zurückzuwechseln. Claude Code speichert dort die [Einstellung `tui`](/docs/de/settings-reference#tui)

3818 3821 

3822<h3 id="claude-code-couldnt-restart">

3823 Claude Code couldn't restart

3824</h3>

3825 

3826Claude Code wurde gerade neu gestartet, zum Beispiel um nach Ausführen von [`/tui`](/docs/de/fullscreen#enable-fullscreen-rendering) zum Vollbild-Rendering oder von diesem zurück zu wechseln. Es hat die Sitzung geschlossen, konnte den neuen Prozess aber nicht starten, gab daher diese Meldung aus und wurde mit Status 1 beendet:

3827 

3828```text theme={null}

3829Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.

3830```

3831 

3832Wenn der Neustart keine Konversation zum erneuten Öffnen hatte, zum Beispiel weil `/tui` Ihre erste Eingabe in einer neuen Sitzung war, lautet die Meldung `Claude Code couldn't restart. Start Claude Code again.`

3833 

3834**Was Sie tun können:**

3835 

3836* Führen Sie `claude` in Ihrer Shell erneut im selben Verzeichnis aus. Wenn die Meldung besagte, dass Ihre Konversation gespeichert ist, führen Sie in der neuen Sitzung [`/resume`](/docs/de/sessions#resume-a-session) aus und wählen Sie sie aus

3837* Wenn Neustarts weiterhin fehlschlagen, starten Sie Claude Code aus Ihrer Shell mit [`claude --debug-file claude-debug.log`](/docs/de/cli-reference#cli-flags). Wenn ein Neustart aus dieser Sitzung fehlschlägt, enthält `claude-debug.log` im Startverzeichnis eine Zeile `Failed to relaunch:` mit dem Fehler des Betriebssystems. Fügen Sie diese Zeile hinzu, wenn Sie [das Problem melden](#report-an-error)

3838 

3819<h3 id="couldnt-open-claude-desktop">3839<h3 id="couldnt-open-claude-desktop">

3820 Claude Desktop konnte nicht geöffnet werden3840 Claude Desktop konnte nicht geöffnet werden

3821</h3>3841</h3>


4752 Befehl blockiert durch die Worktree-Isolationsprüfungen4772 Befehl blockiert durch die Worktree-Isolationsprüfungen

4753</h3>4773</h3>

4754 4774 

4755Claude hat einen Bash- oder Monitor-Befehl in einer [Sitzung ausgeführt, die in einem Worktree isoliert ist](/docs/de/worktrees#how-claude-code-enforces-isolation), und Claude Code hat ihn aus einem von zwei Gründen abgelehnt:4775Claude hat einen Bash-, [PowerShell](/docs/de/tools-reference#powershell-tool)- oder [Monitor](/docs/de/tools-reference#monitor-tool)-Befehl in einer [Sitzung ausgeführt, die in einem Worktree isoliert ist](/docs/de/worktrees#how-claude-code-enforces-isolation), und Claude Code hat ihn aus einem dieser Gründe abgelehnt:

4756 4776 

4757* Der Befehl zeigt git auf den Haupt-Checkout.4777* Der Befehl würde im Haupt-Checkout oder in einem anderen Worktree ausgeführt. Die Meldung sagt, dass sein Arbeitsverzeichnis `resolved to the shared checkout` oder `is in a different worktree`.

4758* Claude Code kann aus dem Befehlstext nicht überprüfen, dass jedes git, das der Befehl ausführt, innerhalb des Worktree bleibt. Ein Befehl, der git nie benennt, kann trotzdem aus diesem Grund abgelehnt werden, da das Erweitern einer Variablenumleitung wie `${!name}` oder das Ausführen einer Bash-Funktionssubstitution wie `${ command; }` einen Wert zur Laufzeit erzeugt, der selbst ein Befehl sein kann.4778* Ein Bash- oder Monitor-Befehl zeigt git auf den Haupt-Checkout.

4779* Claude Code kann aus dem Text eines Bash- oder Monitor-Befehls nicht überprüfen, dass jedes git, das der Befehl ausführt, innerhalb des Worktree bleibt. Ein Befehl, der git nie benennt, kann trotzdem aus diesem Grund abgelehnt werden, da das Erweitern einer Variablenumleitung wie `${!name}` oder das Ausführen einer Bash-Funktionssubstitution wie `${ command; }` einen Wert zur Laufzeit erzeugt, der selbst ein Befehl sein kann.

4759 4780 

4760Die Mitte der Meldung nennt, was nicht überprüft werden konnte:4781Die Meldung sagt `is isolated in the worktree <path>, but this command`, gefolgt vom Grund, etwa einem Befehl, dessen Text Claude Code nicht überprüfen konnte:

4761 4782 

4762```text wrap theme={null}4783```text wrap theme={null}

4763This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.4784This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.


4765 4786 

4766**Was zu tun ist:**4787**Was zu tun ist:**

4767 4788 

4768* Normalerweise nichts: Claude liest die Meldung und schreibt den Befehl so um, wie ihr letzter Satz verlangt4789* **Git auf den Haupt-Checkout gezeigt oder Befehlstext, der nicht überprüft werden kann**: nichts. Claude liest die Meldung und schreibt den Befehl so um, wie ihr letzter Satz verlangt. Wenn ein Befehl, den Sie angefordert haben, wegen einer Erweiterung in seinem Text weiterhin abgelehnt wird, schreiben Sie den gekennzeichneten Wert wörtlich und führen Sie git als eigenen einfachen Befehl von innerhalb des Worktree aus

4769* Wenn ein Befehl, den Sie angefordert haben, weiterhin abgelehnt wird, schreiben Sie den gekennzeichneten Wert wörtlich: Ersetzen Sie die Umleitung oder Substitution durch ihren Wert, und führen Sie git als eigenen einfachen Befehl von innerhalb des Worktree aus

4770* Um absichtlich auf den Haupt-Checkout einzuwirken, führen Sie den Befehl selbst in einem Terminal außerhalb der Sitzung aus4790* Um absichtlich auf den Haupt-Checkout einzuwirken, führen Sie den Befehl selbst in einem Terminal außerhalb der Sitzung aus

4771 4791 

4772<h3 id="this-session-has-no-saved-transcript">4792<h3 id="this-session-has-no-saved-transcript">


4946* Oder setzen Sie mit `--agent <name>` fort, das einen Agenten benennt, der existiert, um die Sitzung stattdessen als dieser Agent auszuführen4966* Oder setzen Sie mit `--agent <name>` fort, das einen Agenten benennt, der existiert, um die Sitzung stattdessen als dieser Agent auszuführen

4947* Wenn der Agent projektbezogen ist und Sie dem ursprünglichen Verzeichnis der Sitzung nicht vertraut haben, führen Sie Claude Code dort einmal aus, akzeptieren Sie den Vertrauensdialog, dann setzen Sie erneut fort4967* Wenn der Agent projektbezogen ist und Sie dem ursprünglichen Verzeichnis der Sitzung nicht vertraut haben, führen Sie Claude Code dort einmal aus, akzeptieren Sie den Vertrauensdialog, dann setzen Sie erneut fort

4948 4968 

4969<h3 id="restarted-after-its-next-loop-wakeup-was-due">

4970 Diese Sitzung wurde neu gestartet, nachdem ihr nächstes /loop-Aufwachen fällig war

4971</h3>

4972 

4973Ein [selbstgetaktetes `/loop`](/docs/de/scheduled-tasks#let-claude-choose-the-interval) in einer [Hintergrund-Sitzung](/docs/de/agent-view) wurde gestoppt. Der Prozess der Sitzung endete, während die Schleife auf ihr nächstes Aufwachen wartete, und dieses Aufwachen wurde fällig, bevor der [nächste Prozess](/docs/de/agent-view#the-supervisor-process) der Sitzung startete. Das verpasste Aufwachen wird nicht verspätet ausgelöst. Der Hinweis gibt an, wie überfällig das Aufwachen war, als die Sitzung neu startete:

4974 

4975```text theme={null}

4976This session restarted 12m after its next /loop wakeup was due, so that wakeup will not fire. The loop stays stopped until Claude schedules it again: reply to continue it.

4977```

4978 

4979Vor v2.1.295 stoppte die Schleife in dieser Situation ohne Hinweis.

4980 

4981**Was zu tun ist:**

4982 

4983* Um die Schleife fortzusetzen, [antworten Sie der Sitzung](/docs/de/agent-view#peek-and-reply) und sagen Sie es, etwa `keep the loop running`. Claude liest den Hinweis mit Ihrer Antwort und kann das nächste Aufwachen planen

4984* Wenn Sie mit der Schleife fertig sind, tun Sie nichts. Sie ist bereits gestoppt

4985 

4949<h3 id="claude_code_process_wrapper-launcher-errors">4986<h3 id="claude_code_process_wrapper-launcher-errors">

4950 CLAUDE\_CODE\_PROCESS\_WRAPPER Launcher-Fehler4987 CLAUDE\_CODE\_PROCESS\_WRAPPER Launcher-Fehler

4951</h3>4988</h3>

headless.md +3 −1

Details

89* **[Monitor](/docs/de/tools-reference#monitor-tool)-Watches**: Die Ausführung wartet, bis die Watch abläuft oder die Obergrenze von 10 Minuten das Warten beendet, je nachdem, was zuerst eintritt. Während des Wartens antwortet Claude weiterhin auf das, was die Watch meldet. Standardmäßig läuft eine Watch fünf Minuten nach dem Start durch Claude ab.89* **[Monitor](/docs/de/tools-reference#monitor-tool)-Watches**: Die Ausführung wartet, bis die Watch abläuft oder die Obergrenze von 10 Minuten das Warten beendet, je nachdem, was zuerst eintritt. Während des Wartens antwortet Claude weiterhin auf das, was die Watch meldet. Standardmäßig läuft eine Watch fünf Minuten nach dem Start durch Claude ab.

90* **Ausstehende Wakeups**: Wenn Claude in einer Ausführung, deren Prompt Sie als Text statt mit `--input-format stream-json` übergeben haben, einen [selbstgetakteten `/loop`-Wakeup](/docs/de/scheduled-tasks#let-claude-choose-the-interval) geplant hat, wartet die Ausführung auf das Auslösen jedes Wakeups und führt dessen Iteration aus, bis die [Schleife endet](/docs/de/scheduled-tasks#stop-a-loop), auch über die Obergrenze von 10 Minuten hinaus.90* **Ausstehende Wakeups**: Wenn Claude in einer Ausführung, deren Prompt Sie als Text statt mit `--input-format stream-json` übergeben haben, einen [selbstgetakteten `/loop`-Wakeup](/docs/de/scheduled-tasks#let-claude-choose-the-interval) geplant hat, wartet die Ausführung auf das Auslösen jedes Wakeups und führt dessen Iteration aus, bis die [Schleife endet](/docs/de/scheduled-tasks#stop-a-loop), auch über die Obergrenze von 10 Minuten hinaus.

91 91 

92Wenn stderr ein Terminal ist und die Ausführung fünf Sekunden gewartet hat, gibt Claude Code eine Zeile an stderr aus, die mit `Waiting for background work to finish` beginnt und die betreffende Arbeit benennt. Bei [`json`- oder `stream-json`-Ausgabe](#get-structured-output) wird die Zeile nur ausgegeben, wenn stdout kein Terminal ist, sodass das JSON, das Ihr Skript liest, sie nie enthält.

93 

92Wenn die Ausführung ihre [`--max-budget-usd`](/docs/de/cli-reference#cli-flags)-Obergrenze erreicht, stoppt Claude Code die verbleibende Hintergrundarbeit, statt zu warten.94Wenn die Ausführung ihre [`--max-budget-usd`](/docs/de/cli-reference#cli-flags)-Obergrenze erreicht, stoppt Claude Code die verbleibende Hintergrundarbeit, statt zu warten.

93 95 

94Wenn Hintergrundarbeit einen weiteren Turn startet, gibt die Ausführung mit der Standardausgabe `text` das Ergebnis jedes Turns aus und mit der Ausgabe `json` das Ergebnis des letzten Turns. Vor v2.1.295 gab die Ausführung auch mit der Ausgabe `text` nur das Ergebnis des letzten Turns aus.96Wenn Hintergrundarbeit einen weiteren Turn startet, gibt die Ausführung mit der Standardausgabe `text` das Ergebnis jedes Turns aus und mit der Ausgabe `json` das Ergebnis des letzten Turns. Vor v2.1.295 gab die Ausführung auch mit der Ausgabe `text` nur das Ergebnis des letzten Turns aus.


296 298 

297Wenn ein `--plugin-dir`-Verzeichnis oder -Archiv selbst nicht geladen werden kann, enthält sein `plugin_errors`-Eintrag den aufgelösten absoluten Pfad als `path`. Verwenden Sie ihn, um zu erkennen, welcher von mehreren `--plugin-dir`-Werten fehlgeschlagen ist. Das Feld `path` erfordert Claude Code v2.1.283 oder später.299Wenn ein `--plugin-dir`-Verzeichnis oder -Archiv selbst nicht geladen werden kann, enthält sein `plugin_errors`-Eintrag den aufgelösten absoluten Pfad als `path`. Verwenden Sie ihn, um zu erkennen, welcher von mehreren `--plugin-dir`-Werten fehlgeschlagen ist. Das Feld `path` erfordert Claude Code v2.1.283 oder später.

298 300 

299Verwenden Sie die MCP-Server-Felder auf die gleiche Weise. Wenn Sie [`--mcp-config`](/docs/de/cli-reference#cli-flags) mit `-p` übergeben, wartet Claude Code auf noch ausstehende Server, bevor der erste Turn ausgeführt wird, höchstens bis zum Start-Timeout [`MCP_TIMEOUT`](/docs/de/env-vars), standardmäßig 30 Sekunden. Ein Remote-Server mit einer [zwischengespeicherten Tool-Liste](/docs/de/agent-sdk/mcp#connection-timing) überspringt das Warten, zeigt `pending` in `system/init` an und verbindet sich beim ersten Tool-Aufruf. Das Warten erfordert Claude Code v2.1.221 oder später.301Verwenden Sie die MCP-Server-Felder auf die gleiche Weise. Wenn Sie [`--mcp-config`](/docs/de/cli-reference#cli-flags) mit `-p` übergeben, wartet Claude Code auf noch ausstehende Server, bevor der erste Turn ausgeführt wird, höchstens bis zum Start-Timeout [`MCP_TIMEOUT`](/docs/de/env-vars), standardmäßig 30 Sekunden. Ein Remote-Server mit einer [zwischengespeicherten Tool-Liste](/docs/de/agent-sdk/mcp#connection-timing) überspringt das Warten, zeigt `pending` in `system/init` an und verbindet sich beim ersten Tool-Aufruf. In einer [selbst gehosteten Umgebung](/docs/de/self-hosted-environments-configuration#connection-timing) gilt stattdessen eine kürzere Wartezeit. Das Warten erfordert Claude Code v2.1.221 oder später.

300 302 

301Claude Code validiert jeden `--mcp-config`-Eintrag beim Start und überspringt Einträge, die die Validierung nicht bestehen, beispielsweise einen `url`-Eintrag ohne `type`. Der Lauf wird fortgesetzt und beendet sich sauber, prüfen Sie also diese Felder, um einen Server zu erkennen, der nie geladen wurde:303Claude Code validiert jeden `--mcp-config`-Eintrag beim Start und überspringt Einträge, die die Validierung nicht bestehen, beispielsweise einen `url`-Eintrag ohne `type`. Der Lauf wird fortgesetzt und beendet sich sauber, prüfen Sie also diese Felder, um einen Server zu erkennen, der nie geladen wurde:

302 304 

Details

132Der Runner und seine Sitzungen stellen mehrere Arten von ausgehenden Verbindungen her, und es ist keine eingehende Konnektivität von Anthropic erforderlich:132Der Runner und seine Sitzungen stellen mehrere Arten von ausgehenden Verbindungen her, und es ist keine eingehende Konnektivität von Anthropic erforderlich:

133 133 

134* **Kontrolleben**: Der Runner fragt `api.anthropic.com` nach Arbeit ab und sendet Setup-Fortschritts- und Fehlerereignisse, alle ausgehend HTTPS. Das Abfragen dient auch als Herzschlag des Runners.134* **Kontrolleben**: Der Runner fragt `api.anthropic.com` nach Arbeit ab und sendet Setup-Fortschritts- und Fehlerereignisse, alle ausgehend HTTPS. Das Abfragen dient auch als Herzschlag des Runners.

135* **SCM-Connector**: Der optionale Orchestrator [SCM-Connector](/docs/de/self-hosted-environments-reference#scm-connector-flags) Tunnel ist die einzige WebSocket-Verbindung.135* **Git**: Der Runner klont von Ihrem Git-Host und pusht zu ihm über HTTPS oder SSH, authentifiziert mit Anmeldedaten, die Ihr Deployment bereitstellt. Siehe [Git konfigurieren](/docs/de/self-hosted-environments-deploy#configure-git) für die Optionen, einschließlich pro Sitzung ausgestellter Anmeldedaten. Mit dem [Anthropic Git-Proxy](/docs/de/self-hosted-environments-deploy#use-the-anthropic-git-proxy) läuft der Git-Datenverkehr für Repositorys auf github.com stattdessen über `api.anthropic.com`.

136* **Git**: Der Runner klont von und pusht zu Ihrem Git-Host über HTTPS oder SSH, authentifiziert mit Anmeldeinformationen, die Ihre Bereitstellung bereitstellt; [Git konfigurieren](/docs/de/self-hosted-environments-deploy#configure-git) behandelt die Optionen, einschließlich pro-Sitzung geprägte Anmeldeinformationen und der [Anthropic Git-Proxy](/docs/de/self-hosted-environments-deploy#use-the-anthropic-git-proxy), der Git durch `api.anthropic.com` leitet.136* **Sitzungs-Child**: Der untergeordnete Claude Code-Prozess hält den Ereignisstrom der Sitzung zu `api.anthropic.com` und führt seine eigenen ausgehenden Aufrufe für Modell-Inferenz und für Git-Befehle durch, die während der Sitzung ausgeführt werden. In einer Sitzung, die [von Anthropic verwaltetes Git](/docs/de/self-hosted-environments-deploy#use-the-anthropic-git-proxy) verwendet, sendet der untergeordnete Prozess seinen `git`- und `gh`-Datenverkehr für github.com über eine WebSocket-Verbindung, die er zu `api.anthropic.com` öffnet.

137* **Sitzungs-Child**: Der untergeordnete Claude Code-Prozess hält den Ereignisstrom der Sitzung zu `api.anthropic.com` und führt seine eigenen ausgehenden Aufrufe für Modell-Inferenz und für Git-Befehle durch, die während der Sitzung ausgeführt werden. Siehe [Netzwerkanforderungen](/docs/de/self-hosted-environments-deploy#network-requirements) für die vollständige Egress-Liste. Das [Diagramm oben](#how-self-hosted-environments-work) zeigt diese Pfade, abgesehen vom optionalen SCM-Connector.137* **SCM-Konnektor**: Der optionale [SCM-Konnektor](/docs/de/self-hosted-environments-reference#scm-connector-flags) des Orchestrators ist nicht verfügbar, daher wird sein Tunnel nicht geöffnet. Der Tunnel ist eine WebSocket-Verbindung zu `api.anthropic.com`.

138 

139Siehe [Netzwerkanforderungen](/docs/de/self-hosted-environments-deploy#network-requirements) für die vollständige Egress-Liste. Das [Diagramm oben](#how-self-hosted-environments-work) zeigt diese Pfade, abgesehen vom optionalen SCM-Konnektor und der von Anthropic verwalteten Git-Verbindung.

138 140 

139Standardmäßig verwendet die Modell-Inferenz die Anthropic API. Die Kontrollebene liefert den API-Endpunkt an jede Sitzung, und die Sitzung authentifiziert sich mit einem von Anthropic ausgegebenen, sitzungsbezogenen OAuth-Token. Um Modellanfragen stattdessen an Ihr eigenes Cloud-Konto zu senden, siehe [Modellanfragen an Bedrock oder Agent Platform senden](/docs/de/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).141Standardmäßig verwendet die Modell-Inferenz die Anthropic API. Die Kontrollebene liefert den API-Endpunkt an jede Sitzung, und die Sitzung authentifiziert sich mit einem von Anthropic ausgegebenen, sitzungsbezogenen OAuth-Token. Um Modellanfragen stattdessen an Ihr eigenes Cloud-Konto zu senden, siehe [Modellanfragen an Bedrock oder Agent Platform senden](/docs/de/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).

140 142 

Details

31| Variable | Beschreibung |31| Variable | Beschreibung |

32| :- | :- |32| :- | :- |

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Das Sitzungs-JWT, mit dem Präfix `sk-ant-cc-`. Sein `act`-Anspruch identifiziert den Sitzungsersteller, mit der E-Mail des Erstellers, wenn die erstellende Oberfläche diese aufgezeichnet hat. Der Wert ist das Token zum Zeitpunkt des Spawning; Aktualisierungen kommen über stdin des Kindes an, daher sieht ein Wrapper nur den Anfangswert. Siehe [Sitzungsidentität überprüfen](/docs/de/self-hosted-environments-identity). |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Das Sitzungs-JWT, mit dem Präfix `sk-ant-cc-`. Sein `act`-Anspruch identifiziert den Sitzungsersteller, mit der E-Mail des Erstellers, wenn die erstellende Oberfläche diese aufgezeichnet hat. Der Wert ist das Token zum Zeitpunkt des Spawning; Aktualisierungen kommen über stdin des Kindes an, daher sieht ein Wrapper nur den Anfangswert. Siehe [Sitzungsidentität überprüfen](/docs/de/self-hosted-environments-identity). |

34| `CCR_SESSION_ACCOUNT_EMAIL` | Die E-Mail des Sitzungserstellers, vom Runner aus dem `act.email`-Anspruch des Tokens ohne Signaturüberprüfung vorab extrahiert. Geeignet für Beschriftung, wie Commit-Trailer. Wenn die E-Mail die Ausstellung von Anmeldedaten steuert, überprüfen Sie das Token und lesen Sie den Anspruch stattdessen daraus; siehe [Anmeldedaten mit Bereich auf den Sitzungsersteller bereitstellen](#provision-credentials-scoped-to-the-session-creator). Nicht gesetzt, wenn das Token keine Ersteller-E-Mail enthält. Behandeln Sie als personenbezogene Informationen. |34| `CCR_SESSION_ACCOUNT_EMAIL` | Die E-Mail des Sitzungserstellers, vom Runner aus dem `act.email`-Anspruch des Tokens ohne Signaturüberprüfung vorab extrahiert. Geeignet für Beschriftung, wie Commit-Trailer. Wenn die E-Mail die Ausstellung von Anmeldedaten steuert, überprüfen Sie das Token und lesen Sie den Anspruch stattdessen daraus. Siehe [Anmeldedaten mit Bereich auf den Sitzungsersteller bereitstellen](#provision-credentials-scoped-to-the-session-creator). Nicht gesetzt, wenn das Token keine Ersteller-E-Mail enthält, zum Beispiel in Sitzungen, die die Service-Identität Ihrer Organisation erstellt. Behandeln Sie als personenbezogene Informationen. |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` oder `scheduled_trigger`. Anthropic zeichnet den Wert einmal bei der Sitzungserstellung auf, daher sehen der Wrapper und jeder Lifecycle-Hook denselben Wert. Verwenden Sie ihn nur für Adoptionsanalysen und Beschriftung, nicht als Autorisierungssignal. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat, daher referenzieren Sie sie als `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` unter `set -u`. Erfordert Claude Code v2.1.229 oder später. |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` oder `scheduled_trigger`. Anthropic zeichnet den Wert einmal bei der Sitzungserstellung auf, daher sehen der Wrapper und jeder Lifecycle-Hook denselben Wert. Verwenden Sie ihn nur für Adoptionsanalysen und Beschriftung, nicht als Autorisierungssignal. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat. Erfordert Claude Code v2.1.229 oder später. |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | Absoluter Pfad zur eigenen Claude Code-Binärdatei des Runners. Beenden Sie Ihren Wrapper mit `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, um an die angeheftete Binärdatei zu übergeben, ohne einen Installationspfad hartcodieren zu müssen. |36| `CLAUDE_RUNNER_CLAUDE_BIN` | Absoluter Pfad zur eigenen Claude Code-Binärdatei des Runners. Beenden Sie Ihren Wrapper mit `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, um an die angeheftete Binärdatei zu übergeben, ohne einen Installationspfad hartcodieren zu müssen. |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | Sitzungs-ID in der getaggten Form `cse_...`. Dies ist dieselbe Sitzung, die die [Lifecycle-Hooks](#lifecycle-hooks) als `CLAUDE_RUNNER_SESSION_ID` in der Form `session_...` sehen; die UUID-Variablen stimmen über beide überein, und das Ersetzen des Präfixes `cse_` durch `session_` ergibt die in der Sitzungs-URL angezeigte ID. |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | Sitzungs-ID in der getaggten Form `cse_...`. Dies ist dieselbe Sitzung, die die [Lifecycle-Hooks](#lifecycle-hooks) als `CLAUDE_RUNNER_SESSION_ID` in der Form `session_...` sehen; die UUID-Variablen stimmen über beide überein, und das Ersetzen des Präfixes `cse_` durch `session_` ergibt die in der Sitzungs-URL angezeigte ID. |

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

39| `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. |

40| `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_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. |41| `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`](/docs/de/self-hosted-environments-reference#runner-cli-flags); siehe [Einen vorgewärmten Checkout wiederverwenden](/docs/de/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |42| `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`](/docs/de/self-hosted-environments-reference#runner-cli-flags); siehe [Einen vorgewärmten Checkout wiederverwenden](/docs/de/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |

41| `ANTHROPIC_BASE_URL` | Die API-Basis-URL, die das Kind verwendet, bereitgestellt von der Kontrollebene pro Sitzung und normalerweise `https://api.anthropic.com`. Überschreiben Sie sie nicht: Die Inferenz-Anmeldedaten der Sitzung sind ein von Anthropic ausgegebenes OAuth-Token, das andere Anbieter nicht akzeptieren. |43| `ANTHROPIC_BASE_URL` | Die API-Basis-URL, die das Kind verwendet, bereitgestellt von der Kontrollebene pro Sitzung und normalerweise `https://api.anthropic.com`. Überschreiben Sie sie nicht: Die Inferenz-Anmeldedaten der Sitzung sind ein von Anthropic ausgegebenes OAuth-Token, das andere Anbieter nicht akzeptieren. |


43 45 

44Der 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.

45 47 

48`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.

49 

50<h3 id="give-a-default-to-variables-that-can-be-unset">

51 Variablen, die nicht gesetzt sein können, mit einem Standardwert versehen

52</h3>

53 

54`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:-}`.

55 

56Treffen Sie überall dort, wo eine Shell den Slack-Thread-Link expandiert, diese Vorkehrungen:

57 

58* **Setzen Sie ihn in Anführungszeichen**: Der Link kann Zeichen enthalten, auf die eine Shell reagiert, etwa `?` und `&`. Setzen Sie die Variable daher in Anführungszeichen, wie in `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`.

59* **Halten Sie seinen Wert aus `eval`- und `sh -c`-Zeichenfolgen heraus**: Setzen Sie seinen Wert nicht in eine Zeichenfolge ein, die `eval` oder `sh -c` ausführt, auch nicht in Anführungszeichen. Lassen Sie diese Zeichenfolge stattdessen auf die Variable verweisen.

60 

46<h3 id="keep-stdin-and-file-descriptor-3-attached">61<h3 id="keep-stdin-and-file-descriptor-3-attached">

47 Halten Sie stdin und Dateideskriptor 3 angehängt62 Halten Sie stdin und Dateideskriptor 3 angehängt

48</h3>63</h3>

49 64 

50Stdin des Kindes ist der Steuerkanal des Runners. Token-Rotationen und Sitzungsend-Signale kommen darauf an. Der Runner öffnet auch eine Pipe auf Dateideskriptor 3 und liest die Aktivitätssignale des Kindes daraus, um Idle- und Startup-Timeouts zu steuern. Ein einfaches `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` bewahrt beide automatisch.65Stdin des Kindes ist der Steuerkanal des Runners. Token-Rotationen und Sitzungsend-Signale kommen darauf an. Der Runner öffnet auch eine Pipe auf Dateideskriptor 3 und liest die Aktivitätssignale des Kindes daraus, um Idle- und Startup-Timeouts zu steuern. Ein einfaches `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` bewahrt beide automatisch.

51 66 

52Wenn Ihr Wrapper das Kind mit einem bloßen `&` in den Hintergrund versetzt, trennt es stdin des Kindes: Die Sitzung sieht gesund aus, bis die Lebensdauer des anfänglichen OAuth-Tokens von etwa 30 Minuten abläuft, dann schlagen alle API-Aufrufe mit `401 authentication_error` fehl. Wenn Ihr Wrapper das Kind in den Hintergrund versetzen muss, zum Beispiel um eine Teardown-Falle am Leben zu erhalten, speichern Sie stdin auf Dateideskriptor 4 oder höher und hängen Sie ihn explizit wieder an:67Wenn Ihr Wrapper das Kind mit einem bloßen `&` in den Hintergrund versetzt, trennt es stdin des Kindes. Die Sitzung sieht gesund aus, bis die Lebensdauer des anfänglichen OAuth-Tokens von etwa 30 Minuten abläuft, und dann schlägt jeder API-Aufruf, der das Token verwendet, mit `401 authentication_error` fehl. Wenn Ihr Wrapper das Kind in den Hintergrund versetzen muss, zum Beispiel um eine Teardown-Falle am Leben zu erhalten, speichern Sie stdin auf Dateideskriptor 4 oder höher und hängen Sie ihn explizit wieder an:

53 68 

54```bash theme={null}69```bash theme={null}

55exec 4<&070exec 4<&0


59wait "$CHILD"74wait "$CHILD"

60```75```

61 76 

62Schließen oder verwenden Sie Dateideskriptor 3 im Wrapper nicht erneut. Das Umleiten von stdout und stderr des Kindes ist in Ordnung.77Sie können stdout des Kindes umleiten. Halten Sie Dateideskriptor 3 und stderr mit dem Runner verbunden:

78 

79* **Dateideskriptor 3**: überträgt die Aktivitätssignale des Kindes an den Runner. Schließen oder verwenden Sie ihn im Wrapper nicht erneut.

80* **stderr**: Wenn der Wrapper oder das Kind mit einem Wert ungleich Null endet, sendet der Runner die letzten Zeilen von stderr an die Sitzung und gibt sie in seinem eigenen Log aus. Der Benutzer der Sitzung sieht diese Zeilen, geben Sie daher keine Geheimnisse auf stderr aus und entfernen Sie `set -x`, bevor Sie den Wrapper bereitstellen. Wenn Sie stderr umleiten, laufen Sitzungen weiterhin, aber der Runner meldet einen Fehler nur mit dem Exit-Code.

63 81 

64<h3 id="pass-the-system-prompt-flags-through">82<h3 id="pass-the-system-prompt-flags-through">

65 System-Prompt-Flags durchreichen83 System-Prompt-Flags durchreichen


108 checkout126 checkout

109</h3>127</h3>

110 128 

111Wird einmal pro Repository anstelle des integrierten Klons und Abrufs des Runners ausgeführt. Verwenden Sie den Hook, um von einem Read-Through-Mirror zu klonen, einen Arbeitsbaum aus einem Archiv zu seeden oder Pro-Sitzungs-Git-Authentifizierung anzuwenden. Der Runner setzt diese Variablen und kann weitere `CLAUDE_RUNNER_`-Variablen setzen, die die Tabelle nicht aufführt:129Wird einmal pro Repository anstelle des integrierten Klons und Abrufs des Runners ausgeführt. Verwenden Sie den Hook, um von einem Read-Through-Mirror zu klonen, den Sie über HTTPS oder SSH erreichen, einen Working Tree aus einem Archiv zu seeden oder Pro-Sitzungs-Git-Authentifizierung anzuwenden. Der Runner setzt diese Variablen und kann weitere `CLAUDE_RUNNER_`-Variablen setzen, die die Tabelle nicht aufführt:

112 130 

113| Variable | Beschreibung |131| Variable | Beschreibung |

114| :- | :- |132| :- | :- |

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

116| `CLAUDE_RUNNER_REPO_REF` | Revision zum Auschecken: Branch, Tag oder Commit-SHA, wie die Sitzung sie angefordert hat. Leer bedeutet den Standard-Branch des Repositorys. |134| `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. |

117| `CLAUDE_RUNNER_CHECKOUT_PATH` | Absoluter Pfad, wo der Arbeitsbaum hinterlassen werden muss |135| `CLAUDE_RUNNER_CHECKOUT_PATH` | Absoluter Pfad, wo der Arbeitsbaum hinterlassen werden muss |

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

119| `CLAUDE_RUNNER_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form |137| `CLAUDE_RUNNER_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form |

120| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic-API-Basis-URL für Sitzungs-bezogene Aufrufe |138| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic-API-Basis-URL für Sitzungs-bezogene Aufrufe |

121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app` oder `ios`. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat. |139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app` oder `ios`. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat, referenzieren Sie sie daher unter `set -u` als `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}`. Erfordert Claude Code v2.1.229 oder später. |

122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Das Sitzungs-Zugangstoken für Sitzungs-bezogene API-Aufrufe |140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Das Sitzungs-Zugangstoken für Sitzungs-bezogene API-Aufrufe |

123| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Git-Einstellungen, die der Runner für das Git festlegt, das Ihr Hook ausführt. [Git-Konfiguration innerhalb von Lifecycle-Hooks](#git-configuration-inside-lifecycle-hooks) beschreibt sie. Erfordert Claude Code v2.1.280 oder später. |141| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Git-Einstellungen, die der Runner für das Git festlegt, das Ihr Hook ausführt. [Git-Konfiguration innerhalb von Lifecycle-Hooks](#git-configuration-inside-lifecycle-hooks) beschreibt sie. Erfordert Claude Code v2.1.280 oder später. |

124 142 

125Das Skript muss einen Arbeitsbaum bei `CLAUDE_RUNNER_CHECKOUT_PATH` hinterlassen, der bei der angeforderten Revision ausgecheckt ist. Detached HEAD ist in Ordnung; der Runner erstellt den Arbeitsbranch der Sitzung darauf. Der Runner überprüft danach, ob der Pfad eine `.git` enthält; wenn Ihr Hook eine Nicht-Git-Quelle wie Perforce oder ein entpacktes Tarball materialisiert, setzen Sie `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` in der Umgebung des Runners, um diese Überprüfung zu überspringen. Git-basierte Flows wie Arbeitsbranch-Erstellung und Pushing-Ergebnisse erfordern einen Git-Checkout, daher exportieren Sie Ergebnisse aus Nicht-Git-Bäumen mit einem [`post-session`-Hook](#post-session).143Das Skript muss einen Working Tree bei `CLAUDE_RUNNER_CHECKOUT_PATH` hinterlassen, der bei der angeforderten Revision ausgecheckt ist. Ein Detached HEAD funktioniert, weil der Runner den Arbeits-Branch der Sitzung darauf erstellt.

126 144 

127Der Runner übergibt keine Git-Anmeldedaten an den Hook. Stattdessen prägen Sie eine Pro-Sitzungs-Klone-Anmeldedaten aus der Identität der Sitzung: Überprüfen Sie `CLAUDE_CODE_SESSION_ACCESS_TOKEN` mit einer Standard-JWT-Bibliothek gegen den JWKS-Endpunkt unter `CLAUDE_RUNNER_API_BASE_URL`, wie in [Token von Ihrem Dienst überprüfen](/docs/de/self-hosted-environments-identity#verify-the-token-from-your-service) beschrieben, dann lassen Sie Ihren Anmeldedatendienst eine kurzlebige Klone-Anmeldedaten für die Identität im `act`-Anspruch des Tokens ausstellen. `CLAUDE_RUNNER_CLAUDE_BIN` ist nicht in der Checkout-Hook-Umgebung gesetzt, daher ist der Unterbefehl `decode-token` hier nicht verfügbar. Das Zurückfallen auf die Git-Authentifizierung, die der Host bereits hat, wie einen SSH-Agent, Anmeldedaten-Helper oder `.netrc`, ist auch eine Option.145Nachdem Ihr Hook zurückkehrt, überprüft der Runner, ob `CLAUDE_RUNNER_CHECKOUT_PATH` eine `.git` enthält. Wenn Ihr Hook eine Nicht-Git-Quelle wie Perforce oder ein entpacktes Tarball materialisiert, setzen Sie `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` in der Umgebung des Runners, um diese Überprüfung zu überspringen. Git-basierte Abläufe wie die Erstellung des Arbeits-Branches und das Pushen von Ergebnissen erfordern einen Git-Checkout, daher exportieren Sie Ergebnisse aus Nicht-Git-Bäumen mit einem [`post-session`-Hook](#post-session).

128 146 

129Wenn der Hook mit ungleich Null endet oder mit 0 endet, ohne einen verwendbaren Checkout hinterlassen zu haben, hängt das, was der Runner tut, vom Repository ab:147<h4 id="get-git-credentials-in-the-hook">

148 Git-Anmeldedaten im Hook beziehen

149</h4>

130 150 

131* **Ein Repository, zu dem die Sitzung Ergebnisse pusht**: Der Runner schlägt die Sitzung fehl, und bei einem Nicht-Null-Exit zeigt er das Ende des Stderr des Skripts dem Benutzer an.151Der Runner übergibt keine Git-Anmeldedaten an den Hook. Auch der Unterbefehl `decode-token` ist hier nicht verfügbar, weil `CLAUDE_RUNNER_CLAUDE_BIN` in der Checkout-Hook-Umgebung nicht gesetzt ist. Erzeugen Sie stattdessen Pro-Sitzungs-Klon-Anmeldedaten aus der Identität der Sitzung, oder greifen Sie auf die eigene Git-Authentifizierung des Hosts zurück:

132* **Ein Repository, das die Sitzung nur liest**, wie ein Repository, das zu einer laufenden Sitzung hinzugefügt wird: Der Runner protokolliert eine `[runner:warn]`-Zeile mit dem Fehlerdetail, postet einen `Skipped`-Schritt zur Sitzung, entfernt, was der Hook bei dem Checkout-Pfad hinterlassen hat, und fährt mit den verbleibenden Repositories fort. Wenn der Runner den Pfad nicht sofort entfernen kann, versucht er die Entfernung beim Sitzungsende erneut. Wenn das Überspringen die Sitzung ohne Repository verlässt, schlägt der Runner die Sitzung trotzdem fehl.

133 152 

134Vor v2.1.228 schlägt der Runner die Sitzung bei einem Hook-Fehler für jedes Repository fehl, daher schlägt ein Read-Only-Repository, das der Hook nicht bedienen konnte, die Sitzung erneut auf jedem frischen Runner fehl, auf dem die Sitzung fortgesetzt wurde.153* **Pro-Sitzungs-Klon-Anmeldedaten**: Überprüfen Sie `CLAUDE_CODE_SESSION_ACCESS_TOKEN` mit einer Standard-JWT-Bibliothek gegen den JWKS-Endpunkt unter `CLAUDE_RUNNER_API_BASE_URL`, wie in [Token von Ihrem Dienst überprüfen](/docs/de/self-hosted-environments-identity#verify-the-token-from-your-service) beschrieben. Lassen Sie dann Ihren Anmeldedatendienst kurzlebige Klon-Anmeldedaten für die Identität im `act`-Claim des Tokens ausstellen. Verknüpfen Sie diese Anmeldedaten mit `act.sub`, und setzen Sie `act.email` nicht voraus.

154* **Git-Authentifizierung des Hosts**: Verwenden Sie die Git-Authentifizierung, die der Host bereits hat, wie einen SSH-Agent, einen Anmeldedaten-Helper oder `.netrc`.

135 155 

136Der Runner entfernt den Checkout-Pfad nach dem Sitzungsende.156<h4 id="when-the-hook-fails">

157 Wenn der Hook fehlschlägt

158</h4>

159 

160Der Hook schlägt fehl, wenn er mit einem Wert ungleich Null endet oder mit 0 endet, ohne einen verwendbaren Checkout hinterlassen zu haben:

161 

162* **Ein Repository, zu dem die Sitzung Ergebnisse pusht**: Der Runner schlägt die Sitzung fehl, und bei einem Nicht-Null-Exit zeigt er das Ende des Stderr des Skripts dem Benutzer an.

163* **Ein Repository, aus dem die Sitzung nur liest**, wie ein Repository, das zu einer laufenden Sitzung hinzugefügt wird: Der Runner protokolliert eine `[runner:warn]`-Zeile mit dem Fehlerdetail, postet einen `Skipped`-Schritt an die Sitzung, entfernt, was der Hook am Checkout-Pfad hinterlassen hat, und fährt mit den verbleibenden Repositorys fort. Wenn die Sitzung durch das Überspringen überhaupt kein Repository mehr hat, lässt der Runner die Sitzung trotzdem fehlschlagen.

164 

165Wenn der Hook erfolgreich ist, entfernt der Runner den Checkout-Pfad nach dem Sitzungsende.

137 166 

138<h3 id="post-session">167<h3 id="post-session">

139 post-session168 post-session


151| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Doppelpunkt-getrennte absolute Pfade der Arbeitsbäume der Sitzung. Leer für Null-Repo-Sitzungen. |180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Doppelpunkt-getrennte absolute Pfade der Arbeitsbäume der Sitzung. Leer für Null-Repo-Sitzungen. |

152| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Pfad zum Debug-Protokoll der Sitzung, noch auf der Festplatte während der Hook-Ausführung |181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Pfad zum Debug-Protokoll der Sitzung, noch auf der Festplatte während der Hook-Ausführung |

153| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic-API-Basis-URL für Sitzungs-bezogene Aufrufe |182| `CLAUDE_RUNNER_API_BASE_URL` | Anthropic-API-Basis-URL für Sitzungs-bezogene Aufrufe |

154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app` oder `ios`. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat. Erfordert Claude Code v2.1.229 oder später. |183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app` oder `ios`. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat, referenzieren Sie sie daher unter `set -u` als `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}`. Erfordert Claude Code v2.1.229 oder später. |

155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Das Sitzungs-Zugangstoken für Sitzungs-bezogene API-Aufrufe |184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Das Sitzungs-Zugangstoken für Sitzungs-bezogene API-Aufrufe |

156| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Git-Einstellungen, die der Runner für das Git festlegt, das Ihr Hook ausführt. [Git-Konfiguration innerhalb von Lifecycle-Hooks](#git-configuration-inside-lifecycle-hooks) beschreibt sie. Erfordert Claude Code v2.1.280 oder später. |185| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Git-Einstellungen, die der Runner für das Git festlegt, das Ihr Hook ausführt. [Git-Konfiguration innerhalb von Lifecycle-Hooks](#git-configuration-inside-lifecycle-hooks) beschreibt sie. Erfordert Claude Code v2.1.280 oder später. |

157 186 

158`CLAUDE_RUNNER_EXIT_REASON` nimmt einen von vier Werten an:187`CLAUDE_RUNNER_EXIT_REASON` nimmt einen von vier Werten an:

159 188 

160* `completed`: die Sitzung endete sauber. Der Claude Code-Prozess wurde normal beendet, oder die Sitzung wurde archiviert oder gelöscht, während sie noch lief.189* `completed`: Die Sitzung endete sauber. Der Claude Code-Prozess wurde normal beendet oder hat sich selbst beendet, nachdem die Sitzung archiviert oder gelöscht wurde.

161* `failed`: Der Claude Code-Prozess ist abgestürzt, oder das Setup ist nach dem Start fehlgeschlagen.190* `failed`: Der Claude Code-Prozess ist abgestürzt, oder das Setup ist nach dem Start fehlgeschlagen.

162* `interrupted`: Der Runner hat die Sitzung gestoppt. Er gab die Sitzung frei, um den Slot freizugeben, die Sitzung ist beim Startup abgelaufen, der Server hat die Sitzung von diesem Runner verschoben, der Runner wurde geleert, oder die Sitzung hat sein [`--kill-session-after-min`](/docs/de/self-hosted-environments-reference#runner-cli-flags)-Limit überschritten.191* `interrupted`: Der Runner hat die Sitzung gestoppt, in einem dieser Fälle:

192 * Der Runner hat die Sitzung freigegeben, um den Slot freizumachen.

193 * Die Sitzung ist beim Start in ein Timeout gelaufen.

194 * Der Server hat die Sitzung von diesem Runner wegverschoben.

195 * Die Abfrage des Runners hat eine Archivierung oder Löschung bemerkt, bevor der Prozess beendet wurde.

196 * Der Runner wurde geleert.

197 * Die Sitzung hat ihr [`--kill-session-after-min`](/docs/de/self-hosted-environments-reference#runner-cli-flags)-Limit überschritten.

163* `abandoned`: reserviert für eine Sitzung, die ein anderer Runner beansprucht hat. Der Hook wird derzeit in diesem Fall nicht ausgelöst.198* `abandoned`: reserviert für eine Sitzung, die ein anderer Runner beansprucht hat. Der Hook wird derzeit in diesem Fall nicht ausgelöst.

164 199 

165Die [Sitzungs-Lifecycle-Zähler](/docs/de/self-hosted-environments-reference#session-lifecycle-counter-semantics) zählen eine Freigabe, ein Startup-Timeout und einen Server-Umzug als `completed` statt `interrupted`, weil der Runner den Slot sauber zurückgegeben hat. Erwarten Sie diesen Unterschied, wenn Sie Hook-Quittungen mit den Zählern vergleichen.200Wenn Sie Hook-Quittungen mit den [Sitzungs-Lifecycle-Zählern](/docs/de/self-hosted-environments-reference#session-lifecycle-counter-semantics) vergleichen, rechnen Sie damit, dass einige `interrupted`-Quittungen dort als `completed` gezählt werden. Die Zähler zählen eine Freigabe, ein Start-Timeout, eine Verschiebung durch den Server sowie eine Archivierung oder Löschung, die die Abfrage des Runners zuerst bemerkt hat, als `completed`, weil der Runner den Slot sauber zurückgegeben hat.

166 201 

167Der Exit-Status des Hooks beeinflusst niemals das Sitzungsergebnis; ein Fehler wird protokolliert und ignoriert. Der Runner wartet bis zu `--post-session-hook-timeout-sec`, standardmäßig 60 Sekunden, bei jedem Sitzungsende einschließlich Runner-Shutdown. Dieses Beispiel speichert ungespeicherte Arbeit in einem Rettungs-Branch:202Der Exit-Status des Hooks beeinflusst niemals das Sitzungsergebnis; ein Fehler wird protokolliert und ignoriert. Der Runner wartet bis zu `--post-session-hook-timeout-sec`, standardmäßig 60 Sekunden, bei jedem Sitzungsende einschließlich Runner-Shutdown. Dieses Beispiel speichert ungespeicherte Arbeit in einem Rettungs-Branch:

168 203 

169```bash theme={null}204```bash theme={null}

170#!/usr/bin/env bash205#!/usr/bin/env bash

171set -u206set -u

207export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

172IFS=':'208IFS=':'

173# -c-Überschreibungen schlagen Repo-lokale Einstellungen und verhindern, dass von der Sitzung209# -c-Überschreibungen schlagen Repo-lokale Einstellungen und verhindern, dass von der Sitzung

174# geschriebene fsmonitor-, Hook-Pfad- und gpg-program-Konfiguration Code mit den Berechtigungen210# geschriebene fsmonitor-, Hook-Pfad- und gpg-program-Konfiguration Code mit den Berechtigungen


188done224done

189```225```

190 226 

227Die Zeile `GIT_ALLOW_PROTOCOL` im Skript beschränkt Git auf HTTPS-, HTTP- und SSH-Remotes. Wenn die Umgebung des Runners bereits eine eigene, nicht leere `GIT_ALLOW_PROTOCOL`-Liste setzt, behält das Skript diese Liste bei.

228 

191Der Hook pusht mit den Git-Anmeldedaten, die in seiner eigenen Umgebung auf dem Runner-Host verfügbar sind. Unter der [Keine-Anmeldedaten-im-Image-Haltung](/docs/de/self-hosted-environments-deploy#configure-git), einschließlich wenn der integrierte Klon durch den Anthropic-Git-Proxy geht, gibt es keine, daher erzeugen Sie kurzlebige Push-Anmeldedaten innerhalb des Hooks, bevor Sie pushen: Tauschen Sie das Sitzungs-Token, das der Hook in `CLAUDE_CODE_SESSION_ACCESS_TOKEN` erhält, mit Ihrem eigenen Token-Dienst aus, und überprüfen Sie es, wie [Sitzungsidentität überprüfen](/docs/de/self-hosted-environments-identity) beschreibt. Wenn der Hook Anmeldedaten hält, die die Sitzung nicht hatte, ersetzen Sie `origin` durch eine vom Operator bereitgestellte URL und übergeben Sie `-c credential.helper=` plus Ihren eigenen Helper. [Git-Konfiguration innerhalb von Lifecycle-Hooks](#git-configuration-inside-lifecycle-hooks) beschreibt, was von der Sitzung geschriebene Konfiguration weiterhin beeinflussen kann.229Der Hook pusht mit den Git-Anmeldedaten, die in seiner eigenen Umgebung auf dem Runner-Host verfügbar sind. Unter der [Keine-Anmeldedaten-im-Image-Haltung](/docs/de/self-hosted-environments-deploy#configure-git), einschließlich wenn der integrierte Klon durch den Anthropic-Git-Proxy geht, gibt es keine, daher erzeugen Sie kurzlebige Push-Anmeldedaten innerhalb des Hooks, bevor Sie pushen: Tauschen Sie das Sitzungs-Token, das der Hook in `CLAUDE_CODE_SESSION_ACCESS_TOKEN` erhält, mit Ihrem eigenen Token-Dienst aus, und überprüfen Sie es, wie [Sitzungsidentität überprüfen](/docs/de/self-hosted-environments-identity) beschreibt. Wenn der Hook Anmeldedaten hält, die die Sitzung nicht hatte, ersetzen Sie `origin` durch eine vom Operator bereitgestellte URL und übergeben Sie `-c credential.helper=` plus Ihren eigenen Helper. [Git-Konfiguration innerhalb von Lifecycle-Hooks](#git-configuration-inside-lifecycle-hooks) beschreibt, was von der Sitzung geschriebene Konfiguration weiterhin beeinflussen kann.

192 230 

193<h4 id="hook-timing-when-the-runner-releases-a-session">231<h4 id="hook-timing-when-the-runner-releases-a-session">


264| `CLAUDE_RUNNER_ORDER_ID` | Undurchsichtiger Idempotenz-Schlüssel, eindeutig pro Spawn-Anfrage und sicher für Kubernetes-Ressourcennamen. Verwenden Sie nur die Order-ID als Dedup-Schlüssel Ihres Provisioners. |302| `CLAUDE_RUNNER_ORDER_ID` | Undurchsichtiger Idempotenz-Schlüssel, eindeutig pro Spawn-Anfrage und sicher für Kubernetes-Ressourcennamen. Verwenden Sie nur die Order-ID als Dedup-Schlüssel Ihres Provisioners. |

265| `CLAUDE_RUNNER_SESSION_ID` | Die Sitzung, für die diese Anfrage bestimmt ist. Sie wiederholt sich bei jeder Neuanfrage für die Sitzung, daher verwenden Sie sie für Protokollierung und Routing, nicht als Dedup-Schlüssel. Leer für Pre-Warming-Anfragen, die einen Standby-Runner im Voraus starten, bevor eine bestimmte Sitzung, wenn [`--min-idle`](/docs/de/self-hosted-environments-reference#orchestrator-cli-flags) gesetzt ist, daher nehmen Sie nicht an, dass die Variable gesetzt ist. |303| `CLAUDE_RUNNER_SESSION_ID` | Die Sitzung, für die diese Anfrage bestimmt ist. Sie wiederholt sich bei jeder Neuanfrage für die Sitzung, daher verwenden Sie sie für Protokollierung und Routing, nicht als Dedup-Schlüssel. Leer für Pre-Warming-Anfragen, die einen Standby-Runner im Voraus starten, bevor eine bestimmte Sitzung, wenn [`--min-idle`](/docs/de/self-hosted-environments-reference#orchestrator-cli-flags) gesetzt ist, daher nehmen Sie nicht an, dass die Variable gesetzt ist. |

266| `CLAUDE_RUNNER_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form. Leer für Pre-Warming-Anfragen. |304| `CLAUDE_RUNNER_SESSION_UUID` | Dieselbe Sitzungs-ID in kanonischer UUID-Form. Leer für Pre-Warming-Anfragen. |

267| `CLAUDE_RUNNER_ATTEMPT` | Wie viele Spawn-Anfragen diese Sitzung hatte. `0` für Pre-Warming-Anfragen. |305| `CLAUDE_RUNNER_ATTEMPT` | Ein Zähler pro Sitzung zur Verwendung in Logs. Er ist weder eine Anzahl von Wiederholungsversuchen noch eine Anzahl von Anfragen. `0` für Pre-Warming-Anfragen, wobei auch eine Anfrage für eine Sitzung `0` enthalten kann. |

268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Server-Zeit aus dem HTTP-`Date`-Header der Poll-Antwort. Wenn der Hook das Arbeitsorder-JWT `exp` überprüft, vergleichen Sie gegen diesen Wert anstelle der lokalen Uhr, um Skew zu tolerieren. Leer, wenn das Gateway den Header weggelassen hat. |306| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Server-Zeit aus dem HTTP-`Date`-Header der Poll-Antwort. Wenn der Hook das Arbeitsorder-JWT `exp` überprüft, vergleichen Sie gegen diesen Wert anstelle der lokalen Uhr, um Skew zu tolerieren. Leer, wenn das Gateway den Header weggelassen hat. |

269| `CLAUDE_RUNNER_POOL_ID` | Die ID der Umgebung, der der neue Runner beitreten sollte, in der Form `ccpool_...` |307| `CLAUDE_RUNNER_POOL_ID` | Die ID der Umgebung, der der neue Runner beitreten sollte, in der Form `ccpool_...` |

270| `CLAUDE_RUNNER_ACCOUNT_ID` | Getaggte ID des Kontos, das die Sitzung in die Warteschlange eingereiht hat, für Pro-Konto-Routing, Kontingent oder Chargeback. Leer, wenn nicht verfügbar, und immer leer für Claude Tag-Kanal-Sitzungen, die kein Konto einreiht. |308| `CLAUDE_RUNNER_ACCOUNT_ID` | Getaggte ID des Kontos, das die Sitzung in die Warteschlange eingereiht hat, für Pro-Konto-Routing, Kontingent oder Chargeback. Leer, wenn nicht verfügbar, und immer leer für Claude Tag-Kanal-Sitzungen, die kein Konto einreiht. |

271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | E-Mail des Kontos, das die Sitzung in die Warteschlange eingereiht hat. Leer, wenn nicht verfügbar. Behandeln Sie die E-Mail als personenbezogene Informationen und protokollieren Sie sie nicht. |309| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | E-Mail des Kontos, das die Sitzung in die Warteschlange eingereiht hat. Leer, wenn nicht verfügbar. Behandeln Sie die E-Mail als personenbezogene Informationen und protokollieren Sie sie nicht. |

272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL der ersten Git-Quelle der Sitzung, für Routing zu einem Runner mit diesem Repository pre-warmed. Leer, wenn die Sitzung keine Git-Quellen hat. |310| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL der ersten Git-Quelle der Sitzung, für Routing zu einem Runner mit diesem Repository pre-warmed. Leer, wenn die Sitzung keine Git-Quellen hat. |

273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revision der ersten Git-Quelle der Sitzung: Branch, SHA oder Tag. Leer, wenn nicht angegeben. |311| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revision der ersten Git-Quelle der Sitzung: Branch, SHA, Tag oder vollständiger Referenzname. Leer, wenn nicht angegeben. |

274| `CLAUDE_RUNNER_REPO_SOURCES` | JSON-Array von `{url, revision}` für alle Git-Quellen der Sitzung, für Hooks, die auf einem sekundären Repository routen. Leer, wenn es keine Quellen gibt. |312| `CLAUDE_RUNNER_REPO_SOURCES` | JSON-Array von `{url, revision}` für alle Git-Quellen der Sitzung, für Hooks, die auf einem sekundären Repository routen. Leer, wenn es keine Quellen gibt. |

275| `CLAUDE_RUNNER_CORRELATION_ID` | Die Korrelations-ID, die bei der Sitzungserstellung bereitgestellt wurde, echoed zurück, damit der Hook diese Arbeitsorder der Anfrage zuordnen kann, die die Sitzung erstellt hat. Leer, wenn die Sitzung keine hat. |313| `CLAUDE_RUNNER_CORRELATION_ID` | Die Korrelations-ID, die bei der Sitzungserstellung bereitgestellt wurde, echoed zurück, damit der Hook diese Arbeitsorder der Anfrage zuordnen kann, die die Sitzung erstellt hat. Leer, wenn die Sitzung keine hat. |

276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app`, `ios` oder `scheduled_trigger`, für Adoptionsanalysen. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat, und für Pre-Warming-Anfragen; überprüfen Sie sie mit `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, was unter `set -u` sicher bleibt. |314| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Die Client-Oberfläche, die die Sitzung erstellt hat, wie `web_claude_ai`, `desktop_app`, `ios` oder `scheduled_trigger`, für Adoptionsanalysen. Nicht gesetzt, wenn die Sitzung keine aufgezeichnete oder erkannte Oberfläche hat, und für Pre-Warming-Anfragen; überprüfen Sie sie mit `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, was unter `set -u` sicher bleibt. |


282* **Verwenden Sie `--capacity 1` auf gespawten Runnern**: Eine Sitzungs-gebundene Arbeitsorder registriert genau einen Runner, der an diese Sitzung gebunden ist, daher fügt eine höhere Kapazität Slots hinzu, die niemals Arbeit erhalten, und der Runner protokolliert eine Warnung beim Startup.320* **Verwenden Sie `--capacity 1` auf gespawten Runnern**: Eine Sitzungs-gebundene Arbeitsorder registriert genau einen Runner, der an diese Sitzung gebunden ist, daher fügt eine höhere Kapazität Slots hinzu, die niemals Arbeit erhalten, und der Runner protokolliert eine Warnung beim Startup.

283* **Pre-Warming-Arbeitsorder registrieren ungebunden**: Der Standby-Runner ist nicht an eine Sitzung gebunden und beansprucht in der Warteschlange befindliche Arbeit wie ein Fixed-Fleet-Runner.321* **Pre-Warming-Arbeitsorder registrieren ungebunden**: Der Standby-Runner ist nicht an eine Sitzung gebunden und beansprucht in der Warteschlange befindliche Arbeit wie ein Fixed-Fleet-Runner.

284 322 

285Der Vertrag hat vier Provisioner-agnostische Regeln:323Der Vertrag hat vier Regeln, unabhängig davon, auf welcher Plattform Ihr Hook provisioniert:

286 324 

2871. **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.3251. **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.

2882. **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.3262. **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.

2893. **Verwenden Sie den Exit-Code-Vertrag.** Exit 0 bedeutet eingereicht. Exit 1 bedeutet wiederholbarer Fehler; die Sitzung sichert sich ab und wird erneut angeboten. Exit 2 oder höher bedeutet nicht wiederholbar; die Sitzung wird blockiert, bis ein [Owner](/docs/de/cloud-environments#organization-shared-environments) auf der Registerkarte **Aktivität** der Umgebung **Erneut versuchen** auswählt. Bei Nicht-Null-Exit erscheint das Ende des Stderr des Hooks dort als Fehlergrund, daher schreiben Sie den umsetzbaren Fehler auf stderr und niemals Geheimnisse. Für eine Pre-Warming-Anfrage gibt es keine Sitzung zum Fehlschlag: Der Orchestrator protokolliert einen Nicht-Null-Exit lokal nur, und der Server fordert den Spawn nach dem Lease erneut an.3273. **Verwenden Sie den Exit-Code-Vertrag.** Beenden Sie den Hook mit dem Status, der dem Ergebnis entspricht:

2904. **Setzen Sie `--expected-spawn-seconds` auf mindestens Ihre p99-Boot-Zeit.** Dies ist das serverseitige Lease. Alle Orchestrator-Replikas müssen denselben Wert verwenden.328 

329 * **Exit 0**: eingereicht.

330 * **Exit 1**: wiederholbarer Fehler. Die Sitzung wartet mit Backoff und wird erneut angeboten.

331 * **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](/docs/de/cloud-environments#organization-shared-environments) auf der Registerkarte **Aktivität** der Umgebung **Erneut versuchen** auswählt.

332 

333 Bei einem Exit ungleich null erscheint das Ende der stderr-Ausgabe des Hooks auf der Registerkarte **Aktivität** als Fehlergrund; schreiben Sie daher den umsetzbaren Fehler auf stderr und schreiben Sie dort niemals Geheimnisse. In einem Shell-Hook [halten Sie vorübergehende Fehler wiederholbar](#keep-transient-failures-retryable-in-a-shell-hook).

334 

335 Eine Pre-Warming-Anfrage hat keine Sitzung, die fehlschlagen kann: Der Orchestrator protokolliert einen Exit ungleich null nur lokal, und der Server fordert den Spawn erneut an, nachdem das Lease von `--expected-spawn-seconds` abgelaufen ist.

3364. **Setzen Sie `--expected-spawn-seconds` auf mindestens Ihre p99-Zeit von der Spawn-Anfrage bis zur Runner-Registrierung.** Messen Sie ab dem Zeitpunkt, an dem der Orchestrator die Spawn-Anfrage erhält, und beziehen Sie jede Wartezeit auf Kapazität auf Ihrer Plattform sowie die Boot-Zeit ein. Dieser Wert ist das serverseitige Lease, und die Arbeitsorder läuft mit ihm ab, sodass sich ein Runner, dessen Workload länger braucht, nicht registrieren kann. Alle Orchestrator-Replikas müssen denselben Wert verwenden.

291 337 

292Alles, 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.338Alles, 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.

293 339 

294Eine 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.340Eine 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.

295 341 

342<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

343 Vorübergehende Fehler in einem Shell-Hook wiederholbar halten

344</h4>

345 

346In einem Shell-Hook, der `set -e` verwendet, kann ein Fehler, den ein Wiederholungsversuch hätte beheben können, die Sitzung blockieren. Der Hook stoppt beim fehlschlagenden Befehl und endet mit dem eigenen Status dieses Befehls, und der Orchestrator wendet den Exit-Code-Vertrag auf diesen Status an. Viele Fehler geben einen Status von 2 oder höher zurück, etwa `127`, wenn ein Befehl nicht installiert ist, und `22` von `curl --fail` bei einem HTTP-Fehler, sodass sie die Sitzung bereits beim ersten Fehler blockieren.

347 

348Eine Sitzung, die der Hook bereits blockiert hat, bleibt blockiert, bis ein Benutzer ihr eine neue Nachricht sendet oder ein [Owner](/docs/de/cloud-environments#organization-shared-environments) auf der Registerkarte **Aktivität** der Umgebung **Erneut versuchen** auswählt.

349 

350Um einen solchen Fehler stattdessen in Exit 1 umzuwandeln, fügen Sie diese Zeilen direkt unter der `#!`-Zeile des Hooks ein, oberhalb von allem, was fehlschlagen kann:

351 

352```bash theme={null}

353set -e

354PERMANENT=; permanent() { printf '%s\n' "$*" >&2; PERMANENT=1; exit 2; }

355trap 'rc=$?; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

356```

357 

358Diese Zeilen ändern das Verhalten des restlichen Hooks; prüfen Sie ihn daher nach dem Einfügen auf jedes dieser Muster:

359 

360* **Einfaches `exit 2` oder höher**: Mit gesetztem Trap wird daraus Exit 1. Rufen Sie für einen Fehler, den kein Wiederholungsversuch beheben kann, stattdessen `permanent` mit dem Grund auf, etwa `permanent "namespace claude-runners does not exist"`. Rufen Sie es in der Haupt-Shell auf, nicht innerhalb von `$( )`, `( )` oder einer Pipe.

361* **`exec`**: Beginnen Sie den letzten Befehl des Hooks nicht mit `exec`, da `exec` die Shell ersetzt und der Trap nicht ausgeführt wird.

362* **Zweiter `EXIT`-Trap**: Ein zweiter `trap ... EXIT` ersetzt den ersten; führen Sie die beiden daher zu einem einzigen Trap zusammen. Setzen Sie Ihre Bereinigungsbefehle direkt hinter `rc=$?;` und beenden Sie jeden mit `|| true;`. Die Bereinigung läuft dann sowohl bei Fehlern als auch bei Erfolg, und ein fehlschlagender Bereinigungsbefehl setzt nicht den Exit-Status des Hooks. Dieser zusammengeführte Trap zeigt die Form, wobei `your-cleanup-command` für Ihren eigenen Befehl steht:

363 

364 ```bash theme={null}

365 trap 'rc=$?; your-cleanup-command || true; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

366 ```

367* **Befehle, die fehlschlagen dürfen**: Wenn der Hook zuvor kein `set -e` verwendet hat, stoppt er jetzt beim ersten Befehl, der einen Wert ungleich null zurückgibt, etwa bei einer Suche ohne Ergebnis oder einer doppelten Einreichung, die Ihre Plattform ablehnt. Wenn der Hook auf das Ergebnis reagiert, machen Sie diesen Befehl zur Bedingung eines `if`. Wenn er das Ergebnis ignoriert, hängen Sie `|| true` an den Befehl an.

368 

369Um zu bestätigen, dass der Trap funktioniert, fügen Sie direkt unter der `trap`-Zeile eine Zeile ein, die einen nicht existierenden Befehl aufruft, etwa `no-such-command`. Führen Sie die Hook-Datei aus Ihrer Shell aus und prüfen Sie, dass `echo $?` den Wert `1` ausgibt; entfernen Sie die Zeile anschließend.

370 

296<h2 id="send-model-requests-to-bedrock-or-agent-platform">371<h2 id="send-model-requests-to-bedrock-or-agent-platform">

297 Modellanfragen an Bedrock oder Agent Platform senden372 Modellanfragen an Bedrock oder Agent Platform senden

298</h2>373</h2>


381Eine Sitzung, die Modellanfragen an Amazon Bedrock oder Google Cloud's Agent Platform sendet, unterscheidet sich auf folgende Weise von einer Sitzung über die Anthropic API:456Eine Sitzung, die Modellanfragen an Amazon Bedrock oder Google Cloud's Agent Platform sendet, unterscheidet sich auf folgende Weise von einer Sitzung über die Anthropic API:

382 457 

383* **Richtlinien aus claude.ai**: [Serververwaltete Einstellungen](/docs/de/server-managed-settings) erreichen diese Sitzungen nicht. Ebenso wenig die Organisationsrichtlinien, die ein Owner in den Claude Code Admin-Einstellungen festlegt, daher setzt Claude Code sie innerhalb der Sitzung nicht durch. Legen Sie die Regeln, auf die Sie sich verlassen, in der [Datei für verwaltete Einstellungen](/docs/de/managed-settings#delivery-mechanisms) des Runner-Images ab.458* **Richtlinien aus claude.ai**: [Serververwaltete Einstellungen](/docs/de/server-managed-settings) erreichen diese Sitzungen nicht. Ebenso wenig die Organisationsrichtlinien, die ein Owner in den Claude Code Admin-Einstellungen festlegt, daher setzt Claude Code sie innerhalb der Sitzung nicht durch. Legen Sie die Regeln, auf die Sie sich verlassen, in der [Datei für verwaltete Einstellungen](/docs/de/managed-settings#delivery-mechanisms) des Runner-Images ab.

459* **Konto-Skills**: Diese Sitzungen laden die Skills, die für das claude.ai-Konto einer Person aktiviert sind, nicht herunter. Siehe [Wie die Konfiguration jeder Sitzung zusammengestellt wird](#how-each-session’s-config-is-assembled).

384* **Dateien**: Dateien, die Personen in claude.ai oder der mobilen oder Desktop-App an eine Sitzung anhängen, erreichen diese nicht, und Claude kann mit dem [`SendUserFile`-Tool](/docs/de/tools-reference) keine Dateien zurücksenden. Legen Sie Eingabedateien stattdessen im Repository oder auf dem Runner ab.460* **Dateien**: Dateien, die Personen in claude.ai oder der mobilen oder Desktop-App an eine Sitzung anhängen, erreichen diese nicht, und Claude kann mit dem [`SendUserFile`-Tool](/docs/de/tools-reference) keine Dateien zurücksenden. Legen Sie Eingabedateien stattdessen im Repository oder auf dem Runner ab.

385* **Modellauswahl**: Die Control Plane von Anthropic sendet das Modell jeder Sitzung, und wenn eine Sitzung ohne Modell startet, verwendet Claude Code seinen Standard für den Anbieter. Der Runner entfernt `ANTHROPIC_MODEL` und `ANTHROPIC_DEFAULT_MODEL` aus der Umgebung, die er an Sitzungen übergibt. Die Beispiele auf den Anbieterseiten setzen `ANTHROPIC_MODEL`, aber in der Umgebung des Runners hat keine der beiden Variablen eine Wirkung. Die familienspezifischen Variablen unter „Modellversionen festlegen“ für [Amazon Bedrock](/docs/de/amazon-bedrock#4-pin-model-versions) und [Agent Platform](/docs/de/google-vertex-ai#5-pin-model-versions) erreichen Sitzungen hingegen. Sie bestimmen, worauf ein Alias wie `opus` aufgelöst wird, nicht, worauf eine vollständige Modell-ID aufgelöst wird.461* **Modellauswahl**: Die Control Plane von Anthropic sendet das Modell jeder Sitzung, und wenn eine Sitzung ohne Modell startet, verwendet Claude Code seinen Standard für den Anbieter. Sie können das Modell nicht mit `ANTHROPIC_MODEL` oder `ANTHROPIC_DEFAULT_MODEL` in der Umgebung des Runners auswählen, aber Sie können festlegen, worauf ein Alias aufgelöst wird:

462 * **`ANTHROPIC_MODEL` und `ANTHROPIC_DEFAULT_MODEL`**: Der Runner entfernt sie aus der Umgebung, die er an Sitzungen übergibt, obwohl die Beispiele auf den Anbieterseiten `ANTHROPIC_MODEL` setzen.

463 * **Familienspezifische Variablen zum Festlegen von Versionen**: Die Variablen unter „Modellversionen festlegen“ für [Amazon Bedrock](/docs/de/amazon-bedrock#4-pin-model-versions) und [Agent Platform](/docs/de/google-vertex-ai#5-pin-model-versions) erreichen Sitzungen hingegen. Sie bestimmen, worauf ein Alias wie `opus` aufgelöst wird, nicht, worauf eine vollständige Modell-ID aufgelöst wird.

386* **Modelle, die Ihr Konto nicht bereitstellt**: Eine Sitzung kann bei einer Nachricht mit einem Fehler fehlschlagen, der das Modell nennt. Aktivieren Sie die Modelle, die Ihre Entwickler auswählen können, das unter „Modellversionen festlegen“ beschriebene Hintergrundmodell sowie das Klassifikatormodell, das der [Auto-Modus](/docs/de/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry) verwendet. Lassen Sie bei Amazon Bedrock jedes davon in Ihrer Richtlinie zu.464* **Modelle, die Ihr Konto nicht bereitstellt**: Eine Sitzung kann bei einer Nachricht mit einem Fehler fehlschlagen, der das Modell nennt. Aktivieren Sie die Modelle, die Ihre Entwickler auswählen können, das unter „Modellversionen festlegen“ beschriebene Hintergrundmodell sowie das Klassifikatormodell, das der [Auto-Modus](/docs/de/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry) verwendet. Lassen Sie bei Amazon Bedrock jedes davon in Ihrer Richtlinie zu.

387* **Websuche und Fast-Modus**: Die [Websuche](/docs/de/tools-reference#websearch-tool-behavior) ist auf Amazon Bedrock nicht verfügbar, und der [Fast-Modus](/docs/de/fast-mode) ist bei keinem der beiden Anbieter verfügbar. Weitere Funktionen, die sich je nach Anbieter unterscheiden, finden Sie unter [CLI-Funktionen, die je nach Anbieter variieren](/docs/de/feature-availability#cli-capabilities-that-vary-by-provider).465* **Websuche und Fast-Modus**: Die [Websuche](/docs/de/tools-reference#websearch-tool-behavior) ist auf Amazon Bedrock nicht verfügbar, und der [Fast-Modus](/docs/de/fast-mode) ist bei keinem der beiden Anbieter verfügbar. Weitere Funktionen, die sich je nach Anbieter unterscheiden, finden Sie unter [CLI-Funktionen, die je nach Anbieter variieren](/docs/de/feature-availability#cli-capabilities-that-vary-by-provider).

388 466 


411 489 

412Sitzungen erben die Umgebung des Runners. Setzen Sie daher [`ENABLE_TOOL_SEARCH`](/docs/de/mcp#scale-with-mcp-tool-search) dort, um MCP Tool Search für jede Sitzung zu steuern, die ein Runner startet; die MCP-Seite beschreibt die möglichen Werte.490Sitzungen erben die Umgebung des Runners. Setzen Sie daher [`ENABLE_TOOL_SEARCH`](/docs/de/mcp#scale-with-mcp-tool-search) dort, um MCP Tool Search für jede Sitzung zu steuern, die ein Runner startet; die MCP-Seite beschreibt die möglichen Werte.

413 491 

492<a id="connection-timing" />

493 

494<h3 id="wait-for-mcp-servers-before-the-first-turn">

495 Vor dem ersten Turn auf MCP-Server warten

496</h3>

497 

498Eine selbst gehostete Sitzung wartet an zwei separaten Stellen kurz auf MCP-Server, die noch eine Verbindung herstellen. Bei einem Server, der eine Wartezeit verpasst, fehlen die Tools, wenn der erste Turn beginnt; sie werden später ohne Ihr Zutun verfügbar. Die beiden Wartezeiten sind:

499 

500* **Sitzungsstart**: Bevor die Tool-Liste zum ersten Mal erfasst wird, wartet die Sitzung standardmäßig bis zu 5 Sekunden auf einen HTTP- oder SSE-Server, dessen Eintrag [`alwaysLoad: true`](/docs/de/mcp#exempt-a-server-from-deferral) setzt, oder auf alle Server, wenn Sie [`MCP_CONNECTION_NONBLOCKING=0`](/docs/de/env-vars) in der Umgebung des Runners setzen. HTTP- und SSE-Server stellen die Verbindung ansonsten im Hintergrund her. Während die Sitzung hier wartet, dauert ihre Initialisierung länger. [`MCP_CONNECT_TIMEOUT_MS`](/docs/de/env-vars) ändert den Standardwert von 5 Sekunden.

501* **Erster Turn**: Nachdem die Nachricht eingetroffen ist, wartet der erste Turn bis zu 2 Sekunden auf stdio-Server, die noch eine Verbindung herstellen. Während die Sitzung hier wartet, kommt die erste Antwort langsamer. Um die Dauer dieser Wartezeit zu ändern, setzen Sie [`CLAUDE_CODE_MCP_STARTUP_WAIT_MS`](/docs/de/env-vars) in der Umgebung des Runners. Dies ändert nicht, welche Server die Wartezeit abdeckt. Erfordert Claude Code v2.1.274 oder neuer.

502 

503`claude mcp add` hat kein Flag `alwaysLoad`. Um den Schlüssel zu setzen, fügen Sie den Server stattdessen mit `claude mcp add-json` hinzu; dieser Befehl übernimmt den Schlüssel im JSON des Servers und schreibt ihn in `.claude.json`. In Ihrem Dockerfile:

504 

505```dockerfile theme={null}

506RUN claude mcp add-json core '{"type":"http","url":"https://mcp.example.com/mcp","alwaysLoad":true}' --scope user

507```

508 

509Wenn die Tools eines Servers auch in späteren Turns nicht erscheinen, prüfen Sie, ob der Server die Sitzung überhaupt erreicht hat, wie unter [MCP-Server](#mcp-servers) beschrieben.

510 

414<h3 id="turn-off-built-in-session-tools">511<h3 id="turn-off-built-in-session-tools">

415 Integrierte Sitzungstools ausschalten512 Integrierte Sitzungstools ausschalten

416</h3>513</h3>


571 668 

572Setzen Sie `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR`, um von einem anderen Pfad zu befüllen, oder lassen Sie die Variable auf ein leeres Verzeichnis zeigen, um das Befüllen zu deaktivieren.669Setzen Sie `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR`, um von einem anderen Pfad zu befüllen, oder lassen Sie die Variable auf ein leeres Verzeichnis zeigen, um das Befüllen zu deaktivieren.

573 670 

574Eine im Repository committete `.claude/settings.json` wird als Projekteinstellungen darübergelegt. In einer Sitzung mit mehreren Repositorys [wird höchstens die Datei eines einzigen Repositorys wirksam](#repository-settings-in-sessions-with-several-repositories). Sitzungen lesen außerdem [`managed-settings.json`](/docs/de/settings#where-settings-live) aus dem standardmäßigen Systempfad in Ihrem Runner-Image. Ob deren Schlüssel neben [serververwalteten Einstellungen](/docs/de/server-managed-settings) gelten, richtet sich danach, [wie Claude Code verwaltete Quellen kombiniert](/docs/de/managed-settings#how-claude-code-combines-managed-sources): Wenn Ihre Organisation serververwaltete Schlüssel bereitstellt, ignorieren Sitzungen standardmäßig die Datei des Runner-Images, abgesehen von den [Schlüsseln, die Claude Code aus jeder Admin-Quelle liest](/docs/de/managed-settings#keys-read-from-every-admin-source), etwa dem `env`-Block, den Sandbox-Sperren, den Pfaden zu den Sandbox-Binärdateien und `forceRemoteSettingsRefresh`. Siehe [Vorrang der Einstellungen](/docs/de/settings#settings-precedence).671Sitzungen lesen außerdem diese Einstellungsdateien:

672 

673* **Projekteinstellungen**: Eine im Repository committete `.claude/settings.json` wird über die Basis auf Benutzerebene gelegt. In einer Sitzung mit mehreren Repositorys [wird höchstens die Datei eines einzigen Repositorys wirksam](#repository-settings-in-sessions-with-several-repositories).

674* **Verwaltete Einstellungen**: Sitzungen lesen [`managed-settings.json`](/docs/de/settings#where-settings-live) aus dem standardmäßigen Systempfad in Ihrem Runner-Image. Ob deren Schlüssel neben [serververwalteten Einstellungen](/docs/de/server-managed-settings) gelten, erfahren Sie unter [wie Claude Code verwaltete Quellen kombiniert](/docs/de/managed-settings#how-claude-code-combines-managed-sources).

675 

676In welcher Reihenfolge diese Quellen angewendet werden, erfahren Sie unter [Vorrang der Einstellungen](/docs/de/settings#settings-precedence).

575 677 

576Wenn die Steuerungsebene von Anthropic eine Sitzung mit [Claude Code-Hooks](/docs/de/hooks) versorgt, installiert der Runner diese neben Ihrer eigenen Konfiguration, nicht an deren Stelle. Erfordert Claude Code v2.1.229 oder höher.678Wenn die Steuerungsebene von Anthropic eine Sitzung mit [Claude Code-Hooks](/docs/de/hooks) versorgt, installiert der Runner diese neben Ihrer eigenen Konfiguration, nicht an deren Stelle. Erfordert Claude Code v2.1.229 oder höher.

577 679 


579* **Wer sie erstellt**: Die Steuerungsebene füllt die Skripte aus festen Konstanten in ihrem eigenen Deployment, niemals aus sitzungsspezifischen Eingaben oder Eingaben von Drittanbietern.681* **Wer sie erstellt**: Die Steuerungsebene füllt die Skripte aus festen Konstanten in ihrem eigenen Deployment, niemals aus sitzungsspezifischen Eingaben oder Eingaben von Drittanbietern.

580* **Was weiterhin für sie gilt**: Hooks, die über `--settings` bereitgestellt werden, gehen in die gewöhnliche zusammengeführte Hook-Konfiguration ein, nicht in die verwaltete Ebene, sodass Ihre verwalteten Einstellungen weiterhin gelten. `disableAllHooks` deaktiviert sie, und sie gehören nicht zu den Kategorien, die [`allowManagedHooksOnly`](/docs/de/settings-reference#allowmanagedhooksonly) geladen lässt.682* **Was weiterhin für sie gilt**: Hooks, die über `--settings` bereitgestellt werden, gehen in die gewöhnliche zusammengeführte Hook-Konfiguration ein, nicht in die verwaltete Ebene, sodass Ihre verwalteten Einstellungen weiterhin gelten. `disableAllHooks` deaktiviert sie, und sie gehören nicht zu den Kategorien, die [`allowManagedHooksOnly`](/docs/de/settings-reference#allowmanagedhooksonly) geladen lässt.

581 683 

684Wenn eine Person ihre eigene Sitzung startet, lädt Claude Code außerdem die [für ihr claude.ai-Konto aktivierten Skills](/docs/de/skills#skills-in-cowork-and-cloud-sessions) in das Konfigurationsverzeichnis dieser Sitzung herunter. Die Ausführung einer [Routine](/docs/de/routines) erhält nicht die Skills ihres Eigentümers, und eine Sitzung, die [Modellanfragen an Bedrock oder Agent Platform sendet](#send-model-requests-to-bedrock-or-agent-platform), lädt keine herunter. Für einen Skill, den diese Sitzungen benötigen, committen Sie ihn in das Verzeichnis `.claude/skills/` des Repositorys oder fügen Sie ihn Ihrem Runner-Image hinzu.

685 

582Außerhalb von [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen läuft eine Sitzung in einer selbstgehosteten Umgebung standardmäßig mit ausgeschaltetem [Auto-Memory](/docs/de/memory#auto-memory). Für Anweisungen, die über Sitzungen hinweg erhalten bleiben sollen, verwenden Sie die `CLAUDE.md` in Ihrem Runner-Image oder im Repository.686Außerhalb von [Claude Tag](https://claude.com/docs/claude-tag/overview)-Sitzungen läuft eine Sitzung in einer selbstgehosteten Umgebung standardmäßig mit ausgeschaltetem [Auto-Memory](/docs/de/memory#auto-memory). Für Anweisungen, die über Sitzungen hinweg erhalten bleiben sollen, verwenden Sie die `CLAUDE.md` in Ihrem Runner-Image oder im Repository.

583 687 

584Der 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.688Der 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.

Details

20 20 

21* **Ephemere, sitzungsspezifische Container**: Führen Sie jeden Runner-Prozess in einem frischen Container oder einer VM aus, die zerstört wird, wenn der Prozess beendet wird, mit `--capacity 1` und dem Standard `--drain-grace-sec 0`, sodass jeder Container genau eine Sitzung bedient. Bei einer höheren Kapazität oder mit einer positiven Drain-Grace bedient ein Container mehrere Sitzungen vom selben [gesperrten Owner](/docs/de/self-hosted-environments#key-concepts); siehe [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle). Verwenden Sie kein Dateisystem zwischen Runner-Neustarts wieder, außer in der absichtlichen [vorgewärmten Checkout](#reuse-a-pre-warmed-checkout)-Einrichtung, und niemals über Owners hinweg.21* **Ephemere, sitzungsspezifische Container**: Führen Sie jeden Runner-Prozess in einem frischen Container oder einer VM aus, die zerstört wird, wenn der Prozess beendet wird, mit `--capacity 1` und dem Standard `--drain-grace-sec 0`, sodass jeder Container genau eine Sitzung bedient. Bei einer höheren Kapazität oder mit einer positiven Drain-Grace bedient ein Container mehrere Sitzungen vom selben [gesperrten Owner](/docs/de/self-hosted-environments#key-concepts); siehe [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle). Verwenden Sie kein Dateisystem zwischen Runner-Neustarts wieder, außer in der absichtlichen [vorgewärmten Checkout](#reuse-a-pre-warmed-checkout)-Einrichtung, und niemals über Owners hinweg.

22 * <span id="processes-a-stopped-session-leaves" />Wenn der Runner eine Sitzung beendet, sendet er kein Signal an einen Prozess, der nach dem Beenden seines Shell-Befehls noch läuft, etwa einen Dienst, der sich als Daemon abgelöst hat. Das Zerstören des Containers oder der VM beendet diesen Prozess.22 * <span id="processes-a-stopped-session-leaves" />Wenn der Runner eine Sitzung beendet, sendet er kein Signal an einen Prozess, der nach dem Beenden seines Shell-Befehls noch läuft, etwa einen Dienst, der sich als Daemon abgelöst hat. Das Zerstören des Containers oder der VM beendet diesen Prozess.

23* **Keine breiten Anmeldedaten im Image**: Fügen Sie keine langlebigen SSH-Schlüssel, Cloud-Provider-Anmeldedaten oder persönliche Zugriffstokens ein, die mehr gewähren als eine Sitzung benötigt. Erstellen Sie Anmeldedaten, die während einer Sitzung verwendet werden, wie Push- oder API-Tokens, pro Sitzung aus Ihrem [Wrapper-Skript](/docs/de/self-hosted-environments-configuration#wrapper-scripts). Für den anfänglichen Clone, der vor dem Ausführen des Wrappers stattfindet, verwenden Sie einen [`checkout`-Lebenszyklus-Hook](/docs/de/self-hosted-environments-configuration#checkout) oder [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy); siehe [Git konfigurieren](#configure-git).23* **Keine breiten Anmeldedaten im Image**: Fügen Sie keine langlebigen SSH-Schlüssel, Cloud-Provider-Anmeldedaten oder persönliche Zugriffstokens ein, die mehr gewähren als eine Sitzung benötigt. Erstellen Sie Anmeldedaten, die während einer Sitzung verwendet werden, wie Push- oder API-Tokens, pro Sitzung aus Ihrem [Wrapper-Skript](/docs/de/self-hosted-environments-configuration#wrapper-scripts). Der anfängliche Clone findet statt, bevor der Wrapper ausgeführt wird. Verwenden Sie dafür daher einen [`checkout`-Lebenszyklus-Hook](/docs/de/self-hosted-environments-configuration#checkout) oder [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), wenn alle Repositorys einer Sitzung auf github.com liegen. Zu beiden siehe [Git konfigurieren](#configure-git).

24* **Halten Sie die GitHub-Anmeldedaten des Hosts von Sitzungen fern**: Claude kann alle GitHub-Anmeldedaten verwenden, die eine Sitzung lesen kann, mit dem Zugriff, den diese Anmeldedaten gewähren. Halten Sie die eigenen, weit gefassten GitHub-Anmeldedaten des Runner-Hosts aus allem heraus, was eine Sitzung lesen kann. Solche Anmeldedaten können ein persönliches Zugriffstoken sein, das Token, das `gh auth login` für Ihr Konto speichert, oder ein `GH_TOKEN` in der Umgebung des Runners.

25 * **Mit [Anthropic-verwaltetem Git](#use-the-anthropic-git-proxy)**: Mit solchen Anmeldedaten erreicht Claude GitHub direkt statt über Anthropic-verwaltetes Git.

26 * **Ohne Anthropic-verwaltetes Git**: Clone-Anmeldedaten können im Image bleiben, wenn Sie sie so eng beschränken, wie in [Git-Konfiguration in Ihrem Image ausliefern](#ship-git-config-in-your-image) beschrieben.

24* **Halten Sie das Umgebungsgeheimnis von sitzungsausführenden Hosts fern**: Das Umgebungsgeheimnis kann Runner registrieren und jede Sitzung abholen, die in der Umgebung in die Warteschlange eingereiht ist. In einer festen Flotte lebt es auf jedem Runner-Host, wo jeder Sitzungscode das Geheimnisdatei lesen kann. Bevorzugen Sie [On-Demand-Runner](/docs/de/self-hosted-environments-configuration#on-demand-runners), bei denen das Geheimnis auf dem Orchestrator-Host bleibt, der niemals Benutzercode ausführt, und jeder Runner einen einmaligen Arbeitsauftrag erhält, der genau einen Runner registriert. Behandeln Sie in einer festen Flotte die Umgebungsgeheimnisdatei als von jeder Sitzung lesbar und rotieren Sie das Geheimnis nach jedem vermuteten Sitzungskompromiss.27* **Halten Sie das Umgebungsgeheimnis von sitzungsausführenden Hosts fern**: Das Umgebungsgeheimnis kann Runner registrieren und jede Sitzung abholen, die in der Umgebung in die Warteschlange eingereiht ist. In einer festen Flotte lebt es auf jedem Runner-Host, wo jeder Sitzungscode das Geheimnisdatei lesen kann. Bevorzugen Sie [On-Demand-Runner](/docs/de/self-hosted-environments-configuration#on-demand-runners), bei denen das Geheimnis auf dem Orchestrator-Host bleibt, der niemals Benutzercode ausführt, und jeder Runner einen einmaligen Arbeitsauftrag erhält, der genau einen Runner registriert. Behandeln Sie in einer festen Flotte die Umgebungsgeheimnisdatei als von jeder Sitzung lesbar und rotieren Sie das Geheimnis nach jedem vermuteten Sitzungskompromiss.

25* **Standard-Deny-Netzwerk-Egress**: Beschränken Sie den ausgehenden Datenverkehr von Runner- und Sitzungs-Containern an Ihrer eigenen Netzwerkgrenze in jeder Umgebung; [Standard-Deny-Egress](#default-deny-egress) behandelt, was erlaubt ist und warum.28* **Standard-Deny-Netzwerk-Egress**: Beschränken Sie den ausgehenden Datenverkehr von Runner- und Sitzungs-Containern an Ihrer eigenen Netzwerkgrenze in jeder Umgebung; [Standard-Deny-Egress](#default-deny-egress) behandelt, was erlaubt ist und warum.

26* **Least-Privilege-Host-IAM**: Die Compute-Identität, die an den Runner-Host angehängt ist, wie ein Instance-Profil oder ein Node-Service-Konto, sollte nur das gewähren, was der Runner selbst benötigt. Sitzungen sollten ihre eigenen Anmeldedaten über Ihr Wrapper-Skript erhalten, anstatt die des Hosts zu erben.29* **Least-Privilege-Host-IAM**: Die Compute-Identität, die an den Runner-Host angehängt ist, wie ein Instance-Profil oder ein Node-Service-Konto, sollte nur das gewähren, was der Runner selbst benötigt. Sitzungen sollten ihre eigenen Anmeldedaten über Ihr Wrapper-Skript erhalten, anstatt die des Hosts zu erben.


42 Die Guard läuft unabhängig von [`--trust-workspace`](/docs/de/self-hosted-environments-reference#runner-cli-flags) und deckt keine Repository-Hooks, `.mcp.json` oder Bash-Regeln ab; siehe [Berechtigungen und Tool-Genehmigung](/docs/de/self-hosted-environments-configuration#permissions-and-tool-approval) für den Ort dieser Berechtigungen.45 Die Guard läuft unabhängig von [`--trust-workspace`](/docs/de/self-hosted-environments-reference#runner-cli-flags) und deckt keine Repository-Hooks, `.mcp.json` oder Bash-Regeln ab; siehe [Berechtigungen und Tool-Genehmigung](/docs/de/self-hosted-environments-configuration#permissions-and-tool-approval) für den Ort dieser Berechtigungen.

43 46 

44<Note>47<Note>

45 Die IP-Zulassungsliste Ihrer Organisation deckt selbstgehosteten Runner-Datenverkehr standardmäßig nicht ab. Verlassen Sie sich nicht darauf als Netzwerkkontrolle für Runner- oder Sitzungs-Datenverkehr; wenden Sie stattdessen Standard-Deny-Egress an Ihrer eigenen Netzwerkgrenze an, und kontaktieren Sie Ihr Anthropic-Account-Team, wenn Sie IP-Zulassungslisten-Durchsetzung für Ihre Organisation wünschen.48 Wenn für Ihre Organisation [IP-Allowlisting](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting) aktiviert ist, fügen Sie die öffentlichen Egress-Adressen Ihrer Runner und Sitzungs-Container zur Allowlist hinzu, bevor Sie diese starten. Wenn Sie [On-Demand-Runner](/docs/de/self-hosted-environments-configuration#on-demand-runners) betreiben, fügen Sie auch die Adresse des Orchestrator-Hosts hinzu. Verlassen Sie sich nicht auf die Allowlist als Netzwerkkontrolle für Runner- oder Sitzungs-Datenverkehr. Wenden Sie stattdessen Standard-Deny-Egress an Ihrer eigenen Netzwerkgrenze an.

46</Note>49</Note>

47 50 

48<h2 id="network-requirements">51<h2 id="network-requirements">


55 58 

56| Host | Port | Verwendet für |59| Host | Port | Verwendet für |

57| :- | :- | :- |60| :- | :- | :- |

58| `api.anthropic.com` | 443, HTTPS; WSS nur für den SCM-Connector | Runner-Kontrollebene und Sitzungs-Streaming, Modell-Inferenz, Feature-Flags, Produkt-Analytik, [JWKS](/docs/de/self-hosted-environments-identity)-Schlüssel-Abrufe, Commit-Signierung, der Git-Proxy wenn `--use-anthropic-git-proxy` gesetzt ist, und der Orchestrator-[SCM-Connector](/docs/de/self-hosted-environments-reference#scm-connector-flags)-Tunnel wenn `--scm-connector-host` gesetzt ist |61| `api.anthropic.com` | 443, HTTPS; WSS für [von Anthropic verwaltetes Git](#use-the-anthropic-git-proxy) | Runner-Kontrollebene und Sitzungs-Streaming, Modell-Inferenz, Feature-Flags, Produkt-Analytik, [JWKS](/docs/de/self-hosted-environments-identity)-Schlüssel-Abrufe, Commit-Signierung und von Anthropic verwaltetes Git, wenn `--use-anthropic-git-proxy` gesetzt ist |

59| Ihr Git-Host, wie `github.com` oder Ihr GitHub Enterprise-Host | 443 oder 22 | Klonen und Pushen von Repositorys. Nicht erforderlich, wenn der Runner `--use-anthropic-git-proxy` verwendet, das Git-Datenverkehr durch `api.anthropic.com` leitet. |62| Ihr Git-Host, wie `github.com` oder Ihr GitHub Enterprise-Host | 443 oder 22 | Klonen und Pushen von Repositorys auf jedem Git-Host, den die Sitzungen des Runners verwenden. Auf einem Runner, der [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) verwendet, siehe [wann der `github.com`-Pfad weiterhin benötigt wird](#github-com-egress-with-the-anthropic-git-proxy). |

63 

64<span id="github-com-egress-with-the-anthropic-git-proxy" />Ein Runner, der [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) verwendet, leitet seinen Git-Datenverkehr für `github.com` über `api.anthropic.com` und benötigt daher den Git-Host-Pfad für `github.com` nicht. Er benötigt diesen Pfad weiterhin, wenn Sie `--push-outcome-on-release` setzen oder aus einem `post-session`-Hook pushen.

60 65 

61Ob diese Hosts erforderlich sind, hängt von Ihrer Konfiguration ab:66Ob diese Hosts erforderlich sind, hängt von Ihrer Konfiguration ab:

62 67 


71| `browser-intake-us5-datadoghq.com` | 443 | Anthropic-Fehlerberichts-Uploads, nur gesendet wenn [Fehlerberichterstattung](/docs/de/data-usage#telemetry-services) für das Konto der Sitzung aktiviert ist. Unterdrückt durch `DISABLE_ERROR_REPORTING=1` oder `DISABLE_TELEMETRY=1`. |76| `browser-intake-us5-datadoghq.com` | 443 | Anthropic-Fehlerberichts-Uploads, nur gesendet wenn [Fehlerberichterstattung](/docs/de/data-usage#telemetry-services) für das Konto der Sitzung aktiviert ist. Unterdrückt durch `DISABLE_ERROR_REPORTING=1` oder `DISABLE_TELEMETRY=1`. |

72| Die Endpunkte Ihres Cloud-Anbieters für Modellanfragen, Modell-Lookups und das Erneuern von Anmeldedaten, wie `bedrock-runtime.us-east-1.amazonaws.com` oder `aiplatform.googleapis.com` | 443 | Nur wenn der Runner [Modellanfragen an Amazon Bedrock oder die Agent Platform von Google Cloud sendet](/docs/de/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |77| Die Endpunkte Ihres Cloud-Anbieters für Modellanfragen, Modell-Lookups und das Erneuern von Anmeldedaten, wie `bedrock-runtime.us-east-1.amazonaws.com` oder `aiplatform.googleapis.com` | 443 | Nur wenn der Runner [Modellanfragen an Amazon Bedrock oder die Agent Platform von Google Cloud sendet](/docs/de/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |

73 78 

74Der Runner erreicht `statsig.anthropic.com`, `*.sentry.io`, `claude.ai` oder `platform.claude.com` nicht. Diese Hosts erscheinen in einigen älteren Enterprise-Netzwerk-Checklisten, aber Sie müssen sie nicht für Runner- oder Sitzungs-Datenverkehr zulassungslisten: Feature-Flag-Abrufe gehen zu `api.anthropic.com`, und der Runner authentifiziert sich mit dem Umgebungsgeheimnis anstelle von interaktivem OAuth. Zwei Host-seitige Flows erreichen `claude.ai`, daher führen Sie sie von einem Host aus, dessen Egress es erlaubt, anstatt den Sitzungs-Container-Egress zu verbreitern: Das Einzeilen-Installer-Skript ruft `install.sh` von `claude.ai` zur Installationszeit ab, und interaktives `claude auth login`, das der [geführte Setup](/docs/de/self-hosted-environments-quickstart#set-up-an-environment-and-runner), `doctor`'s signierter Modus und [CI-Dispatch](/docs/de/self-hosted-environments-testing#authenticate-from-ci) verwenden, melden sich durch `claude.ai`, `claude.com` und `platform.claude.com` an. `mcp-proxy.anthropic.com` ist auch nicht erforderlich: Selbstgehostete Sitzungen verwenden es nicht, und die Lieferung Ihrer Organisations-claude.ai-Connectoren an Sitzungen, wenn für Ihre Organisation aktiviert, leitet durch `api.anthropic.com`. Siehe [MCP-Server](/docs/de/self-hosted-environments-configuration#mcp-servers).79Diese Hosts müssen Sie für Runner- oder Sitzungs-Datenverkehr nicht in die Allowlist aufnehmen:

80 

81* **`statsig.anthropic.com`, `*.sentry.io`, `claude.ai` und `platform.claude.com`**: Diese Hosts erscheinen in einigen älteren Enterprise-Netzwerk-Checklisten, aber der Runner erreicht sie nicht. Feature-Flag-Abrufe gehen zu `api.anthropic.com`, und der Runner authentifiziert sich mit dem Umgebungsgeheimnis anstelle von interaktivem OAuth.

82* **`mcp-proxy.anthropic.com`**: Selbstgehostete Sitzungen verwenden es nicht. Wenn die Bereitstellung von Konnektoren für Ihre Organisation aktiviert ist, erreichen die claude.ai-Konnektoren Ihrer Organisation die Sitzungen über `api.anthropic.com`. Siehe [MCP-Server](/docs/de/self-hosted-environments-configuration#mcp-servers).

83 

84Diese Host-seitigen Flows erreichen `claude.ai`, führen Sie sie daher von einem Host aus, dessen Egress dies erlaubt, anstatt den Sitzungs-Container-Egress zu erweitern:

85 

86* **Der Einzeilen-Installer**: Ruft `install.sh` zur Installationszeit von `claude.ai` ab.

87* **Interaktives `claude auth login`**: Meldet sich über `claude.ai`, `claude.com` und `platform.claude.com` an. Das [geführte Setup](/docs/de/self-hosted-environments-quickstart#run-the-guided-setup), der angemeldete Modus von `doctor` und [CI-Dispatch](/docs/de/self-hosted-environments-testing#authenticate-from-ci) verwenden es. Der Browser, mit dem Sie sich anmelden, lädt außerdem die Browser-Prüfungen der claude.ai-Anmeldeseite von `hcaptcha.com`, `*.hcaptcha.com` und `challenges.cloudflare.com`.

75 88 

76<h3 id="default-deny-egress">89<h3 id="default-deny-egress">

77 Standard-Deny-Egress90 Standard-Deny-Egress


127* **Lassen Sie den Runner Git konfigurieren**: Starten Sie den Runner mit `--configure-git`, um die gleiche Identität und Commit-Signierungskonfiguration zu schreiben, die Anthropic-gehostete Sitzungen verwenden140* **Lassen Sie den Runner Git konfigurieren**: Starten Sie den Runner mit `--configure-git`, um die gleiche Identität und Commit-Signierungskonfiguration zu schreiben, die Anthropic-gehostete Sitzungen verwenden

128* **Versenden Sie Git-Konfiguration in Ihrem Image**: Setzen Sie Identität und Push-Anmeldedaten selbst, zum Beispiel um unter Ihrer eigenen Bot-Identität zu committen141* **Versenden Sie Git-Konfiguration in Ihrem Image**: Setzen Sie Identität und Push-Anmeldedaten selbst, zum Beispiel um unter Ihrer eigenen Bot-Identität zu committen

129 142 

143Für Repositorys auf github.com können Sie den Runner auch mit [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) starten oder `CLAUDE_RUNNER_USE_GIT_PROXY=1` setzen, um Anthropic zu bitten, Git für die Sitzungen des Runners bereitzustellen.

144 

130Git-Versionsuntergrenzen auf dem Runner-Host: [`--configure-git`](#let-the-runner-configure-git) SSH-Commit-Signierung erfordert Git 2.34 oder neuer, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) erfordert 2.32 oder neuer, und das Fortsetzen von Sitzungen von Branches, die von [`--push-outcome-on-release`](/docs/de/self-hosted-environments-reference#runner-cli-flags) gepusht werden, erfordert 2.29 oder neuer. Git 2.24 ist ausreichend, wenn Sie alle drei weglassen und die Git-Identität selbst verwalten.145Git-Versionsuntergrenzen auf dem Runner-Host: [`--configure-git`](#let-the-runner-configure-git) SSH-Commit-Signierung erfordert Git 2.34 oder neuer, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) erfordert 2.32 oder neuer, und das Fortsetzen von Sitzungen von Branches, die von [`--push-outcome-on-release`](/docs/de/self-hosted-environments-reference#runner-cli-flags) gepusht werden, erfordert 2.29 oder neuer. Git 2.24 ist ausreichend, wenn Sie alle drei weglassen und die Git-Identität selbst verwalten.

131 146 

132<h3 id="let-the-runner-configure-git">147<h3 id="let-the-runner-configure-git">


138* `user.name = Claude` und `user.email = noreply@anthropic.com`, passend zu Anthropic-gehosteten Sitzungen153* `user.name = Claude` und `user.email = noreply@anthropic.com`, passend zu Anthropic-gehosteten Sitzungen

139* SSH-Format-Commit- und Tag-Signierung, geleitet durch einen Runner-verwalteten Shim, der jeden Commit über Anthropic's Signierungsservice mit den Anmeldedaten der Sitzung signiert. Signaturen sind auf GitHub gegen Anthropic's veröffentlichten SSH-Signierungsschlüssel überprüfbar.154* SSH-Format-Commit- und Tag-Signierung, geleitet durch einen Runner-verwalteten Shim, der jeden Commit über Anthropic's Signierungsservice mit den Anmeldedaten der Sitzung signiert. Signaturen sind auf GitHub gegen Anthropic's veröffentlichten SSH-Signierungsschlüssel überprüfbar.

140* `push.negotiate = true`, damit Git Ihren Git-Host fragt, welche Commits er bereits hat, bevor er einen Push packt. Erfordert Claude Code v2.1.257 oder später.155* `push.negotiate = true`, damit Git Ihren Git-Host fragt, welche Commits er bereits hat, bevor er einen Push packt. Erfordert Claude Code v2.1.257 oder später.

141* `core.hooksPath`, das auf ein Runner-verwaltetes Hooks-Verzeichnis zeigt. Seine `commit-msg`- und `prepare-commit-msg`-Hooks fügen jedem Commit einen `Co-authored-by:`-Trailer für den Ersteller der Sitzung hinzu, erstellt aus der E-Mail in [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/de/self-hosted-environments-configuration#wrapper-scripts) und weggelassen, wenn diese Variable nicht gesetzt ist. Wenn Ihr Image bereits `core.hooksPath` setzt, lässt der Runner Ihre Einstellung in Kraft, überspringt die Installation dieser Hooks und gibt eine `[runner:git]`-Warnung aus.156* `core.hooksPath`, das auf ein Runner-verwaltetes Hooks-Verzeichnis zeigt. Seine `commit-msg`- und `prepare-commit-msg`-Hooks fügen jedem Commit einen `Co-authored-by:`-Trailer für den Ersteller der Sitzung hinzu. Der Trailer wird aus der E-Mail in [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/de/self-hosted-environments-configuration#wrapper-scripts) erstellt und weggelassen, wenn diese Variable nicht gesetzt ist. Wenn Ihr Image bereits `core.hooksPath` setzt und der Runner kein [Anthropic-verwaltetes Git](#use-the-anthropic-git-proxy) verwendet, behält der Runner Ihre Einstellung bei, überspringt die Installation dieser Hooks und gibt eine `[runner:git]`-Warnung aus.

142 157 

143Commit-Signierung erfordert Git 2.34 oder neuer; der Runner überprüft beim Start und beendet sich mit einem Fehler, wenn Ihr Git älter ist. Dieses Flag konfiguriert keine Push-Anmeldedaten, die Sie immer noch im Image bereitstellen.158Commit-Signierung erfordert Git 2.34 oder neuer; der Runner überprüft beim Start und beendet sich mit einem Fehler, wenn Ihr Git älter ist. Dieses Flag konfiguriert keine Push-Anmeldedaten, die Sie immer noch im Image bereitstellen.

144 159 

145Auf einem Runner mit v2.1.280 oder später werden Commits, die Sie aus einem `checkout`- oder `post-session`-Lebenszyklus-Hook erstellen, ebenfalls als die Sitzung signiert, ohne den `Co-authored-by:`-Trailer. [Git-Konfiguration innerhalb von Lebenszyklus-Hooks](/docs/de/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) beschreibt die Git-Einstellungen, die der Runner innerhalb dieser Hooks festlegt.160Auf einem Runner mit v2.1.280 oder später werden Commits, die Sie aus einem `checkout`- oder `post-session`-Lebenszyklus-Hook erstellen, ebenfalls als die Sitzung signiert, ohne den `Co-authored-by:`-Trailer. [Git-Konfiguration innerhalb von Lebenszyklus-Hooks](/docs/de/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) beschreibt die Git-Einstellungen, die der Runner innerhalb dieser Hooks festlegt.

146 161 

162Mit oder ohne `--configure-git` weist Claude Code Claude an, seine Commit-Nachrichten mit einem `Claude-Session: <url>`-Trailer und seine Pull-Request-Beschreibungen mit der URL der Sitzung abzuschließen. Um beides wegzulassen, setzen Sie [`attribution.sessionUrl`](/docs/de/settings-reference#attribution-sessionurl) in der [`~/.claude/settings.json`](/docs/de/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) des Runner-Hosts auf `false` und starten Sie den Runner anschließend neu.

163 

147<h3 id="ship-git-config-in-your-image">164<h3 id="ship-git-config-in-your-image">

148 Versenden Sie Git-Konfiguration in Ihrem Image165 Versenden Sie Git-Konfiguration in Ihrem Image

149</h3>166</h3>


186 Verwenden Sie den Anthropic-Git-Proxy203 Verwenden Sie den Anthropic-Git-Proxy

187</h3>204</h3>

188 205 

189Starten Sie den Runner mit `--use-anthropic-git-proxy`, oder setzen Sie `CLAUDE_RUNNER_USE_GIT_PROXY=1`, um durch Anthropic's Git-Proxy zu klonen, authentifiziert mit dem kurzlebigen Token der Sitzung. Für gewöhnliche Benutzersitzungen verwendet der Proxy das GitHub- oder GitHub Enterprise-OAuth-Token, das für den Sitzungs-Ersteller gespeichert ist; für Bot- und Agent-Sitzungen verwendet er das GitHub App-Installations-Token Ihrer Organisation. Wie auch immer, das Runner-Image benötigt überhaupt keine Git-Anmeldedaten: keine SSH-Schlüssel, keinen Credential-Helper, keine `.netrc`. Dies ist der gleiche Auth-Pfad, den Anthropic-gehostete Umgebungen verwenden.206Mit dem Anthropic-Git-Proxy, auch Anthropic-verwaltetes Git genannt, benötigt das Runner-Image für die Sitzung selbst keine SSH-Schlüssel, keinen Credential-Helper, keine `.netrc` und keine anderen Git-Anmeldedaten. Stattdessen bittet der Runner Anthropic, Git für seine Sitzungen bereitzustellen. Bei einer Benutzersitzung, für die Anthropic Git bereitstellt, laufen der Clone des Runners sowie die eigenen Fetches und Pushes der Sitzung über Anthropic, das das für den Ersteller der Sitzung gespeicherte GitHub-OAuth-Token verwendet. [Wie Anthropic Git für eine Sitzung bereitstellt](#how-anthropic-serves-git-for-a-session) behandelt Bot- und Agentensitzungen.

207 

208Der Git-Proxy ist ausgeschaltet, sofern Sie ihn nicht [einschalten](#turn-the-anthropic-git-proxy-on). Ein Runner, der Ihren Git-Host mit eigenen Anmeldedaten erreicht, benötigt ihn nicht, und sein Git funktioniert mit jedem Git-Host.

209 

210Im Gegenzug schränkt der Git-Proxy ein, was der Runner unterstützt, und ändert, was er benötigt:

211 

212* **Nur github.com**: Anthropic stellt Git für eine Sitzung nur bereit, wenn sich alle ihre Repositorys auf github.com befinden, und der Git-Proxy unterstützt GitHub Enterprise Server noch nicht. Auf einem Runner mit dem Git-Proxy [startet eine Sitzung nicht](#when-anthropic-doesnt-serve-a-session), wenn sie ein Repository auf einem anderen Git-Host hat.

213* **Verbundene GitHub-Konten**: Die Person, die eine Benutzersitzung erstellt hat, muss GitHub auf claude.ai verbunden haben, sonst [startet die Sitzung nicht](#creator-has-no-github-connection).

214* **`--capacity 1`**: Der Git-Proxy erfordert eine Sitzung pro Runner-Prozess, führen Sie daher mehr Replicas für Parallelität aus. [Den Anthropic-Git-Proxy einschalten](#turn-the-anthropic-git-proxy-on) listet die Anforderungen auf.

215* **Ersetzte globale Git-Konfiguration**: Der Runner [löscht und ersetzt die globale Git-Konfiguration](#git-proxy-replaces-global-git-config) des Benutzers, unter dem er läuft. Führen Sie ihn als dedizierten Benutzer oder in einem Container aus.

216* **Host-Anmeldedaten für Host-Pushes**: Der Push des Runners über [`--push-outcome-on-release`](/docs/de/self-hosted-environments-reference#runner-cli-flags) und jeder Push, den Ihr [`post-session`-Hook](/docs/de/self-hosted-environments-configuration#post-session) ausführt, verwenden weiterhin die eigenen Git-Anmeldedaten des Runner-Hosts und dessen [Netzwerkpfad zu `github.com`](#github-com-egress-with-the-anthropic-git-proxy). Informationen zu diesen Anmeldedaten finden Sie unter [Versenden Sie Git-Konfiguration in Ihrem Image](#ship-git-config-in-your-image).

217* **Entscheidung pro Sitzung**: Anthropic entscheidet für jede Sitzung auf dem Runner, ob es deren Git bereitstellt, und eine Sitzung, für die es das nicht tut, startet nicht. [Wenn Sitzungen auf einem Runner mit dem Git-Proxy nicht starten](#when-anthropic-doesnt-serve-a-session) behandelt die Ursachen.

218 

219<span id="git-proxy-replaces-global-git-config" />

220 

221<Warning>

222 Wenn `--use-anthropic-git-proxy` gesetzt ist, löscht und ersetzt der Runner die globale Git-Konfiguration des Benutzers, unter dem er läuft, und legt keine Sicherung an. Das geschieht beim Start und vor jeder Sitzung. Ein Login- oder Credential-Helper, den Sie dort hinterlegt hatten, geht verloren. Einstellungen, die [`--configure-git`](#let-the-runner-configure-git) schreibt, bleiben erhalten. Führen Sie den Runner als dedizierten Benutzer oder in einem Container aus, niemals als Ihren eigenen Benutzer.

223</Warning>

224 

225Bewahren Sie Git-Einstellungen, die nicht geheim sind, wie die Identität und `safe.directory`, in der System-Git-Konfiguration auf.

226 

227<h4 id="turn-the-anthropic-git-proxy-on">

228 Den Anthropic-Git-Proxy einschalten

229</h4>

230 

231Bevor Sie den Runner mit `--use-anthropic-git-proxy` starten, vergewissern Sie sich, dass der Runner-Host jede dieser Anforderungen erfüllt. Der Runner verweigert den Start, wenn die Kapazitäts- oder Git-Anforderung nicht erfüllt ist:

190 232 

191Der Proxy erfordert `--capacity 1`, weil die Proxy-URL pro Sitzung ist, und Git 2.32 oder neuer, weil älteres Git den Konfigurationsmechanismus ignoriert, den der Proxy verwendet, um Sitzungen voneinander zu isolieren. Der Runner weigert sich zu starten, wenn eine der Anforderungen nicht erfüllt ist. Weil der Proxy von Anthropic's Seite abruft, muss Ihr Git-Host von Anthropic-Infrastruktur erreichbar sein, die gleiche Anforderung, die Anthropic-gehostete Sitzungen haben; für einen Git-Host, der nur innerhalb Ihres Netzwerks routbar ist, verwenden Sie stattdessen einen [`checkout`-Lebenszyklus-Hook](/docs/de/self-hosted-environments-configuration#checkout). Jeder Runner-Prozess verarbeitet jeweils eine Sitzung, daher führen Sie mehr Replicas für Parallelität aus. Wenn der Proxy aktiviert ist, haben `--git-host-rewrite` und `--git-ssh-rewrite` keine Auswirkung: Die Proxy-URL zeigt auf `api.anthropic.com`, nicht auf Ihren Git-Host.233* **Claude Code v2.1.267 oder später**: Frühere Versionen akzeptieren das Flag, melden Anthropic aber nicht die Anfrage, Git bereitzustellen, und geben die Zeile `Registering as opted in` nicht aus, daher stellt Anthropic für ihre Sitzungen kein Git bereit.

234* **`--capacity 1`, der Standardwert**: Jeder Runner-Prozess verarbeitet jeweils eine Sitzung, daher führen Sie mehr Replicas für Parallelität aus.

235* **Git 2.32 oder neuer**: Älteres Git ignoriert die Git-Konfiguration pro Sitzung, die der Runner für den Git-Proxy einrichtet.

192 236 

193<Warning>237<Warning>

194 Die [Kubernetes](#kubernetes)- und [Docker Compose](#docker-compose)-Rezepte auf dieser Seite verwenden `--capacity 4`. Wenn Sie `--use-anthropic-git-proxy` oder `CLAUDE_RUNNER_USE_GIT_PROXY=1` zu einem von ihnen hinzufügen, ohne die Kapazität auf `1` zu ändern, beendet sich der Runner bei jedem Start, wenn Ihr Orchestrator ihn neu startet. Setzen Sie `--capacity 1` und führen Sie mehr Replicas für Parallelität aus. [Wenn der Runner beendet wird](#when-the-runner-exits) zeigt die Zeile, die der Runner ausgibt.238 Die [Kubernetes](#kubernetes)- und [Docker Compose](#docker-compose)-Rezepte auf dieser Seite verwenden `--capacity 4`. Wenn Sie `--use-anthropic-git-proxy` oder `CLAUDE_RUNNER_USE_GIT_PROXY=1` zu einem von ihnen hinzufügen, ohne die Kapazität auf `1` zu ändern, beendet sich der Runner bei jedem Start, wenn Ihr Orchestrator ihn neu startet. Setzen Sie `--capacity 1` und führen Sie mehr Replicas für Parallelität aus. [Wenn der Runner beendet wird](#when-the-runner-exits) zeigt die Zeile, die der Runner ausgibt.

195</Warning>239</Warning>

196 240 

197Der Runner meldet die Opt-in-Entscheidung auch Anthropic, wenn er sich registriert, und gibt beim Start `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)` aus. Die Meldung der Opt-in-Entscheidung erfordert Claude Code v2.1.267 oder später, und frühere Versionen akzeptieren das Flag, ohne es zu melden oder diese Zeile auszugeben. Jede Sitzung auf einem Opt-in-Runner verwendet dann entweder Anthropic-verwaltetes Git oder die Pro-Sitzungs-Proxy-URL. Wenn eine Sitzung die Pro-Sitzungs-Proxy-URL verwendet, protokolliert der Runner eine `[runner:warn]`-Zeile, die dies angibt.241Um den Git-Proxy einzuschalten, fügen Sie dem Befehl des Runners `--use-anthropic-git-proxy` hinzu oder setzen Sie `CLAUDE_RUNNER_USE_GIT_PROXY=1` in der Umgebung des Runners. Dieser Befehl, in einer Shell auf dem Runner-Host ausgeführt, startet den Runner aus dem [Schnellstart](/docs/de/self-hosted-environments-quickstart#set-up-manually) mit eingeschaltetem Git-Proxy:

242 

243```bash theme={null}

244claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>' --use-anthropic-git-proxy

245```

246 

247Beim Start gibt der Runner `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)` aus. Anthropic entscheidet dann für jede Sitzung auf diesem Runner, ob es deren Git bereitstellt. Für jede Sitzung, für die es Git bereitstellt, protokolliert der Runner eine `[runner:session]`-Zeile, die `governed git ACTIVE` enthält. Wenn eine Sitzung stattdessen nicht startet, siehe [Wenn Sitzungen auf einem Runner mit dem Git-Proxy nicht starten](#when-anthropic-doesnt-serve-a-session).

248 

249<h4 id="how-anthropic-serves-git-for-a-session">

250 Wie Anthropic Git für eine Sitzung bereitstellt

251</h4>

252 

253Bei einer Sitzung, für die Anthropic Git bereitstellt, laufen der Clone des Runners sowie die eigenen Fetches und Pushes der Sitzung über Anthropic, authentifiziert mit dem eigenen kurzlebigen Token der Sitzung:

254 

255* **Benutzersitzungen**: Anthropic verwendet das für den Ersteller der Sitzung gespeicherte GitHub-OAuth-Token.

256* **Bot- und Agentensitzungen**: Anthropic verwendet das GitHub-App-Installations-Token Ihrer Organisation.

257* **URL-Umschreibungen**: `--git-host-rewrite` und `--git-ssh-rewrite` haben keine Auswirkung auf ein Repository, das der Git-Proxy bereitstellt.

258 

259<h4 id="when-anthropic-doesnt-serve-a-session">

260 Wenn Sitzungen auf einem Runner mit dem Git-Proxy nicht starten

261</h4>

262 

263Auf einem Runner, der mit `--use-anthropic-git-proxy` gestartet wurde, startet eine Sitzung nicht, wenn Anthropic kein Git für sie bereitstellt. Suchen Sie im Log des Runners nach einem Git-Fehler, der eine `api.anthropic.com`-Adresse mit `/git_proxy/` nennt.

264 

265Für jede Sitzung protokolliert ein Runner mit Claude Code v2.1.267 oder später außerdem entweder eine `[runner:session]`-Zeile mit `governed git ACTIVE`, wenn Anthropic Git für die Sitzung bereitstellt, oder eine `[runner:warn]`-Zeile mit `the server withheld Anthropic-managed git for this session`, wenn nicht. Suchen Sie die Zeile, die Sie sehen, unter diesen Fällen:

266 

267* **Weder `governed git ACTIVE` noch die `withheld`-Zeile**: Ein Runner, der älter als Claude Code v2.1.267 ist, protokolliert keine der beiden Zeilen, und Anthropic stellt für seine Sitzungen kein Git bereit. Aktualisieren Sie den Runner auf v2.1.267 oder später, indem Sie [Die Version festlegen](#pin-the-version) folgen.

268* **Die `withheld`-Zeile**: Anthropic hat kein Git für die Sitzung bereitgestellt. Ein Runner, der zuvor mit dem Git-Proxy funktioniert hat, kann auf diese Weise fehlschlagen, ohne dass Sie etwas geändert haben.

269 * **Ein Repository liegt nicht auf github.com**: Für eine Sitzung mit auch nur einem Repository auf einem anderen Git-Host, etwa GitHub Enterprise Server, wird kein Git bereitgestellt, auch nicht für ihre github.com-Repositorys. [Schalten Sie den Anthropic-Git-Proxy aus](#turn-the-anthropic-git-proxy-off) für die Runner dieser Umgebung.

270 * **Jedes Repository liegt auf github.com**: Melden Sie den Fehler [Ihrem Anthropic-Account-Team](#report-an-issue) mit der Sitzungs-ID aus der `withheld`-Zeile. Anthropic erfasst den Grund auf seiner Seite.

271* **Eine Zeile mit `remote: access denied by the git proxy`**: Auch eine Sitzung, für die Anthropic Git bereitstellt, kann abgewiesen werden, zum Beispiel wenn eine Organisationsrichtlinie den Git-Zugriff für die Sitzung verweigert oder die Sitzung nicht für das Repository autorisiert ist. Das Log des Runners zeigt dann eine Zeile mit `remote: access denied by the git proxy`, und der Rest dieser Zeile nennt den Grund.

272* <span id="creator-has-no-github-connection" />**`GitHub authentication required`**: Dies erscheint, wenn der Ersteller der Sitzung keine funktionierende GitHub-Verbindung auf claude.ai hat. Der Clone der Sitzung schlägt fehl, und der Git-Fehler lautet `GitHub authentication required. Please reconnect your GitHub account.` Bitten Sie diese Person, GitHub in ihren claude.ai-Einstellungen zu verbinden oder erneut zu verbinden.

273 

274Nachdem Sie die Ursache behoben haben, starten Sie die fehlgeschlagenen Sitzungen erneut.

275 

276<h4 id="turn-the-anthropic-git-proxy-off">

277 Den Anthropic-Git-Proxy ausschalten

278</h4>

279 

280Wenn Sitzungen in einer Umgebung ein Repository auf einem anderen Git-Host als github.com verwenden, etwa GitHub Enterprise Server, schalten Sie `--use-anthropic-git-proxy` für die Runner dieser Umgebung aus.

281 

282<Steps>

283 <Step title="Flag entfernen">

284 Entfernen Sie `--use-anthropic-git-proxy` aus dem Befehl des Runners. Wenn Sie `CLAUDE_RUNNER_USE_GIT_PROXY` in der Umgebung des Runners gesetzt haben, etwa in einer Pod-Spezifikation oder einer Compose-Datei, entfernen Sie es dort. Heben Sie es in einer Shell auf:

285 

286 ```bash theme={null}

287 unset CLAUDE_RUNNER_USE_GIT_PROXY

288 ```

289 </Step>

290 

291 <Step title="Dem Runner Git-Anmeldedaten geben">

292 Stellen Sie Anmeldedaten bereit, die ohne Eingabeaufforderung für jeden Git-Host funktionieren, den die Sitzungen der Runner verwenden, github.com eingeschlossen. Alle Anmeldedaten, die in der globalen Git-Konfiguration des Runner-Benutzers lagen, sind verloren, weil der Runner diese Konfiguration gelöscht hat, während `--use-anthropic-git-proxy` gesetzt war. [Liefern Sie Anmeldedaten in Ihrem Image mit](#ship-git-config-in-your-image) oder verwenden Sie einen [`checkout`-Lebenszyklus-Hook](/docs/de/self-hosted-environments-configuration#checkout).

293 </Step>

294 

295 <Step title="Netzwerkpfad öffnen">

296 Erlauben Sie dem Runner, jeden Git-Host, den die Sitzungen der Runner verwenden, über Port 443 oder 22 zu erreichen. Siehe die Zeile für den Git-Host unter [Netzwerkanforderungen](#network-requirements).

297 </Step>

298 

299 <Step title="Runner neu starten">

300 Starten Sie die Runner neu, damit sie sich ohne den Git-Proxy registrieren. Starten Sie dann jede fehlgeschlagene Sitzung erneut.

301 </Step>

302</Steps>

198 303 

199<h4 id="github-api-access-without-the-github-cli">304<h4 id="github-api-access-without-the-github-cli">

200 GitHub-API-Zugriff ohne die GitHub CLI305 GitHub-API-Zugriff ohne die GitHub CLI


266```dockerfile theme={null}371```dockerfile theme={null}

267FROM debian:bookworm-slim372FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION373ARG CLAUDE_CODE_VERSION

269RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client \374RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq \

270 && rm -rf /var/lib/apt/lists/*375 && rm -rf /var/lib/apt/lists/*

271RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \376RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \

272 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude377 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners487kubectl create namespace claude-runners

383```488```

384 489 

385Erstellen Sie das Backing-Secret aus einer lokalen Datei, die den Wert enthält, den Sie im Admin-UI's [**Copy environment key**-Schritt](/docs/de/self-hosted-environments-quickstart#set-up-an-environment-and-runner) kopiert haben, daher erscheint das Geheimnis niemals in Ihrer Shell-Historie. Führen Sie `(umask 077 && cat > ./environment-secret)` aus, fügen Sie das Geheimnis ein, drücken Sie Enter, dann Ctrl-D. Dann erstellen Sie das Secret und löschen die Datei:490Erstellen Sie das zugrunde liegende Secret aus einer lokalen Datei, die den Wert enthält, den Sie im [**Copy environment key**-Schritt](/docs/de/self-hosted-environments-quickstart#set-up-manually) der Admin-UI kopiert haben, damit das Geheimnis niemals in Ihrer Shell-Historie erscheint. Führen Sie `(umask 077 && cat > ./environment-secret)` aus, fügen Sie das Geheimnis ein, drücken Sie Enter und dann Ctrl-D. Erstellen Sie anschließend das Secret und löschen Sie die Datei:

386 491 

387```bash theme={null}492```bash theme={null}

388kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret493kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret


500 Wiederverwendung eines vorgewärmten Checkouts605 Wiederverwendung eines vorgewärmten Checkouts

501</h2>606</h2>

502 607 

503Bei großen Repositories kann das Klonen den Sitzungsstart dominieren. Bei `--capacity 1` ohne [`checkout` Hook](/docs/de/self-hosted-environments-configuration#checkout) behält der Runner einen kanonischen Klon pro Repository unter `<base-dir>/<repo-owner>/<repo>` und verwendet ihn über Sitzungen hinweg erneut: Er ruft die angeforderte Referenz ab, trennt `HEAD` ab und setzt sie hart zurück, was nahezu augenblicklich ist, wenn sich wenig geändert hat. Um das kalte Klonen zu überspringen, stellen Sie den Klon auf eine von zwei Arten bereit:608Bei großen Repositories kann das Klonen den Sitzungsstart dominieren. Um das kalte Klonen zu überspringen, stellen Sie selbst einen Klon unter dem Pfad bereit, an dem der Runner seinen eigenen Klon ablegt. Ohne [`checkout` Hook](/docs/de/self-hosted-environments-configuration#checkout) behält der Runner einen kanonischen Klon pro Repository unter `<base-dir>/<repo-owner>/<repo>` und verwendet ihn über Sitzungen hinweg erneut:

609 

610* **Bei `--capacity 1`**: Der Runner ruft die angeforderte Referenz ab, trennt `HEAD` ab und setzt hart darauf zurück, was nahezu augenblicklich ist, wenn sich wenig geändert hat.

611* **Bei einer `--capacity` größer als eins**: Der Runner ruft in diesen Klon ab und checkt dann für jede Sitzung einen separaten Worktree daraus aus. Ein vorgewärmter Klon spart den Download, aber nicht den Checkout.

612 

613Stellen Sie den Klon im Image oder auf einem persistenten Volume bereit:

504 614 

505* **Klon im Image**: Erstellen Sie den Klon in Ihrem Runner-Image unter diesem Pfad. Jeder neue Container startet dann mit dem warmen Klon, ohne eine Festplatte wiederzuverwenden.615* **Klon im Image**: Erstellen Sie den Klon in Ihrem Runner-Image unter diesem Pfad. Jeder neue Container startet dann mit dem warmen Klon, ohne eine Festplatte wiederzuverwenden.

506* **Klon auf einem persistenten Volume**: Bei Runnern, die Sie mit [`--lock-to-account`](/docs/de/self-hosted-environments-reference#runner-cli-flags) auf das Konto eines Benutzers sperren, verweisen Sie `--base-dir` auf ein persistentes Volume, sodass die Festplatte nur diesem Konto dient. Ein gesperrter Runner akzeptiert niemals Claude Tag Channel-Sitzungen, daher gilt diese Option nicht für Runner, die diese bedienen.616* **Klon auf einem persistenten Volume**: Bei Runnern, die Sie mit [`--lock-to-account`](/docs/de/self-hosted-environments-reference#runner-cli-flags) auf das Konto eines Benutzers sperren, verweisen Sie `--base-dir` auf ein persistentes Volume, sodass die Festplatte nur diesem Konto dient. Ein gesperrter Runner akzeptiert niemals Claude Tag Channel-Sitzungen, daher gilt diese Option nicht für Runner, die diese bedienen.


508Was der Wiederverwendungspfad garantiert und nicht garantiert:618Was der Wiederverwendungspfad garantiert und nicht garantiert:

509 619 

510* **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.620* **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.

511* **Nachverfollgte Änderungen werden zurückgesetzt, nicht nachverfolgte Dateien bleiben erhalten**: Jede Sitzung beginnt mit einem harten Zurücksetzen, das die verfolgten Ä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.621* **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.

512* **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.622* **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.

513 623 

514 Standardmäßig lässt der Runner diese an Ort und Stelle, wenn die Sitzung endet, daher sammeln sie sich auf einer Festplatte an, die den Runner-Prozess überlebt. Jede Sitzung wird als eigener Benutzer des Runners ausgeführt, daher kann jede spätere Sitzung, die diese Festplatte bedient, sie lesen. Wenn Sie ein persistentes `--base-dir` beibehalten, dimensionieren Sie das Volume für dieses Wachstum. Das Gleiche gilt für jedes Setup, das den Runner auf demselben Dateisystem neu startet, einschließlich des [Docker Compose-Rezepts](#docker-compose).624 Standardmäßig lässt der Runner diese an Ort und Stelle, wenn die Sitzung endet, daher sammeln sie sich auf einer Festplatte an, die den Runner-Prozess überlebt. Jede Sitzung wird als eigener Benutzer des Runners ausgeführt, daher kann jede spätere Sitzung, die diese Festplatte bedient, sie lesen. Wenn Sie ein persistentes `--base-dir` beibehalten, dimensionieren Sie das Volume für dieses Wachstum. Das Gleiche gilt für jedes Setup, das den Runner auf demselben Dateisystem neu startet, einschließlich des [Docker Compose-Rezepts](#docker-compose).


522 632 

523Jeder Sitzungs-Kind-Claude-Code-Prozess führt die Binärdatei des Runners selbst aus, und der Runner schaltet Auto-Update in den Sitzungen, die er spawnt, aus, daher 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.633Jeder Sitzungs-Kind-Claude-Code-Prozess führt die Binärdatei des Runners selbst aus, und der Runner schaltet Auto-Update in den Sitzungen, die er spawnt, aus, daher 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.

524 634 

525Ein Modell, das Ihre Sitzungen verwenden, kann eine neuere Claude-Code-Version erfordern als die, die sie ausführen. Der Server lehnt dann Anfragen für dieses Modell mit [Claude Code unterstützt dieses Modell nicht](/docs/de/errors#claude-code-does-not-support-this-model) ab. Bevor Sie eine Version pinnen, überprüfen Sie [die Claude-Code-Versionen, die Modelle erfordern](/docs/de/model-config#available-models) für jedes Modell, das Ihre Sitzungen verwenden.635Legen Sie fest, welche Version Ihre Sitzungen ausführen und wann sie sich ändert:

526 636 

637* **Bevor Sie eine Version pinnen**: Überprüfen Sie [die Claude-Code-Versionen, die Modelle erfordern](/docs/de/model-config#available-models) für jedes Modell, das Ihre Sitzungen verwenden. Wenn ein Modell eine neuere Version erfordert als die, die Ihre Sitzungen ausführen, lehnt der Server Anfragen für dieses Modell mit [Claude Code unterstützt dieses Modell nicht](/docs/de/errors#claude-code-does-not-support-this-model) ab.

527* **Um eine Flotte auf einer Version zu halten**: Erstellen Sie das Image mit einer gepinnten Version, oder installieren Sie auf einem bloßen Host eine spezifische Version und [deaktivieren Sie Auto-Updates](/docs/de/setup#disable-auto-updates)638* **Um eine Flotte auf einer Version zu halten**: Erstellen Sie das Image mit einer gepinnten Version, oder installieren Sie auf einem bloßen Host eine spezifische Version und [deaktivieren Sie Auto-Updates](/docs/de/setup#disable-auto-updates)

528* **Um zu upgraden**: Installieren Sie die neuere Version oder erstellen Sie das Image neu, dann starten Sie die Runner neu639* **Um eine feste Flotte zu aktualisieren**: Lesen Sie die [Changelog](/docs/en/changelog)-Einträge zwischen Ihrer Version und der Version, die Sie installieren, und installieren Sie dann die neuere Version oder bauen Sie das Image neu und starten Sie die Runner neu

640* **Um bedarfsgesteuerte Runner zu aktualisieren**: Lesen Sie die [Changelog](/docs/en/changelog)-Einträge zwischen Ihrer Version und der Version, die Sie installieren, und ändern Sie dann das Image, das Ihr [`spawn-runner`-Hook](/docs/de/self-hosted-environments-configuration#the-spawn-runner-hook) startet. Jeder neue Runner erhält die neue Version. Ein bereits laufender Runner, einschließlich eines Standby-Runners, den [`--min-idle`](/docs/de/self-hosted-environments-reference#orchestrator-cli-flags) gestartet hat, behält seine Version, bis er beendet wird. Starten Sie ihn nicht neu, da sein Arbeitsauftrag nur einmal verwendet werden kann.

529* **Plugins**: Plugin-Marktplätze auto-updaten auch nicht; setzen Sie `FORCE_AUTOUPDATE_PLUGINS=1` in der Runner's Umgebung, um Plugins auto-updaten zu lassen, während die Binärdatei gepinnt bleibt641* **Plugins**: Plugin-Marktplätze auto-updaten auch nicht; setzen Sie `FORCE_AUTOUPDATE_PLUGINS=1` in der Runner's Umgebung, um Plugins auto-updaten zu lassen, während die Binärdatei gepinnt bleibt

530 642 

531<h2 id="scale-the-fleet">643<h2 id="scale-the-fleet">


580</h3>692</h3>

581 693 

582* **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.694* **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.

583 * **Um committete Arbeit zu behalten**: Setzen Sie [`--push-outcome-on-release`](/docs/de/self-hosted-environments-reference#runner-cli-flags). Der Runner führt dann vor der Freigabe einen Best-Effort-Push der Ergebnis-Branches der Sitzung durch, und die fortgesetzte Sitzung startet von diesen Commits. Nicht committete Änderungen gehen weiterhin verloren.695 * **Um committete Arbeit zu behalten**: Setzen Sie [`--push-outcome-on-release`](/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.

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

584 * **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.697 * **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.

585* **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.698* **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.

586* **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.699* **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.


606* **Runner erscheint nicht in der Umgebung**: Bestätigen Sie, dass der Host `api.anthropic.com` über HTTPS erreichen kann, das Umgebungsgeheimnis aktuell ist und die Host-Uhr innerhalb von fünf Minuten der echten Zeit liegt; größere Abweichung verursacht, dass die Authentifizierung fehlschlägt. Der Runner protokolliert `[runner:fatal]` mit dem Ablehnungsgrund bei Auth-Fehler.719* **Runner erscheint nicht in der Umgebung**: Bestätigen Sie, dass der Host `api.anthropic.com` über HTTPS erreichen kann, das Umgebungsgeheimnis aktuell ist und die Host-Uhr innerhalb von fünf Minuten der echten Zeit liegt; größere Abweichung verursacht, dass die Authentifizierung fehlschlägt. Der Runner protokolliert `[runner:fatal]` mit dem Ablehnungsgrund bei Auth-Fehler.

607* **Runner beendet sich beim Start mit `cannot create or write to base directory`**: Der Runner kann `--base-dir` nicht erstellen oder schreiben, das standardmäßig auf `/workspace` ist. Beheben Sie das Verzeichnis's Eigentum oder zeigen Sie `--base-dir` auf einen beschreibbaren Pfad, wie in [Halten Sie das Basis-Verzeichnis und die Kapazität über Runner identisch](#keep-the-base-directory-and-capacity-identical-across-runners) beschrieben. Wenn der Runner stattdessen `[runner:fatal]` protokolliert, dass die Basis-Verzeichnis-Überprüfung abgelaufen ist, ist das Verzeichnis auf einem hängenden NFS- oder CSI-Mount. Überprüfen Sie die Mount-Gesundheit anstatt der Berechtigungen. Der Runner druckt beide dieser Startup-Fehler zu stderr, bevor er `--log-file` öffnet, daher suchen Sie nach ihnen im Terminal oder Ihren Plattform-Container-Logs anstatt der Log-Datei. Vor v2.1.225 überprüfte der Runner das Basis-Verzeichnis nicht beim Start, und diese Fehlkonfiguration schlug Sitzungen nach der Aufnahme fehl.720* **Runner beendet sich beim Start mit `cannot create or write to base directory`**: Der Runner kann `--base-dir` nicht erstellen oder schreiben, das standardmäßig auf `/workspace` ist. Beheben Sie das Verzeichnis's Eigentum oder zeigen Sie `--base-dir` auf einen beschreibbaren Pfad, wie in [Halten Sie das Basis-Verzeichnis und die Kapazität über Runner identisch](#keep-the-base-directory-and-capacity-identical-across-runners) beschrieben. Wenn der Runner stattdessen `[runner:fatal]` protokolliert, dass die Basis-Verzeichnis-Überprüfung abgelaufen ist, ist das Verzeichnis auf einem hängenden NFS- oder CSI-Mount. Überprüfen Sie die Mount-Gesundheit anstatt der Berechtigungen. Der Runner druckt beide dieser Startup-Fehler zu stderr, bevor er `--log-file` öffnet, daher suchen Sie nach ihnen im Terminal oder Ihren Plattform-Container-Logs anstatt der Log-Datei. Vor v2.1.225 überprüfte der Runner das Basis-Verzeichnis nicht beim Start, und diese Fehlkonfiguration schlug Sitzungen nach der Aufnahme fehl.

608* **Sitzungen bleiben in der Warteschlange**: Jeder Online-Runner kann auf einen anderen Owner gesperrt sein. Überprüfen Sie die `claude_code_self_hosted_runner_locked_account`-[Metrik](/docs/de/self-hosted-environments-reference#prometheus-metrics) jedes Runners oder das `locked_account`-Feld seiner `[runner:health]`-Log-Zeile, um zu sehen, wer sie hält. Beide zeigen die Email des Owners nur, nachdem der Runner ein Sitzungs-Token mit einem `act.email`-Claim ausgestellt bekommen hat, das die Sitzungen eines Claude Tag-Agenten niemals tun. Ohne den Claim sendet der Runner keine `locked_account`-Serie aus und protokolliert `locked_account=yes`, was Ihnen sagt, dass der Runner gesperrt ist, aber nicht auf welchen Owner. Fügen Sie Replicas hinzu, oder warten Sie, bis ein bestehender Runner drainiert und neu startet. Wenn die Umgebung On-Demand-Runner verwendet, überprüfen Sie stattdessen den Orchestrator; siehe [On-Demand-Runner](/docs/de/self-hosted-environments-configuration#on-demand-runners).721* **Sitzungen bleiben in der Warteschlange**: Jeder Online-Runner kann auf einen anderen Owner gesperrt sein. Überprüfen Sie die `claude_code_self_hosted_runner_locked_account`-[Metrik](/docs/de/self-hosted-environments-reference#prometheus-metrics) jedes Runners oder das `locked_account`-Feld seiner `[runner:health]`-Log-Zeile, um zu sehen, wer sie hält. Beide zeigen die Email des Owners nur, nachdem der Runner ein Sitzungs-Token mit einem `act.email`-Claim ausgestellt bekommen hat, das die Sitzungen eines Claude Tag-Agenten niemals tun. Ohne den Claim sendet der Runner keine `locked_account`-Serie aus und protokolliert `locked_account=yes`, was Ihnen sagt, dass der Runner gesperrt ist, aber nicht auf welchen Owner. Fügen Sie Replicas hinzu, oder warten Sie, bis ein bestehender Runner drainiert und neu startet. Wenn die Umgebung On-Demand-Runner verwendet, überprüfen Sie stattdessen den Orchestrator; siehe [On-Demand-Runner](/docs/de/self-hosted-environments-configuration#on-demand-runners).

609* **Sitzungen schlagen sofort nach der Aufnahme fehl**: Öffnen Sie die Sitzung in claude.ai/code, um den Fehler zu sehen. Die häufigsten Ursachen sind fehlende [Git-Anmeldedaten](#configure-git) im Runner-Image und Build-Tools, die nicht installiert sind. Ein nicht beschreibbares Basis-Verzeichnis stoppt den Runner beim Start anstatt Sitzungen zu fehlschlagen. Siehe den **Runner beendet sich beim Start mit `cannot create or write to base directory`**-Eintrag in dieser Liste.722* **Sitzungen schlagen sofort nach der Aufnahme fehl**: Öffnen Sie die Sitzung in claude.ai/code, um den Fehler zu sehen. Die häufigsten Ursachen sind fehlende [Git-Anmeldedaten](#configure-git) im Runner-Image und Build-Tools, die nicht installiert sind. 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). Ein nicht beschreibbares Basis-Verzeichnis stoppt den Runner beim Start anstatt Sitzungen zu fehlschlagen. Siehe den **Runner beendet sich beim Start mit `cannot create or write to base directory`**-Eintrag in dieser Liste.

723* **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).

610* **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.724* **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.

611* **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, am häufigsten weil etwas zwischen dem Runner und `api.anthropic.com`, wie ein abfangender Proxy oder ein Captive Portal, seine eigene Seite antwortet. Der Runner lehnt die Antwort ab, zählt sie unter der `transport`-Art der `claude_code_self_hosted_runner_poll_errors_total`-[Metrik](/docs/de/self-hosted-environments-reference#prometheus-metrics), und versucht erneut auf dem fehlgeschlagenen Poll-Plan, der in [Sitzungs-Lebenszyklus](/docs/de/self-hosted-environments#session-lifecycle) beschrieben ist. Der Runner bedient weiterhin seine Live-Sitzungen. Konfigurieren Sie den Proxy, um Antworten von `api.anthropic.com` unverändert durchzulassen. Vor v2.1.246 las der Runner eine solche Antwort als eine leere Warteschlange, die seine Live-Sitzungen beenden oder ihn zum Exit bringen könnte.725* **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, am häufigsten weil etwas zwischen dem Runner und `api.anthropic.com`, wie ein abfangender Proxy oder ein Captive Portal, seine eigene Seite antwortet. Der Runner lehnt die Antwort ab, zählt sie unter der `transport`-Art der `claude_code_self_hosted_runner_poll_errors_total`-[Metrik](/docs/de/self-hosted-environments-reference#prometheus-metrics), und versucht erneut auf dem fehlgeschlagenen Poll-Plan, der in [Sitzungs-Lebenszyklus](/docs/de/self-hosted-environments#session-lifecycle) beschrieben ist. Der Runner bedient weiterhin seine Live-Sitzungen. Konfigurieren Sie den Proxy, um Antworten von `api.anthropic.com` unverändert durchzulassen. Vor v2.1.246 las der Runner eine solche Antwort als eine leere Warteschlange, die seine Live-Sitzungen beenden oder ihn zum Exit bringen könnte.

612* **Ein Sitzungs-Branch existiert nicht mehr auf dem Remote**: Für eine Git-Quelle, die die Sitzung nur liest, überspringt der Runner diese Quelle und setzt auf den verbleibenden fort. Für die Quelle, zu der die Sitzung Ergebnisse pusht, schlägt ein gelöschter Branch, typischerweise weil er gemergt und auto-gelöscht wurde, die Sitzung mit einem Fehler fehl, der das Repository und den Branch benennt und Sie auffordert, den Branch wiederherzustellen und erneut zu versuchen. Der Runner schlägt die Sitzung mit dem gleichen Fehler fehl, wenn das Überspringen sie mit keinem Repository überhaupt verlassen würde. Vor v2.1.228 startete eine solche Sitzung in einem leeren Verzeichnis.726* **Ein Sitzungs-Branch existiert nicht mehr auf dem Remote**: Für eine Git-Quelle, die die Sitzung nur liest, überspringt der Runner diese Quelle und setzt auf den verbleibenden fort. Für die Quelle, zu der die Sitzung Ergebnisse pusht, schlägt ein gelöschter Branch, typischerweise weil er gemergt und auto-gelöscht wurde, die Sitzung mit einem Fehler fehl, der das Repository und den Branch benennt und Sie auffordert, den Branch wiederherzustellen und erneut zu versuchen. Der Runner schlägt die Sitzung mit dem gleichen Fehler fehl, wenn das Überspringen sie mit keinem Repository überhaupt verlassen würde. Vor v2.1.228 startete eine solche Sitzung in einem leeren Verzeichnis.


616 730 

617 Die Zugriffsprüfung läuft jedes Mal erneut, wenn die Sitzung auf einem Runner startet, daher sobald die Git-Identität des Runners Lesezugriff hat, klont der nächste Start das Repository. Vor v2.1.274 schlugen jede dieser Ablehnungen den Sitzungsstart fehl.731 Die Zugriffsprüfung läuft jedes Mal erneut, wenn die Sitzung auf einem Runner startet, daher sobald die Git-Identität des Runners Lesezugriff hat, klont der nächste Start das Repository. Vor v2.1.274 schlugen jede dieser Ablehnungen den Sitzungsstart fehl.

618* **Sitzungen dauern Minuten zum Start**: Der anfängliche Clone dominiert normalerweise. Beobachten Sie die `claude_code_self_hosted_runner_session_init_duration_seconds`-[Metrik](/docs/de/self-hosted-environments-reference#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`.732* **Sitzungen dauern Minuten zum Start**: Der anfängliche Clone dominiert normalerweise. Beobachten Sie die `claude_code_self_hosted_runner_session_init_duration_seconds`-[Metrik](/docs/de/self-hosted-environments-reference#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`.

619* **Turns schlagen mit einem 401 fehl**: Jede Sitzung authentifiziert Modellaufrufe mit dem kurzlebigen [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/de/self-hosted-environments-configuration#wrapper-scripts), das der Runner von Anthropic abruft und über die Sitzungs-stdin rotiert. Wenn ein Turn mit einem 401 oder 403 von der Modell-API endet, ruft der Runner ein frisches Token ab und übergibt es der Sitzung. Der fehlgeschlagene Turn wird nicht erneut versucht.733* **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`](/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.

620 734 

621 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.735 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.

622 736 


637 751 

638* **Ein normaler Exit**: Der Runner hat seine Sitzungen beendet und drainiert, seine Ruhezeit erreicht oder wurde angewiesen zu stoppen. Starten Sie ihn neu, damit die Umgebung wieder Kapazität hat. [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle) beschreibt diese Exits.752* **Ein normaler Exit**: Der Runner hat seine Sitzungen beendet und drainiert, seine Ruhezeit erreicht oder wurde angewiesen zu stoppen. Starten Sie ihn neu, damit die Umgebung wieder Kapazität hat. [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle) beschreibt diese Exits.

639* **Ein fehlgeschlagener Start**: Der Runner kann nicht mit der Konfiguration oder dem Host starten, der ihm gegeben wurde, daher beendet er sich Sekunden nach dem Start, und er beendet sich jedes Mal auf die gleiche Weise, wenn Sie ihn neu starten. Ein schnellerer Neustart hilft nicht. Jemand muss seine Ausgabe lesen und die Ursache beheben.753* **Ein fehlgeschlagener Start**: Der Runner kann nicht mit der Konfiguration oder dem Host starten, der ihm gegeben wurde, daher beendet er sich Sekunden nach dem Start, und er beendet sich jedes Mal auf die gleiche Weise, wenn Sie ihn neu starten. Ein schnellerer Neustart hilft nicht. Jemand muss seine Ausgabe lesen und die Ursache beheben.

754* **Verlorener Kontakt**: Ein Runner, der Anthropic länger als seinen [Lease](/docs/de/self-hosted-environments#session-lifecycle) nicht erreichen kann, zum Beispiel während sein Host schläft, kann aus der Umgebung entfernt werden. Wenn sich ein entfernter Runner wieder verbindet, beendet er sich. Sein Log kann eine `[runner:fatal]`-Zeile zeigen, die `runner record gone server-side` oder, nach einem längeren Ausfall, [`poll auth failed`](/docs/de/self-hosted-environments-quickstart#set-up-an-environment-and-runner) enthält. Der Runner registriert sich nicht von selbst erneut, starten Sie ihn also neu.

640 755 

641Konfigurieren Sie Ihren Supervisor, um den Runner jedes Mal neu zu starten, wenn er beendet wird, länger zwischen Neustarts zu warten, wenn der Runner sich weiterhin direkt nach dem Start beendet, und jemandem zu sagen, wenn das weiterhin passiert.756Konfigurieren Sie Ihren Supervisor, um den Runner jedes Mal neu zu starten, wenn er beendet wird, länger zwischen Neustarts zu warten, wenn der Runner sich weiterhin direkt nach dem Start beendet, und jemandem zu sagen, wenn das weiterhin passiert.

642 757 

Details

195 195 

196Wrapper erhalten den absoluten Pfad zum Binär des Runners selbst in `CLAUDE_RUNNER_CLAUDE_BIN`; verwenden Sie diesen Pfad anstelle eines PATH-aufgelösten `claude`, damit die Dekodierung auf dem gleichen Binär läuft, das der Runner selbst verwendet.196Wrapper erhalten den absoluten Pfad zum Binär des Runners selbst in `CLAUDE_RUNNER_CLAUDE_BIN`; verwenden Sie diesen Pfad anstelle eines PATH-aufgelösten `claude`, damit die Dekodierung auf dem gleichen Binär läuft, das der Runner selbst verwendet.

197 197 

198Verwenden Sie `jq -re` anstelle von `jq -r`, damit ein fehlender Anspruch einen Exit-Code ungleich Null verursacht. Mit nur `-r` gibt ein fehlender Anspruch die Literalzeichenkette `null` aus und beendet mit Null, was einen schlechten Wert stillschweigend nachgelagert übergibt. Übergeben Sie `--no-verify` an `decode-token` nur zur Offline-Inspektion, wenn der JWKS-Endpunkt nicht erreichbar ist.198Verwenden Sie `jq -re` anstelle von `jq -r`, damit ein fehlender Anspruch einen Exit-Code ungleich Null verursacht. Mit nur `-r` gibt ein fehlender Anspruch die Literalzeichenkette `null` aus und beendet mit Null, was einen schlechten Wert stillschweigend nachgelagert übergibt.

199 

200Wenn `decode-token` die Schlüssel nicht vom JWKS-Endpunkt abrufen oder den Token nicht verifizieren kann, gibt es den Grund auf stderr aus, gibt keine Ansprüche aus und beendet sich mit Code 1. Übergeben Sie `--no-verify` an `decode-token` nur zur Offline-Inspektion, wenn der JWKS-Endpunkt nicht erreichbar ist.

199 201 

200<h2 id="claims-reference">202<h2 id="claims-reference">

201 Claims-Referenz203 Claims-Referenz

Details

34Der Runner-Host benötigt:34Der Runner-Host benötigt:

35 35 

36* Einen Linux- oder macOS-Host oder Container mit ausgehendem HTTPS zu `api.anthropic.com`, zu `claude.ai` und den Download-Hosts, auf die es für den Installationsschritt unten umleitet, und zu Ihrem Git-Host für den Klon; die [Netzwerkanforderungstabelle](/docs/de/self-hosted-environments-deploy#network-requirements) hat die vollständige Liste. Windows wird nicht als Runner-Host unterstützt; führen Sie den Runner stattdessen in einem Linux-Container aus. Entwickler-Workstations sind nicht betroffen, da Sitzungen von claude.ai in einem Browser aus gestartet werden.36* Einen Linux- oder macOS-Host oder Container mit ausgehendem HTTPS zu `api.anthropic.com`, zu `claude.ai` und den Download-Hosts, auf die es für den Installationsschritt unten umleitet, und zu Ihrem Git-Host für den Klon; die [Netzwerkanforderungstabelle](/docs/de/self-hosted-environments-deploy#network-requirements) hat die vollständige Liste. Windows wird nicht als Runner-Host unterstützt; führen Sie den Runner stattdessen in einem Linux-Container aus. Entwickler-Workstations sind nicht betroffen, da Sitzungen von claude.ai in einem Browser aus gestartet werden.

37* Ein Repository für die Testsitzung: ein öffentliches oder eines, das dieser Host bereits über seine HTTPS-URL klonen kann, ohne nach Anmeldedaten gefragt zu werden.

37* Eine Uhr, die mit der Realzeit synchronisiert ist, beispielsweise mit NTP. Die Authentifizierung schlägt fehl, wenn die Uhr um mehr als fünf Minuten abweicht; siehe [Troubleshooting](/docs/de/self-hosted-environments-deploy#troubleshooting).38* Eine Uhr, die mit der Realzeit synchronisiert ist, beispielsweise mit NTP. Die Authentifizierung schlägt fehl, wenn die Uhr um mehr als fünf Minuten abweicht; siehe [Troubleshooting](/docs/de/self-hosted-environments-deploy#troubleshooting).

38 39 

39<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


57 Richten Sie eine Umgebung und einen Runner ein58 Richten Sie eine Umgebung und einen Runner ein

58</h2>59</h2>

59 60 

60Claude Code enthält ein geführtes Setup: eine interaktive Claude Code-Sitzung, die Sie durch das Erstellen der Umgebung in der Admin-Benutzeroberfläche führt, einen lokalen Runner mit der Geheimnis-Datei startet, die Sie speichern, bestätigt, dass sich der Runner registriert, und ein Spickzettel zu `./runner-setup/CHEAT-SHEET.md` schreibt. Führen Sie es auf einem Computer aus, auf dem Sie sich mit `claude auth login` mit einem Konto angemeldet haben, das eine Owner-Rolle hat; es ist nicht mit API-Schlüsseln oder Drittanbieter-Modellanbietern verfügbar. Auf Hosts, wo eine interaktive Sitzung nicht möglich ist, verwenden Sie stattdessen die manuellen Schritte unten. Bestätigen Sie zuerst, dass die [Versionsüberprüfung](#software-on-the-runner-host) bestanden wurde: Bei Versionen älter als 2.1.224 startet dieser Befehl eine gewöhnliche Claude-Sitzung mit den Wörtern als Eingabeaufforderung statt des geführten Setups. Um das geführte Setup zu starten, führen Sie den Setup-Unterbefehl aus und folgen Sie den Eingabeaufforderungen:61Verwenden Sie entweder das [geführte Setup](#run-the-guided-setup) oder die [manuellen Schritte](#set-up-manually). Das geführte Setup ist ein einzelner Befehl, der eine interaktive Claude Code-Sitzung startet und Sie durch den Rest führt. Verwenden Sie stattdessen die manuellen Schritte auf einem Host, auf dem eine interaktive Sitzung nicht möglich ist. Verwenden Sie sie auch, wenn jemand mit der Owner-Rolle die Umgebung erstellt und Ihnen ihr Geheimnis übergeben hat, da das geführte Setup eine Owner-Anmeldung erfordert.

62 

63<h3 id="run-the-guided-setup">

64 Geführtes Setup ausführen

65</h3>

66 

67Das geführte Setup führt Sie durch das Erstellen der Umgebung in der Admin-Benutzeroberfläche, startet einen lokalen Runner mit der Geheimnis-Datei, die Sie speichern, bestätigt, dass sich der Runner registriert, und schreibt einen Spickzettel nach `./runner-setup/CHEAT-SHEET.md`. Bevor Sie es ausführen, überprüfen Sie Ihre Anmeldung und Version:

68 

69* **Anmeldung**: Führen Sie es auf einem Computer aus, auf dem Sie sich mit `claude auth login` mit einem Konto angemeldet haben, das eine Owner-Rolle hat. Mit nur einem API-Schlüssel oder einem Drittanbieter-Modellanbieter startet die Sitzung, aber ihre Organisationsprüfungen schlagen fehl.

70* **Version**: Bestätigen Sie, dass die [Versionsüberprüfung](#software-on-the-runner-host) bestanden wurde. Bei Versionen älter als 2.1.224 startet der Setup-Befehl eine Claude-Sitzung mit den Wörtern als Prompt statt des geführten Setups.

71 

72Um das geführte Setup zu starten, führen Sie den Setup-Unterbefehl in Ihrer Shell aus und folgen Sie den Anweisungen:

61 73 

62```bash theme={null}74```bash theme={null}

63claude self-hosted-runner setup75claude self-hosted-runner setup

64```76```

65 77 

66Um stattdessen manuell einzurichten:78Das Setup startet selbst keine Test-Sitzung: Es fordert Sie auf, eine unter claude.ai/code zu starten. Der letzte Schritt des Setups stoppt den Runner, den es gestartet hat. Wenn Sie das Setup vor diesem Schritt verlassen, läuft der Runner weiter. Um nach dem letzten Schritt weiterzumachen, starten Sie den Runner in Ihrer Shell erneut mit dem Befehl in `./runner-setup/CHEAT-SHEET.md` und [leiten Sie dann eine Sitzung zur Umgebung weiter](#route-a-session).

79 

80<h3 id="set-up-manually">

81 Manuell einrichten

82</h3>

83 

84Erstellen Sie die Umgebung auf claude.ai, starten Sie den Runner über ein Terminal auf dem Host und kehren Sie dann zu claude.ai zurück, um zu bestätigen, dass der Runner angezeigt wird, und eine Sitzung an ihn weiterzuleiten. Wenn jemand mit der Owner-Rolle die Umgebung bereits erstellt und Ihnen ihr Geheimnis übergeben hat, beginnen Sie bei Schritt 2.

67 85 

68<Steps>86<Steps>

69 <Step title="Erstellen Sie eine Umgebung">87 <Step title="Erstellen Sie eine Umgebung">


73 </Step>91 </Step>

74 92 

75 <Step title="Starten Sie einen Runner">93 <Step title="Starten Sie einen Runner">

76 Erstellen Sie das Geheimnis-Verzeichnis. Dieser Schritt und der nächste benötigen Root für den `/etc/claude`-Pfad; jeder Pfad, den der Runner-Prozess lesen kann, funktioniert, also passen Sie beide Befehle und den `--environment-secret-file`-Wert zusammen an, wenn Sie einen anderen verwenden.94 Erstellen Sie das Geheimnis-Verzeichnis. Dieser Befehl und der nächste verwenden `/etc/claude`, was Root-Rechte erfordert, und die Geheimnis-Datei, die sie erstellen, ist nur für den Benutzer lesbar, der sie ausführt. Wenn der Runner als anderer Benutzer ausgeführt wird, beendet er sich mit `error: Failed to read environment secret file <path> (EACCES: permission denied, open '<path>')`. Führen Sie in diesem Fall beide Befehle als Benutzer des Runners aus, mit einem Verzeichnis anstelle von `/etc/claude`, in das dieser Benutzer schreiben kann, und übergeben Sie denselben Pfad an `--environment-secret-file`. Jeder Pfad, den der Runner-Prozess lesen kann, funktioniert.

77 95 

78 ```bash theme={null}96 ```bash theme={null}

79 mkdir -p /etc/claude97 mkdir -p /etc/claude


89 107 

90 Wenn der Runner nicht in den Pfad erstellen oder schreiben kann, beendet er sich beim Start mit einem Fehler, der das Verzeichnis benennt, statt sich zu registrieren. Siehe [Troubleshooting](/docs/de/self-hosted-environments-deploy#troubleshooting).108 Wenn der Runner nicht in den Pfad erstellen oder schreiben kann, beendet er sich beim Start mit einem Fehler, der das Verzeichnis benennt, statt sich zu registrieren. Siehe [Troubleshooting](/docs/de/self-hosted-environments-deploy#troubleshooting).

91 109 

92 Starten Sie dann den Runner mit `--environment-secret-file` und `--base-dir`. Der Runner registriert sich bei Ihrer Umgebung und beginnt, auf Arbeit zu warten. Wenn der Runner beendet wird, starten Sie ihn manuell neu. Produktionsbereitstellungen führen den Runner unter einem Orchestrator aus, der beendete Runner neu startet, normalerweise mit einem frischen Dateisystem pro Neustart; [Wiederverwendung eines vorgewärmten Checkouts](/docs/de/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) behandelt das unterstützte Persistent-Disk-Setup.110 Starten Sie dann den Runner mit `--environment-secret-file` und `--base-dir`:

93 111 

94 ```bash theme={null}112 ```bash theme={null}

95 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

96 ```114 ```

115 

116 Der Runner protokolliert `Registered: runner_id=<runner-id>`, sobald er sich bei Ihrer Umgebung registriert hat, und beginnt dann, nach Arbeit abzufragen. Wenn der Runner sich später beendet, starten Sie ihn selbst neu. Unter [Wenn der Runner sich beendet](#if-the-runner-exits) erfahren Sie, wann das passiert.

97 </Step>117 </Step>

98 118 

99 <Step title="Überprüfen Sie, ob der Runner angezeigt wird">119 <Step title="Überprüfen Sie, ob der Runner angezeigt wird">

100 Kehren Sie zur [**Cloud-Umgebungen** Seite](https://claude.ai/admin-settings/cloud-environments) zurück. Der Status Ihrer Umgebung ändert sich innerhalb weniger Sekunden nach dem Start des Runners von **Keine Runner bereitgestellt** zu **Healthy**; öffnen Sie die Umgebung und wählen Sie **Aktivität**, um den Runner selbst zu sehen.120 Kehren Sie zur [**Cloud-Umgebungen** Seite](https://claude.ai/admin-settings/cloud-environments) zurück. Der Status Ihrer Umgebung ändert sich innerhalb weniger Sekunden nach dem Start des Runners von **Keine Runner bereitgestellt** zu **Healthy**; öffnen Sie die Umgebung und wählen Sie **Aktivität**, um den Runner selbst zu sehen. Wenn Sie keinen Zugriff auf die Admin-Seite haben, liefert Ihnen die Zeile `Registered: runner_id=<runner-id>` im Log des Runners aus dem vorherigen Schritt dasselbe Signal.

101 </Step>121 </Step>

102 122 

103 <Step title="Leiten Sie eine Sitzung zur Umgebung weiter">123 <Step title="Leiten Sie eine Sitzung zur Umgebung weiter">

104 Starten Sie eine Sitzung unter claude.ai/code und wählen Sie Ihre Umgebung aus dem Umgebungs-Picker, wo selbstgehostete Umgebungen neben von Anthropic gehosteten angezeigt werden. Der Runner klont mit den Git-Anmeldedaten, die der Host bereits hat, also wählen Sie ein Repository, das dieser Host bereits klonen kann, oder ein öffentliches; Anmeldedaten-Optionen für private Repositories in der Produktion befinden sich auf [Git konfigurieren](/docs/de/self-hosted-environments-deploy#configure-git). Der nächste verfügbare Runner nimmt die wartende Sitzung auf und protokolliert `Picked up session <session-id>` zusammen mit seiner aktiven Anzahl und Kapazität, damit Sie aus der eigenen Ausgabe des Runners bestätigen können, welcher Host die Sitzung übernahm. Beobachten Sie die Sitzungsarbeit und lesen Sie Claudes Antworten unter [claude.ai/code](https://claude.ai/code). Wenn die Sitzung stattdessen in der Warteschlange sitzt, siehe [Troubleshooting](/docs/de/self-hosted-environments-deploy#troubleshooting).124 <span id="route-a-session" />Starten Sie eine Sitzung unter claude.ai/code und wählen Sie Ihre Umgebung aus dem Umgebungs-Picker, wo selbstgehostete Umgebungen neben von Anthropic gehosteten angezeigt werden. Wählen Sie als Repository dasjenige aus den [Voraussetzungen](#host-and-network): ein öffentliches Repository oder eines, das dieser Host bereits klonen kann. Der Runner klont mit den Git-Anmeldedaten, die der Host bereits hat.

125 

126 Der nächste verfügbare Runner nimmt die wartende Sitzung auf und protokolliert `Picked up session <session-id>` zusammen mit seiner aktiven Anzahl und Kapazität, damit Sie aus der eigenen Ausgabe des Runners bestätigen können, welcher Host die Sitzung übernommen hat. Beobachten Sie die Sitzungsarbeit und lesen Sie Claudes Antworten unter [claude.ai/code](https://claude.ai/code).

127 

128 Wenn die Sitzung nicht mit der Arbeit beginnt, orientieren Sie sich an dem, was Sie sehen:

129 

130 * **Die Sitzung bleibt in der Warteschlange**: Siehe [Fehlerbehebung](/docs/de/self-hosted-environments-deploy#troubleshooting).

131 * **Die Sitzung startet nicht und zeigt einen Git-Fehler**: Der Fehler erscheint in der Sitzung und im Log des Runners. Wenn er 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. Siehe [Git konfigurieren](/docs/de/self-hosted-environments-deploy#configure-git), wo auch Anmeldedaten-Optionen für private Repositorys in der Produktion behandelt werden.

105 </Step>132 </Step>

106</Steps>133</Steps>

107 134 

108Der Runner beendet sich absichtlich, sobald seine aktiven Sitzungen beendet sind; siehe [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle). Für die Produktion stellen Sie ihn unter einem Orchestrator bereit, der ihn beim Beenden neu startet und länger zwischen Neustarts wartet, wenn der Runner kurz nach dem Start immer wieder beendet wird. Siehe [Bereitstellung in der Produktion](/docs/de/self-hosted-environments-deploy) und [Wenn der Runner beendet wird](/docs/de/self-hosted-environments-deploy#when-the-runner-exits).135<h3 id="if-the-runner-exits">

136 Wenn der Runner sich beendet

137</h3>

138 

139Wenn der Runner sich während dieses Schnellstarts beendet, starten Sie ihn mit demselben Befehl erneut. Der Runner kann sich von selbst beenden:

140 

141* **Sitzungen abgeschlossen**: Das Log zeigt `[runner:exit] account workload drained — exiting`. Der Runner beendet sich absichtlich, sobald seine aktiven Sitzungen abgeschlossen sind. Siehe [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle).

142* **Verbindung verloren**: Das Log zeigt eine `[runner:fatal]`-Zeile mit `runner record gone server-side` oder mit `poll auth failed`. Wenn der Runner für eine Weile den Kontakt zu Anthropic verliert, zum Beispiel weil der Host in den Ruhezustand wechselt, kann er sich beenden, sobald er Anthropic das nächste Mal erreicht.

143 

144Ein abgeschlossener Turn beendet Ihre Test-Sitzung nicht. Nach dem ersten Turn ist die Sitzung noch verbunden und der Runner läuft noch, sodass Sie [der Sitzung eine Folgenachricht senden](#send-a-follow-up-message-to-a-running-session) können, ohne den Runner zuerst neu zu starten.

145 

146Für die Produktion stellen Sie den Runner unter einem Orchestrator bereit, der ihn beim Beenden neu startet und länger zwischen Neustarts wartet, wenn der Runner sich kurz nach dem Start immer wieder beendet. Siehe [Bereitstellung in der Produktion](/docs/de/self-hosted-environments-deploy) und [Wenn der Runner beendet wird](/docs/de/self-hosted-environments-deploy#when-the-runner-exits).

109 147 

110<h2 id="send-a-follow-up-message-to-a-running-session">148<h2 id="send-a-follow-up-message-to-a-running-session">

111 Senden Sie eine Nachricht an eine laufende Sitzung149 Senden Sie eine Nachricht an eine laufende Sitzung

Details

52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Geben Sie einen Session-Slot nach N Minuten Inaktivität frei, sobald ein Zug beendet ist oder die Sitzung auf die Aktion des Benutzers wartet. Eine Sitzung, die sich noch mitten in einem Zug befindet, einschließlich einer, die eine nie endende Hintergrundaufgabe hält oder eine Genehmigung anfordert, die von innerhalb eines laufenden Tool-Aufrufs angefordert wird, zählt nicht als untätig; koppeln Sie mit `--kill-session-after-min` als harter Backstop. Nach einer Sitzung, deren Hintergrundaufgabe beendet ist, betrachtet der Runner die Sitzung als beschäftigt, bis der Folgezug, der das Ergebnis liest, beginnt, für höchstens das Fenster [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Bis der Runner ein Shutdown-Signal empfängt oder seine Ruhestandszeit erreicht, startet eine Freigabe, die den Runner ohne aktive Sitzungen hinterlässt, denselben Ausstiegspfad wie eine normale Entleerung, gesteuert durch `--drain-grace-sec`. Nach einem ersten Signal, das Sie mit [`--defer-shutdown-max-min`](/docs/de/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal) verschoben haben, beendet sich der Runner, sobald eine Freigabe ihn ohne Sitzungen hinterlässt. `0` deaktiviert. |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Geben Sie einen Session-Slot nach N Minuten Inaktivität frei, sobald ein Zug beendet ist oder die Sitzung auf die Aktion des Benutzers wartet. Eine Sitzung, die sich noch mitten in einem Zug befindet, einschließlich einer, die eine nie endende Hintergrundaufgabe hält oder eine Genehmigung anfordert, die von innerhalb eines laufenden Tool-Aufrufs angefordert wird, zählt nicht als untätig; koppeln Sie mit `--kill-session-after-min` als harter Backstop. Nach einer Sitzung, deren Hintergrundaufgabe beendet ist, betrachtet der Runner die Sitzung als beschäftigt, bis der Folgezug, der das Ergebnis liest, beginnt, für höchstens das Fenster [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Bis der Runner ein Shutdown-Signal empfängt oder seine Ruhestandszeit erreicht, startet eine Freigabe, die den Runner ohne aktive Sitzungen hinterlässt, denselben Ausstiegspfad wie eine normale Entleerung, gesteuert durch `--drain-grace-sec`. Nach einem ersten Signal, das Sie mit [`--defer-shutdown-max-min`](/docs/de/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal) verschoben haben, beendet sich der Runner, sobald eine Freigabe ihn ohne Sitzungen hinterlässt. `0` deaktiviert. |

53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | aus | Entfernen Sie die Pro-Sitzungs-Verzeichnisse einer Sitzung unter `<base-dir>/_sessions/`, wenn die Sitzung auf diesem Runner endet, unabhängig vom Ergebnis. [Verwenden Sie einen vorgefüllten Checkout erneut](/docs/de/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) beschreibt, was sie enthalten und wer sie lesen kann, wenn sie bleiben. Die Entfernung ist Best-Effort: Die Pro-Sitzungs-Verzeichnisse bleiben an Ort und Stelle, wenn der Runner beendet wird oder seine Drain-Frist erreicht, bevor die Bereinigung ausgeführt wird. Mit dem Flag an, wird das Debug-Protokoll einer fehlgeschlagenen oder unterbrochenen Sitzung nicht auf der Festplatte gespeichert. Erfordert Claude Code v2.1.268 oder später. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | aus | Entfernen Sie die Pro-Sitzungs-Verzeichnisse einer Sitzung unter `<base-dir>/_sessions/`, wenn die Sitzung auf diesem Runner endet, unabhängig vom Ergebnis. [Verwenden Sie einen vorgefüllten Checkout erneut](/docs/de/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) beschreibt, was sie enthalten und wer sie lesen kann, wenn sie bleiben. Die Entfernung ist Best-Effort: Die Pro-Sitzungs-Verzeichnisse bleiben an Ort und Stelle, wenn der Runner beendet wird oder seine Drain-Frist erreicht, bevor die Bereinigung ausgeführt wird. Mit dem Flag an, wird das Debug-Protokoll einer fehlgeschlagenen oder unterbrochenen Sitzung nicht auf der Festplatte gespeichert. Erfordert Claude Code v2.1.268 oder später. |

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | nicht gesetzt | Ruhestand des Runners bei einem absoluten Unix-Zeitstempel in Sekunden, für Infrastruktur, die den Runner zu einem bekannten Zeitpunkt beendet; [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle) beschreibt die Freigabesequenz und wie Sie die Marge dimensionieren. Werte vor 2001 oder nach dem Jahr 5138 werden vom Flag abgelehnt und von der Umgebungsvariable ignoriert. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | nicht gesetzt | Ruhestand des Runners bei einem absoluten Unix-Zeitstempel in Sekunden, für Infrastruktur, die den Runner zu einem bekannten Zeitpunkt beendet; [Runner-Lebenszyklus](/docs/de/self-hosted-environments#runner-lifecycle) beschreibt die Freigabesequenz und wie Sie die Marge dimensionieren. Werte vor 2001 oder nach dem Jahr 5138 werden vom Flag abgelehnt und von der Umgebungsvariable ignoriert. |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Welche der Regellisten des [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode)-Klassifikators, die die Control Plane mit einer Sitzung sendet, diese Sitzung erreichen dürfen: `all`, `no-allow` oder `none`. Unter [Regellisten des Auto-Modus](#auto-mode-rule-lists) erfahren Sie, was jeder Wert anwendet. Ein ungültiger Wert stoppt den Runner beim Start. Erfordert Claude Code v2.1.295 oder später. |

55| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Wie lange Sie warten, bis der Claude-Prozess nach einer Sitzung sauber beendet wird, bevor Sie ihn gewaltsam beenden. Erhöhen Sie den Wert, wenn die eigenen `SessionEnd` Hooks des Kindes mehr Zeit benötigen. |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Wie lange Sie warten, bis der Claude-Prozess nach einer Sitzung sauber beendet wird, bevor Sie ihn gewaltsam beenden. Erhöhen Sie den Wert, wenn die eigenen `SessionEnd` Hooks des Kindes mehr Zeit benötigen. |

56| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Geben Sie einen Session-Slot frei, wenn das Kind nicht signalisiert hat, dass es sich innerhalb von N Minuten nach dem Erzeugen initialisiert hat. Gelöscht durch das Init-Signal des Kindes auf dem [Activity-Kanal](/docs/de/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), nicht durch gewöhnliche Ausgabe, danach übernimmt `--release-idle-session-min`. `0` deaktiviert. |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Geben Sie einen Sitzungs-Slot frei, wenn das Kind nicht signalisiert hat, dass es sich innerhalb von N Minuten nach dem Erzeugen initialisiert hat. Das Klonen erfolgt vor dem Erzeugen, daher zählt die Klonzeit nicht mit. Gelöscht durch das Init-Signal des Kindes auf dem [Activity-Kanal](/docs/de/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), nicht durch gewöhnliche Ausgabe, danach übernimmt `--release-idle-session-min`. `0` deaktiviert. |

57| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | an | Seed persistierte Vertrauenswürdigkeit für die Repository-Pfade jeder Sitzung, sodass im Repo festgeschriebene `permissions.allow` und `additionalDirectories` berücksichtigt werden. Setzen Sie `false`, um im Repo festgeschriebene Berechtigungszuschüsse zu verwerfen und Zulassungsregeln stattdessen in der Host-Konfiguration `settings.json` zu konfigurieren; Repository-festgeschriebene `sandbox.*` Einstellungen gelten trotzdem, weshalb der [Repo-Settings-Schutz](/docs/de/self-hosted-environments-deploy#harden-your-deployment) sie unabhängig von diesem Flag scannt. |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | an | Seed persistierte Vertrauenswürdigkeit für die Repository-Pfade jeder Sitzung, sodass im Repo festgeschriebene `permissions.allow` und `additionalDirectories` berücksichtigt werden. Setzen Sie `false`, um im Repo festgeschriebene Berechtigungszuschüsse zu verwerfen und Zulassungsregeln stattdessen in der Host-Konfiguration `settings.json` zu konfigurieren; Repository-festgeschriebene `sandbox.*` Einstellungen gelten trotzdem, weshalb der [Repo-Settings-Schutz](/docs/de/self-hosted-environments-deploy#harden-your-deployment) sie unabhängig von diesem Flag scannt. |

58| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | aus | Klonen Sie über den [Anthropic Git-Proxy](/docs/de/self-hosted-environments-deploy#use-the-anthropic-git-proxy) anstatt über kundenverwaltete Git-Authentifizierung. Erfordert `--capacity 1` und Git 2.32 oder neuer; der Runner weigert sich, andernfalls zu starten. Ersetzt die Rewrite-Flags. |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | aus | Klonen Sie Repositorys auf github.com über den [Anthropic Git-Proxy](/docs/de/self-hosted-environments-deploy#use-the-anthropic-git-proxy) anstatt über kundenverwaltete Git-Authentifizierung. Erfordert `--capacity 1` und Git 2.32 oder neuer; der Runner weigert sich, andernfalls zu starten. Ersetzt die Rewrite-Flags. |

59 60 

60Die meisten Duration-Flags haben ein Maximum, das gewählt wurde, um jeden Timeout unter der 32-Bit-Timer-Obergrenze der Laufzeit von ungefähr 24,85 Tagen zu halten. Die `--*-min` Flags sind auf 10080 Minuten, 7 Tage begrenzt; `--drain-grace-sec` auf 604800 Sekunden, auch 7 Tage; und `--drain-wait-sec` auf 86400 Sekunden, 24 Stunden. `--session-stop-grace-sec` und `--post-session-hook-timeout-sec` sind unbegrenzt. Das Überschreiten einer Obergrenze verhält sich je nach Oberfläche unterschiedlich:61Die meisten Duration-Flags haben ein Maximum, das gewählt wurde, um jeden Timeout unter der 32-Bit-Timer-Obergrenze der Laufzeit von ungefähr 24,85 Tagen zu halten. Die `--*-min` Flags sind auf 10080 Minuten, 7 Tage begrenzt; `--drain-grace-sec` auf 604800 Sekunden, auch 7 Tage; und `--drain-wait-sec` auf 86400 Sekunden, 24 Stunden. `--session-stop-grace-sec` und `--post-session-hook-timeout-sec` sind unbegrenzt. Das Überschreiten einer Obergrenze verhält sich je nach Oberfläche unterschiedlich:

61 62 

62* **Flag**: Der Start schlägt mit einem Fehler fehl.63* **Flag**: Der Start schlägt mit einem Fehler fehl.

63* **Umgebungsvariable**: Der Runner begrenzt den Wert auf die Timer-Obergrenze, anstatt ihn abzulehnen.64* **Umgebungsvariable**: Der Runner begrenzt den Wert auf die Timer-Obergrenze, anstatt ihn abzulehnen.

64 65 

66<h3 id="auto-mode-rule-lists">

67 Regellisten des Auto-Modus

68</h3>

69 

70Mit `--server-auto-mode-lists` legen Sie fest, welche Klassifikatorregeln des [Auto-Modus](/docs/de/permission-modes#eliminate-prompts-with-auto-mode) von außerhalb des Runners die Sitzungen auf Ihren Runnern erreichen. Die Control Plane von Anthropic kann Regellisten mit einer Sitzung senden und den Runner auffordern, sie anzuwenden. Einige Einträge können Regeln sein, die ein Admin Ihrer Organisation geschrieben hat. Die Listen sind `environment`, `soft_deny` und `allow`:

71 

72* **`environment`**: Ein Eintrag kann den Klassifikator dazu bringen, sowohl mehr als auch weniger zuzulassen.

73* **`soft_deny`**: Ein Eintrag blockiert eine Aktion, es sei denn, der Benutzer hat ausdrücklich darum gebeten oder eine `allow`-Ausnahme greift.

74* **`allow`**: Die Ausnahmen zu `soft_deny`-Einträgen.

75 

76Der Wert des Flags bestimmt, welche Listen der Runner anwendet:

77 

78* **`no-allow`**: Der Standard. Wendet `environment` und `soft_deny` an und hält `allow` zurück. Ein `environment`-Eintrag kann den Klassifikator weiterhin dazu bringen, mehr zuzulassen, sodass der Standard nicht jede Lockerung ausschließt.

79* **`all`**: Wendet alle drei Listen an.

80* **`none`**: Wendet keine davon an. Wählen Sie `none`, um jede Lockerung durch diese Listen auszuschließen. Dabei entfallen auch die Einschränkungen von `soft_deny`.

81 

82Keine Runner-Einstellung veranlasst die Control Plane, den Runner zur Anwendung der Listen aufzufordern. Wenn sie nicht dazu auffordert, erhalten Sitzungen keine Liste, unabhängig davon, was Sie setzen. Um zu sehen, was geschehen ist, starten Sie den Runner mit `--log-level debug`. Für jede Sitzung protokolliert der Runner dann eine Zeile, die `the server asked this runner to apply` enthält, oder eine, die `the server did not ask this runner to apply the auto mode lists it sends` enthält.

83 

65<h2 id="orchestrator-cli-flags">84<h2 id="orchestrator-cli-flags">

66 Orchestrator-CLI-Flags85 Orchestrator-CLI-Flags

67</h2>86</h2>


72| :- | :- | :- |91| :- | :- | :- |

73| `--hook-concurrency <n>` | `4` | Maximale `spawn-runner` Hooks, die parallel laufen. Begrenzt auch, wie viele Spawn-Anfragen pro Abfrage beansprucht werden. |92| `--hook-concurrency <n>` | `4` | Maximale `spawn-runner` Hooks, die parallel laufen. Begrenzt auch, wie viele Spawn-Anfragen pro Abfrage beansprucht werden. |

74| `--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. |93| `--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. |

75| `--expected-spawn-seconds <sec>` | `120` | Erwartete p99-Bootzeit für erzeugte Runner, im servererzwungenen Bereich 10 bis 3600. Wird bei jeder Abfrage als Server-seitige Lease gesendet; wenn sich kein Runner registriert, bevor er verstreicht, wird die Sitzung mit einer frischen Bestellungs-ID erneut angeboten. Alle Replikas müssen diesen Wert teilen. |94| `--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. |

76| `--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. |95| `--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. |

77| `--debug-dir <path>` | nicht gesetzt | Schreiben Sie die Work-Order und Hook-Stderr jeder Spawn-Anfrage auf die Festplatte. Nur zum Debuggen; niemals in der Produktion setzen. |96| `--debug-dir <path>` | nicht gesetzt | Schreiben Sie die Work-Order und Hook-Stderr jeder Spawn-Anfrage auf die Festplatte. Nur zum Debuggen; niemals in der Produktion setzen. |

78 97 


108| `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. |127| `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. |

109| `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. |128| `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. |

110| `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. |129| `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. |

130| `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. |

111| `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. |131| `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. |

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

113| `CLAUDE_CODE_DISABLE_ARTIFACT` | nicht gesetzt | Wenn `1`, deaktivieren Sie das Artifact-Tool in Sitzungen unabhängig von der Admin-Einstellung der Organisation und löschen Sie die `*.frame.claudeusercontent.com` Egress-Anforderung |133| `CLAUDE_CODE_DISABLE_ARTIFACT` | nicht gesetzt | Wenn `1`, deaktivieren Sie das Artifact-Tool in Sitzungen unabhängig von der Admin-Einstellung der Organisation und löschen Sie die `*.frame.claudeusercontent.com` Egress-Anforderung |


178| `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`. |198| `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`. |

179| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Spawn-Anfragen, die jetzt beanspruchbar sind |199| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Spawn-Anfragen, die jetzt beanspruchbar sind |

180| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Spawn-Anfragen in Retry-Backoff nach einem wiederholbaren Hook-Fehler |200| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Spawn-Anfragen in Retry-Backoff nach einem wiederholbaren Hook-Fehler |

181| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Spawn-Anfragen, die blockiert sind, bis ein Owner sie von der Registerkarte **Aktivität** der Umgebung erneut versucht; Warnung, wenn über Null |201| `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. |

182| `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. |202| `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. |

183| `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. |203| `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. |

184| `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. |204| `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. |


273 for: 2m293 for: 2m

274 labels: {severity: critical}294 labels: {severity: critical}

275 annotations:295 annotations:

276 summary: "Orchestrator {{ $labels.pod }} kann die Anthropic-Kontrolleben nicht erreichen"296 summary: "Orchestrator {{ $labels.pod }} kann die Anthropic-Kontrollebene nicht erreichen"

277 - alert: ClaudeOrchestratorPollStale297 - alert: ClaudeOrchestratorPollStale

278 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90298 expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90

279 for: 2m299 for: 2m


285 for: 1m305 for: 1m

286 labels: {severity: critical}306 labels: {severity: critical}

287 annotations:307 annotations:

288 summary: "{{ $value }} Sitzungen unterbrochen — spawn-runner Hook ist wiederholt nicht wiederholbar; beheben Sie die Infrastruktur und versuchen Sie es erneut von der Registerkarte Aktivität"308 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"

289 - alert: ClaudeOrchestratorPollErrors309 - alert: ClaudeOrchestratorPollErrors

290 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0310 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

291 for: 2m311 for: 2m


320 340 

321Vor v2.1.260 beendete der Runner jede Sitzung, die ihr `--kill-session-after-min` Limit erreichte, und zählte sie in `sessions_interrupted_total`.341Vor v2.1.260 beendete der Runner jede Sitzung, die ihr `--kill-session-after-min` Limit erreichte, und zählte sie in `sessions_interrupted_total`.

322 342 

323Der [`post-session` Hook](/docs/de/self-hosted-environments-configuration#post-session) `CLAUDE_RUNNER_EXIT_REASON` klassifiziert saubere Übergaben unterschiedlich. Der Hook meldet eine Freigabe, ein Startup-Timeout und eine Server-Deassign als `interrupted`, da der Runner das Kind stoppte. Diese Zähler zeichnen die gleichen Ereignisse als `completed` auf, da der Slot sauber zurückgegeben wurde.343Der [`post-session` Hook](/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.

324 344 

325Wenn 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.345Wenn 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.

326 346 

Details

87 87 

88Die Dispatch-Flags `--environment` und `--ref` erfordern Claude Code v2.1.224 oder später auf dem Computer, auf dem das Skript ausgeführt wird, die gleiche Untergrenze wie der Runner selbst. Mit dem Hook an Ort und Stelle und einem auf diesem Host gestarteten Runner führt das Test-Skript folgende Schritte aus:88Die Dispatch-Flags `--environment` und `--ref` erfordern Claude Code v2.1.224 oder später auf dem Computer, auf dem das Skript ausgeführt wird, die gleiche Untergrenze wie der Runner selbst. Mit dem Hook an Ort und Stelle und einem auf diesem Host gestarteten Runner führt das Test-Skript folgende Schritte aus:

89 89 

901. Erstellt eine Sitzung in der Test-Umgebung mit `claude -p "<prompt>" --environment <environment-id> --output-format json`, ausgeführt aus einem Git-Checkout, damit die CLI das Repository aus dem `origin`-Remote automatisch erkennen kann. Das optionale `--ref <branch>` basiert auf dem Checkout der Sitzung auf einer benannten Referenz statt auf lokalem HEAD. Der Befehl erstellt die Sitzung, gibt eine Zeile JSON mit `session_id` aus und beendet sich, ohne auf Claudes Antwort zu warten.901. Erstellt eine Sitzung in der Test-Umgebung mit `claude -p "<prompt>" --environment <environment-id> --output-format json`. Führen Sie den Befehl aus einem Git-Checkout aus, damit die CLI das Repository aus dem `origin`-Remote automatisch erkennen kann. Das optionale `--ref <branch>` basiert den Checkout der Sitzung auf einer benannten Referenz statt auf dem lokalen HEAD. Der Befehl beendet sich, ohne auf Claudes Antwort zu warten. Die Ausgabe teilt Ihrem Skript das Ergebnis mit:

91 * **Sitzung erstellt**: eine Zeile JSON wie `{"ok":true,"session_id":"session_...","title":"...","url":"...","pool_id":"..."}`

92 * **Erstellen der Sitzung fehlgeschlagen**: die Zeile `{"ok":false,"error":"..."}`, und der Befehl beendet sich mit Status 1

93 * **Einige frühere Fehler**, etwa wenn Cloud-Sitzungen für Ihre Organisation nicht verfügbar sind oder ein Prompt fehlt: der Fehler auf stderr ohne JSON-Zeile, und der Befehl beendet sich mit Status 1

912. Wartet darauf, dass die Antwort in `$E2E_REPLY_DIR/<session_id>.txt` erscheint, geschrieben vom Stop-Hook auf dem Runner, sobald die Runde abgeschlossen ist.942. Wartet darauf, dass die Antwort in `$E2E_REPLY_DIR/<session_id>.txt` erscheint, geschrieben vom Stop-Hook auf dem Runner, sobald die Runde abgeschlossen ist.

923. Sendet eine Nachverfolgung mit `claude -p "<message>" --cloud <session_id> --output-format json` (siehe [Senden Sie eine Nachverfolgungsnachricht an eine laufende Sitzung](/docs/de/claude-code-on-the-web#send-follow-ups-from-the-cli)), die ein Benutzerereignis in der vorhandenen Sitzung bereitstellt und beendet sich.953. Sendet eine Nachverfolgung mit `claude -p "<message>" --cloud <session_id> --output-format json` (siehe [Senden Sie eine Nachverfolgungsnachricht an eine laufende Sitzung](/docs/de/claude-code-on-the-web#send-follow-ups-from-the-cli)), die ein Benutzerereignis in der vorhandenen Sitzung bereitstellt und beendet sich.

934. Wartet auf die Antwort der Nachverfolgung auf die gleiche Weise wie Schritt 2.964. Wartet auf die Antwort der Nachverfolgung auf die gleiche Weise wie Schritt 2.


104 Beispielskript107 Beispielskript

105</h2>108</h2>

106 109 

107Das folgende Skript führt die vollständige Schleife gegen `$CLAUDE_TEST_ENVIRONMENT_ID`, die `ccpool_...`-ID Ihrer Test-Umgebung, angezeigt im Detaildialog der Umgebung auf der Admin-Seite oder zurückgegeben durch den [create-environment-Aufruf](#create-a-dedicated-test-environment), aus und behauptet eine Sentinel-Phrase in jeder Antwort. Führen Sie es aus einem Git-Checkout des Repositorys aus, in dem die Sitzung arbeiten soll, nachdem Sie einen Runner auf diesem Host mit dem installierten Capture-Hook und exportiertem `E2E_REPLY_DIR` gestartet haben. Melden Sie sich zunächst auf dem Rechner, auf dem das Skript ausgeführt wird, mit einem claude.ai-Konto an, wie unter [Aus CI authentifizieren](#authenticate-from-ci) beschrieben. Ohne diese Anmeldung schlägt der erste Dispatch mit einem Fehler wie `Unable to get organization UUID for cloud session creation` fehl.110Das Beispielskript wird auf demselben Rechner wie der Test-Runner ausgeführt. Bereiten Sie diesen Rechner vor, bevor Sie es ausführen:

111 

112* **Repository-Checkout**: Führen Sie das Skript aus einem Git-Checkout des Repositorys aus, in dem die Sitzung arbeiten soll.

113* **Runner**: Starten Sie auf diesem Host einen Runner mit dem installierten Capture-Hook und exportiertem `E2E_REPLY_DIR`.

114* **Anmeldung**: Melden Sie sich auf dem Rechner, auf dem das Skript ausgeführt wird, mit einem claude.ai-Konto an, wie unter [Aus CI authentifizieren](#authenticate-from-ci) beschrieben.

115* **Umgebungs-ID**: Setzen Sie `CLAUDE_TEST_ENVIRONMENT_ID` auf die `ccpool_...`-ID Ihrer Test-Umgebung, die im Detaildialog der Umgebung auf der Admin-Seite angezeigt oder durch den [create-environment-Aufruf](#create-a-dedicated-test-environment) zurückgegeben wird.

116 

117Das folgende Skript führt die vollständige Schleife gegen `$CLAUDE_TEST_ENVIRONMENT_ID` aus und prüft in jeder Antwort auf eine Sentinel-Phrase.

108 118 

109```bash theme={null}119```bash theme={null}

110#!/usr/bin/env bash120#!/usr/bin/env bash


152TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"162TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"

153EXPECT1="ok: custom tools are reachable"163EXPECT1="ok: custom tools are reachable"

154create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \164create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \

155 --ref "$TEST_REPO_REF" --output-format json)165 --ref "$TEST_REPO_REF" --output-format json < /dev/null)

156echo "create: $create_json"166echo "create: $create_json"

157SESSION_ID=$(jq -er '.session_id' <<<"$create_json")167SESSION_ID=$(jq -er '.session_id' <<<"$create_json")

158 168 


163# 3. Post a follow-up via the CLI.173# 3. Post a follow-up via the CLI.

164TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"174TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"

165EXPECT2="ok: follow-up delivered"175EXPECT2="ok: follow-up delivered"

166followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json)176followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json < /dev/null)

167echo "followup: $followup_json"177echo "followup: $followup_json"

168jq -e '.ok == true' <<<"$followup_json" >/dev/null178jq -e '.ok == true' <<<"$followup_json" >/dev/null

169 179 

skills.md +1 −1

Details

235 235 

236Wenn ein Skill nur in `~/.claude/skills/` auf Ihrer Maschine vorhanden ist, meldet Claude Code, dass der Skill nicht gefunden wurde, wenn eine [Routine](/docs/de/routines) ihn aufruft, da jede Routine-Ausführung als frische Cloud-Sitzung startet. Um einen persönlichen Skill in diesen Sitzungen verfügbar zu machen:236Wenn ein Skill nur in `~/.claude/skills/` auf Ihrer Maschine vorhanden ist, meldet Claude Code, dass der Skill nicht gefunden wurde, wenn eine [Routine](/docs/de/routines) ihn aufruft, da jede Routine-Ausführung als frische Cloud-Sitzung startet. Um einen persönlichen Skill in diesen Sitzungen verfügbar zu machen:

237 237 

238* Für Cowork- und Cloud-Sitzungen aktivieren Sie den Skill für Ihr claude.ai-Konto.238* Für Cowork- und Cloud-Sitzungen aktivieren Sie den Skill für Ihr claude.ai-Konto. [Einige Sitzungen in einer selbst gehosteten Umgebung](/docs/de/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) laden die Skills Ihres Kontos nicht.

239* Für Cloud-Sitzungen können Sie den Skill stattdessen in `.claude/skills/` des Repositorys committen. Plugins, die in `.claude/settings.json` des Repositorys deklariert sind, und Plugins, die nur in Ihren Benutzereinstellungen aktiviert sind, [werden nicht in Cloud-Sitzungen geladen](/docs/de/cloud-environments#what-carries-over-from-your-setup).239* Für Cloud-Sitzungen können Sie den Skill stattdessen in `.claude/skills/` des Repositorys committen. Plugins, die in `.claude/settings.json` des Repositorys deklariert sind, und Plugins, die nur in Ihren Benutzereinstellungen aktiviert sind, [werden nicht in Cloud-Sitzungen geladen](/docs/de/cloud-environments#what-carries-over-from-your-setup).

240 240 

241[Desktop-geplante Aufgaben](/docs/de/desktop-scheduled-tasks) werden lokal auf Ihrer Maschine ausgeführt, daher laden sie `~/.claude/skills/`.241[Desktop-geplante Aufgaben](/docs/de/desktop-scheduled-tasks) werden lokal auf Ihrer Maschine ausgeführt, daher laden sie `~/.claude/skills/`.

vs-code.md +1 −1

Details

479 479 

480Claude öffnet neue Tabs für Browser-Aufgaben und teilt den Anmeldestatus Ihres Browsers, sodass es auf jede Website zugreifen kann, bei der Sie bereits angemeldet sind.480Claude öffnet neue Tabs für Browser-Aufgaben und teilt den Anmeldestatus Ihres Browsers, sodass es auf jede Website zugreifen kann, bei der Sie bereits angemeldet sind.

481 481 

482Wie sich jede Sitzung beim Start mit Ihrem Browser verbindet, ohne dass Sie `@browser` eingeben müssen, erfahren Sie unter [Chrome standardmäßig aktivieren](/docs/de/chrome#enable-chrome-by-default). Wann Claude Code in einer so verbundenen Sitzung vor einer Browser-Aktion bei Ihnen nachfragt, erfahren Sie unter [Berechtigungsabfragen in VS Code-Sitzungen](/docs/de/chrome#permission-prompts-in-vs-code-sessions).482Wie sich jede Sitzung beim Start mit Ihrem Browser verbindet, ohne dass Sie `@browser` eingeben müssen, erfahren Sie unter [Chrome standardmäßig aktivieren](/docs/de/chrome#enable-chrome-by-default). Wann Claude Code vor einer Browser-Aktion bei Ihnen nachfragt, erfahren Sie unter [Berechtigungsabfragen in VS Code-Sitzungen](/docs/de/chrome#permission-prompts-in-vs-code-sessions).

483 483 

484Anweisungen zur Einrichtung, die vollständige Liste der Funktionen und Fehlerbehebung finden Sie unter [Claude Code mit Chrome verwenden](/docs/de/chrome).484Anweisungen zur Einrichtung, die vollständige Liste der Funktionen und Fehlerbehebung finden Sie unter [Claude Code mit Chrome verwenden](/docs/de/chrome).

485 485