SpyBara
Go Premium

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

28 files changed +573 −149. View all changes and history on the product overview
2026
Sat 10 21:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

124 124 

125Sans les messages partiels activés, vous recevez tous les types de messages sauf `StreamEvent`. Les types courants incluent `SystemMessage` (initialisation de session), `AssistantMessage` (blocs de contenu complets), `ResultMessage` (résultat final), et un message de limite compact indiquant quand l'historique de conversation a été compacté (`SDKCompactBoundaryMessage` en TypeScript ; `SystemMessage` avec le sous-type `"compact_boundary"` en Python).125Sans les messages partiels activés, vous recevez tous les types de messages sauf `StreamEvent`. Les types courants incluent `SystemMessage` (initialisation de session), `AssistantMessage` (blocs de contenu complets), `ResultMessage` (résultat final), et un message de limite compact indiquant quand l'historique de conversation a été compacté (`SDKCompactBoundaryMessage` en TypeScript ; `SystemMessage` avec le sous-type `"compact_boundary"` en Python).

126 126 

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

128 Gérer un flux interrompu

129</h3>

130 

131Si un flux est interrompu au milieu d'un message, par exemple lorsque vous interrompez le tour ou que la connexion est coupée, vous recevez tout de même le `message_stop` de ce message avant la fin du tour. Un bloc de texte ou de réflexion interrompu reçoit également son `content_block_stop`. Ce n'est pas le cas d'un appel d'outil interrompu : si `message_stop` arrive alors que le bloc d'un appel d'outil est encore ouvert, considérez l'entrée de cet appel comme incomplète.

132 

133Avant Claude Code v2.1.290, un flux interrompu pouvait terminer le tour sans `message_stop`, de sorte qu'une réponse que vous affichez à partir des événements du flux pouvait rester affichée comme en cours. Le SDK Agent TypeScript intègre Claude Code v2.1.290 ou ultérieur à partir de la v0.3.290, et le SDK Agent Python à partir de la v0.2.164. Si une réponse reste affichée comme en cours après la fin du tour, mettez à jour le SDK.

134 

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

128 Diffuser les appels d'outils136 Diffuser les appels d'outils

129</h2>137</h2>

Details

1588 1588 

1589Associez les messages d'un sous-agent à ses événements de tâche via `agent_id` plutôt qu'en appariant le `parent_tool_use_id` d'un message au `tool_use_id` d'un événement de tâche. Lorsqu'un appel d'outil reprend le sous-agent, les événements de tâche portent le `tool_use_id` de cet appel, tandis que les messages conservent le `parent_tool_use_id` de l'appel d'outil qui a démarré le sous-agent à l'origine, de sorte que les deux ne correspondent plus.1589Associez les messages d'un sous-agent à ses événements de tâche via `agent_id` plutôt qu'en appariant le `parent_tool_use_id` d'un message au `tool_use_id` d'un événement de tâche. Lorsqu'un appel d'outil reprend le sous-agent, les événements de tâche portent le `tool_use_id` de cet appel, tandis que les messages conservent le `parent_tool_use_id` de l'appel d'outil qui a démarré le sous-agent à l'origine, de sorte que les deux ne correspondent plus.

1590 1590 

1591Claude Code définit `user_message_uuid` et `user_message_uuids` sur le premier message de l'assistant du tour, selon les conditions dans [`user_message_uuid`](#user_message_uuid). Quand Claude Code réexécute un tour qu'un redémarrage a interrompu, les messages d'assistant de la réexécution qui portent ces champs portent aussi [`resume_reason`](#resume_reason).1591Claude Code définit `user_message_uuid` et `user_message_uuids` sur le premier message de l'assistant du tour, dans les conditions décrites dans [`user_message_uuid`](#user_message_uuid). Lorsque le tour poursuit un tour qu'un redémarrage a interrompu, les messages de l'assistant qui portent ces champs portent également [`resume_reason`](#resume_reason).

1592 1592 

1593`timestamp` est l'heure ISO 8601 à laquelle le contenu du message a fini de générer sur le processus qui l'a produit. La valeur provient de l'horloge de cette machine, donc utilisez-la uniquement pour l'affichage et ne triez pas les messages par elle. Un tour API peut produire plusieurs messages d'assistant qui partagent un `message.id`, chacun avec son propre `timestamp`. Quand le champ est absent, revenez à l'heure à laquelle vous avez reçu le message.1593`timestamp` est l'heure ISO 8601 à laquelle le contenu du message a fini de générer sur le processus qui l'a produit. La valeur provient de l'horloge de cette machine, donc utilisez-la uniquement pour l'affichage et ne triez pas les messages par elle. Un tour API peut produire plusieurs messages d'assistant qui partagent un `message.id`, chacun avec son propre `timestamp`. Quand le champ est absent, revenez à l'heure à laquelle vous avez reçu le message.

1594 1594 


1631 1631 

1632Définissez `inline_pastes` pour indiquer à Claude Code quelles parties de `message.content` l'utilisateur a collées plutôt que tapées, avec une chaîne par collage. Le texte du prompt reste là où l'utilisateur l'a placé. Claude Code peut encadrer chaque collage listé de balises `<pasted_content>` à l'endroit où il se trouve, afin que Claude puisse distinguer le contenu collé des propres mots de l'utilisateur. Seuls les collages situés dans le dernier bloc de texte du prompt sont encadrés. Nécessite TypeScript Agent SDK v0.3.280 ou version ultérieure.1632Définissez `inline_pastes` pour indiquer à Claude Code quelles parties de `message.content` l'utilisateur a collées plutôt que tapées, avec une chaîne par collage. Le texte du prompt reste là où l'utilisateur l'a placé. Claude Code peut encadrer chaque collage listé de balises `<pasted_content>` à l'endroit où il se trouve, afin que Claude puisse distinguer le contenu collé des propres mots de l'utilisateur. Seuls les collages situés dans le dernier bloc de texte du prompt sont encadrés. Nécessite TypeScript Agent SDK v0.3.280 ou version ultérieure.

1633 1633 

1634Chaque champ de collage a une limite de taille :

1635 

1636* `pasted_content` : si les entrées et les blocs de contenu qu'elles contiennent dépassent 1 000 au total, Claude Code ignore l'ensemble du champ.

1637* `inline_pastes` : Claude Code utilise les 100 premières entrées non vides et ignore le reste.

1638 

1634Définissez `shouldQuery`, `client_composed` ou `priority` pour modifier la façon dont Claude Code traite un message que vous envoyez :1639Définissez `shouldQuery`, `client_composed` ou `priority` pour modifier la façon dont Claude Code traite un message que vous envoyez :

1635 1640 

1636* `shouldQuery` : définissez-le à `false` pour ajouter le message à la transcription sans déclencher un tour d'assistant. Le message est conservé et fusionné dans le prochain message utilisateur qui déclenche un tour. Utilisez ceci pour injecter du contexte, comme la sortie d'une commande que vous avez exécutée hors bande, sans dépenser un appel de modèle pour cela.1641* `shouldQuery` : définissez-le à `false` pour ajouter le message à la transcription sans déclencher un tour d'assistant. Le message est conservé et fusionné dans le prochain message utilisateur qui déclenche un tour. Utilisez ceci pour injecter du contexte, comme la sortie d'une commande que vous avez exécutée hors bande, sans dépenser un appel de modèle pour cela.


1775* `ttft_stream_ms` : temps en millisecondes jusqu'au premier événement de flux `message_start`, quand le flux de réponse s'ouvre. Inférieur à `ttft_ms` ; l'écart entre les deux est le temps passé à diffuser en streaming le premier message. Présent sur le bras de succès uniquement.1780* `ttft_stream_ms` : temps en millisecondes jusqu'au premier événement de flux `message_start`, quand le flux de réponse s'ouvre. Inférieur à `ttft_ms` ; l'écart entre les deux est le temps passé à diffuser en streaming le premier message. Présent sur le bras de succès uniquement.

1776* `user_message_uuid` : l'`uuid` du message que vous avez envoyé auquel ce tour a répondu. Voir [`user_message_uuid`](#user_message_uuid) pour savoir quels résultats le portent.1781* `user_message_uuid` : l'`uuid` du message que vous avez envoyé auquel ce tour a répondu. Voir [`user_message_uuid`](#user_message_uuid) pour savoir quels résultats le portent.

1777* `user_message_uuids` : les `uuid`s de chaque message que vous avez envoyé auquel Claude Code a répondu dans ce tour. Voir [`user_message_uuids`](#user_message_uuids).1782* `user_message_uuids` : les `uuid`s de chaque message que vous avez envoyé auquel Claude Code a répondu dans ce tour. Voir [`user_message_uuids`](#user_message_uuids).

1778* `resume_reason` : la raison pour laquelle Claude Code a réexécuté ce tour après qu'un redémarrage l'a interrompu. Présent sur les deux branches. Consultez [`resume_reason`](#resume_reason).1783* `resume_reason` : la raison pour laquelle ce tour poursuit un tour qu'un redémarrage a interrompu. Présent dans les deux branches. Consultez [`resume_reason`](#resume_reason).

1779* `local_command` : le nom de la commande que le tour a envoyée, sur le résultat de succès d'un tour qu'une commande a complété sans entrer dans la boucle d'agent, comme `/compact`. Le nom est converti en lettres minuscules et traits de soulignement, donc `/reload-plugins` rapporte `reload_plugins`. Une commande qu'un serveur MCP fournit, et le `/mcp` intégré, rapportent `mcp`. Une commande que vous avez définie vous-même rapporte `custom`. Les arguments ne sont jamais inclus. Absent sur chaque tour qui est entré dans la boucle d'agent et sur les envois qui n'ont exécuté aucune commande. Nécessite Agent SDK v0.3.268 ou ultérieur.1784* `local_command` : le nom de la commande que le tour a envoyée, sur le résultat de succès d'un tour qu'une commande a complété sans entrer dans la boucle d'agent, comme `/compact`. Le nom est converti en lettres minuscules et traits de soulignement, donc `/reload-plugins` rapporte `reload_plugins`. Une commande qu'un serveur MCP fournit, et le `/mcp` intégré, rapportent `mcp`. Une commande que vous avez définie vous-même rapporte `custom`. Les arguments ne sont jamais inclus. Absent sur chaque tour qui est entré dans la boucle d'agent et sur les envois qui n'ont exécuté aucune commande. Nécessite Agent SDK v0.3.268 ou ultérieur.

1780* `request_sent_wall_ms` : millisecondes d'époque auxquelles Claude Code a envoyé la requête API, pour les jointures avec les horodatages côté serveur. Présent uniquement avec [`user_message_uuid`](#user_message_uuid), sur un résultat de succès avec `is_error` false dont le tour a envoyé une requête API.1785* `request_sent_wall_ms` : millisecondes d'époque auxquelles Claude Code a envoyé la requête API, pour les jointures avec les horodatages côté serveur. Présent uniquement avec [`user_message_uuid`](#user_message_uuid), sur un résultat de succès avec `is_error` false dont le tour a envoyé une requête API.

1781* `first_content_frame_ms` : temps en millisecondes jusqu'au premier événement de flux `content_block_start` ou `content_block_delta`, en comptant les blocs de réflexion comme du contenu. Présent sur le bras de succès uniquement, quand `is_error` est false. Nécessite Agent SDK v0.3.260 ou ultérieur.1786* `first_content_frame_ms` : temps en millisecondes jusqu'au premier événement de flux `content_block_start` ou `content_block_delta`, en comptant les blocs de réflexion comme du contenu. Présent sur le bras de succès uniquement, quand `is_error` est false. Nécessite Agent SDK v0.3.260 ou ultérieur.


1825 1830 

1826* **Un message régulier que vous avez envoyé**, c'est-à-dire sans `isSynthetic: true` : le tour répond à ce message pour toute sa durée. Quand vous envoyez plusieurs messages rapprochés, Claude Code peut les fusionner en un seul tour, et le champ porte alors uniquement l'`uuid` du dernier message. Pour faire correspondre la réponse à l'un des messages fusionnés, utilisez [`user_message_uuids`](#user_message_uuids).1831* **Un message régulier que vous avez envoyé**, c'est-à-dire sans `isSynthetic: true` : le tour répond à ce message pour toute sa durée. Quand vous envoyez plusieurs messages rapprochés, Claude Code peut les fusionner en un seul tour, et le champ porte alors uniquement l'`uuid` du dernier message. Pour faire correspondre la réponse à l'un des messages fusionnés, utilisez [`user_message_uuids`](#user_message_uuids).

1827* **Un message que vous avez envoyé avec `isSynthetic: true`** : le tour répond d'abord à ce message. Si Claude Code prend en compte un message régulier de votre part entre les appels d'outils, le tour répond à ce message à partir de là. Renvoyer l'`uuid` d'un message synthétique nécessite Agent SDK v0.3.265 ou ultérieur ; les versions antérieures ne renvoient rien sur les tours synthétiques.1832* **Un message que vous avez envoyé avec `isSynthetic: true`** : le tour répond d'abord à ce message. Si Claude Code prend en compte un message régulier de votre part entre les appels d'outils, le tour répond à ce message à partir de là. Renvoyer l'`uuid` d'un message synthétique nécessite Agent SDK v0.3.265 ou ultérieur ; les versions antérieures ne renvoient rien sur les tours synthétiques.

1828* **Le prompt que Claude Code génère pour réexécuter un tour interrompu sous [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/fr/env-vars)** : quand le dernier prompt du tour interrompu est un message régulier que vous avez envoyé, qu'il ait ouvert le tour ou que Claude Code l'ait pris en compte pendant le tour, la réexécution répond d'abord à ce message. [`resume_reason`](#resume_reason) permet de distinguer les cadres de la réexécution de ceux de la tentative interrompue. Quand le dernier prompt n'est pas un message régulier de votre part, la réexécution ne répond d'abord à aucun message de votre part. Si Claude Code prend en compte un message régulier de votre part entre les appels d'outils, le tour répond à ce message à partir de là. Renvoyer le prompt du tour interrompu nécessite Agent SDK v0.3.268 ou ultérieur.1833* **Le prompt que Claude Code génère pour poursuivre un tour interrompu sous [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/fr/env-vars)** : lorsque le dernier prompt du tour interrompu est un message ordinaire que vous avez envoyé, qu'il ait ouvert le tour ou que Claude Code l'ait pris en compte pendant le tour, le tour poursuivi répond d'abord à ce message. [`resume_reason`](#resume_reason) distingue les trames du tour poursuivi de celles de la tentative interrompue. Lorsque le dernier prompt n'est pas l'un de vos messages ordinaires, le tour poursuivi ne répond d'abord à aucun de vos messages. Si Claude Code prend en compte un de vos messages ordinaires entre deux appels d'outils, le tour répond dès lors au message pris en compte. Le renvoi du prompt du tour interrompu nécessite le SDK Agent v0.3.268 ou ultérieur.

1829* **Tout autre prompt que Claude Code a généré lui-même** : le tour ne répond d'abord à aucun message de votre part et ses cadres ne portent aucun écho. Si Claude Code prend en compte un message régulier de votre part entre les appels d'outils, le tour répond à ce message à partir de là. L'écho de prise en compte nécessite Agent SDK v0.3.265 ou ultérieur ; les versions antérieures ne renvoient rien sur ces tours.1834* **Tout autre prompt que Claude Code a généré lui-même** : le tour ne répond d'abord à aucun message de votre part et ses cadres ne portent aucun écho. Si Claude Code prend en compte un message régulier de votre part entre les appels d'outils, le tour répond à ce message à partir de là. L'écho de prise en compte nécessite Agent SDK v0.3.265 ou ultérieur ; les versions antérieures ne renvoient rien sur ces tours.

1830 1835 

1831Claude Code renvoie l'`uuid` du message auquel il répond sur trois types de cadre :1836Claude Code renvoie l'`uuid` du message auquel il répond sur trois types de cadre :


1857 `resume_reason`1862 `resume_reason`

1858</h4>1863</h4>

1859 1864 

1860Pourquoi Claude Code a réexécuté ce tour après un redémarrage. Claude Code définit ce champ sur un tour qu'il a réexécuté sous [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/fr/env-vars), pour que vous puissiez distinguer la réponse et le résultat de la réexécution de ceux de la tentative interrompue. Nécessite Agent SDK v0.3.268 ou ultérieur.1865La raison pour laquelle ce tour poursuit un tour qu'un redémarrage a interrompu. Claude Code définit ce champ sur un tour qui poursuit un tour interrompu sous [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/fr/env-vars), afin que vous puissiez distinguer la réponse et le résultat du tour poursuivi de ceux de la tentative interrompue. Nécessite le SDK Agent v0.3.268 ou ultérieur.

1861 1866 

1862Claude Code définit le champ sur deux types de cadre :1867Claude Code définit le champ sur deux types de cadre :

1863 1868 

1864* **Le résultat de la réexécution** : sur les bras de succès et d'erreur, que le résultat porte ou non `user_message_uuid`.1869* **Le résultat du tour poursuivi** : dans la branche de succès comme dans la branche d'erreur, que le résultat porte ou non `user_message_uuid`.

1865* **Les cadres de réponse de la réexécution** : ceux qui portent [`user_message_uuid`](#user_message_uuid).1870* **Les trames de réponse du tour poursuivi** : celles qui portent [`user_message_uuid`](#user_message_uuid).

1866 1871 

1867La valeur est un court identifiant en minuscules indiquant pourquoi le tour a été réexécuté, comme `interrupted_turn`.1872La valeur est un court token en minuscules, tel que `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 définit `user_message_uuid` et `user_message_uuids` sur le premier événement de flux non-ping du tour, et à nouveau quand le message auquel le tour répond change, selon les conditions dans [`user_message_uuid`](#user_message_uuid). Quand Claude Code réexécute un tour qu'un redémarrage a interrompu, les événements de flux de la réexécution qui portent ces champs portent aussi [`resume_reason`](#resume_reason).2037Claude Code définit `user_message_uuid` et `user_message_uuids` sur le premier événement de flux du tour qui n'est pas un ping, puis de nouveau lorsque le message auquel le tour répond change, dans les conditions décrites dans [`user_message_uuid`](#user_message_uuid). Lorsque le tour poursuit un tour qu'un redémarrage a interrompu, les événements de flux qui portent ces champs portent également [`resume_reason`](#resume_reason).

2033 2038 

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

2035 `SDKCompactBoundaryMessage`2040 `SDKCompactBoundaryMessage`


3560| - | - | - |3565| - | - | - |

3561| `script` | `string` | Script de workflow en ligne. Doit commencer par `export const meta = { name, description }` comme littéral, suivi du corps du script utilisant `agent()`, `parallel()`, `pipeline()` et `phase()`. Un tableau `phases` optionnel dans `meta` regroupe les agents sous des étapes nommées dans la vue de progression |3566| `script` | `string` | Script de workflow en ligne. Doit commencer par `export const meta = { name, description }` comme littéral, suivi du corps du script utilisant `agent()`, `parallel()`, `pipeline()` et `phase()`. Un tableau `phases` optionnel dans `meta` regroupe les agents sous des étapes nommées dans la vue de progression |

3562| `name` | `string` | Nom d'un workflow intégré ou d'un workflow enregistré dans `.claude/workflows/`. Résolu en script |3567| `name` | `string` | Nom d'un workflow intégré ou d'un workflow enregistré dans `.claude/workflows/`. Résolu en script |

3563| `scriptPath` | `string` | Chemin vers un fichier de script de workflow sur le disque. A priorité sur `script` et `name`. Claude Code persiste chaque invocation du script et retourne le chemin dans le résultat, afin que vous puissiez éditer ce fichier et réinvoquer avec le même `scriptPath` pour itérer |3568| `scriptPath` | `string` | Chemin vers un fichier de script de workflow sur le disque, tel que le `scriptPath` retourné par une exécution précédente. A priorité sur `script` et `name`. Claude Code rejette `scriptPath` avec une erreur lorsque les outils de la session n'incluent pas `Read` |

3564| `args` | `unknown` | Valeur d'entrée exposée au script en tant que `args` global, pour les workflows nommés paramétrés tels qu'une question de recherche ou une liste de chemins de fichiers. Passez les tableaux et les objets comme des valeurs JSON réelles, pas comme une chaîne codée en JSON |3569| `args` | `unknown` | Valeur d'entrée exposée au script en tant que `args` global, pour les workflows nommés paramétrés tels qu'une question de recherche ou une liste de chemins de fichiers. Passez les tableaux et les objets comme des valeurs JSON réelles, pas comme une chaîne codée en JSON |

3565| `resumeFromRunId` | `string` | ID d'exécution d'une invocation `Workflow` antérieure à reprendre. Les appels `agent()` complétés avec des entrées inchangées retournent généralement les résultats en cache ; le reste s'exécute en direct. [Reprendre après une pause](/docs/fr/workflows#resume-after-a-pause) couvre les appels complétés qui se réexécutent. Même session uniquement |3570| `resumeFromRunId` | `string` | ID d'exécution d'une invocation `Workflow` antérieure à reprendre. Les appels `agent()` complétés avec des entrées inchangées retournent généralement les résultats en cache ; le reste s'exécute en direct. [Reprendre après une pause](/docs/fr/workflows#resume-after-a-pause) couvre les appels complétés qui se réexécutent. Même session uniquement |

3566| `title` | `string` | Ignoré ; le bloc `meta` du script définit le titre |3571| `title` | `string` | Ignoré ; le bloc `meta` du script définit le titre |

agent-view.md +2 −0

Details

256 256 

257Les sessions attachées s'affichent toujours en [mode plein écran](/docs/fr/fullscreen), quel que soit votre paramètre `tui`, car une session en arrière-plan n'a pas d'historique de défilement de terminal auquel ajouter du contenu. Faites défiler avec `PgUp`, `PgDn` ou la molette de la souris, et appuyez sur `Ctrl+O` pour le mode transcription. Le défilement natif de votre terminal et le mode copie tmux affichent uniquement la fenêtre d'affichage actuelle, comme lorsque vous exécutez n'importe quelle application plein écran.257Les sessions attachées s'affichent toujours en [mode plein écran](/docs/fr/fullscreen), quel que soit votre paramètre `tui`, car une session en arrière-plan n'a pas d'historique de défilement de terminal auquel ajouter du contenu. Faites défiler avec `PgUp`, `PgDn` ou la molette de la souris, et appuyez sur `Ctrl+O` pour le mode transcription. Le défilement natif de votre terminal et le mode copie tmux affichent uniquement la fenêtre d'affichage actuelle, comme lorsque vous exécutez n'importe quelle application plein écran.

258 258 

259Une session attachée ne [signale pas son état à votre terminal](/docs/fr/terminal-config#see-session-status-in-your-terminal).

260 

259Appuyez sur `←` sur un prompt vide, ou exécutez `/exit`, pour vous détacher et revenir à la vue agent, que vous ayez ouvert la session à partir de la vue agent ou avec `claude attach <id>` à partir de votre shell.261Appuyez sur `←` sur un prompt vide, ou exécutez `/exit`, pour vous détacher et revenir à la vue agent, que vous ayez ouvert la session à partir de la vue agent ou avec `claude attach <id>` à partir de votre shell.

260 262 

261`←` détache également pendant que la [superposition `/btw`](/docs/fr/interactive-mode#side-questions-with-%2Fbtw) est ouverte. Nécessite Claude Code v2.1.257 ou ultérieur. Une question latérale qui est encore en train de répondre continue de s'exécuter pendant votre absence. La prochaine fois que vous vous attachez, la superposition se rouvre avec elle, ou avec sa réponse.263`←` détache également pendant que la [superposition `/btw`](/docs/fr/interactive-mode#side-questions-with-%2Fbtw) est ouverte. Nécessite Claude Code v2.1.257 ou ultérieur. Une question latérale qui est encore en train de répondre continue de s'exécuter pendant votre absence. La prochaine fois que vous vous attachez, la superposition se rouvre avec elle, ou avec sa réponse.

Details

114 Les messages envoyés en cours de tour ne sont pas checkpointés114 Les messages envoyés en cours de tour ne sont pas checkpointés

115</h3>115</h3>

116 116 

117Lorsqu'un message que vous [mettez en file d'attente pendant que Claude travaille](/docs/fr/interactive-mode#queue-messages-while-claude-works) atteint Claude au cours du tour en cours, il rejoint ce tour au lieu d'en commencer un nouveau. Le message apparaît dans la conversation, mais Claude Code ne crée pas de checkpoint pour lui. Un message en file d'attente que Claude Code envoie dans le cadre d'un nouveau tour reçoit un checkpoint comme d'habitude, y compris lorsque plusieurs messages en file d'attente [partagent ce tour](/docs/fr/interactive-mode#when-claude-code-sends-what-you-queued).117Dans le menu de rembobinage, un message que vous [avez saisi pendant que Claude travaillait encore](/docs/fr/interactive-mode#queue-messages-while-claude-works) peut être marqué **No code restore**. Claude a lu ce message avant la fin de son tour. [Les checkpoints sont créés pour les prompts qui démarrent un tour](#how-checkpoints-work), ce message n'a donc pas de checkpoint propre. Les modifications que Claude a apportées après l'avoir lu sont rattachées au prompt qui a démarré le tour.

118 118 

119Pour annuler les modifications que Claude a apportées après un tel message, rembobinez jusqu'au prompt qui a démarré le tour. Cela rembobine le tour entier, y compris le travail que Claude a effectué avant l'arrivée de votre message.119Vous n'avez rien à faire concernant le message lui-même. Pour annuler les modifications de fichiers de cette partie de la session, sélectionnez le prompt qui a démarré le tour et choisissez **Restore code** ou **Restore code and conversation**. Cela annule les modifications de fichiers de Claude sur l'ensemble du tour, y compris celles effectuées avant l'arrivée de votre message. Sélectionner le message marqué propose toujours **Restore conversation**, qui rembobine la conversation jusqu'à ce message et laisse vos fichiers tels quels.

120 120 

121<h3 id="symlinked-and-hard-linked-paths-not-restored">121<h3 id="symlinked-and-hard-linked-paths-not-restored">

122 Les chemins symlinked et hard-linked ne sont pas restaurés122 Les chemins symlinked et hard-linked ne sont pas restaurés

chrome.md +3 −4

Details

129 Demandes de permission dans les sessions VS Code129 Demandes de permission dans les sessions VS Code

130</h3>130</h3>

131 131 

132Dans une session VS Code, le fait que Claude Code vous demande votre accord avant une action du navigateur dépend de la façon dont la session s'est connectée à votre navigateur :132Dans une session VS Code, lorsque Claude Code vous demande votre accord avant une action du navigateur, la demande apparaît sous forme de carte dans le panneau de chat. Lorsque l'action cible un site que vous n'avez pas autorisé, la carte propose également d'autoriser ce site.

133 133 

134* **Vous avez tapé `@browser`** : l'extension approuve chaque action du navigateur pour laquelle Claude Code vous aurait autrement sollicité.134Dans une session qui s'est connectée à votre navigateur au démarrage parce que le paramètre [Enabled by default](#enable-chrome-by-default) est activé, Claude Code vous demande votre accord avant les actions du navigateur sur un site que vous n'avez pas autorisé, dans les modes de permission Manual, Edit automatically, Auto et Bypass permissions. Dans les modes de permission Auto et Bypass permissions, cela s'applique jusqu'à ce que vous tapiez `@browser` dans cette session.

135* **Le paramètre [Enabled by default](#enable-chrome-by-default) l'a connectée au démarrage** : Claude Code vous demande votre accord avant les actions du navigateur sur un site que vous n'avez pas autorisé, dans les modes de permission Manual, Edit automatically, Auto et Bypass permissions, jusqu'à ce que vous tapiez `@browser` dans cette session.

136 135 

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

138 Outils du navigateur en mode plan137 Outils du navigateur en mode plan

139</h3>138</h3>

140 139 

141En [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode), une demande de permission apparaît avant que Claude n'enregistre un GIF, n'ouvre un nouvel onglet ou n'exécute un raccourci, sauf dans une session VS Code où vous avez tapé [`@browser`](#permission-prompts-in-vs-code-sessions). Dans une session CLI interactive, si le [mode de contournement des permissions est disponible](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) et que la [récupération des feature flags](/docs/fr/env-vars#features-that-need-feature-flag-fetching) est désactivée, ces appels s'exécutent sans demande.140En [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode), une demande de permission apparaît avant que Claude n'enregistre un GIF, n'ouvre un nouvel onglet ou n'exécute un raccourci. Dans une session CLI interactive, si le [mode de contournement des permissions est disponible](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) et que la [récupération des feature flags](/docs/fr/env-vars#features-that-need-feature-flag-fetching) est désactivée, ces appels s'exécutent sans demande.

142 141 

143Un appel `tabs_context_mcp` demande également une invite lorsqu'il définit `createIfEmpty`, et il en va de même pour un appel `browser_batch` qui inclut l'une de ces actions.142Un appel `tabs_context_mcp` demande également une invite lorsqu'il définit `createIfEmpty`, et il en va de même pour un appel `browser_batch` qui inclut l'une de ces actions.

144 143 

Details

263 Connecter les développeurs263 Connecter les développeurs

264</h2>264</h2>

265 265 

266Les développeurs se connectent à partir de leurs propres ordinateurs portables avec une seule connexion au navigateur, en utilisant leur compte professionnel d'entreprise. Ils n'ont pas besoin d'un compte claude.ai, d'une clé API ou d'un abonnement, car les requêtes au modèle passent par la passerelle en utilisant l'identifiant en amont de l'organisation. La connexion est pilotée par les [paramètres gérés côté client](/docs/fr/claude-apps-gateway-config#client-side-managed-settings) que vous poussez via MDM, il n'y a donc pas de configuration manuelle du côté du développeur ; cette section couvre ce que l'administrateur configure.266Les développeurs se connectent à partir de leurs propres ordinateurs portables avec une seule connexion au navigateur, en utilisant leur compte professionnel d'entreprise. Ils n'ont pas besoin d'un compte claude.ai, d'une clé API ou d'un abonnement, car les requêtes au modèle passent par la passerelle en utilisant l'identifiant en amont de l'organisation. La connexion est pilotée par les [paramètres gérés côté client](/docs/fr/claude-apps-gateway-config#client-side-managed-settings) que vous poussez via MDM, et cette section couvre ce que l'administrateur configure.

267 267 

268L'interface de ligne de commande calcule l'empreinte du certificat feuille TLS de la passerelle à la première connexion et l'épingle par nom d'hôte. Elle vérifie cette épingle à nouveau lors de la connexion, lors des rafraîchissements de session silencieux et lors des récupérations de paramètres gérés, tandis que les requêtes d'inférence utilisent la validation TLS standard sans l'épingle. Les requêtes acheminées via un proxy HTTPS ignorent la vérification de l'épingle, donc ajoutez l'hôte de la passerelle à `NO_PROXY` pour les garder directes.268L'interface de ligne de commande calcule l'empreinte du certificat feuille TLS de la passerelle à la première connexion et l'épingle par nom d'hôte. Elle vérifie cette épingle à nouveau lors de la connexion, lors des rafraîchissements de session silencieux et lors des récupérations de paramètres gérés, tandis que les requêtes d'inférence utilisent la validation TLS standard sans l'épingle. Les requêtes acheminées via un proxy HTTPS ignorent la vérification de l'épingle, donc ajoutez l'hôte de la passerelle à `NO_PROXY` pour les garder directes.

269 269 


287 Définir l'URL de la passerelle287 Définir l'URL de la passerelle

288</h3>288</h3>

289 289 

290Trois clés vont dans le fichier de [paramètres gérés](/docs/fr/managed-settings#delivery-mechanisms) par système d'exploitation que vous déployez via MDM ou directement sur le disque. `forceLoginMethod` et `forceLoginGatewayUrl` ouvrent `/login` directement sur l'écran **Cloud gateway** avec l'URL remplie, et `parentSettingsBehavior: "merge"` permet à Claude Desktop de livrer la liste d'autorisation de sortie de la passerelle aux sessions Claude Code qu'il lance, expliqué dans [Livrer la politique aux sessions Claude Desktop](#deliver-policy-to-claude-desktop-sessions) :290Trois clés vont dans le fichier de [paramètres gérés](/docs/fr/managed-settings#delivery-mechanisms) par système d'exploitation que vous déployez via MDM ou directement sur le disque. Pour une machine sans paramètres gérés, consultez plutôt [Définir l'URL de la passerelle dans les paramètres utilisateur](#set-the-gateway-url-in-user-settings). `forceLoginMethod` et `forceLoginGatewayUrl` ouvrent `/login` directement sur l'écran **Cloud gateway** avec l'URL remplie, et `parentSettingsBehavior: "merge"` permet à Claude Desktop de livrer la liste d'autorisation de sortie de la passerelle aux sessions Claude Code qu'il lance, expliqué dans [Livrer la politique aux sessions Claude Desktop](#deliver-policy-to-claude-desktop-sessions) :

291 291 

292```json theme={null}292```json theme={null}

293{293{


299 299 

300Le développeur appuie sur Entrée pour se connecter. L'invite d'empreinte TLS de [première connexion](#connect-developers) apparaît toujours. Une fois le fichier sur une machine, un développeur qui n'a pas complété la connexion à la passerelle voit l'un des messages décrits sous [La politique d'administrateur nécessite une connexion Cloud gateway](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Les développeurs qui sélectionnent un fournisseur cloud via une variable d'environnement telle que `CLAUDE_CODE_USE_BEDROCK` n'ont pas besoin de la connexion à la passerelle.300Le développeur appuie sur Entrée pour se connecter. L'invite d'empreinte TLS de [première connexion](#connect-developers) apparaît toujours. Une fois le fichier sur une machine, un développeur qui n'a pas complété la connexion à la passerelle voit l'un des messages décrits sous [La politique d'administrateur nécessite une connexion Cloud gateway](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Les développeurs qui sélectionnent un fournisseur cloud via une variable d'environnement telle que `CLAUDE_CODE_USE_BEDROCK` n'ont pas besoin de la connexion à la passerelle.

301 301 

302Un développeur ne peut pas configurer cela manuellement. Le sélecteur de connexion n'a pas d'option de passerelle, et `forceLoginGatewayUrl` est ignoré dans les fichiers de paramètres propres d'un développeur. `forceLoginMethod` seul, sans URL, laisse le développeur à un message « Contactez votre administrateur informatique ». Les clés de connexion appartiennent au fichier que vous poussez vers les machines, pas au bloc `managed.policies[].cli` de la passerelle, qui n'atteint que les clients déjà connectés.302Le sélecteur de connexion n'a pas d'option de passerelle, et dans les paramètres gérés, `forceLoginMethod` seul, sans URL, laisse le développeur à un message « Contactez votre administrateur informatique ». Les clés de connexion appartiennent au fichier que vous poussez vers les machines, pas au bloc `managed.policies[].cli` de la passerelle, qui n'atteint que les clients déjà connectés.

303 

304<h4 id="set-the-gateway-url-in-user-settings">

305 Définir l'URL de la passerelle dans les paramètres utilisateur

306</h4>

307 

308Sur les machines sans paramètres gérés, demandez à chaque développeur d'ajouter `forceLoginMethod` et `forceLoginGatewayUrl` à son propre fichier de paramètres utilisateur, `~/.claude/settings.json`. Cela nécessite Claude Code v2.1.295 ou ultérieur sur la machine du développeur. Cet exemple désigne une passerelle à `claude-gateway.internal.example.com` :

309 

310```json theme={null}

311{

312 "forceLoginMethod": "gateway",

313 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

314}

315```

316 

317Quand le développeur exécute `/login` à l'invite de Claude Code, l'écran **Cloud gateway** s'ouvre sur cette adresse et il appuie sur Entrée pour se connecter. L'invite d'empreinte TLS de [première connexion](#connect-developers) apparaît toujours. Ces limites s'appliquent aux clés définies de cette manière :

318 

319* **Paramètres utilisateur uniquement** : Claude Code lit les deux clés à partir de `~/.claude/settings.json`, et non à partir du `.claude/settings.json` ou du `.claude/settings.local.json` d'un projet.

320* **Les paramètres gérés les désactivent** : une fois que les paramètres d'un administrateur atteignent la machine via un fichier de paramètres gérés, une plist macOS ou une politique HKLM Windows, ou un [policy helper](/docs/fr/settings-reference#policyhelper), Claude Code ignore une passerelle désignée dans les paramètres utilisateur.

303 321 

304<h3 id="allow-a-gateway-on-public-address-space-you-own">322<h3 id="allow-a-gateway-on-public-address-space-you-own">

305 Autoriser une passerelle sur l'espace d'adresses publiques que vous possédez323 Autoriser une passerelle sur l'espace d'adresses publiques que vous possédez

Details

981 * **Clés mélangées** : un fichier contenant à la fois `code` et `cli`, ou son ancienne graphie `settings`, empêche la passerelle de démarrer. Placez tous les blocs sous une seule clé, en une seule modification.981 * **Clés mélangées** : un fichier contenant à la fois `code` et `cli`, ou son ancienne graphie `settings`, empêche la passerelle de démarrer. Placez tous les blocs sous une seule clé, en une seule modification.

982</Warning>982</Warning>

983 983 

984Les paramètres Claude Code d'une politique, comme une règle qui refuse la lecture des fichiers `.env`, se placent dans un bloc sous la clé `cli` ou `code`. Les deux clés acceptent le même contenu. La clé détermine où les paramètres sont appliqués :984Les paramètres Claude Code d'une politique, comme une règle qui refuse la lecture des fichiers `.env`, se placent dans un bloc sous la clé `cli` ou `code`. `code` est la clé recommandée, et `cli` la clé héritée. Les deux clés acceptent le même contenu. La clé détermine où les paramètres sont appliqués :

985 985 

986* **`cli`** : le terminal, les extensions VS Code et JetBrains, et l'Agent SDK. Sous `cli`, l'onglet Code de Claude Desktop reçoit les [paramètres dérivés](#claude-desktop-overlay), de sorte qu'une règle ciblée telle que `Read(./.env)` n'y bloque pas l'utilisateur.986* **`cli`** : le terminal, les extensions VS Code et JetBrains, et l'Agent SDK. Sous `cli`, l'onglet Code de Claude Desktop reçoit les [paramètres dérivés](#claude-desktop-overlay), de sorte qu'une règle ciblée telle que `Read(./.env)` n'y bloque pas l'utilisateur.

987* **`code`** : les mêmes emplacements, et l'onglet Code de Claude Desktop peut également être couvert.987* **`code`** : les mêmes emplacements, et l'onglet Code de Claude Desktop peut également être couvert.

988 988 

989Le choix consiste à décider si ces paramètres doivent aussi couvrir l'onglet Code. Si ce n'est pas le cas, ne changez rien. Un fichier qui utilise `cli` fonctionne comme avant, et une passerelle qui trouve `cli` dans une politique comportant une clé [`desktop`](#claude-desktop-overlay) émet un avertissement au démarrage et démarre malgré tout. Pour couvrir l'onglet Code, passez à `code`, la clé recommandée.989Un fichier qui utilise `cli` fonctionne comme avant, et une passerelle qui trouve `cli` dans une politique dotée d'une clé [`desktop`](#claude-desktop-overlay) émet un avertissement au démarrage et démarre quand même. Passez à `code` pour que les paramètres puissent aussi couvrir l'onglet Code.

990 990 

991Avant de basculer, lisez [Appliquer les paramètres `code` dans l'onglet Code](#apply-code-settings-in-the-code-tab). La politique a besoin d'une clé `desktop` et les machines des utilisateurs doivent être configurées avant que les paramètres s'y appliquent, et la recherche web est désactivée dans Claude Desktop.991Avant de basculer, lisez [Appliquer les paramètres `code` dans l'onglet Code](#apply-code-settings-in-the-code-tab). La politique a besoin d'une clé `desktop` et les machines des utilisateurs doivent être configurées avant que les paramètres s'y appliquent, et la recherche web est désactivée dans Claude Desktop.

992 992 


1714 1714 

1715Pour Claude Desktop, définissez la clé `bootstrapUrl` dans la propre [configuration gérée](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop sur `<listen.public_url>/user/bootstrap`. Le flux de connexion et la stratégie par groupe correspondent alors à ceux du CLI une fois qu'une stratégie opte pour le serveur avec une clé `desktop` ; sans l'opt-in, `/user/bootstrap` retourne 404. Voir [Claude Desktop overlay](#claude-desktop-overlay) pour la moitié côté serveur.1715Pour Claude Desktop, définissez la clé `bootstrapUrl` dans la propre [configuration gérée](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop sur `<listen.public_url>/user/bootstrap`. Le flux de connexion et la stratégie par groupe correspondent alors à ceux du CLI une fois qu'une stratégie opte pour le serveur avec une clé `desktop` ; sans l'opt-in, `/user/bootstrap` retourne 404. Voir [Claude Desktop overlay](#claude-desktop-overlay) pour la moitié côté serveur.

1716 1716 

1717Claude Code honore [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/fr/settings-reference#gatewayinternalnetworks), et la valeur `"gateway"` de [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) uniquement à partir d'une source gérée sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un assistant de stratégie. Les définir dans le `~/.claude/settings.json` personnel d'un développeur ou dans la charge utile de la passerelle ne configure pas la connexion à la passerelle.1717Claude Code honore [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/fr/settings-reference#gatewayinternalnetworks), et la valeur `"gateway"` de [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) à partir d'une source gérée sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un assistant de stratégie. Les définir dans la charge utile de la passerelle ne configure pas la connexion à la passerelle. Pour le `~/.claude/settings.json` personnel d'un développeur, voir [Définir l'URL de la passerelle dans les paramètres utilisateur](/docs/fr/claude-apps-gateway#set-the-gateway-url-in-user-settings).

1718 1718 

1719Omettez `forceLoginMethod` et `forceLoginOrgUUID` de la charge utile. Claude Code lit toujours les deux clés à partir de la charge utile pour sa vérification des identifiants au démarrage, donc un développeur qui conserve une identifiant émis par Anthropic sur la machine obtient la sortie au démarrage décrite sous [Administrator policy requires a Cloud gateway sign-in](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) même après sa connexion.1719Omettez `forceLoginMethod` et `forceLoginOrgUUID` de la charge utile. Claude Code lit toujours les deux clés à partir de la charge utile pour sa vérification des identifiants au démarrage, donc un développeur qui conserve une identifiant émis par Anthropic sur la machine obtient la sortie au démarrage décrite sous [Administrator policy requires a Cloud gateway sign-in](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) même après sa connexion.

1720 1720 

Details

135 Envoyer l'URL de la passerelle aux machines des développeurs135 Envoyer l'URL de la passerelle aux machines des développeurs

136</h3>136</h3>

137 137 

138Une fois que la passerelle est en service, envoyez `forceLoginMethod`, `forceLoginGatewayUrl` et `parentSettingsBehavior: "merge"` à la machine de chaque développeur via les paramètres gérés, via MDM ou en écrivant directement le fichier `managed-settings.json` par système d'exploitation. Sans cela, `/login` affiche le sélecteur de compte standard sans option de passerelle.138Une fois que la passerelle est en service, envoyez `forceLoginMethod`, `forceLoginGatewayUrl` et `parentSettingsBehavior: "merge"` à la machine de chaque développeur via les paramètres gérés, via MDM ou en écrivant directement le fichier `managed-settings.json` par système d'exploitation.

139 139 

140Une fois que vous déployez les clés, Claude Code cesse d'utiliser une clé API restante ou une connexion claude.ai sur la machine, donc planifiez l'envoi avec vos instructions de connexion. [La politique de l'administrateur nécessite une connexion à la passerelle Cloud](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) décrit les messages que les développeurs voient.140Une fois que vous déployez les clés, Claude Code cesse d'utiliser une clé API restante ou une connexion claude.ai sur la machine, donc planifiez l'envoi avec vos instructions de connexion. [La politique de l'administrateur nécessite une connexion à la passerelle Cloud](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) décrit les messages que les développeurs voient.

141 141 

Details

277 277 

278Les threads s'exécutent en [mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) quand le modèle du thread le supporte, donc la plupart des appels d'outils s'exécutent sans vous demander. Quand un thread a besoin de votre approbation, l'invite est à l'intérieur de ce thread et le thread attend jusqu'à ce que vous y répondiez. Dire à Claude dans la conversation du projet d'aller de l'avant ne l'atteint pas.278Les threads s'exécutent en [mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) quand le modèle du thread le supporte, donc la plupart des appels d'outils s'exécutent sans vous demander. Quand un thread a besoin de votre approbation, l'invite est à l'intérieur de ce thread et le thread attend jusqu'à ce que vous y répondiez. Dire à Claude dans la conversation du projet d'aller de l'avant ne l'atteint pas.

279 279 

280Chaque approbation couvre cette invite, ou le reste de ce thread si vous choisissez l'option plus large. Pour laisser chaque thread exécuter certaines commandes sans demander, ou pour en bloquer certaines, ajoutez des [règles de permission](/docs/fr/permissions) au `.claude/settings.json` du référentiel. Les threads cloud ne les appliquent que dans un projet avec un référentiel ; voir [Ce que les threads récupèrent de vos référentiels](#what-threads-pick-up-from-your-repositories). Dans un projet avec plusieurs référentiels, aucune règle de permission du référentiel n'atteint un thread cloud, donc vous comptez sur le mode auto et sur les approbations que vous donnez à l'intérieur de chaque thread.280Chaque approbation couvre cette demande, ou le reste de ce thread si vous choisissez l'option plus large.

281 

282Pour laisser chaque thread exécuter certaines commandes sans demander, ou pour en bloquer certaines, ajoutez des [règles de permission](/docs/fr/permissions) au `.claude/settings.json` du dépôt. Vérifiez que les threads cloud de votre projet les appliquent :

283 

284* **Un dépôt** : les threads cloud appliquent les règles. Voir [Ce que les threads récupèrent de vos dépôts](#what-threads-pick-up-from-your-repositories).

285* **Plusieurs dépôts, environnement hébergé par Anthropic** : aucune règle de permission d'un dépôt n'atteint un thread cloud, donc vous comptez sur le mode auto et sur les approbations que vous donnez à l'intérieur de chaque thread.

286* **Plusieurs dépôts, environnement auto-hébergé** : voir [quels paramètres de dépôt s'appliquent](/docs/fr/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 Exécuter un thread sur votre propre ordinateur289 Exécuter un thread sur votre propre ordinateur


381 Ce que les threads reprennent de vos dépôts387 Ce que les threads reprennent de vos dépôts

382</h3>388</h3>

383 389 

384Chaque thread cloud clone chaque dépôt du projet et charge `CLAUDE.md` et les skills de tous. Les règles de permission, les hooks et `env` viennent seulement du `.claude/settings.json` dans le répertoire où le thread commence : à l'intérieur du dépôt quand le projet en a un, et au-dessus des clones quand il en a plusieurs, où aucun fichier de dépôt n'est lu pour eux.390Chaque thread cloud clone chaque dépôt du projet et charge `CLAUDE.md` et les skills de tous. Les règles de permission, les hooks et `env` viennent seulement du `.claude/settings.json` dans le répertoire où le thread commence.

385 391 

386| Dans chaque dépôt | Un dépôt | Plusieurs dépôts |392| Dans chaque dépôt | Un dépôt | Plusieurs dépôts |

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

388| `CLAUDE.md` | Chargé au démarrage du thread | Chargé à partir de chaque dépôt au démarrage du thread |394| `CLAUDE.md` | Chargé au démarrage du thread | Chargé à partir de chaque dépôt au démarrage du thread |

389| Skills, agents et commandes sous `.claude/` | Chargés | Chargés à partir de chaque dépôt |395| Skills, agents et commandes sous `.claude/` | Chargés | Chargés à partir de chaque dépôt |

390| Plugins activés dans `.claude/settings.json` | Non chargés. Ajoutez le plugin dans **Project settings > Plugins** à la place | Non chargés. Ajoutez le plugin dans **Project settings > Plugins** à la place |396| Plugins activés dans `.claude/settings.json` | Non chargés. Ajoutez le plugin dans **Project settings > Plugins** à la place | Non chargés. Ajoutez le plugin dans **Project settings > Plugins** à la place |

391| Règles de permission, hooks et `env` définis dans `.claude/settings.json` | S'appliquent au thread, sauf les clés `env` que [aucune session cloud n'honore](/docs/fr/cloud-environments#what-carries-over-from-your-setup) | Ne s'appliquent pas |397| Règles de permission, hooks et `env` définis dans `.claude/settings.json` | S'appliquent au thread, sauf les clés `env` que [aucune session cloud n'honore](/docs/fr/cloud-environments#what-carries-over-from-your-setup) | Ne s'appliquent pas dans un environnement hébergé par Anthropic. Pour un environnement auto-hébergé, voir [quels paramètres de dépôt s'appliquent](/docs/fr/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

392 398 

393Dans un projet avec plusieurs dépôts, chaque clone est attaché au thread en tant que [répertoire supplémentaire](/docs/fr/memory#load-from-additional-directories) avec le chargement de `CLAUDE.md` activé, c'est pourquoi le `CLAUDE.md` et les skills de chaque dépôt se chargent au démarrage même si le thread commence au-dessus d'eux. Dans un tel projet, mettez les règles permanentes dans les instructions du projet et donnez aux threads les variables d'environnement via l'[environnement cloud](#choose-an-environment-for-threads).399Dans un projet avec plusieurs dépôts, mettez les règles permanentes dans les instructions du projet et donnez aux threads les variables d'environnement via l'[environnement cloud](#choose-an-environment-for-threads).

394 400 

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

396 Choisir un environnement pour les threads402 Choisir un environnement pour les threads


406 412 

407Les threads cloud n'ont pas les skills, les serveurs MCP, les plugins et les outils installés seulement sur votre machine. Un thread que Claude exécute sur votre machine via [Remote Control](/docs/fr/remote-control) utilise ce qui y est installé. Pour rendre chacun de ceux-ci disponible aux threads cloud :413Les threads cloud n'ont pas les skills, les serveurs MCP, les plugins et les outils installés seulement sur votre machine. Un thread que Claude exécute sur votre machine via [Remote Control](/docs/fr/remote-control) utilise ce qui y est installé. Pour rendre chacun de ceux-ci disponible aux threads cloud :

408 414 

409* Skills, sous-agents et commandes : commitez-les dans un dépôt que vous avez ajouté au projet, par exemple un skill à `.claude/skills/<skill-name>/SKILL.md`. Chaque thread cloud clone chaque dépôt du projet et charge `.claude/skills/`, `.claude/agents/` et `.claude/commands/` à partir de chacun d'eux, donc un skill commité dans un dépôt est disponible dans chaque thread cloud. Les threads cloud chargent également les skills que vous activez pour votre compte claude.ai.415* Skills, sous-agents et commandes : commitez-les dans un dépôt que vous avez ajouté au projet, par exemple un skill à `.claude/skills/<skill-name>/SKILL.md`. Chaque thread cloud clone chaque dépôt du projet et charge `.claude/skills/`, `.claude/agents/` et `.claude/commands/` à partir de chacun d'eux, donc un skill commité dans un dépôt est disponible dans chaque thread cloud. Les threads cloud chargent également les [skills que vous activez pour votre compte claude.ai](/docs/fr/skills#skills-in-cowork-and-cloud-sessions).

410* Plugins : ajoutez-les dans **Project settings > Plugins** ; ils se chargent dans chaque nouveau thread cloud. Les plugins qu'un dépôt déclare dans son `.claude/settings.json` [ne se chargent pas dans les threads cloud](/docs/fr/cloud-environments#what-carries-over-from-your-setup).416* Plugins : ajoutez-les dans **Project settings > Plugins** ; ils se chargent dans chaque nouveau thread cloud. Les plugins qu'un dépôt déclare dans son `.claude/settings.json` [ne se chargent pas dans les threads cloud](/docs/fr/cloud-environments#what-carries-over-from-your-setup).

411* Serveurs MCP : les threads cloud obtiennent leurs outils MCP à partir des connecteurs sur votre compte claude.ai, qui sont des serveurs MCP que vous connectez une fois à [claude.ai/customize/connectors](https://claude.ai/customize/connectors) ou via le lien **Manage connectors** dans **Project settings > Environment**. Chaque thread cloud peut tous les utiliser sans configuration par projet. La conversation du projet elle-même n'a pas de connecteurs, donc envoyez le travail qui en a besoin en tant que tâche pour un thread cloud. Dans un projet avec un dépôt, les threads cloud chargent également les serveurs MCP à partir du [`.mcp.json`](/docs/fr/cloud-environments#what-carries-over-from-your-setup) de ce dépôt. [Comment les connecteurs atteignent Claude Code](/docs/fr/mcp#how-connectors-reach-claude-code) énumère les règles pour les sessions cloud et les paramètres qui désactivent les connecteurs.417* Serveurs MCP : les threads cloud obtiennent leurs outils MCP à partir des connecteurs sur votre compte claude.ai, qui sont des serveurs MCP que vous connectez une fois à [claude.ai/customize/connectors](https://claude.ai/customize/connectors) ou via le lien **Manage connectors** dans **Project settings > Environment**. Chaque thread cloud peut tous les utiliser sans configuration par projet. La conversation du projet elle-même n'a pas de connecteurs, donc envoyez le travail qui en a besoin en tant que tâche pour un thread cloud. Dans un projet avec un dépôt, les threads cloud chargent également les serveurs MCP à partir du [`.mcp.json`](/docs/fr/cloud-environments#what-carries-over-from-your-setup) de ce dépôt. [Comment les connecteurs atteignent Claude Code](/docs/fr/mcp#how-connectors-reach-claude-code) énumère les règles pour les sessions cloud et les paramètres qui désactivent les connecteurs.

412* Outils en ligne de commande et packages : installez-les dans le [script de configuration](/docs/fr/cloud-environments#setup-scripts) de l'environnement.418* Outils en ligne de commande et packages : installez-les dans le [script de configuration](/docs/fr/cloud-environments#setup-scripts) de l'environnement.

Details

108| `--maintenance` | Exécuter les hooks d'[initialisation](/docs/fr/hooks#setup) avec le matcher `maintenance` avant la session (mode impression uniquement) | `claude -p --maintenance "query"` |108| `--maintenance` | Exécuter les hooks d'[initialisation](/docs/fr/hooks#setup) avec le matcher `maintenance` avant la session (mode impression uniquement) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Arrêter l'exécution une fois que les dépenses estimées en appels API atteignent ce montant (mode impression uniquement). Claude Code compare le plafond à son [estimation des coûts côté client](/docs/fr/agent-sdk/cost-tracking#estimates-not-billing), qui peut différer de votre facture. Les dépenses des [sous-agents](/docs/fr/sub-agents) comptent dans le plafond. Les dépenses peuvent dépasser le plafond, donc [prévoyez une marge](/docs/fr/agent-sdk/agent-loop#budget-headroom). Lorsque vous revenez à une conversation avec `--continue` ou `--resume`, les totaux [restaurés à partir des exécutions antérieures](/docs/fr/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) n'y comptent pas. Une fois que les dépenses atteignent le plafond, le lancement d'un autre sous-agent échoue avec `Budget limit reached`, et Claude Code arrête les sous-agents en arrière-plan qui s'exécutent encore ; les comportements d'application du plafond nécessitent Claude Code v2.1.217 ou ultérieur | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Arrêter l'exécution une fois que les dépenses estimées en appels API atteignent ce montant (mode impression uniquement). Claude Code compare le plafond à son [estimation des coûts côté client](/docs/fr/agent-sdk/cost-tracking#estimates-not-billing), qui peut différer de votre facture. Les dépenses des [sous-agents](/docs/fr/sub-agents) comptent dans le plafond. Les dépenses peuvent dépasser le plafond, donc [prévoyez une marge](/docs/fr/agent-sdk/agent-loop#budget-headroom). Lorsque vous revenez à une conversation avec `--continue` ou `--resume`, les totaux [restaurés à partir des exécutions antérieures](/docs/fr/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) n'y comptent pas. Une fois que les dépenses atteignent le plafond, le lancement d'un autre sous-agent échoue avec `Budget limit reached`, et Claude Code arrête les sous-agents en arrière-plan qui s'exécutent encore ; les comportements d'application du plafond nécessitent Claude Code v2.1.217 ou ultérieur | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Limiter le nombre de tours d'agent (mode impression uniquement). Quitte avec une erreur lorsque la limite est atteinte. Pas de limite par défaut. Avec `--input-format stream-json`, un message toujours en file d'attente lorsque la limite termine un tour reste en file d'attente et démarre un nouveau tour avec sa propre limite | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Limiter le nombre de tours d'agent (mode impression uniquement). Quitte avec une erreur lorsque la limite est atteinte. Pas de limite par défaut. Avec `--input-format stream-json`, un message toujours en file d'attente lorsque la limite termine un tour reste en file d'attente et démarre un nouveau tour avec sa propre limite | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Charger les serveurs MCP à partir de fichiers ou de chaînes JSON (séparés par des espaces). Lorsque vous transmettez ce drapeau avec `-p`, Claude Code attend que les serveurs toujours en attente se connectent avant d'exécuter le premier tour, jusqu'au délai d'expiration de démarrage [`MCP_TIMEOUT`](/docs/fr/env-vars), 30 secondes par défaut ; un serveur avec une [liste d'outils mise en cache](/docs/fr/mcp#managing-your-servers) ignore l'attente et se connecte à la première utilisation. L'attente nécessite Claude Code v2.1.221 ou ultérieur | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Charger les serveurs MCP à partir de fichiers ou de chaînes JSON (séparés par des espaces). Lorsque vous transmettez ce flag avec `-p`, Claude Code attend que les serveurs encore en attente se connectent avant d'exécuter le premier tour, jusqu'au délai d'expiration de démarrage [`MCP_TIMEOUT`](/docs/fr/env-vars), 30 secondes par défaut ; un serveur avec une [liste d'outils mise en cache](/docs/fr/mcp#managing-your-servers) ignore l'attente et se connecte à la première utilisation. Dans un [environnement auto-hébergé](/docs/fr/self-hosted-environments-configuration#connection-timing), une attente plus courte s'applique à la place. L'attente nécessite Claude Code v2.1.221 ou ultérieur | `claude --mcp-config ./mcp.json` |

112| `--model` | Définit le modèle pour la session actuelle avec un [alias de modèle](/docs/fr/model-config#model-aliases) tel que `sonnet`, `opus`, `haiku`, ou `fable`, ou le nom complet d'un modèle. Remplace le paramètre [`model`](/docs/fr/settings-reference#model) et [`ANTHROPIC_MODEL`](/docs/fr/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Définit le modèle pour la session actuelle avec un [alias de modèle](/docs/fr/model-config#model-aliases) tel que `sonnet`, `opus`, `haiku`, ou `fable`, ou le nom complet d'un modèle. Remplace le paramètre [`model`](/docs/fr/settings-reference#model) et [`ANTHROPIC_MODEL`](/docs/fr/model-config#environment-variables) | `claude --model claude-sonnet-5` |

113| `--name`, `-n` | Définir un nom d'affichage pour la session, affiché dans `/resume` et le titre du terminal. Vous pouvez reprendre une session nommée avec `claude --resume <name>`. Dans une session interactive, si une autre session en direct sur cette machine utilise déjà le nom, Claude Code applique [une variante de celui-ci](/docs/fr/sessions#name-your-sessions) à la place. <br /><br />[`/rename`](/docs/fr/commands) change le nom en cours de session et l'affiche également dans la barre d'invite | `claude -n "my-feature-work"` |113| `--name`, `-n` | Définir un nom d'affichage pour la session, affiché dans `/resume` et le titre du terminal. Vous pouvez reprendre une session nommée avec `claude --resume <name>`. Dans une session interactive, si une autre session en direct sur cette machine utilise déjà le nom, Claude Code applique [une variante de celui-ci](/docs/fr/sessions#name-your-sessions) à la place. <br /><br />[`/rename`](/docs/fr/commands) change le nom en cours de session et l'affiche également dans la barre d'invite | `claude -n "my-feature-work"` |

114| `--no-chrome` | Désactiver l'[intégration du navigateur Chrome](/docs/fr/chrome) pour cette session | `claude --no-chrome` |114| `--no-chrome` | Désactiver l'[intégration du navigateur Chrome](/docs/fr/chrome) pour cette session | `claude --no-chrome` |

Details

314| Plugins et marketplaces déclarés dans le `.claude/settings.json` de votre dépôt | Non | Une session cloud n'installe pas les plugins qu'un dépôt active sous [`enabledPlugins`](/docs/fr/settings-reference#enabledplugins), y compris ceux des marketplaces qu'il liste sous [`extraKnownMarketplaces`](/docs/fr/settings-reference#extraknownmarketplaces) |314| Plugins et marketplaces déclarés dans le `.claude/settings.json` de votre dépôt | Non | Une session cloud n'installe pas les plugins qu'un dépôt active sous [`enabledPlugins`](/docs/fr/settings-reference#enabledplugins), y compris ceux des marketplaces qu'il liste sous [`extraKnownMarketplaces`](/docs/fr/settings-reference#extraknownmarketplaces) |

315| Les [paramètres gérés par le serveur](/docs/fr/server-managed-settings) de votre organisation | Oui, sauf dans les sessions [Claude Tag](https://claude.com/docs/claude-tag/overview) | Récupérés des serveurs d'Anthropic quand la session démarre. Consultez [Couverture de surface](/docs/fr/model-config#surface-coverage) pour savoir comment `availableModels` est appliqué dans les sessions cloud. Les paramètres déployés sur votre appareil via MDM ou des fichiers de paramètres gérés ne s'appliquent pas, car la session s'exécute sur une VM gérée par Anthropic ; dans un [environnement auto-hébergé](/docs/fr/self-hosted-environments), les sessions lisent également le fichier de paramètres gérés dans l'image d'exécuteur, selon [comment Claude Code combine les sources gérées](/docs/fr/managed-settings#how-claude-code-combines-managed-sources) |315| Les [paramètres gérés par le serveur](/docs/fr/server-managed-settings) de votre organisation | Oui, sauf dans les sessions [Claude Tag](https://claude.com/docs/claude-tag/overview) | Récupérés des serveurs d'Anthropic quand la session démarre. Consultez [Couverture de surface](/docs/fr/model-config#surface-coverage) pour savoir comment `availableModels` est appliqué dans les sessions cloud. Les paramètres déployés sur votre appareil via MDM ou des fichiers de paramètres gérés ne s'appliquent pas, car la session s'exécute sur une VM gérée par Anthropic ; dans un [environnement auto-hébergé](/docs/fr/self-hosted-environments), les sessions lisent également le fichier de paramètres gérés dans l'image d'exécuteur, selon [comment Claude Code combine les sources gérées](/docs/fr/managed-settings#how-claude-code-combines-managed-sources) |

316| Votre `~/.claude/CLAUDE.md` utilisateur | Non | Vit sur votre machine, pas dans le dépôt. Consultez [Ajouter des préférences personnelles sans les commiter dans le dépôt](#add-personal-preferences-without-committing-to-the-repo) |316| Votre `~/.claude/CLAUDE.md` utilisateur | Non | Vit sur votre machine, pas dans le dépôt. Consultez [Ajouter des préférences personnelles sans les commiter dans le dépôt](#add-personal-preferences-without-committing-to-the-repo) |

317| Vos `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` utilisateur | Non | Vivent sur votre machine, pas dans le dépôt. Commitez-les dans le répertoire `.claude/` du dépôt à la place. Les sessions cloud chargent automatiquement les skills que vous activez sur claude.ai |317| Vos `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` utilisateur | Non | Vivent sur votre machine, pas dans le dépôt. Commitez-les dans le répertoire `.claude/` du dépôt à la place. Les sessions cloud chargent automatiquement les [skills que vous activez sur claude.ai](/docs/fr/skills#skills-in-cowork-and-cloud-sessions) |

318| Plugins activés seulement dans vos paramètres utilisateur | Non | L'`enabledPlugins` de portée utilisateur vit dans `~/.claude/settings.json` sur votre machine |318| Plugins activés seulement dans vos paramètres utilisateur | Non | L'`enabledPlugins` de portée utilisateur vit dans `~/.claude/settings.json` sur votre machine |

319| Serveurs MCP que vous avez ajoutés avec `claude mcp add` à la portée locale par défaut ou à la portée utilisateur | Non | Ceux-ci écrivent dans `~/.claude.json` sur votre machine, pas le dépôt. Ajoutez le serveur avec `claude mcp add --scope project`, qui écrit le [`.mcp.json`](/docs/fr/mcp#project-scope) du dépôt, et commitez ce fichier. Une session avec un seul dépôt le charge |319| Serveurs MCP que vous avez ajoutés avec `claude mcp add` à la portée locale par défaut ou à la portée utilisateur | Non | Ceux-ci écrivent dans `~/.claude.json` sur votre machine, pas le dépôt. Ajoutez le serveur avec `claude mcp add --scope project`, qui écrit le [`.mcp.json`](/docs/fr/mcp#project-scope) du dépôt, et commitez ce fichier. Une session avec un seul dépôt le charge |

320| Variables de transport dans le bloc `env` de `.claude/settings.json` de votre dépôt, comme `NODE_EXTRA_CA_CERTS` et les [variables de certificat client mTLS](/docs/fr/network-config#mtls-authentication) | Non | L'environnement d'hébergement gère la connexion API de la session, donc Claude Code ignore ces clés et note chaque clé ignorée dans le journal de débogage de la session |320| Variables de transport dans le bloc `env` de `.claude/settings.json` de votre dépôt, comme `NODE_EXTRA_CA_CERTS` et les [variables de certificat client mTLS](/docs/fr/network-config#mtls-authentication) | Non | L'environnement d'hébergement gère la connexion API de la session, donc Claude Code ignore ces clés et note chaque clé ignorée dans le journal de débogage de la session |

commands.md +1 −1

Details

77| `/compact [instructions]` | Libérer du contexte en résumant la conversation jusqu'à présent. Passez éventuellement des instructions de focus pour le résumé. Consultez [comment la compaction gère les règles, les skills et les fichiers de mémoire](/docs/fr/context-window#what-survives-compaction) |77| `/compact [instructions]` | Libérer du contexte en résumant la conversation jusqu'à présent. Passez éventuellement des instructions de focus pour le résumé. Consultez [comment la compaction gère les règles, les skills et les fichiers de mémoire](/docs/fr/context-window#what-survives-compaction) |

78| `/config [key=value ...]` | Ouvrir l'interface [Paramètres](/docs/fr/settings) pour ajuster le thème, le modèle, [le style de sortie](/docs/fr/output-styles), et d'autres préférences. Passez une ou plusieurs paires `key=value` pour définir un paramètre directement sans ouvrir l'interface, par exemple `/config thinking=false`, `/config theme=dark`, ou `/config model=sonnet`. Le formulaire `key=value` fonctionne également en mode non interactif (`-p`) et à partir de l'application mobile Claude via [Remote Control](/docs/fr/remote-control). Le formulaire `key=value` ne peut pas activer un paramètre qui nécessite votre confirmation dans le panneau, tel que [`autoContinueAtUsageLimit`](/docs/fr/interactive-mode#turn-automatic-continue-off), bien qu'il puisse en désactiver un. Exécutez `/config --help` pour répertorier les clés qu'il accepte. Alias : `/settings` |78| `/config [key=value ...]` | Ouvrir l'interface [Paramètres](/docs/fr/settings) pour ajuster le thème, le modèle, [le style de sortie](/docs/fr/output-styles), et d'autres préférences. Passez une ou plusieurs paires `key=value` pour définir un paramètre directement sans ouvrir l'interface, par exemple `/config thinking=false`, `/config theme=dark`, ou `/config model=sonnet`. Le formulaire `key=value` fonctionne également en mode non interactif (`-p`) et à partir de l'application mobile Claude via [Remote Control](/docs/fr/remote-control). Le formulaire `key=value` ne peut pas activer un paramètre qui nécessite votre confirmation dans le panneau, tel que [`autoContinueAtUsageLimit`](/docs/fr/interactive-mode#turn-automatic-continue-off), bien qu'il puisse en désactiver un. Exécutez `/config --help` pour répertorier les clés qu'il accepte. Alias : `/settings` |

79| `/context [all]` | Visualiser l'utilisation actuelle du contexte sous forme de grille colorée. Affiche les suggestions d'optimisation pour les outils lourds en contexte, le gonflement de la mémoire et les avertissements de capacité. Lorsque la conversation dépasse la fenêtre de contexte, la sortie inclut un [avertissement](/docs/fr/errors#context-exceeds-the-token-limit) montrant à quel point vous dépassez la limite et quelle commande libère de l'espace. En [mode plein écran](/docs/fr/fullscreen), `/context` réduit la ventilation par élément pour garder la grille visible. Passez `all` pour la développer |79| `/context [all]` | Visualiser l'utilisation actuelle du contexte sous forme de grille colorée. Affiche les suggestions d'optimisation pour les outils lourds en contexte, le gonflement de la mémoire et les avertissements de capacité. Lorsque la conversation dépasse la fenêtre de contexte, la sortie inclut un [avertissement](/docs/fr/errors#context-exceeds-the-token-limit) montrant à quel point vous dépassez la limite et quelle commande libère de l'espace. En [mode plein écran](/docs/fr/fullscreen), `/context` réduit la ventilation par élément pour garder la grille visible. Passez `all` pour la développer |

80| `/copy [N]` | Copier la dernière réponse de l'assistant dans le presse-papiers. Passez un nombre `N` pour copier la Nième réponse la plus récente : `/copy 2` copie l'avant-dernière. Lorsque des blocs de code sont présents, affiche un sélecteur interactif pour sélectionner des blocs individuels ou la réponse complète. Appuyez sur `w` dans le sélecteur pour écrire la sélection dans un fichier au lieu du presse-papiers, ce qui est utile sur SSH |80| `/copy [N]` | Copier la dernière réponse de l'assistant dans le presse-papiers. Passez un nombre `N` pour copier la Nième réponse la plus récente : `/copy 2` copie l'avant-dernière. Lorsque des blocs de code ou des citations sont présents, affiche un sélecteur interactif pour sélectionner des blocs individuels ou la réponse complète. Appuyez sur `w` dans le sélecteur pour écrire la sélection dans un fichier au lieu du presse-papiers, ce qui est utile sur SSH |

81| `/cost` | Alias pour `/usage` |81| `/cost` | Alias pour `/usage` |

82| `/dataviz [request]` | **[Skill](/docs/fr/skills#bundled-skills).** Conseils de conception pour les graphiques, les diagrammes et les tableaux de bord. Claude choisit la forme de graphique pour les données, attribue la couleur par rôle, valide la palette pour la sécurité daltonienne et le contraste avec un script fourni, et applique les règles de marque, d'interaction et d'accessibilité. Utilise une palette de marque neutre que vous remplacez par la vôtre |82| `/dataviz [request]` | **[Skill](/docs/fr/skills#bundled-skills).** Conseils de conception pour les graphiques, les diagrammes et les tableaux de bord. Claude choisit la forme de graphique pour les données, attribue la couleur par rôle, valide la palette pour la sécurité daltonienne et le contraste avec un script fourni, et applique les règles de marque, d'interaction et d'accessibilité. Utilise une palette de marque neutre que vous remplacez par la vôtre |

83| `/debug [description]` | **[Skill](/docs/fr/skills#bundled-skills).** Activer la journalisation de débogage pour la session actuelle et dépanner les problèmes en lisant le journal de débogage de la session. La journalisation de débogage est désactivée par défaut sauf si vous avez démarré avec `claude --debug`, donc l'exécution de `/debug` en milieu de session commence à capturer les journaux à partir de ce moment. Décrivez éventuellement le problème pour concentrer l'analyse |83| `/debug [description]` | **[Skill](/docs/fr/skills#bundled-skills).** Activer la journalisation de débogage pour la session actuelle et dépanner les problèmes en lisant le journal de débogage de la session. La journalisation de débogage est désactivée par défaut sauf si vous avez démarré avec `claude --debug`, donc l'exécution de `/debug` en milieu de session commence à capturer les journaux à partir de ce moment. Décrivez éventuellement le problème pour concentrer l'analyse |

env-vars.md +3 −3

Details

285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Définissez sur `1` pour désactiver le [changement automatique de modèle lorsqu'un classifieur de sécurité signale une requête](/docs/fr/model-config#automatic-model-fallback), comportement que contrôle le paramètre [`switchModelsOnFlag`](/docs/fr/settings-reference#switchmodelsonflag) |285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Définissez sur `1` pour désactiver le [changement automatique de modèle lorsqu'un classifieur de sécurité signale une requête](/docs/fr/model-config#automatic-model-fallback), comportement que contrôle le paramètre [`switchModelsOnFlag`](/docs/fr/settings-reference#switchmodelsonflag) |

286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Définissez sur `1` pour empêcher Claude Code d'envoyer le champ de sortie structurée `output_config.format` et la valeur `anthropic-beta` qui lui est associée, pour une [passerelle LLM](/docs/fr/llm-gateway-protocol#feature-pass-through) dont le service en amont les rejette. Les autres capacités en préversion que [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/fr/llm-gateway-protocol#disable-pre-release-capabilities) désactive restent actives. Nécessite Claude Code v2.1.288 ou ultérieur |286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Définissez sur `1` pour empêcher Claude Code d'envoyer le champ de sortie structurée `output_config.format` et la valeur `anthropic-beta` qui lui est associée, pour une [passerelle LLM](/docs/fr/llm-gateway-protocol#feature-pass-through) dont le service en amont les rejette. Les autres capacités en préversion que [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/fr/llm-gateway-protocol#disable-pre-release-capabilities) désactive restent actives. Nécessite Claude Code v2.1.288 ou ultérieur |

287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Définissez sur `1` pour désactiver la vérification de [chemin critique](/docs/fr/permission-modes#critical-paths) pour un `rm` récursif dont la cible est entièrement la sortie d'une substitution de commande, comme `rm -rf "$(pwd)"`. Les autres vérifications de chemins critiques continuent de s'exécuter. Définissez-la dans l'environnement qui lance Claude Code, car Claude Code ignore une copie fournie via un bloc `env` de paramètres. Nécessite Claude Code v2.1.281 ou ultérieur |287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Définissez sur `1` pour désactiver la vérification de [chemin critique](/docs/fr/permission-modes#critical-paths) pour un `rm` récursif dont la cible est entièrement la sortie d'une substitution de commande, comme `rm -rf "$(pwd)"`. Les autres vérifications de chemins critiques continuent de s'exécuter. Définissez-la dans l'environnement qui lance Claude Code, car Claude Code ignore une copie fournie via un bloc `env` de paramètres. Nécessite Claude Code v2.1.281 ou ultérieur |

288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Définissez sur `1` pour désactiver les mises à jour automatiques du titre du terminal en fonction du contexte de la conversation. Cela supprime également la requête en arrière-plan au modèle small/fast qui [génère un titre de session](/docs/fr/sessions#name-your-sessions) |288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Définissez `1` pour désactiver les mises à jour automatiques du titre du terminal basées sur le contexte de la conversation. Cela ignore également la requête en arrière-plan au modèle small/fast qui [génère un titre de session](/docs/fr/sessions#name-your-sessions), et désactive les [rapports de statut vers votre terminal](/docs/fr/terminal-config#see-session-status-in-your-terminal) |

289| `CLAUDE_CODE_DISABLE_THINKING` | Définissez sur `1` pour omettre entièrement le paramètre `thinking` des requêtes API. Il s'agit d'une option de compatibilité pour les proxys et passerelles qui rejettent ce paramètre. Sur les modèles qui réfléchissent par défaut, omettre le paramètre signifie que le modèle peut toujours réfléchir. Pour désactiver explicitement la [réflexion étendue](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) sur l'API Anthropic, utilisez plutôt `MAX_THINKING_TOKENS=0`. Aucune des deux variables ne désactive la réflexion sur Opus 5.5, Sonnet 5.5, Haiku 5.5 ou les modèles Fable, sur lesquels la réflexion ne peut pas être désactivée. Chez les [fournisseurs tiers](/docs/fr/third-party-integrations), `MAX_THINKING_TOKENS=0` omet également le paramètre ; les deux variables s'y comportent donc de la même manière |289| `CLAUDE_CODE_DISABLE_THINKING` | Définissez sur `1` pour omettre entièrement le paramètre `thinking` des requêtes API. Il s'agit d'une option de compatibilité pour les proxys et passerelles qui rejettent ce paramètre. Sur les modèles qui réfléchissent par défaut, omettre le paramètre signifie que le modèle peut toujours réfléchir. Pour désactiver explicitement la [réflexion étendue](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) sur l'API Anthropic, utilisez plutôt `MAX_THINKING_TOKENS=0`. Aucune des deux variables ne désactive la réflexion sur Opus 5.5, Sonnet 5.5, Haiku 5.5 ou les modèles Fable, sur lesquels la réflexion ne peut pas être désactivée. Chez les [fournisseurs tiers](/docs/fr/third-party-integrations), `MAX_THINKING_TOKENS=0` omet également le paramètre ; les deux variables s'y comportent donc de la même manière |

290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Définissez sur `1` pour ignorer la [compaction automatique](/docs/fr/costs#reduce-token-usage) proactive lorsque Claude Code ne reconnaît pas l'ID du modèle, comme un alias de [passerelle LLM](/docs/fr/llm-gateway). Sans cette variable, Claude Code compacte à la fenêtre de contexte qu'il suppose pour cet ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` peut plutôt corriger la fenêtre supposée ; voir [Corriger la fenêtre pour un ID de modèle de passerelle ou personnalisé](/docs/fr/model-config#correct-the-window-for-a-gateway-or-custom-model-id) pour savoir quand chaque variable s'applique. Nécessite Claude Code v2.1.223 ou ultérieur |290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Définissez sur `1` pour ignorer la [compaction automatique](/docs/fr/costs#reduce-token-usage) proactive lorsque Claude Code ne reconnaît pas l'ID du modèle, comme un alias de [passerelle LLM](/docs/fr/llm-gateway). Sans cette variable, Claude Code compacte à la fenêtre de contexte qu'il suppose pour cet ID. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` peut plutôt corriger la fenêtre supposée ; voir [Corriger la fenêtre pour un ID de modèle de passerelle ou personnalisé](/docs/fr/model-config#correct-the-window-for-a-gateway-or-custom-model-id) pour savoir quand chaque variable s'applique. Nécessite Claude Code v2.1.223 ou ultérieur |

291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Définissez sur `1` pour désactiver le défilement virtuel en [rendu plein écran](/docs/fr/fullscreen) et afficher chaque message de la transcription. Utilisez cette option si le défilement en mode plein écran affiche des zones vides là où des messages devraient apparaître |291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Définissez sur `1` pour désactiver le défilement virtuel en [rendu plein écran](/docs/fr/fullscreen) et afficher chaque message de la transcription. Utilisez cette option si le défilement en mode plein écran affiche des zones vides là où des messages devraient apparaître |


309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Durée en millisecondes à attendre après que la boucle de requêtes est devenue inactive avant de quitter automatiquement. Utile pour les workflows automatisés et les scripts utilisant le mode SDK |309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Durée en millisecondes à attendre après que la boucle de requêtes est devenue inactive avant de quitter automatiquement. Utile pour les workflows automatisés et les scripts utilisant le mode SDK |

310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Définir sur `1` pour activer les [équipes d'agents](/docs/fr/agent-teams). Les équipes d'agents sont expérimentales et désactivées par défaut |310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Définir sur `1` pour activer les [équipes d'agents](/docs/fr/agent-teams). Les équipes d'agents sont expérimentales et désactivées par défaut |

311| `CLAUDE_CODE_EXTRA_BODY` | Objet JSON à fusionner au niveau supérieur du corps de chaque requête API. Utile pour transmettre des paramètres propres au fournisseur que Claude Code n'expose pas directement. Une valeur exportée dans votre shell s'applique également aux [sessions en arrière-plan](/docs/fr/agent-view) que vous lancez avec `claude agents` ou `--bg`. Avant la v2.1.206, les sessions en arrière-plan ignoraient une valeur exportée dans le shell et utilisaient la copie éventuellement héritée par le processus superviseur en arrière-plan |311| `CLAUDE_CODE_EXTRA_BODY` | Objet JSON à fusionner au niveau supérieur du corps de chaque requête API. Utile pour transmettre des paramètres propres au fournisseur que Claude Code n'expose pas directement. Une valeur exportée dans votre shell s'applique également aux [sessions en arrière-plan](/docs/fr/agent-view) que vous lancez avec `claude agents` ou `--bg`. Avant la v2.1.206, les sessions en arrière-plan ignoraient une valeur exportée dans le shell et utilisaient la copie éventuellement héritée par le processus superviseur en arrière-plan |

312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Remplace la limite de tokens par défaut pour la lecture de fichiers. Utile lorsque vous devez lire intégralement des fichiers plus volumineux |312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Remplace la limite de tokens par défaut pour les [lectures de fichiers](/docs/fr/tools-reference#large-files), qui est de 25 000 tokens. Utile lorsque vous devez lire des fichiers plus volumineux en entier. Une lecture que Claude effectue avec le paramètre `allow_large` peut dépasser cette limite lorsque la fenêtre de contexte dispose de suffisamment de place |

313| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Définir sur `1` pour forcer la persistance de la transcription, l'historique des prompts et l'enregistrement auprès de `claude agents`, même lorsque ce `claude` a été lancé depuis une autre session Claude Code. À utiliser lorsqu'une valeur `CLAUDE_CODE_CHILD_SESSION` héritée, par exemple d'une session `screen` ou d'un lanceur en arrière-plan démarré initialement par l'outil Bash de Claude Code, fait qu'une véritable session de premier niveau est classée à tort comme imbriquée. Depuis la v2.1.178, Claude Code détecte automatiquement le cas de tmux et ignore le marqueur hérité ; tmux n'a donc plus besoin de cette variable. Également prise en compte dans les versions v2.1.169 et antérieures ; sans effet dans les v2.1.170 et v2.1.171, où la détection des sessions imbriquées qu'elle contourne avait été supprimée |313| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Définir sur `1` pour forcer la persistance de la transcription, l'historique des prompts et l'enregistrement auprès de `claude agents`, même lorsque ce `claude` a été lancé depuis une autre session Claude Code. À utiliser lorsqu'une valeur `CLAUDE_CODE_CHILD_SESSION` héritée, par exemple d'une session `screen` ou d'un lanceur en arrière-plan démarré initialement par l'outil Bash de Claude Code, fait qu'une véritable session de premier niveau est classée à tort comme imbriquée. Depuis la v2.1.178, Claude Code détecte automatiquement le cas de tmux et ignore le marqueur hérité ; tmux n'a donc plus besoin de cette variable. Également prise en compte dans les versions v2.1.169 et antérieures ; sans effet dans les v2.1.170 et v2.1.171, où la détection des sessions imbriquées qu'elle contourne avait été supprimée |

314| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Définir sur `1` pour forcer le rendu barré de `~~text~~` dans les réponses de Claude lorsque votre terminal le prend en charge sans être détecté automatiquement, par exemple via SSH sans transfert de `TERM_PROGRAM`. Sans cela, les terminaux non détectés affichent les marqueurs `~~` littéraux au lieu de rendre le texte barré. Nécessite Claude Code v2.1.186 ou ultérieur |314| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Définir sur `1` pour forcer le rendu barré de `~~text~~` dans les réponses de Claude lorsque votre terminal le prend en charge sans être détecté automatiquement, par exemple via SSH sans transfert de `TERM_PROGRAM`. Sans cela, les terminaux non détectés affichent les marqueurs `~~` littéraux au lieu de rendre le texte barré. Nécessite Claude Code v2.1.186 ou ultérieur |

315| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Définir sur `1` pour forcer l'activation de la [sortie synchronisée](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) DEC private mode 2026 lorsque votre terminal la prend en charge sans être détecté automatiquement. Utile pour les émulateurs tels qu'Emacs `eat` qui implémentent BSU/ESU mais ne répondent pas à la sonde de capacités. Sans effet sous tmux. Contrairement à `CLAUDE_CODE_NO_FLICKER`, qui bascule vers le [rendu plein écran](/docs/fr/fullscreen), cette variable ne change pas le moteur de rendu |315| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Définir sur `1` pour forcer l'activation de la [sortie synchronisée](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) DEC private mode 2026 lorsque votre terminal la prend en charge sans être détecté automatiquement. Utile pour les émulateurs tels qu'Emacs `eat` qui implémentent BSU/ESU mais ne répondent pas à la sonde de capacités. Sans effet sous tmux. Contrairement à `CLAUDE_CODE_NO_FLICKER`, qui bascule vers le [rendu plein écran](/docs/fr/fullscreen), cette variable ne change pas le moteur de rendu |


340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Plafond des appels [WebSearch](/docs/fr/tools-reference#session-search-limit) (par défaut : 200). Lorsque Claude atteint le plafond, les appels WebSearch suivants renvoient un avis lui indiquant de continuer avec les informations déjà recueillies. Accepte un nombre entier positif sans borne supérieure. Toute autre valeur est ignorée et la valeur par défaut s'applique ; le plafond peut donc être relevé mais pas désactivé. Nécessite Claude Code v2.1.212 ou ultérieur |340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Plafond des appels [WebSearch](/docs/fr/tools-reference#session-search-limit) (par défaut : 200). Lorsque Claude atteint le plafond, les appels WebSearch suivants renvoient un avis lui indiquant de continuer avec les informations déjà recueillies. Accepte un nombre entier positif sans borne supérieure. Toute autre valeur est ignorée et la valeur par défaut s'applique ; le plafond peut donc être relevé mais pas désactivé. Nécessite Claude Code v2.1.212 ou ultérieur |

341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Définir sur `1` pour lancer les serveurs MCP stdio avec uniquement un environnement de base sûr plus l'`env` configuré du serveur, au lieu d'hériter de l'environnement de votre shell |341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Définir sur `1` pour lancer les serveurs MCP stdio avec uniquement un environnement de base sûr plus l'`env` configuré du serveur, au lieu d'hériter de l'environnement de votre shell |

342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Temps écoulé en millisecondes avant qu'un appel d'outil MCP toujours en cours [soit déplacé vers une tâche en arrière-plan](/docs/fr/mcp#automatic-backgrounding-of-long-tool-calls) (par défaut : 120000, soit 2 minutes). Définir sur `0` pour désactiver la mise en arrière-plan automatique. Nécessite Claude Code v2.1.212 ou ultérieur |342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Temps écoulé en millisecondes avant qu'un appel d'outil MCP toujours en cours [soit déplacé vers une tâche en arrière-plan](/docs/fr/mcp#automatic-backgrounding-of-long-tool-calls) (par défaut : 120000, soit 2 minutes). Définir sur `0` pour désactiver la mise en arrière-plan automatique. Nécessite Claude Code v2.1.212 ou ultérieur |

343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Durée en millisecondes pendant laquelle le premier tour d'une session [non interactive](/docs/fr/headless) attend les serveurs MCP encore en cours de connexion, à la place de l'[attente du premier tour](/docs/fr/agent-sdk/mcp#connection-timing) par défaut. Lorsqu'elle est définie, l'attente couvre tous les serveurs en attente. Définir sur `0` pour ignorer l'attente. Un serveur [`--permission-prompt-tool`](/docs/fr/cli-reference#cli-flags) conserve sa propre attente `MCP_TIMEOUT` quelle que soit la valeur. Nécessite Claude Code v2.1.274 ou ultérieur |343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Durée en millisecondes pendant laquelle le premier tour d'une session [non interactive](/docs/fr/headless) attend les serveurs MCP encore en cours de connexion, à la place de l'[attente du premier tour](/docs/fr/agent-sdk/mcp#connection-timing) par défaut. Lorsqu'elle est définie, l'attente couvre tous les serveurs en attente ; dans un [environnement auto-hébergé](/docs/fr/self-hosted-environments-configuration#connection-timing), elle ne modifie que la durée de l'attente. Définissez sur `0` pour ignorer l'attente. Un serveur [`--permission-prompt-tool`](/docs/fr/cli-reference#cli-flags) conserve sa propre attente `MCP_TIMEOUT`, quelle que soit la valeur. Nécessite Claude Code v2.1.274 ou ultérieur |

344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Délai d'inactivité en millisecondes pour les appels d'outils MCP. Lorsqu'un serveur MCP stdio, HTTP, SSE, WebSocket ou [connecteur claude.ai](/docs/fr/mcp#use-mcp-servers-from-claude-ai) n'envoie ni réponse ni notification de progression pendant cette durée, l'appel d'outil s'interrompt avec une erreur au lieu d'attendre le `MCP_TOOL_TIMEOUT` global. Remplace les valeurs par défaut propres à chaque transport, à savoir 300000 (5 minutes) pour les serveurs réseau et 1800000 (30 minutes) pour les serveurs stdio. Définir sur `0` pour désactiver la vérification d'inactivité. Les valeurs inférieures à 1000 sont portées à une seconde, et la valeur est plafonnée au `MCP_TOOL_TIMEOUT` effectif. Un `timeout` par serveur d'au moins 1000 dans `.mcp.json` porte la fenêtre d'inactivité de ce serveur à au moins la valeur de `timeout`. Ne s'applique pas aux serveurs IDE ni aux serveurs SDK in-process. Nécessite Claude Code v2.1.187 ou ultérieur. Avant la v2.1.203, les serveurs stdio étaient exemptés du délai d'inactivité |344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Délai d'inactivité en millisecondes pour les appels d'outils MCP. Lorsqu'un serveur MCP stdio, HTTP, SSE, WebSocket ou [connecteur claude.ai](/docs/fr/mcp#use-mcp-servers-from-claude-ai) n'envoie ni réponse ni notification de progression pendant cette durée, l'appel d'outil s'interrompt avec une erreur au lieu d'attendre le `MCP_TOOL_TIMEOUT` global. Remplace les valeurs par défaut propres à chaque transport, à savoir 300000 (5 minutes) pour les serveurs réseau et 1800000 (30 minutes) pour les serveurs stdio. Définir sur `0` pour désactiver la vérification d'inactivité. Les valeurs inférieures à 1000 sont portées à une seconde, et la valeur est plafonnée au `MCP_TOOL_TIMEOUT` effectif. Un `timeout` par serveur d'au moins 1000 dans `.mcp.json` porte la fenêtre d'inactivité de ce serveur à au moins la valeur de `timeout`. Ne s'applique pas aux serveurs IDE ni aux serveurs SDK in-process. Nécessite Claude Code v2.1.187 ou ultérieur. Avant la v2.1.203, les serveurs stdio étaient exemptés du délai d'inactivité |

345| `CLAUDE_CODE_MESSAGING_SOCKET` | Définie par Claude Code, pas par vous : dans les sessions qui lient un [socket de boîte de réception](/docs/fr/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporte le chemin de ce socket vers les hooks et les commandes Bash au moment où il lie le socket. Dans une session qui démarre avec la messagerie activée, Claude Code lie le socket avant l'exécution de tout hook. Les autres sessions de la machine livrent les messages à ce chemin. Chaque session exporte son propre socket plutôt qu'un socket hérité d'un parent, et les messages qui y arrivent passent par les [contrôles entrants](/docs/fr/cross-session-messaging#control-inbound-messages) de la session. Les blocs `env` des paramètres ne peuvent pas la définir. Nécessite Claude Code v2.1.224 ou ultérieur |345| `CLAUDE_CODE_MESSAGING_SOCKET` | Définie par Claude Code, pas par vous : dans les sessions qui lient un [socket de boîte de réception](/docs/fr/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporte le chemin de ce socket vers les hooks et les commandes Bash au moment où il lie le socket. Dans une session qui démarre avec la messagerie activée, Claude Code lie le socket avant l'exécution de tout hook. Les autres sessions de la machine livrent les messages à ce chemin. Chaque session exporte son propre socket plutôt qu'un socket hérité d'un parent, et les messages qui y arrivent passent par les [contrôles entrants](/docs/fr/cross-session-messaging#control-inbound-messages) de la session. Les blocs `env` des paramètres ne peuvent pas la définir. Nécessite Claude Code v2.1.224 ou ultérieur |

346| `CLAUDE_CODE_MESSAGING_TOKEN` | Définie par Claude Code, pas par vous : dans les sessions qui lient un [socket de boîte de réception](/docs/fr/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporte ce jeton propre à la session vers les hooks et les commandes Bash, en plus de `CLAUDE_CODE_MESSAGING_SOCKET`. Un script qui publie sur le socket peut envoyer `{"type":"auth","token":"<token>"}` comme première ligne pour prouver qu'il appartient à la session. Sous Windows natif, Claude Code exige cette ligne et ferme toute connexion qui ne commence pas par une ligne valide. Les [règles relatives aux processus enfants propres](/docs/fr/cross-session-messaging#the-sessions-inbox-socket) indiquent quand Claude Code consulte le jeton. Chaque session exporte son propre jeton, jamais un jeton hérité d'une session parente. Les blocs `env` des paramètres ne peuvent pas la définir. Nécessite Claude Code v2.1.228 ou ultérieur |346| `CLAUDE_CODE_MESSAGING_TOKEN` | Définie par Claude Code, pas par vous : dans les sessions qui lient un [socket de boîte de réception](/docs/fr/cross-session-messaging#the-sessions-inbox-socket), Claude Code exporte ce jeton propre à la session vers les hooks et les commandes Bash, en plus de `CLAUDE_CODE_MESSAGING_SOCKET`. Un script qui publie sur le socket peut envoyer `{"type":"auth","token":"<token>"}` comme première ligne pour prouver qu'il appartient à la session. Sous Windows natif, Claude Code exige cette ligne et ferme toute connexion qui ne commence pas par une ligne valide. Les [règles relatives aux processus enfants propres](/docs/fr/cross-session-messaging#the-sessions-inbox-socket) indiquent quand Claude Code consulte le jeton. Chaque session exporte son propre jeton, jamais un jeton hérité d'une session parente. Les blocs `env` des paramètres ne peuvent pas la définir. Nécessite Claude Code v2.1.228 ou ultérieur |

errors.md +68 −9

Details

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

248| `Cannot switch renderers in this session` | [Erreurs de ligne de commande](#cannot-switch-renderers-in-this-session) |248| `Cannot switch renderers in this session` | [Erreurs de ligne de commande](#cannot-switch-renderers-in-this-session) |

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

250| `Claude Code couldn't restart` | [Erreurs de ligne de commande](#claude-code-couldnt-restart) |

250| `Couldn't open Claude Desktop` | [Erreurs de ligne de commande](#couldnt-open-claude-desktop) |251| `Couldn't open Claude Desktop` | [Erreurs de ligne de commande](#couldnt-open-claude-desktop) |

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

252| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Erreurs de ligne de commande](#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` | [Erreurs de ligne de commande](#terminal-setup-left-your-zed-keymap-unchanged) |


308| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Erreurs d'outil](#disk-quota-or-temp-filesystem-is-full) |309| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Erreurs d'outil](#disk-quota-or-temp-filesystem-is-full) |

309| `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Erreurs d'outil](#disk-quota-or-temp-filesystem-is-full) |310| `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Erreurs d'outil](#disk-quota-or-temp-filesystem-is-full) |

310| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Erreurs d'outil](#disk-quota-or-temp-filesystem-is-full) |311| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Erreurs d'outil](#disk-quota-or-temp-filesystem-is-full) |

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

311| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Erreurs d'outil](#the-source-file-is-not-valid-utf-8-text) |313| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Erreurs d'outil](#the-source-file-is-not-valid-utf-8-text) |

312| `the source file has the replacement character U+FFFD` | [Erreurs d'outil](#the-source-file-is-not-valid-utf-8-text) |314| `the source file has the replacement character U+FFFD` | [Erreurs d'outil](#the-source-file-is-not-valid-utf-8-text) |

313| `Not published: that file is on a network share` | [Erreurs d'outil](#not-published-that-file-is-on-a-network-share) |315| `Not published: that file is on a network share` | [Erreurs d'outil](#not-published-that-file-is-on-a-network-share) |


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Erreurs de session en arrière-plan](#session-isnt-responding) |336| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Erreurs de session en arrière-plan](#session-isnt-responding) |

335| `Session <id> was stopped while the respawn was in flight` | [Erreurs de session en arrière-plan](#session-was-stopped-while-the-respawn-was-in-flight) |337| `Session <id> was stopped while the respawn was in flight` | [Erreurs de session en arrière-plan](#session-was-stopped-while-the-respawn-was-in-flight) |

336| `This session was running agent '<name>', which is no longer available` | [Erreurs de session en arrière-plan](#session-agent-no-longer-available) |338| `This session was running agent '<name>', which is no longer available` | [Erreurs de session en arrière-plan](#session-agent-no-longer-available) |

339| `This session restarted <time> after its next /loop wakeup was due, so that wakeup will not fire` | [Erreurs de session en arrière-plan](#restarted-after-its-next-loop-wakeup-was-due) |

337| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Erreurs de session en arrière-plan](#claude_code_process_wrapper-launcher-errors) |340| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Erreurs de session en arrière-plan](#claude_code_process_wrapper-launcher-errors) |

338| `EUNKNOWN: unknown error, uv_spawn` | [Erreurs de session en arrière-plan](#eunknown-when-starting-a-background-session) |341| `EUNKNOWN: unknown error, uv_spawn` | [Erreurs de session en arrière-plan](#eunknown-when-starting-a-background-session) |

339| `EACCES: permission denied, posix_spawn` | [Erreurs de session en arrière-plan](#eacces-when-starting-a-background-session) |342| `EACCES: permission denied, posix_spawn` | [Erreurs de session en arrière-plan](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |442| :- | :- | :- |

440| [`CLAUDE_CODE_MAX_RETRIES`](/docs/fr/env-vars) | 10 | Nombre de nouvelles tentatives. Plafonné à 15 à partir de v2.1.186 ; à partir de v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` augmente la valeur par défaut et supprime le plafond. Réduisez-le pour afficher les défaillances plus rapidement dans les scripts. |443| [`CLAUDE_CODE_MAX_RETRIES`](/docs/fr/env-vars) | 10 | Nombre de nouvelles tentatives. Plafonné à 15 à partir de v2.1.186 ; à partir de v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` augmente la valeur par défaut et supprime le plafond. Réduisez-le pour afficher les défaillances plus rapidement dans les scripts. |

441| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/fr/env-vars) | non défini | Définissez sur `1` dans les sessions sans surveillance telles que les travaux CI pour réessayer les erreurs de capacité `429` et `529` indéfiniment au lieu d'échouer après `CLAUDE_CODE_MAX_RETRIES` tentatives. Claude Code échoue immédiatement lorsqu'une requête à vitesse standard obtient un `429` qui signale une limite de dépenses ou des crédits d'utilisation épuisés, même un provenant d'un [plafond de dépenses de passerelle](#spend-limit-reached) qui se réinitialise selon un calendrier. Avant v2.1.239, le watchdog réessayait ceux-ci indéfiniment. Pour les requêtes en mode rapide, voir [Handle rate limits](/docs/fr/fast-mode#handle-rate-limits). Sur v2.1.199 ou ultérieur, il augmente également le nombre de tentatives par défaut pour les autres erreurs transitoires, telles que les erreurs serveur, les délais d'attente et les connexions interrompues, à 300, environ trois heures de backoff, et supprime le plafond de 15 sur `CLAUDE_CODE_MAX_RETRIES` si vous définissez explicitement cette variable. |444| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/fr/env-vars) | non défini | Définissez sur `1` dans les sessions sans surveillance telles que les travaux CI pour réessayer les erreurs de capacité `429` et `529` indéfiniment au lieu d'échouer après `CLAUDE_CODE_MAX_RETRIES` tentatives. Claude Code échoue immédiatement lorsqu'une requête à vitesse standard obtient un `429` qui signale une limite de dépenses ou des crédits d'utilisation épuisés, même un provenant d'un [plafond de dépenses de passerelle](#spend-limit-reached) qui se réinitialise selon un calendrier. Avant v2.1.239, le watchdog réessayait ceux-ci indéfiniment. Pour les requêtes en mode rapide, voir [Handle rate limits](/docs/fr/fast-mode#handle-rate-limits). Sur v2.1.199 ou ultérieur, il augmente également le nombre de tentatives par défaut pour les autres erreurs transitoires, telles que les erreurs serveur, les délais d'attente et les connexions interrompues, à 300, environ trois heures de backoff, et supprime le plafond de 15 sur `CLAUDE_CODE_MAX_RETRIES` si vous définissez explicitement cette variable. |

445| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](/docs/fr/env-vars) | non défini | Durée maximale en millisecondes pendant laquelle chaque requête API attend la fin des erreurs `429` et `529` lorsque `CLAUDE_CODE_RETRY_WATCHDOG` est défini. Lorsqu'elle n'est pas définie, l'attente n'a pas de limite. Nécessite Claude Code v2.1.295 ou ultérieur. |

442| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/fr/env-vars) | 500 | Délai initial en millisecondes du backoff entre les nouvelles tentatives d'une requête que l'API rejette avec une erreur de surcharge `529`. Augmentez-le, jusqu'à 32000, pour répartir les nouvelles tentatives sur une période plus longue lorsque l'API est à pleine capacité. Sans effet lorsque `CLAUDE_CODE_RETRY_WATCHDOG` est défini sur `1`, ou lorsque la requête rejetée a été envoyée en [mode rapide](/docs/fr/fast-mode#handle-rate-limits). Nécessite Claude Code v2.1.292 ou ultérieur. |446| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/fr/env-vars) | 500 | Délai initial en millisecondes du backoff entre les nouvelles tentatives d'une requête que l'API rejette avec une erreur de surcharge `529`. Augmentez-le, jusqu'à 32000, pour répartir les nouvelles tentatives sur une période plus longue lorsque l'API est à pleine capacité. Sans effet lorsque `CLAUDE_CODE_RETRY_WATCHDOG` est défini sur `1`, ou lorsque la requête rejetée a été envoyée en [mode rapide](/docs/fr/fast-mode#handle-rate-limits). Nécessite Claude Code v2.1.292 ou ultérieur. |

443| [`API_TIMEOUT_MS`](/docs/fr/env-vars) | 600000 | Délai d'attente par requête en millisecondes. Augmentez-le pour les réseaux lents ou les proxys. Il plafonne également la durée pendant laquelle Claude Code attend les en-têtes de réponse, décrite dans [No response from API](#no-response-from-api). |447| [`API_TIMEOUT_MS`](/docs/fr/env-vars) | 600000 | Délai d'attente par requête en millisecondes. Augmentez-le pour les réseaux lents ou les proxys. Il plafonne également la durée pendant laquelle Claude Code attend les en-têtes de réponse, décrite dans [No response from API](#no-response-from-api). |

444| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/fr/env-vars) | non défini | Limite du nombre de renvois d'une [requête sans streaming](#streaming-response-ended-before-any-complete-data-was-received) qui expire. Une fois la limite atteinte, la requête échoue. Une réponse de Claude dont la génération dure plus longtemps que le délai d'expiration expire de nouveau à chaque renvoi ; définissez donc un nombre faible tel que `0` pour échouer plus tôt. Chaque tentative sans streaming expire après 300 secondes dans une session locale, ou après `API_TIMEOUT_MS` lorsque vous définissez une valeur positive. Nécessite Claude Code v2.1.285 ou ultérieur. |448| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/fr/env-vars) | non défini | Limite du nombre de renvois d'une [requête sans streaming](#streaming-response-ended-before-any-complete-data-was-received) qui expire. Une fois la limite atteinte, la requête échoue. Une réponse de Claude dont la génération dure plus longtemps que le délai d'expiration expire de nouveau à chaque renvoi ; définissez donc un nombre faible tel que `0` pour échouer plus tôt. Chaque tentative sans streaming expire après 300 secondes dans une session locale, ou après `API_TIMEOUT_MS` lorsque vous définissez une valeur positive. Nécessite Claude Code v2.1.285 ou ultérieur. |


1900 1904 

1901Claude Code ignore cette vérification lorsqu'un [fichier de paramètres gérés, une politique MDM ou un assistant de politique](/docs/fr/managed-settings) définit [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) sur `"gateway"`, ou définit [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl) sans `forceLoginMethod`. Avec l'une ou l'autre configuration, Claude Code ouvre l'étape de connexion sur l'écran **Cloud gateway** plutôt qu'une méthode de connexion Anthropic. Claude Code ignore également la vérification lorsqu'une source de paramètres gérés sur la machine existe mais ne peut pas être lue, car cette source peut contenir la configuration de la passerelle. Avant la v2.1.247, Claude Code exécutait la vérification sous cette configuration aussi, et se fermait avec cette erreur lorsque les endpoints d'Anthropic étaient inaccessibles.1905Claude Code ignore cette vérification lorsqu'un [fichier de paramètres gérés, une politique MDM ou un assistant de politique](/docs/fr/managed-settings) définit [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) sur `"gateway"`, ou définit [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl) sans `forceLoginMethod`. Avec l'une ou l'autre configuration, Claude Code ouvre l'étape de connexion sur l'écran **Cloud gateway** plutôt qu'une méthode de connexion Anthropic. Claude Code ignore également la vérification lorsqu'une source de paramètres gérés sur la machine existe mais ne peut pas être lue, car cette source peut contenir la configuration de la passerelle. Avant la v2.1.247, Claude Code exécutait la vérification sous cette configuration aussi, et se fermait avec cette erreur lorsque les endpoints d'Anthropic étaient inaccessibles.

1902 1906 

1907Claude Code ignore également la vérification sur une machine sans paramètres gérés lorsque votre propre `~/.claude/settings.json` [nomme une passerelle](/docs/fr/claude-apps-gateway#set-the-gateway-url-in-user-settings) avec `forceLoginMethod` et `forceLoginGatewayUrl`. Avant la v2.1.295, Claude Code exécutait la vérification dans ce cas.

1908 

1903**À faire :**1909**À faire :**

1904 1910 

1905* Si le message nomme une variable proxy, vérifiez que sa valeur pointe vers le bon proxy et demandez à votre équipe réseau d'autoriser les connexions HTTPS via celui-ci vers l'hôte du message. Consultez [Configuration réseau](/docs/fr/network-config).1911* Si le message nomme une variable proxy, vérifiez que sa valeur pointe vers le bon proxy et demandez à votre équipe réseau d'autoriser les connexions HTTPS via celui-ci vers l'hôte du message. Consultez [Configuration réseau](/docs/fr/network-config).


3412 3418 

3413Claude Code affiche la même erreur pour tout skill qui [injecte du contexte dynamique](/docs/fr/skills#when-an-injected-command-fails), et une commande injectée en échec interrompt l'invocation de ce skill. Deux messages apparentés se déclenchent avant même l'exécution de la commande :3419Claude Code affiche la même erreur pour tout skill qui [injecte du contexte dynamique](/docs/fr/skills#when-an-injected-command-fails), et une commande injectée en échec interrompt l'invocation de ce skill. Deux messages apparentés se déclenchent avant même l'exécution de la commande :

3414 3420 

3415* `Shell command permission check failed for pattern "..."` : la vérification de permission de la commande ne l'a pas autorisée. [Vérifications de permission sur les commandes injectées](/docs/fr/skills#permission-checks-on-injected-commands) explique quels résultats provoquent une interruption dans chaque mode de permission et comment pré-approuver une commande avec `allowed-tools`3421* `Shell command permission check failed for pattern "..."` : la vérification des permissions de la commande ne l'a pas autorisée. [Vérifications des permissions sur les commandes injectées](/docs/fr/skills#permission-checks-on-injected-commands) décrit quels résultats provoquent l'interruption dans chaque mode de permission et comment pré-approuver une commande avec `allowed-tools`

3416* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` : le frontmatter du skill exige bash sur une machine qui ne l'a pas. Installez Git for Windows ou modifiez le frontmatter en `shell: powershell`. Consultez [Comment s'exécutent les commandes injectées](/docs/fr/skills#how-injected-commands-run)3422* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` : le frontmatter du skill exige bash sur une machine qui n'en dispose pas. Installez Git for Windows ou modifiez le frontmatter en `shell: powershell`. Consultez [Comment les commandes injectées s'exécutent](/docs/fr/skills#how-injected-commands-run)

3417 3423 

3418**Que faire :**3424**Que faire :**

3419 3425 


3562 3568 

3563* **Vous n'avez pas passé de branche de base** : Claude Code a effectué la comparaison avec la branche par défaut du dépôt et suggère de passer explicitement votre branche de base, comme dans l'exemple ci-dessus3569* **Vous n'avez pas passé de branche de base** : Claude Code a effectué la comparaison avec la branche par défaut du dépôt et suggère de passer explicitement votre branche de base, comme dans l'exemple ci-dessus

3564* **Vous avez passé une branche de base déjà présente dans votre clone** : l'indication est ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3570* **Vous avez passé une branche de base déjà présente dans votre clone** : l'indication est ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3565* **Vous avez passé une branche de base absente de votre clone** : Claude Code l'a récupérée depuis origin avant la comparaison. L'indication est ``<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>`)`` ; lorsque Claude Code ne peut pas déterminer si votre clone est superficiel, il suggère plutôt `git fetch --unshallow origin`. Avant la v2.1.221, l'indication suggérait `git fetch --unshallow origin` pour chaque branche de base récupérée, et sur un clone complet cette commande échoue avec `fatal: --unshallow on a complete repository does not make sense`.3571* **Vous avez passé une branche de base qui ne se trouvait pas dans votre clone** : Claude Code l'a récupérée depuis origin avant la comparaison. L'indication est ``<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>`)`` ; lorsque Claude Code ne peut pas déterminer si votre clone est superficiel, il suggère `git fetch --unshallow origin` à la place. Avant la v2.1.221, l'indication suggérait `git fetch --unshallow origin` pour toute branche de base récupérée, et sur un clone complet cette commande échoue avec `fatal: --unshallow on a complete repository does not make sense`.

3566 3572 

3567**Que faire :**3573**Que faire :**

3568 3574 


3816 3822 

3817* Dans une session démarrée sans ces restrictions, exécutez `/tui fullscreen`, ou `/tui default` pour revenir en arrière. Claude Code y enregistre le [paramètre `tui`](/docs/fr/settings-reference#tui)3823* Dans une session démarrée sans ces restrictions, exécutez `/tui fullscreen`, ou `/tui default` pour revenir en arrière. Claude Code y enregistre le [paramètre `tui`](/docs/fr/settings-reference#tui)

3818 3824 

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

3826 Claude Code couldn't restart

3827</h3>

3828 

3829Claude Code était en train de redémarrer, par exemple pour activer ou désactiver le rendu plein écran après que vous avez exécuté [`/tui`](/docs/fr/fullscreen#enable-fullscreen-rendering). Il a fermé la session mais n'a pas pu démarrer le nouveau processus ; il a donc affiché ce message et s'est terminé avec le statut 1 :

3830 

3831```text theme={null}

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

3833```

3834 

3835Lorsque le redémarrage n'avait aucune conversation à rouvrir, par exemple parce que `/tui` était votre première saisie dans une nouvelle session, le message est `Claude Code couldn't restart. Start Claude Code again.`

3836 

3837**Que faire :**

3838 

3839* Exécutez à nouveau `claude` dans votre shell depuis le même répertoire. Si le message indiquait que votre conversation est enregistrée, exécutez [`/resume`](/docs/fr/sessions#resume-a-session) dans la nouvelle session et sélectionnez-la

3840* Si les redémarrages continuent d'échouer, démarrez Claude Code depuis votre shell avec [`claude --debug-file claude-debug.log`](/docs/fr/cli-reference#cli-flags). Si un redémarrage depuis cette session échoue, le fichier `claude-debug.log` situé dans le répertoire de démarrage consigne une ligne `Failed to relaunch:` contenant l'erreur du système d'exploitation. Incluez cette ligne lorsque vous [signalez le problème](#report-an-error)

3841 

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

3820 Impossible d'ouvrir Claude Desktop3843 Impossible d'ouvrir Claude Desktop

3821</h3>3844</h3>


4593* Ou redémarrez Claude Code avec [`CLAUDE_CODE_TMPDIR`](/docs/fr/env-vars) défini sur un répertoire sur un système de fichiers avec de la place4616* Ou redémarrez Claude Code avec [`CLAUDE_CODE_TMPDIR`](/docs/fr/env-vars) défini sur un répertoire sur un système de fichiers avec de la place

4594* Puis demandez à Claude d'exécuter la commande à nouveau. La sortie qu'elle a imprimée a été perdue, pas tronquée4617* Puis demandez à Claude d'exécuter la commande à nouveau. La sortie qu'elle a imprimée a été perdue, pas tronquée

4595 4618 

4619<h3 id="file-is-not-valid-utf-8">

4620 File is not valid UTF-8

4621</h3>

4622 

4623Claude a utilisé l'outil Edit ou NotebookEdit sur un fichier dont les octets ne se décodent pas en UTF-8, et Claude Code a refusé la modification. Rien n'a été écrit, donc le fichier est resté tel quel. Ces outils enregistrent l'intégralité du fichier en UTF-8, ce qui aurait transformé chaque octet qu'ils ne pouvaient pas décoder en caractère de remplacement `U+FFFD`. Le message apparaît dans le résultat de l'outil :

4624 

4625```text wrap theme={null}

4626File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary. This tool saves the whole file as UTF-8, which would replace every byte it cannot decode with U+FFFD. Nothing was written. Make the change with a shell command that reads and writes the file in its own encoding, or ask the user whether to convert the file to UTF-8 first.

4627```

4628 

4629Un fichier censé être en UTF-8 reçoit également ce message dès qu'il contient ne serait-ce qu'une seule séquence d'octets invalide, car la vérification porte sur l'ensemble des octets du fichier.

4630 

4631**Que faire :**

4632 

4633* Pour conserver le fichier dans son encodage actuel, laissez Claude effectuer la modification avec une commande shell qui lit et écrit le fichier dans cet encodage, comme le message le lui indique

4634* Pour continuer à modifier le fichier avec l'outil Edit, convertissez-le en UTF-8, ou corrigez les octets invalides dans un fichier censé être en UTF-8, puis demandez à Claude d'effectuer à nouveau la modification

4635 

4636Avant la v2.1.296, Edit et NotebookEdit appliquaient une telle modification et enregistraient chaque octet qu'ils ne pouvaient pas décoder sous la forme `U+FFFD`. Sur ces versions, mettez à jour Claude Code.

4637 

4596<h3 id="the-source-file-is-not-valid-utf-8-text">4638<h3 id="the-source-file-is-not-valid-utf-8-text">

4597 The source file is not valid UTF-8 text4639 The source file is not valid UTF-8 text

4598</h3>4640</h3>


4752 Commande bloquée par les vérifications d'isolation worktree4794 Commande bloquée par les vérifications d'isolation worktree

4753</h3>4795</h3>

4754 4796 

4755Claude a exécuté une commande Bash ou Monitor dans une [session isolée dans un worktree](/docs/fr/worktrees#how-claude-code-enforces-isolation), et Claude Code l'a refusée pour l'une de deux raisons :4797Claude a exécuté une commande Bash, [PowerShell](/docs/fr/tools-reference#powershell-tool) ou [Monitor](/docs/fr/tools-reference#monitor-tool) dans une [session isolée dans un worktree](/docs/fr/worktrees#how-claude-code-enforces-isolation), et Claude Code l'a refusée pour l'une de ces raisons :

4756 4798 

4757* La commande pointe git vers le checkout principal.4799* La commande s'exécuterait dans le checkout principal ou dans un autre worktree. Le message indique que son répertoire de travail `resolved to the shared checkout` ou `is in a different worktree`.

4758* Claude Code ne peut pas vérifier à partir du texte de la commande que tout git que la commande exécute reste à l'intérieur du worktree. Une commande qui ne nomme jamais git peut toujours être refusée pour cette raison, car l'expansion d'une indirection de variable telle que `${!name}` ou l'exécution d'une substitution de fonction Bash telle que `${ command; }` produit une valeur à l'exécution qui peut elle-même être une commande.4800* Une commande Bash ou Monitor pointe git vers le checkout principal.

4801* Claude Code ne peut pas vérifier à partir du texte d'une commande Bash ou Monitor que tout git que la commande exécute reste à l'intérieur du worktree. Une commande qui ne nomme jamais git peut toujours être refusée pour cette raison, car l'expansion d'une indirection de variable telle que `${!name}` ou l'exécution d'une substitution de fonction Bash telle que `${ command; }` produit une valeur à l'exécution qui peut elle-même être une commande.

4759 4802 

4760Le milieu du message nomme ce qui n'a pas pu être vérifié :4803Le message indique `is isolated in the worktree <path>, but this command`, suivi de la raison, par exemple une commande dont Claude Code n'a pas pu vérifier le texte :

4761 4804 

4762```text wrap theme={null}4805```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.4806This 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 4808 

4766**Ce qu'il faut faire :**4809**Ce qu'il faut faire :**

4767 4810 

4768* Généralement rien : Claude lit le message et réécrit la commande de la manière que sa phrase finale demande4811* **Git pointé vers le checkout principal, ou texte de commande impossible à vérifier** : rien. Claude lit le message et réécrit la commande de la manière que sa phrase finale demande. Si une commande que vous avez demandée continue d'être refusée à cause d'une expansion dans son texte, orthographiez la valeur signalée littéralement et exécutez git comme sa propre commande simple à partir de l'intérieur du worktree

4769* Si une commande que vous avez demandée continue d'être refusée, orthographiez la valeur signalée littéralement : remplacez l'indirection ou la substitution par sa valeur, et exécutez git comme sa propre commande simple à partir de l'intérieur du worktree

4770* Pour agir sur le checkout principal à dessein, exécutez la commande vous-même dans un terminal en dehors de la session4812* Pour agir sur le checkout principal à dessein, exécutez la commande vous-même dans un terminal en dehors de la session

4771 4813 

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


4946* Ou reprenez avec `--agent <name>` nommant un agent qui existe, pour exécuter la session en tant que cet agent à la place4988* Ou reprenez avec `--agent <name>` nommant un agent qui existe, pour exécuter la session en tant que cet agent à la place

4947* Si l'agent est limité au projet et vous n'avez pas approuvé le répertoire original de la session, exécutez Claude Code là une fois, acceptez le dialogue de confiance, puis reprenez à nouveau4989* Si l'agent est limité au projet et vous n'avez pas approuvé le répertoire original de la session, exécutez Claude Code là une fois, acceptez le dialogue de confiance, puis reprenez à nouveau

4948 4990 

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

4992 Cette session a redémarré après l'échéance de son prochain réveil /loop

4993</h3>

4994 

4995Une [boucle `/loop` à rythme autonome](/docs/fr/scheduled-tasks#let-claude-choose-the-interval) dans une [session en arrière-plan](/docs/fr/agent-view) s'est arrêtée. Le processus de la session s'est terminé pendant que la boucle attendait son prochain réveil, et ce réveil est arrivé à échéance avant le démarrage du [processus suivant](/docs/fr/agent-view#the-supervisor-process) de la session. Le réveil manqué ne se déclenche pas en retard. La notification indique le retard du réveil au moment où la session a redémarré :

4996 

4997```text theme={null}

4998This 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.

4999```

5000 

5001Avant v2.1.295, la boucle s'arrêtait dans cette situation sans notification.

5002 

5003**Ce qu'il faut faire :**

5004 

5005* Pour continuer la boucle, [répondez à la session](/docs/fr/agent-view#peek-and-reply) en le précisant, par exemple `keep the loop running`. Claude lit la notification avec votre réponse et peut planifier le prochain réveil

5006* Si vous en avez terminé avec la boucle, ne faites rien. Elle s'est déjà arrêtée

5007 

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

4950 Erreurs du lanceur CLAUDE\_CODE\_PROCESS\_WRAPPER5009 Erreurs du lanceur CLAUDE\_CODE\_PROCESS\_WRAPPER

4951</h3>5010</h3>

headless.md +21 −19

Details

89* **Surveillances [Monitor](/docs/fr/tools-reference#monitor-tool)** : l'exécution attend jusqu'à ce que la surveillance expire ou que la limite de 10 minutes mette fin à l'attente, selon ce qui arrive en premier. Pendant l'attente, Claude continue de répondre à ce que la surveillance signale. Par défaut, une surveillance expire cinq minutes après que Claude l'a démarrée.89* **Surveillances [Monitor](/docs/fr/tools-reference#monitor-tool)** : l'exécution attend jusqu'à ce que la surveillance expire ou que la limite de 10 minutes mette fin à l'attente, selon ce qui arrive en premier. Pendant l'attente, Claude continue de répondre à ce que la surveillance signale. Par défaut, une surveillance expire cinq minutes après que Claude l'a démarrée.

90* **Réveils en attente** : dans une exécution dont vous avez passé le prompt sous forme de texte plutôt qu'avec `--input-format stream-json`, lorsque Claude a planifié un [réveil `/loop` à son propre rythme](/docs/fr/scheduled-tasks#let-claude-choose-the-interval), l'exécution attend que chaque réveil se déclenche et exécute son itération jusqu'à la [fin de la boucle](/docs/fr/scheduled-tasks#stop-a-loop), même au-delà de la limite de 10 minutes.90* **Réveils en attente** : dans une exécution dont vous avez passé le prompt sous forme de texte plutôt qu'avec `--input-format stream-json`, lorsque Claude a planifié un [réveil `/loop` à son propre rythme](/docs/fr/scheduled-tasks#let-claude-choose-the-interval), l'exécution attend que chaque réveil se déclenche et exécute son itération jusqu'à la [fin de la boucle](/docs/fr/scheduled-tasks#stop-a-loop), même au-delà de la limite de 10 minutes.

91 91 

92Lorsque stderr est un terminal et que l'exécution a attendu cinq secondes, Claude Code affiche sur stderr une ligne qui commence par `Waiting for background work to finish` et nomme le travail concerné. Avec une [sortie `json` ou `stream-json`](#get-structured-output), la ligne ne s'affiche que lorsque stdout n'est pas un terminal, de sorte que le JSON lu par votre script ne la contient jamais.

93 

92Si l'exécution atteint sa limite [`--max-budget-usd`](/docs/fr/cli-reference#cli-flags), Claude Code arrête le travail en arrière-plan restant au lieu d'attendre.94Si l'exécution atteint sa limite [`--max-budget-usd`](/docs/fr/cli-reference#cli-flags), Claude Code arrête le travail en arrière-plan restant au lieu d'attendre.

93 95 

94Lorsque le travail en arrière-plan démarre un autre tour, l'exécution affiche le résultat de chaque tour avec la sortie `text` par défaut, et le résultat du dernier tour avec la sortie `json`. Avant la v2.1.295, l'exécution n'affichait également que le résultat du dernier tour avec la sortie `text`.96Lorsque le travail en arrière-plan démarre un autre tour, l'exécution affiche le résultat de chaque tour avec la sortie `text` par défaut, et le résultat du dernier tour avec la sortie `json`. Avant la v2.1.295, l'exécution n'affichait également que le résultat du dernier tour avec la sortie `text`.


133Avec `--output-format json`, la charge utile de réponse inclut `total_cost_usd` et une ventilation des coûts par modèle, afin que les appelants scriptés puissent suivre les dépenses sans consulter le [tableau de bord d'utilisation](/docs/fr/costs). Lorsque vous continuez une conversation antérieure avec `--continue` ou `--resume`, l'exécution rapporte le total de la conversation, [les dépenses des exécutions antérieures incluses](/docs/fr/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Les deux chiffres sont des [estimations côté client](/docs/fr/agent-sdk/cost-tracking) et peuvent différer de votre facture réelle.135Avec `--output-format json`, la charge utile de réponse inclut `total_cost_usd` et une ventilation des coûts par modèle, afin que les appelants scriptés puissent suivre les dépenses sans consulter le [tableau de bord d'utilisation](/docs/fr/costs). Lorsque vous continuez une conversation antérieure avec `--continue` ou `--resume`, l'exécution rapporte le total de la conversation, [les dépenses des exécutions antérieures incluses](/docs/fr/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Les deux chiffres sont des [estimations côté client](/docs/fr/agent-sdk/cost-tracking) et peuvent différer de votre facture réelle.

134 136 

135<Note>137<Note>

136 L'entrée stdin transmise est limitée à 10 Mo. Si vous dépassez la limite, Claude Code se ferme avec une erreur claire et un statut non nul. Pour travailler avec des entrées plus volumineuses, écrivez le contenu dans un fichier et référencez le chemin du fichier dans votre invite au lieu de le transmettre.138 L'entrée stdin transmise est limitée à 10 Mo. Si vous dépassez la limite, Claude Code se ferme avec une erreur claire et un statut non nul. Pour travailler avec des entrées plus volumineuses, écrivez le contenu dans un fichier et référencez le chemin du fichier dans votre prompt au lieu de le transmettre.

137</Note>139</Note>

138 140 

139Si Claude Code ne peut pas lire stdin, par exemple parce que le processus qui l'a démarré a déconnecté son extrémité, Claude Code imprime un avertissement sur stderr et continue avec l'invite de la ligne de commande. Avant la v2.1.211, une stdin illisible sur Windows plantait la session ou la fermait silencieusement sans sortie.141Si Claude Code ne peut pas lire stdin, par exemple parce que le processus qui l'a démarré a déconnecté son extrémité, Claude Code imprime un avertissement sur stderr et continue avec le prompt de la ligne de commande. Avant la v2.1.211, une stdin illisible sur Windows plantait la session ou la fermait silencieusement sans sortie.

140 142 

141<h3 id="add-claude-to-a-build-script">143<h3 id="add-claude-to-a-build-script">

142 Ajouter Claude à un script de compilation144 Ajouter Claude à un script de compilation


203 Réponses en streaming205 Réponses en streaming

204</h3>206</h3>

205 207 

206Utilisez `--output-format stream-json` avec `--verbose` et `--include-partial-messages` pour recevoir les jetons au fur et à mesure qu'ils sont générés. Chaque ligne est un objet JSON représentant un événement :208Utilisez `--output-format stream-json` avec `--verbose` et `--include-partial-messages` pour recevoir les tokens au fur et à mesure qu'ils sont générés. Chaque ligne est un objet JSON représentant un événement :

207 209 

208```bash theme={null}210```bash theme={null}

209claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages211claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages


257 Gérer les tentatives d'API259 Gérer les tentatives d'API

258</h4>260</h4>

259 261 

260Lorsqu'une requête API échoue avec une erreur réessayable, Claude Code émet un événement `system/api_retry` avant de réessayer. Sur la v2.1.246 ou ultérieur, lorsqu'un `401` ou `403` rejette une credential [`apiKeyHelper`](/docs/fr/settings-reference#apikeyhelper), Claude Code effectue les deux premières tentatives silencieusement sans événement, puis émet l'événement comme d'habitude à partir de la troisième tentative consécutive. Les tentatives silencieuses comptent toujours vers `attempt`. Vous pouvez utiliser l'événement pour afficher la progression des tentatives dans votre propre interface.262Lorsqu'une requête API échoue avec une erreur réessayable, Claude Code émet un événement `system/api_retry` avant de réessayer. Sur la v2.1.246 ou ultérieur, lorsqu'un `401` ou `403` rejette des identifiants [`apiKeyHelper`](/docs/fr/settings-reference#apikeyhelper), Claude Code effectue les deux premières tentatives silencieusement sans événement, puis émet l'événement comme d'habitude à partir de la troisième tentative consécutive. Les tentatives silencieuses comptent toujours vers `attempt`. Vous pouvez utiliser l'événement pour afficher la progression des tentatives dans votre propre interface.

261 263 

262| Champ | Type | Description |264| Champ | Type | Description |

263| - | - | - |265| - | - | - |


296 298 

297Lorsqu'un répertoire ou une archive `--plugin-dir` lui-même échoue à se charger, son entrée `plugin_errors` inclut le chemin absolu résolu en tant que `path`. Utilisez-le pour déterminer lequel de plusieurs valeurs `--plugin-dir` a échoué. Le champ `path` nécessite Claude Code v2.1.283 ou ultérieur.299Lorsqu'un répertoire ou une archive `--plugin-dir` lui-même échoue à se charger, son entrée `plugin_errors` inclut le chemin absolu résolu en tant que `path`. Utilisez-le pour déterminer lequel de plusieurs valeurs `--plugin-dir` a échoué. Le champ `path` nécessite Claude Code v2.1.283 ou ultérieur.

298 300 

299Utilisez les champs du serveur MCP de la même manière. Lorsque vous passez [`--mcp-config`](/docs/fr/cli-reference#cli-flags) avec `-p`, Claude Code attend les serveurs toujours en attente avant d'exécuter le premier tour, jusqu'au délai d'expiration de démarrage [`MCP_TIMEOUT`](/docs/fr/env-vars), 30 secondes par défaut. Un serveur distant avec une [liste d'outils mise en cache](/docs/fr/agent-sdk/mcp#connection-timing) ignore l'attente, affiche `pending` dans `system/init` et se connecte lors de son premier appel d'outil. L'attente nécessite Claude Code v2.1.221 ou ultérieur.301Utilisez les champs du serveur MCP de la même manière. Lorsque vous passez [`--mcp-config`](/docs/fr/cli-reference#cli-flags) avec `-p`, Claude Code attend les serveurs toujours en attente avant d'exécuter le premier tour, jusqu'au délai d'expiration de démarrage [`MCP_TIMEOUT`](/docs/fr/env-vars), 30 secondes par défaut. Un serveur distant avec une [liste d'outils mise en cache](/docs/fr/agent-sdk/mcp#connection-timing) ignore l'attente, affiche `pending` dans `system/init` et se connecte lors de son premier appel d'outil. Dans un [environnement auto-hébergé](/docs/fr/self-hosted-environments-configuration#connection-timing), une attente plus courte s'applique à la place. L'attente nécessite Claude Code v2.1.221 ou ultérieur.

300 302 

301Claude Code valide chaque entrée `--mcp-config` au démarrage et ignore les entrées qui échouent la validation, par exemple une entrée `url` sans `type`. L'exécution continue et se ferme correctement, vérifiez donc ces champs pour détecter un serveur qui ne s'est jamais chargé :303Claude Code valide chaque entrée `--mcp-config` au démarrage et ignore les entrées qui échouent la validation, par exemple une entrée `url` sans `type`. L'exécution continue et se ferme correctement, vérifiez donc ces champs pour détecter un serveur qui ne s'est jamais chargé :

302 304 


317| - | - | - |319| - | - | - |

318| `type` | `"system"` | type de message |320| `type` | `"system"` | type de message |

319| `subtype` | `"plugin_install"` | identifie ceci comme un événement d'installation de plugin |321| `subtype` | `"plugin_install"` | identifie ceci comme un événement d'installation de plugin |

320| `status` | `"started"`, `"installed"`, `"failed"` ou `"completed"` | `started` et `completed` encadrent l'installation globale ; `installed` et `failed` rapportent les marketplaces individuels |322| `status` | `"started"`, `"installed"`, `"failed"` ou `"completed"` | `started` et `completed` encadrent l'installation globale ; `installed` et `failed` rapportent les marketplaces individuelles |

321| `name` | chaîne, optionnel | nom du marketplace, présent sur `installed` et `failed` |323| `name` | chaîne, optionnel | nom de la marketplace, présent sur `installed` et `failed` |

322| `error` | chaîne, optionnel | message d'échec, présent sur `failed` |324| `error` | chaîne, optionnel | message d'échec, présent sur `failed` |

323| `uuid` | chaîne | identifiant d'événement unique |325| `uuid` | chaîne | identifiant d'événement unique |

324| `session_id` | chaîne | session à laquelle appartient l'événement |326| `session_id` | chaîne | session à laquelle appartient l'événement |


338 340 

339* **`auto`** : passez `--permission-mode auto` pour qu'un classificateur examine la plupart des actions au lieu de vous341* **`auto`** : passez `--permission-mode auto` pour qu'un classificateur examine la plupart des actions au lieu de vous

340* **`dontAsk`** : Claude Code refuse chaque appel qui demanderait autrement, ce qui est utile pour les exécutions CI verrouillées. Les actions qui n'ont pas besoin d'approbation en mode Manual s'exécutent toujours, telles que les lectures de fichiers dans vos répertoires de travail et l'[ensemble de commandes en lecture seule](/docs/fr/permissions#read-only-commands), ainsi que les actions que vos entrées `--allowedTools` ou les règles `permissions.allow` couvrent. `AskUserQuestion`, les outils de connecteur [que votre organisation a définis sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools), et les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool) sont refusés même lorsqu'une règle d'autorisation correspond342* **`dontAsk`** : Claude Code refuse chaque appel qui demanderait autrement, ce qui est utile pour les exécutions CI verrouillées. Les actions qui n'ont pas besoin d'approbation en mode Manual s'exécutent toujours, telles que les lectures de fichiers dans vos répertoires de travail et l'[ensemble de commandes en lecture seule](/docs/fr/permissions#read-only-commands), ainsi que les actions que vos entrées `--allowedTools` ou les règles `permissions.allow` couvrent. `AskUserQuestion`, les outils de connecteur [que votre organisation a définis sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools), et les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool) sont refusés même lorsqu'une règle d'autorisation correspond

341* **`acceptEdits`** : Claude écrit les fichiers sans demander, et Claude Code approuve automatiquement les commandes de système de fichiers courants telles que `mkdir`, `touch`, `mv` et `cp`. Les [actions qu'aucun mode n'approuve automatiquement](/docs/fr/permission-modes#actions-no-mode-auto-approves) s'appliquent toujours. Hormis l'ensemble de commandes en lecture seule, les autres commandes shell et requêtes réseau ont toujours besoin d'une entrée `--allowedTools` ou d'une règle `permissions.allow`. Consultez [ce que `acceptEdits` approuve automatiquement](/docs/fr/permission-modes#auto-approve-file-edits-with-acceptedits-mode) pour la liste complète343* **`acceptEdits`** : Claude écrit les fichiers sans demander, et Claude Code approuve automatiquement les commandes de système de fichiers courantes telles que `mkdir`, `touch`, `mv` et `cp`. Les [actions qu'aucun mode n'approuve automatiquement](/docs/fr/permission-modes#actions-no-mode-auto-approves) s'appliquent toujours. Hormis l'ensemble de commandes en lecture seule, les autres commandes shell et requêtes réseau ont toujours besoin d'une entrée `--allowedTools` ou d'une règle `permissions.allow`. Consultez [ce que `acceptEdits` approuve automatiquement](/docs/fr/permission-modes#auto-approve-file-edits-with-acceptedits-mode) pour la liste complète

342 344 

343Cet exemple applique les corrections de lint avec `acceptEdits` comme base de référence :345Cet exemple applique les corrections de lint avec `acceptEdits` comme base de référence :

344 346 


347```349```

348 350 

349<h3 id="turn-off-permission-prompts-in-unattended-runs">351<h3 id="turn-off-permission-prompts-in-unattended-runs">

350 Désactiver les invites de permission dans les exécutions sans surveillance352 Désactiver les demandes de permission dans les exécutions sans surveillance

351</h3>353</h3>

352 354 

353Passez `--permission-prompts none` lorsque personne n'est disponible pour répondre aux invites de permission, par exemple dans une tâche planifiée. L'indicateur est plus important lorsque votre exécution a un hôte de permission : une application Agent SDK avec un rappel [`canUseTool`](/docs/fr/agent-sdk/user-input), ou un outil MCP que vous passez avec [`--permission-prompt-tool`](/docs/fr/cli-reference#cli-flags). Sans l'indicateur, votre exécution attend que cet hôte réponde à chaque demande de permission.355Passez `--permission-prompts none` lorsque personne n'est disponible pour répondre aux demandes de permission, par exemple dans une tâche planifiée. Le flag est plus important lorsque votre exécution a un hôte de permission : une application Agent SDK avec un rappel [`canUseTool`](/docs/fr/agent-sdk/user-input), ou un outil MCP que vous passez avec [`--permission-prompt-tool`](/docs/fr/cli-reference#cli-flags). Sans le flag, votre exécution attend que cet hôte réponde à chaque demande de permission.

354 356 

355Avec l'indicateur, votre exécution ne consulte pas l'hôte et n'attend pas. Tout ce qui demanderait est refusé sauf si un hook `PermissionRequest` l'autorise, Claude est informé que personne ne peut approuver la demande et ne pas la réessayer, et l'exécution continue. Dans une exécution `-p` sans hôte, ces demandes sont refusées de toute façon, et l'indicateur indique également à Claude de ne pas les réessayer. Les règles de permission, les hooks [`PermissionRequest`](/docs/fr/hooks#permissionrequest) et le mode de permission que vous définissez décident toujours de chaque appel en premier ; Claude Code refuse uniquement les demandes que rien d'autre ne résout.357Avec le flag, votre exécution ne consulte pas l'hôte et n'attend pas. Tout ce qui demanderait est refusé sauf si un hook `PermissionRequest` l'autorise, Claude est informé que personne ne peut approuver la demande et ne pas la réessayer, et l'exécution continue. Dans une exécution `-p` sans hôte, ces demandes sont refusées de toute façon, et le flag indique également à Claude de ne pas les réessayer. Les règles de permission, les hooks [`PermissionRequest`](/docs/fr/hooks#permissionrequest) et le mode de permission que vous définissez décident toujours de chaque appel en premier ; Claude Code refuse uniquement les demandes que rien d'autre ne résout.

356 358 

357Cet exemple exécute une tâche sans surveillance en [mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode). Le classificateur examine chaque action comme d'habitude, et Claude Code refuse tout ce qui aurait autrement entraîné une invite :359Cet exemple exécute une tâche sans surveillance en [mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode). Le classificateur examine chaque action comme d'habitude, et Claude Code refuse tout ce qui aurait autrement entraîné une demande de permission :

358 360 

359```bash theme={null}361```bash theme={null}

360claude -p "Update the dependency pins and run the tests" --permission-mode auto --permission-prompts none362claude -p "Update the dependency pins and run the tests" --permission-mode auto --permission-prompts none


365Avec `--output-format stream-json`, les refus apparaissent sous forme de messages système `permission_denied`, et le message de résultat final les énumère dans `permission_denials`.367Avec `--output-format stream-json`, les refus apparaissent sous forme de messages système `permission_denied`, et le message de résultat final les énumère dans `permission_denials`.

366 368 

367<Note>369<Note>

368 L'indicateur `--permission-prompts` nécessite Claude Code v2.1.259 ou ultérieur. Les versions antérieures le rejettent avec une erreur d'option inconnue.370 Le flag `--permission-prompts` nécessite Claude Code v2.1.259 ou ultérieur. Les versions antérieures le rejettent avec une erreur d'option inconnue.

369</Note>371</Note>

370 372 

371<h3 id="create-a-commit">373<h3 id="create-a-commit">

372 Créer un commit374 Créer un commit

373</h3>375</h3>

374 376 

375Cet exemple examine les modifications mises en scène et crée un commit avec un message approprié :377Cet exemple examine les modifications indexées et crée un commit avec un message approprié :

376 378 

377```bash theme={null}379```bash theme={null}

378claude -p "Look at my staged changes and create an appropriate commit" \380claude -p "Look at my staged changes and create an appropriate commit" \

379 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"381 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

380```382```

381 383 

382L'indicateur `--allowedTools` utilise la [syntaxe de règle de permission](/docs/fr/settings-reference#permission-rule-syntax). Le ` *` de fin active la correspondance de préfixe, donc `Bash(git diff *)` autorise toute commande commençant par `git diff`. L'espace avant `*` est important : sans lui, `Bash(git diff*)` correspondrait également à `git diff-index`.384Le flag `--allowedTools` utilise la [syntaxe de règle de permission](/docs/fr/settings-reference#permission-rule-syntax). Le ` *` de fin active la correspondance de préfixe, donc `Bash(git diff *)` autorise toute commande commençant par `git diff`. L'espace avant `*` est important : sans lui, `Bash(git diff*)` correspondrait également à `git diff-index`.

383 385 

384<Note>386<Note>

385 Le support des commandes diffère en mode `-p` :387 Le support des commandes diffère en mode `-p` :

386 388 

387 * Les [compétences](/docs/fr/skills) invoquées par l'utilisateur et les commandes personnalisées fonctionnent. Incluez `/skill-name` dans la chaîne d'invite et Claude Code l'étend avant d'exécuter.389 * Les [skills](/docs/fr/skills) invoqués par l'utilisateur et les commandes personnalisées fonctionnent. Incluez `/skill-name` dans la chaîne du prompt et Claude Code l'étend avant d'exécuter.

388 * Les commandes intégrées qui ne s'exécutent que dans l'interface du terminal, telles que `/login`, ne sont pas disponibles.390 * Les commandes intégrées qui ne s'exécutent que dans l'interface du terminal, telles que `/login`, ne sont pas disponibles.

389 * `/model`, `/effort`, `/fast`, `/color` et `/rename` acceptent la valeur comme argument, par exemple `/model sonnet`, et `/mcp` sans argument imprime un résumé textuel du statut du serveur. Ces formes nécessitent Claude Code v2.1.205 ou ultérieur et suivent les [notes de disponibilité de chaque commande](/docs/fr/commands#all-commands).391 * `/model`, `/effort`, `/fast`, `/color` et `/rename` acceptent la valeur comme argument, par exemple `/model sonnet`, et `/mcp` sans argument imprime un résumé textuel du statut du serveur. Ces formes nécessitent Claude Code v2.1.205 ou ultérieur et suivent les [notes de disponibilité de chaque commande](/docs/fr/commands#all-commands).

390 * Pour modifier un paramètre, passez `key=value` à `/config`, par exemple `/config thinking=false`.392 * Pour modifier un paramètre, passez `key=value` à `/config`, par exemple `/config thinking=false`.


392</Note>394</Note>

393 395 

394<h3 id="customize-the-system-prompt">396<h3 id="customize-the-system-prompt">

395 Personnaliser l'invite système397 Personnaliser le prompt système

396</h3>398</h3>

397 399 

398Utilisez `--append-system-prompt` pour ajouter des instructions tout en conservant le comportement par défaut de Claude Code. Cet exemple transmet un diff PR à Claude et lui demande de vérifier les vulnérabilités de sécurité. Enregistrez-le en tant que script shell, par exemple `review.sh` :400Utilisez `--append-system-prompt` pour ajouter des instructions tout en conservant le comportement par défaut de Claude Code. Cet exemple transmet un diff PR à Claude et lui demande de vérifier les vulnérabilités de sécurité. Enregistrez-le en tant que script shell, par exemple `review.sh` :


405 407 

406Dans le script, `"$1"` représente le premier argument que vous passez sur la ligne de commande. Exécutez `bash review.sh 123` et le shell remplace `"$1"` par `123`, donc le script récupère le diff pour la PR 123. Claude Code imprime l'examen en JSON, avec le texte dans le champ `result`.408Dans le script, `"$1"` représente le premier argument que vous passez sur la ligne de commande. Exécutez `bash review.sh 123` et le shell remplace `"$1"` par `123`, donc le script récupère le diff pour la PR 123. Claude Code imprime l'examen en JSON, avec le texte dans le champ `result`.

407 409 

408Consultez les [indicateurs d'invite système](/docs/fr/cli-reference#system-prompt-flags) pour plus d'options, y compris `--system-prompt` pour remplacer complètement l'invite par défaut.410Consultez les [flags de prompt système](/docs/fr/cli-reference#system-prompt-flags) pour plus d'options, y compris `--system-prompt` pour remplacer complètement le prompt par défaut.

409 411 

410<h3 id="continue-conversations">412<h3 id="continue-conversations">

411 Continuer les conversations413 Continuer les conversations

412</h3>414</h3>

413 415 

414Utilisez `--continue` pour continuer la conversation la plus récente, ou `--resume` avec un ID de session pour continuer une conversation spécifique. Sur Claude Code v2.1.257 ou ultérieur, lorsque vous passez `--continue`, Claude Code ouvre une [session en arrière-plan](/docs/fr/sessions#resume-a-session) qui a terminé, mais pas une qui s'exécute toujours. Cet exemple exécute un examen, puis envoie des invites de suivi :416Utilisez `--continue` pour continuer la conversation la plus récente, ou `--resume` avec un ID de session pour continuer une conversation spécifique. Sur Claude Code v2.1.257 ou ultérieur, lorsque vous passez `--continue`, Claude Code ouvre une [session en arrière-plan](/docs/fr/sessions#resume-a-session) qui a terminé, mais pas une qui s'exécute toujours. Cet exemple exécute un examen, puis envoie des prompts de suivi :

415 417 

416```bash theme={null}418```bash theme={null}

417# First request419# First request

Details

22 22 

23| Raccourci | Description | Contexte |23| Raccourci | Description | Contexte |

24| :- | :- | :- |24| :- | :- | :- |

25| `Ctrl+C` | Interrompre ou effacer l'entrée | Interrompt une opération en cours. Si rien ne s'exécute, la première pression efface l'entrée du prompt et une deuxième pression quitte Claude Code |25| `Ctrl+C` | Interrompre ou effacer l'entrée | Interrompt une opération en cours. Si rien ne s'exécute, la première pression efface l'entrée du prompt et une deuxième pression quitte Claude Code. Appuyez sur `Haut` tant que le prompt est encore vide pour récupérer le brouillon effacé, ce qui nécessite Claude Code v2.1.288 ou version ultérieure |

26| `Ctrl+X Ctrl+K` | Arrêter tous les [sous-agents en arrière-plan](/docs/fr/sub-agents#run-subagents-in-foreground-or-background) dans cette session et désactiver les [réponses automatiques des artefacts](/docs/fr/artifacts#let-claude-reply-to-comments-on-its-own) pour le reste de celle-ci. Appuyez deux fois dans les 3 secondes pour confirmer. Vous pouvez appuyer sur ce raccourci pendant qu'une demande de permission d'un sous-agent en arrière-plan est ouverte | Contrôle des sous-agents |26| `Ctrl+X Ctrl+K` | Arrêter tous les [sous-agents en arrière-plan](/docs/fr/sub-agents#run-subagents-in-foreground-or-background) dans cette session et désactiver les [réponses automatiques des artefacts](/docs/fr/artifacts#let-claude-reply-to-comments-on-its-own) pour le reste de celle-ci. Appuyez deux fois dans les 3 secondes pour confirmer. Vous pouvez appuyer sur ce raccourci pendant qu'une demande de permission d'un sous-agent en arrière-plan est ouverte | Contrôle des sous-agents |

27| `Ctrl+D` | Quitter la session Claude Code | La première pression affiche un indice de confirmation et une deuxième pression dans les 800 ms quitte. Lorsque le prompt contient du texte, `Ctrl+D` supprime le caractère après le curseur à la place |27| `Ctrl+D` | Quitter la session Claude Code | La première pression affiche un indice de confirmation et une deuxième pression dans les 800 ms quitte. Lorsque le prompt contient du texte, `Ctrl+D` supprime le caractère après le curseur à la place |

28| `Ctrl+G` ou `Ctrl+X Ctrl+E` | Ouvrir dans l'éditeur de texte par défaut | Modifiez votre prompt ou votre réponse personnalisée dans votre éditeur de texte par défaut. `Ctrl+X Ctrl+E` est la liaison native readline. Activez **Afficher la dernière réponse dans l'éditeur externe** dans `/config` pour ajouter la réponse précédente de Claude en tant que contexte commenté avec `#` au-dessus de votre prompt ; Claude Code supprime le bloc de commentaire lorsque vous enregistrez |28| `Ctrl+G` ou `Ctrl+X Ctrl+E` | Ouvrir dans l'éditeur de texte par défaut | Modifiez votre prompt ou votre réponse personnalisée dans votre éditeur de texte par défaut. `Ctrl+X Ctrl+E` est la liaison native readline. Activez **Afficher la dernière réponse dans l'éditeur externe** dans `/config` pour ajouter la réponse précédente de Claude en tant que contexte commenté avec `#` au-dessus de votre prompt ; Claude Code supprime le bloc de commentaire lorsque vous enregistrez |

Details

132Le runner et ses sessions établissent plusieurs types de connexion sortante, et aucune connectivité entrante d'Anthropic n'est requise :132Le runner et ses sessions établissent plusieurs types de connexion sortante, et aucune connectivité entrante d'Anthropic n'est requise :

133 133 

134* **Plan de contrôle** : le runner interroge `api.anthropic.com` pour le travail et publie les événements de progression de configuration et d'échec, tous HTTPS sortants. L'interrogation sert également de battement cardiaque du runner.134* **Plan de contrôle** : le runner interroge `api.anthropic.com` pour le travail et publie les événements de progression de configuration et d'échec, tous HTTPS sortants. L'interrogation sert également de battement cardiaque du runner.

135* **Connecteur SCM** : l'orchestrateur optionnel [connecteur SCM](/docs/fr/self-hosted-environments-reference#scm-connector-flags) tunnel est la seule connexion WebSocket.135* **Git** : le runner clone à partir de votre hôte git et y pousse sur HTTPS ou SSH, authentifié avec les identifiants que votre déploiement fournit. Consultez [Configurer git](/docs/fr/self-hosted-environments-deploy#configure-git) pour les options, y compris les identifiants générés par session. Avec le [proxy git Anthropic](/docs/fr/self-hosted-environments-deploy#use-the-anthropic-git-proxy), le trafic git pour les dépôts sur github.com passe plutôt par `api.anthropic.com`.

136* **Git** : le runner clone à partir de et pousse vers votre hôte git sur HTTPS ou SSH, authentifié avec les identifiants que votre déploiement fournit ; [Configurer git](/docs/fr/self-hosted-environments-deploy#configure-git) couvre les options, y compris les identifiants frappés par session et la [passerelle git Anthropic](/docs/fr/self-hosted-environments-deploy#use-the-anthropic-git-proxy), qui route git via `api.anthropic.com` à la place.136* **Enfant de session** : le processus Claude Code enfant maintient le flux d'événements de la session à `api.anthropic.com`, et fait ses propres appels sortants pour l'inférence du modèle et pour les commandes git exécutées pendant la session. Dans une session qui utilise [git géré par Anthropic](/docs/fr/self-hosted-environments-deploy#use-the-anthropic-git-proxy), l'enfant envoie son trafic `git` et `gh` pour github.com via une connexion WebSocket qu'il ouvre vers `api.anthropic.com`.

137* **Enfant de session** : le processus Claude Code enfant maintient le flux d'événements de la session à `api.anthropic.com`, et fait ses propres appels sortants pour l'inférence du modèle et pour les commandes git exécutées pendant la session. Consultez [Exigences réseau](/docs/fr/self-hosted-environments-deploy#network-requirements) pour la liste complète des sorties. Le [diagramme ci-dessus](#how-self-hosted-environments-work) montre ces chemins, à part le connecteur SCM optionnel.137* **Connecteur SCM** : le [connecteur SCM](/docs/fr/self-hosted-environments-reference#scm-connector-flags) optionnel de l'orchestrateur n'est pas disponible, donc son tunnel ne s'ouvre pas. Le tunnel est une connexion WebSocket vers `api.anthropic.com`.

138 

139Consultez [Exigences réseau](/docs/fr/self-hosted-environments-deploy#network-requirements) pour la liste complète des sorties. Le [diagramme ci-dessus](#how-self-hosted-environments-work) montre ces chemins, à part le connecteur SCM optionnel et la connexion git gérée par Anthropic.

138 140 

139Par défaut, l'inférence du modèle utilise l'API Anthropic. Le plan de contrôle livre l'endpoint de l'API à chaque session, et la session s'authentifie avec un jeton OAuth émis par Anthropic et limité à la session. Pour envoyer plutôt les requêtes de modèle vers votre propre compte cloud, consultez [Envoyer les requêtes de modèle vers Bedrock ou Agent Platform](/docs/fr/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).141Par défaut, l'inférence du modèle utilise l'API Anthropic. Le plan de contrôle livre l'endpoint de l'API à chaque session, et la session s'authentifie avec un jeton OAuth émis par Anthropic et limité à la session. Pour envoyer plutôt les requêtes de modèle vers votre propre compte cloud, consultez [Envoyer les requêtes de modèle vers Bedrock ou Agent Platform](/docs/fr/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).

140 142 

Details

31| Variable | Description |31| Variable | Description |

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

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Le JWT de session, préfixé `sk-ant-cc-`. Sa revendication `act` identifie le créateur de la session, avec l'email du créateur quand la surface de création l'a enregistré. La valeur est le token au moment du spawn ; les actualisations arrivent sur stdin de l'enfant, donc un wrapper ne voit que la valeur initiale. Voir [Vérifier l'identité de la session](/docs/fr/self-hosted-environments-identity). |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Le JWT de session, préfixé `sk-ant-cc-`. Sa revendication `act` identifie le créateur de la session, avec l'email du créateur quand la surface de création l'a enregistré. La valeur est le token au moment du spawn ; les actualisations arrivent sur stdin de l'enfant, donc un wrapper ne voit que la valeur initiale. Voir [Vérifier l'identité de la session](/docs/fr/self-hosted-environments-identity). |

34| `CCR_SESSION_ACCOUNT_EMAIL` | L'email du créateur de la session, pré-extrait par le runner de la revendication `act.email` du token sans vérification de signature. Approprié pour l'étiquetage, comme les trailers de commit. Quand l'email contrôle l'émission d'identifiants, vérifiez le token et lisez la revendication à partir de celui-ci à la place ; voir [Provisionner les identifiants limités au créateur de la session](#provision-credentials-scoped-to-the-session-creator). Non défini quand le token ne porte pas d'email de créateur. Traiter comme des informations d'identification personnelle. |34| `CCR_SESSION_ACCOUNT_EMAIL` | L'email du créateur de la session, pré-extrait par le runner de la revendication `act.email` du token sans vérification de signature. Approprié pour l'étiquetage, comme les trailers de commit. Quand l'email contrôle l'émission d'identifiants, vérifiez le token et lisez la revendication à partir de celui-ci à la place. Voir [Provisionner les identifiants limités au créateur de la session](#provision-credentials-scoped-to-the-session-creator). Non défini quand le token ne porte pas d'email de créateur, par exemple dans les sessions créées par l'identité de service de votre organisation. Traiter comme des données personnelles identifiables. |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` ou `scheduled_trigger`. Anthropic enregistre la valeur une fois à la création de la session, donc le wrapper et chaque hook de cycle de vie voient la même valeur. Utilisez-la pour l'analyse d'adoption et l'étiquetage uniquement, pas comme signal d'autorisation. Non défini quand la session n'a pas de surface enregistrée ou reconnue, donc référencez-la comme `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` sous `set -u`. Nécessite Claude Code v2.1.229 ou ultérieur. |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli` ou `scheduled_trigger`. Anthropic enregistre la valeur une fois à la création de la session, donc le wrapper et chaque hook de cycle de vie voient la même valeur. Utilisez-la pour l'analyse d'adoption et l'étiquetage uniquement, pas comme signal d'autorisation. Non défini quand la session n'a pas de surface enregistrée ou reconnue. Nécessite Claude Code v2.1.229 ou ultérieur. |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | Chemin absolu vers le binaire Claude Code du runner lui-même. Terminez votre wrapper avec `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` pour passer au binaire épinglé sans coder en dur un chemin d'installation. |36| `CLAUDE_RUNNER_CLAUDE_BIN` | Chemin absolu vers le binaire Claude Code du runner lui-même. Terminez votre wrapper avec `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` pour passer au binaire épinglé sans coder en dur un chemin d'installation. |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID de session sous la forme balisée `cse_...`. C'est la même session que les [hooks de cycle de vie](#lifecycle-hooks) voient comme `CLAUDE_RUNNER_SESSION_ID` sous la forme `session_...` ; les variables UUID correspondent entre les deux, et remplacer le préfixe `cse_` par `session_` donne l'ID affiché dans l'URL de la session. |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID de session sous la forme balisée `cse_...`. C'est la même session que les [hooks de cycle de vie](#lifecycle-hooks) voient comme `CLAUDE_RUNNER_SESSION_ID` sous la forme `session_...` ; les variables UUID correspondent entre les deux, et remplacer le préfixe `cse_` par `session_` donne l'ID affiché dans l'URL de la session. |

38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | Le même ID de session sous la forme UUID canonique, pour les systèmes qui utilisent des UUIDs comme clé. |38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | Le même ID de session sous la forme UUID canonique, pour les systèmes qui utilisent des UUIDs comme clé. |

39| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Pour une session [Claude Tag](https://claude.com/docs/claude-tag/overview) qui appartient à un fil Slack, le lien vers ce fil. Non défini pour les autres sessions, et peut aussi être non défini pour une session de fil. |

40| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Pour une session Claude Tag qui appartient à un fil Slack, l'horodatage Slack de ce fil, comme `1700000000.000100`. Peut être non défini, et peut être défini lorsque `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` ne l'est pas, donc vérifiez chaque variable séparément. |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Chemin absolu vers un fichier par session contenant le JWT de session actuel, maintenu à jour lors des actualisations de token. Les sous-processus shell le lisent pour leur en-tête `Authorization` lors du téléchargement des pièces jointes que l'utilisateur a ajoutées à la session. `exec` préserve la variable automatiquement ; un wrapper qui reconstruit l'environnement de l'enfant doit transporter la variable, ou les téléchargements de pièces jointes s'arrêtent silencieusement. |41| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Chemin absolu vers un fichier par session contenant le JWT de session actuel, maintenu à jour lors des actualisations de token. Les sous-processus shell le lisent pour leur en-tête `Authorization` lors du téléchargement des pièces jointes que l'utilisateur a ajoutées à la session. `exec` préserve la variable automatiquement ; un wrapper qui reconstruit l'environnement de l'enfant doit transporter la variable, ou les téléchargements de pièces jointes s'arrêtent silencieusement. |

40| `CLAUDE_CONFIG_DIR` | Répertoire de configuration Claude par session, écrit au démarrage de la session à partir de l'instantané de la configuration de l'hôte runner que le runner capture au démarrage ; voir [Permissions et approbation d'outils](#permissions-and-tool-approval). Les écritures ici sont isolées à cette session. Le répertoire reste sous `<base-dir>/_sessions/` après la fin de la session sauf si vous démarrez le runner avec [`--remove-session-state`](/docs/fr/self-hosted-environments-reference#runner-cli-flags) ; voir [Réutiliser un checkout pré-chauffé](/docs/fr/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |42| `CLAUDE_CONFIG_DIR` | Répertoire de configuration Claude par session, écrit au démarrage de la session à partir de l'instantané de la configuration de l'hôte runner que le runner capture au démarrage ; voir [Permissions et approbation d'outils](#permissions-and-tool-approval). Les écritures ici sont isolées à cette session. Le répertoire reste sous `<base-dir>/_sessions/` après la fin de la session sauf si vous démarrez le runner avec [`--remove-session-state`](/docs/fr/self-hosted-environments-reference#runner-cli-flags) ; voir [Réutiliser un checkout pré-chauffé](/docs/fr/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |

41| `ANTHROPIC_BASE_URL` | L'URL de base de l'API que l'enfant utilisera, livrée par le plan de contrôle par session et normalement `https://api.anthropic.com`. Ne la remplacez pas : l'identifiant d'inférence de la session est un token OAuth émis par Anthropic que les autres fournisseurs n'acceptent pas. |43| `ANTHROPIC_BASE_URL` | L'URL de base de l'API que l'enfant utilisera, livrée par le plan de contrôle par session et normalement `https://api.anthropic.com`. Ne la remplacez pas : l'identifiant d'inférence de la session est un token OAuth émis par Anthropic que les autres fournisseurs n'acceptent pas. |


43 45 

44Le wrapper hérite également du reste de l'environnement géré de l'enfant, y compris toutes les variables d'environnement fournies par le serveur. `exec` propage tout automatiquement ; si votre wrapper lance l'enfant d'une autre manière, transmettez l'environnement complet.46Le wrapper hérite également du reste de l'environnement géré de l'enfant, y compris toutes les variables d'environnement fournies par le serveur. `exec` propage tout automatiquement ; si votre wrapper lance l'enfant d'une autre manière, transmettez l'environnement complet.

45 47 

48`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` et `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` parviennent à votre wrapper ou à votre [hook `command`](#command). Elles parviennent aussi à ce que la session exécute, comme les commandes shell, les hooks git et les hooks Claude Code. Les hooks `checkout`, `post-session` et `spawn-runner` ne les reçoivent pas.

49 

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

51 Donner une valeur par défaut aux variables qui peuvent être non définies

52</h3>

53 

54`CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` et `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` peuvent chacune être non définies. Si votre script utilise `set -u`, Bash s'arrête avec `unbound variable` lorsqu'il développe l'une d'elles qui n'est pas définie ; développez-les donc avec une valeur par défaut, comme `${CCR_SESSION_ACCOUNT_EMAIL:-}`.

55 

56Partout où un shell développe le lien du fil Slack, prenez ces précautions :

57 

58* **Mettez-le entre guillemets** : le lien peut contenir des caractères qu'un shell interprète, comme `?` et `&`, donc mettez la variable entre guillemets, comme dans `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`.

59* **Gardez sa valeur hors des chaînes `eval` et `sh -c`** : ne substituez pas sa valeur dans une chaîne que `eval` ou `sh -c` exécute, même entre guillemets. Faites plutôt référencer la variable par cette chaîne.

60 

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

47 Garder stdin et le descripteur de fichier 3 attachés62 Garder stdin et le descripteur de fichier 3 attachés

48</h3>63</h3>

49 64 

50stdin de l'enfant est le canal de contrôle du runner. Les rotations de token et les signaux de fin de session arrivent dessus. Le runner ouvre également un tuyau sur le descripteur de fichier 3 et lit les signaux d'activité de l'enfant à partir de celui-ci pour piloter les délais d'inactivité et de démarrage. Un simple `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` préserve les deux automatiquement.65stdin de l'enfant est le canal de contrôle du runner. Les rotations de token et les signaux de fin de session arrivent dessus. Le runner ouvre également un tuyau sur le descripteur de fichier 3 et lit les signaux d'activité de l'enfant à partir de celui-ci pour piloter les délais d'inactivité et de démarrage. Un simple `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` préserve les deux automatiquement.

51 66 

52Si votre wrapper met l'enfant en arrière-plan avec un simple `&`, il coupe stdin de l'enfant : la session semble saine jusqu'à ce que la durée de vie du token OAuth initial d'environ 30 minutes expire, puis chaque appel API échoue avec `401 authentication_error`. Si votre wrapper doit mettre l'enfant en arrière-plan, par exemple pour garder un trap de démontage actif, enregistrez stdin sur le descripteur de fichier 4 ou supérieur et réattachez-le explicitement :67Si votre wrapper met l'enfant en arrière-plan avec un simple `&`, il coupe stdin de l'enfant. La session semble saine jusqu'à ce que la durée de vie du token OAuth initial d'environ 30 minutes expire, puis chaque appel API qui utilise le token échoue avec `401 authentication_error`. Si votre wrapper doit mettre l'enfant en arrière-plan, par exemple pour garder un trap de démontage actif, enregistrez stdin sur le descripteur de fichier 4 ou supérieur et réattachez-le explicitement :

53 68 

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

55exec 4<&070exec 4<&0


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

60```75```

61 76 

62Ne fermez pas ou ne réutilisez pas le descripteur de fichier 3 dans le wrapper. Rediriger stdout et stderr de l'enfant est correct.77Vous pouvez rediriger stdout de l'enfant. Gardez le descripteur de fichier 3 et stderr attachés au runner :

78 

79* **Descripteur de fichier 3** : transporte les signaux d'activité de l'enfant vers le runner. Ne le fermez pas et ne le réutilisez pas dans le wrapper.

80* **stderr** : lorsque le wrapper ou l'enfant se termine avec un code non nul, le runner publie les dernières lignes de stderr dans la session et les affiche dans son propre log. L'utilisateur de la session voit ces lignes, donc n'affichez pas de secrets sur stderr, et retirez `set -x` avant de déployer le wrapper. Si vous redirigez stderr, les sessions s'exécutent toujours, mais le runner signale un échec avec le seul code de sortie.

63 81 

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

65 Transmettre les flags de prompt système83 Transmettre les flags de prompt système


108 checkout126 checkout

109</h3>127</h3>

110 128 

111S'exécute une fois par dépôt, à la place du clone et de la récupération intégrés du runner. Utilisez le hook pour cloner à partir d'un miroir de lecture directe, amorcer un arbre de travail à partir d'une archive ou appliquer une authentification git par session. Le runner définit ces variables, et peut définir d'autres variables `CLAUDE_RUNNER_` que le tableau ne répertorie pas :129S'exécute une fois par dépôt, à la place du clone et de la récupération intégrés du runner. Utilisez le hook pour cloner à partir d'un miroir de lecture directe accessible via HTTPS ou SSH, amorcer un arbre de travail à partir d'une archive ou appliquer une authentification git par session. Le runner définit ces variables, et peut définir d'autres variables `CLAUDE_RUNNER_` que le tableau ne répertorie pas :

112 130 

113| Variable | Description |131| Variable | Description |

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

115| `CLAUDE_RUNNER_REPO_URL` | URL du référentiel à cloner, après que tout `--git-host-rewrite` et `--git-ssh-rewrite` aient été appliqués |133| `CLAUDE_RUNNER_REPO_URL` | URL du référentiel à cloner, après que tout `--git-host-rewrite` et `--git-ssh-rewrite` aient été appliqués |

116| `CLAUDE_RUNNER_REPO_REF` | Révision à vérifier : branche, tag ou SHA de commit comme la session l'a demandé. Vide signifie la branche par défaut du référentiel. |134| `CLAUDE_RUNNER_REPO_REF` | Révision à extraire, telle que la session l'a demandée : une branche, un tag, un SHA de commit ou un nom de référence complet comme `refs/pull/<number>/head`. Vide signifie la branche par défaut du dépôt. |

117| `CLAUDE_RUNNER_CHECKOUT_PATH` | Chemin absolu où l'arbre de travail doit être laissé |135| `CLAUDE_RUNNER_CHECKOUT_PATH` | Chemin absolu où l'arbre de travail doit être laissé |

118| `CLAUDE_RUNNER_SESSION_ID` | ID de session sous la forme balisée `session_...`, pour la journalisation et la corrélation |136| `CLAUDE_RUNNER_SESSION_ID` | ID de session sous la forme balisée `session_...`, pour la journalisation et la corrélation |

119| `CLAUDE_RUNNER_SESSION_UUID` | Le même ID de session sous la forme UUID canonique |137| `CLAUDE_RUNNER_SESSION_UUID` | Le même ID de session sous la forme UUID canonique |

120| `CLAUDE_RUNNER_API_BASE_URL` | URL de base de l'API Anthropic pour les appels limités à la session |138| `CLAUDE_RUNNER_API_BASE_URL` | URL de base de l'API Anthropic pour les appels limités à la session |

121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app` ou `ios`. Non défini quand la session n'a pas de surface enregistrée ou reconnue. |139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app` ou `ios`. Non défini quand la session n'a pas de surface enregistrée ou reconnue, donc référencez-la sous la forme `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` sous `set -u`. Nécessite Claude Code v2.1.229 ou ultérieur. |

122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Le token d'accès de session, pour les appels API limités à la session |140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Le token d'accès de session, pour les appels API limités à la session |

123| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Paramètres git que le runner fixe pour le git que votre hook exécute. [Configuration git dans les hooks de cycle de vie](#git-configuration-inside-lifecycle-hooks) les décrit. Nécessite Claude Code v2.1.280 ou ultérieur. |141| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Paramètres git que le runner fixe pour le git que votre hook exécute. [Configuration git dans les hooks de cycle de vie](#git-configuration-inside-lifecycle-hooks) les décrit. Nécessite Claude Code v2.1.280 ou ultérieur. |

124 142 

125Le script doit laisser un arbre de travail à `CLAUDE_RUNNER_CHECKOUT_PATH` vérifié à la révision demandée. HEAD détaché est correct ; le runner crée la branche de travail de la session par-dessus. Le runner vérifie que le chemin contient un `.git` après ; si votre hook matérialise une source non-git comme Perforce ou une archive dépaquetée, définissez `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` dans l'environnement du runner pour ignorer cette vérification. Les flux basés sur git comme la création de branche de travail et l'envoi de résultats nécessitent un checkout git, donc exportez les résultats à partir d'arbres non-git avec un hook [`post-session`](#post-session).143Le script doit laisser un arbre de travail à `CLAUDE_RUNNER_CHECKOUT_PATH` extrait à la révision demandée. Un HEAD détaché convient, car le runner crée la branche de travail de la session par-dessus.

126 144 

127Le runner ne transmet pas un identifiant git au hook. À la place, frappez un identifiant de clone par session à partir de l'identité de la session : vérifiez `CLAUDE_CODE_SESSION_ACCESS_TOKEN` avec une bibliothèque JWT standard par rapport au point de terminaison JWKS sous `CLAUDE_RUNNER_API_BASE_URL`, comme décrit dans [Vérifier le token à partir de votre service](/docs/fr/self-hosted-environments-identity#verify-the-token-from-your-service), puis faites en sorte que votre service d'identifiants émette un identifiant de clone de courte durée pour l'identité dans la revendication `act` du token. `CLAUDE_RUNNER_CLAUDE_BIN` n'est pas défini dans l'environnement du hook de checkout, donc la sous-commande `decode-token` n'est pas disponible ici. Revenir à tout ce que l'authentification git de l'hôte a déjà, comme un agent SSH, un helper d'identifiants ou `.netrc`, est aussi une option.145Après le retour de votre hook, le runner vérifie que `CLAUDE_RUNNER_CHECKOUT_PATH` contient un `.git`. Si votre hook matérialise une source non-git comme Perforce ou une archive tarball dépaquetée, définissez `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` dans l'environnement du runner pour ignorer cette vérification. Les flux basés sur git comme la création de branche de travail et l'envoi des résultats nécessitent un checkout git, donc exportez les résultats des arbres non-git avec un [hook `post-session`](#post-session).

128 146 

129Quand le hook se termine avec un code non-zéro, ou se termine avec 0 sans laisser un checkout utilisable derrière, ce que le runner fait dépend du référentiel :147<h4 id="get-git-credentials-in-the-hook">

148 Obtenir des identifiants git dans le hook

149</h4>

130 150 

131* **Un référentiel vers lequel la session envoie les résultats** : le runner échoue la session, et sur une sortie non-zéro affiche la queue du stderr du script à l'utilisateur.151Le runner ne transmet pas d'identifiants git au hook. La sous-commande `decode-token` n'est pas non plus disponible ici, car `CLAUDE_RUNNER_CLAUDE_BIN` n'est pas défini dans l'environnement du hook de checkout. Générez plutôt des identifiants de clone par session à partir de l'identité de la session, ou revenez à l'authentification git propre à l'hôte :

132* **Un référentiel que la session lit uniquement**, comme un référentiel ajouté à une session en cours d'exécution : le runner enregistre une ligne `[runner:warn]` avec le détail de l'échec, affiche une étape `Skipped` à la session, supprime ce que le hook a laissé au chemin de checkout et continue avec les référentiels restants. Quand le runner ne peut pas supprimer le chemin immédiatement, il réessaie la suppression à la fin de la session. Si ignorer laisse la session sans aucun référentiel du tout, le runner échoue la session de toute façon.

133 152 

134Avant v2.1.228, le runner échouait la session sur un échec de hook pour tout référentiel, donc un référentiel en lecture seule que le hook ne pouvait pas servir échouait la session à nouveau sur chaque nouveau runner sur lequel la session reprenait.153* **Identifiants de clone par session** : vérifiez `CLAUDE_CODE_SESSION_ACCESS_TOKEN` avec une bibliothèque JWT standard par rapport à l'endpoint JWKS sous `CLAUDE_RUNNER_API_BASE_URL`, comme décrit dans [Vérifier le token à partir de votre service](/docs/fr/self-hosted-environments-identity#verify-the-token-from-your-service). Faites ensuite émettre par votre service d'identifiants des identifiants de clone de courte durée pour l'identité figurant dans la revendication `act` du jeton. Associez ces identifiants à `act.sub`, et n'exigez pas `act.email`.

154* **Authentification git de l'hôte** : utilisez l'authentification git dont l'hôte dispose déjà, comme un agent SSH, un helper d'identifiants ou `.netrc`.

135 155 

136Le runner supprime le chemin de checkout après la fin de la session.156<h4 id="when-the-hook-fails">

157 Quand le hook échoue

158</h4>

159 

160Le hook échoue lorsqu'il se termine avec un code non nul, ou se termine avec 0 sans laisser de checkout utilisable :

161 

162* **Un référentiel vers lequel la session envoie les résultats** : le runner échoue la session, et sur une sortie non-zéro affiche la queue du stderr du script à l'utilisateur.

163* **Un dépôt que la session lit uniquement**, comme un dépôt ajouté à une session en cours d'exécution : le runner consigne une ligne `[runner:warn]` avec le détail de l'échec, publie une étape `Skipped` dans la session, supprime ce que le hook a laissé au chemin de checkout et continue avec les dépôts restants. Si l'omission laisse la session sans aucun dépôt, le runner fait quand même échouer la session.

164 

165Lorsque le hook réussit, le runner supprime le chemin de checkout après la fin de la session.

137 166 

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

139 post-session168 post-session


151| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Chemins absolus séparés par des deux-points des arbres de travail de la session. Vide pour les sessions sans référentiel. |180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Chemins absolus séparés par des deux-points des arbres de travail de la session. Vide pour les sessions sans référentiel. |

152| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Chemin vers le journal de débogage de la session, toujours sur le disque pendant que le hook s'exécute |181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Chemin vers le journal de débogage de la session, toujours sur le disque pendant que le hook s'exécute |

153| `CLAUDE_RUNNER_API_BASE_URL` | URL de base de l'API Anthropic pour les appels limités à la session |182| `CLAUDE_RUNNER_API_BASE_URL` | URL de base de l'API Anthropic pour les appels limités à la session |

154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app` ou `ios`. Non défini quand la session n'a pas de surface enregistrée ou reconnue. Nécessite Claude Code v2.1.229 ou ultérieur. |183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app` ou `ios`. Non défini quand la session n'a pas de surface enregistrée ou reconnue, donc référencez-la sous la forme `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` sous `set -u`. Nécessite Claude Code v2.1.229 ou ultérieur. |

155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Le token d'accès de session, pour les appels API limités à la session |184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Le token d'accès de session, pour les appels API limités à la session |

156| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Paramètres git que le runner fixe pour le git que votre hook exécute. [Configuration git dans les hooks de cycle de vie](#git-configuration-inside-lifecycle-hooks) les décrit. Nécessite Claude Code v2.1.280 ou ultérieur. |185| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Paramètres git que le runner fixe pour le git que votre hook exécute. [Configuration git dans les hooks de cycle de vie](#git-configuration-inside-lifecycle-hooks) les décrit. Nécessite Claude Code v2.1.280 ou ultérieur. |

157 186 

158`CLAUDE_RUNNER_EXIT_REASON` prend l'une des quatre valeurs :187`CLAUDE_RUNNER_EXIT_REASON` prend l'une des quatre valeurs :

159 188 

160* `completed` : la session s'est terminée proprement. Le processus Claude Code s'est terminé normalement, ou la session a été archivée ou supprimée pendant qu'elle était toujours en cours d'exécution.189* `completed` : la session s'est terminée proprement. Le processus Claude Code s'est terminé normalement, ou s'est terminé de lui-même après l'archivage ou la suppression de la session.

161* `failed` : le processus Claude Code s'est écrasé, ou la configuration a échoué après son démarrage.190* `failed` : le processus Claude Code s'est écrasé, ou la configuration a échoué après son démarrage.

162* `interrupted` : le runner a arrêté la session. Il a libéré la session pour libérer l'emplacement, la session a expiré au démarrage, le serveur a déplacé la session hors de ce runner, le runner était en drainage, ou la session a dépassé sa limite [`--kill-session-after-min`](/docs/fr/self-hosted-environments-reference#runner-cli-flags).191* `interrupted` : le runner a arrêté la session, dans l'un des cas suivants :

192 * Le runner a libéré la session pour libérer l'emplacement.

193 * La session a expiré au démarrage.

194 * Le serveur a déplacé la session hors de ce runner.

195 * L'interrogation du runner a détecté un archivage ou une suppression avant la sortie du processus.

196 * Le runner était en drainage.

197 * La session a dépassé sa limite [`--kill-session-after-min`](/docs/fr/self-hosted-environments-reference#runner-cli-flags).

163* `abandoned` : réservé à une session qu'un autre runner a revendiquée. Le hook ne se déclenche actuellement pas dans ce cas.198* `abandoned` : réservé à une session qu'un autre runner a revendiquée. Le hook ne se déclenche actuellement pas dans ce cas.

164 199 

165Les [compteurs de cycle de vie de la session](/docs/fr/self-hosted-environments-reference#session-lifecycle-counter-semantics) comptent une libération, un délai d'expiration au démarrage et un déplacement du serveur comme `completed` plutôt que `interrupted`, car le runner a remis l'emplacement proprement. Attendez-vous à cette différence si vous comparez les reçus de hook avec les compteurs.200Si vous comparez les reçus de hook avec les [compteurs de cycle de vie de la session](/docs/fr/self-hosted-environments-reference#session-lifecycle-counter-semantics), attendez-vous à ce que certains reçus `interrupted` y soient comptés comme `completed`. Les compteurs comptent comme `completed` une libération, un délai d'expiration au démarrage, un déplacement du serveur, ainsi qu'un archivage ou une suppression détectés en premier par l'interrogation du runner, car le runner a remis l'emplacement proprement.

166 201 

167Le statut de sortie du hook n'affecte jamais le résultat de la session ; un échec est enregistré et ignoré. Le runner attend jusqu'à `--post-session-hook-timeout-sec`, 60 secondes par défaut, à chaque fin de session y compris l'arrêt du runner. Cet exemple sauvegarde le travail non commis dans une branche de secours :202Le statut de sortie du hook n'affecte jamais le résultat de la session ; un échec est enregistré et ignoré. Le runner attend jusqu'à `--post-session-hook-timeout-sec`, 60 secondes par défaut, à chaque fin de session y compris l'arrêt du runner. Cet exemple sauvegarde le travail non commis dans une branche de secours :

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# Les remplacements -c l'emportent sur les paramètres locaux au dépôt, empêchant la configuration209# Les remplacements -c l'emportent sur les paramètres locaux au dépôt, empêchant la configuration

174# fsmonitor, hook-path et gpg-program écrite par la session d'exécuter du code avec les210# fsmonitor, hook-path et gpg-program écrite par la session d'exécuter du code avec les

175# privilèges du hook. -c commit.gpgsign=false laisse aussi ces commits de secours211# privilèges du hook. -c commit.gpgsign=false laisse aussi ces commits de secours

176# non signés sous --configure-git.212# non signés sous --configure-git.

177# credential.helper et pushurl locaux au dépôt s'appliquent toujours, ainsi que213# credential.helper et pushurl locaux au dépôt s'appliquent toujours, ainsi que

178# core.sshCommand sur un runner antérieur à v2.1.280 ; si le hook détient des identifiants214# core.sshCommand sur un runner antérieur à v2.1.280 ; lisez la note sous le script

179# que la session n'avait pas, voir la note sous le script.215# avant de fournir des identifiants à ce push.

180g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \216g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

181 -c commit.gpgsign=false "$@"; }217 -c commit.gpgsign=false "$@"; }

182for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do218for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do


188done224done

189```225```

190 226 

191Le hook envoie avec les identifiants git disponibles dans son propre environnement sur l'hôte du runner. Sous la [posture sans identifiants dans l'image](/docs/fr/self-hosted-environments-deploy#configure-git), y compris quand le clone intégré passe par le proxy git Anthropic, il n'y en a pas, donc générez des identifiants de push de courte durée à l'intérieur du hook avant d'envoyer : échangez le jeton de session que le hook reçoit dans `CLAUDE_CODE_SESSION_ACCESS_TOKEN` avec votre propre service de jetons, en le vérifiant comme [Vérifier l'identité de la session](/docs/fr/self-hosted-environments-identity) le décrit. Quand le hook détient des identifiants que la session n'avait pas, remplacez `origin` par une URL fournie par l'opérateur et passez `-c credential.helper=` plus votre propre helper. [Configuration git dans les hooks de cycle de vie](#git-configuration-inside-lifecycle-hooks) décrit ce que la configuration écrite par la session peut encore affecter.227La ligne `GIT_ALLOW_PROTOCOL` du script limite git aux remotes HTTPS, HTTP et SSH. Si l'environnement du runner définit déjà sa propre liste `GIT_ALLOW_PROTOCOL` non vide, le script conserve cette liste.

228 

229Le hook envoie avec les identifiants git disponibles dans son propre environnement sur l'hôte du runner. Sous la [posture sans identifiants dans l'image](/docs/fr/self-hosted-environments-deploy#configure-git), y compris quand le clone intégré passe par le proxy git Anthropic, il n'y en a pas, donc générez des identifiants de push de courte durée à l'intérieur du hook avant d'envoyer : échangez le jeton de session que le hook reçoit dans `CLAUDE_CODE_SESSION_ACCESS_TOKEN` avec votre propre service de jetons, en le vérifiant comme [Vérifier l'identité de la session](/docs/fr/self-hosted-environments-identity) le décrit.

230 

231Traitez tous les identifiants que votre hook fournit à git comme des identifiants qu'une session peut obtenir, et générez-les de sorte qu'ils ne puissent rien faire de plus que ce push. Git dans votre hook lit des fichiers de configuration qu'une session peut écrire, et un helper d'identifiants ou un filter driver désigné dans l'un d'eux s'exécute avec les privilèges de votre hook. Les paramètres de ces fichiers peuvent aussi modifier la destination d'un push, quel que soit le remote que vous indiquez. Pour les paramètres git que le runner fixe dans votre hook et ceux qu'il laisse à ces fichiers, voir [Configuration git dans les hooks de cycle de vie](#git-configuration-inside-lifecycle-hooks).

192 232 

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

194 Timing du hook quand le runner libère une session234 Timing du hook quand le runner libère une session


264| `CLAUDE_RUNNER_ORDER_ID` | Clé d'idempotence opaque, unique par demande de spawn et sûre pour les noms de ressources Kubernetes. Utilisez-la comme clé de déduplication de votre approvisionneur. |304| `CLAUDE_RUNNER_ORDER_ID` | Clé d'idempotence opaque, unique par demande de spawn et sûre pour les noms de ressources Kubernetes. Utilisez-la comme clé de déduplication de votre approvisionneur. |

265| `CLAUDE_RUNNER_SESSION_ID` | La session pour laquelle cette demande est. Elle se répète à chaque re-demande pour la session, donc utilisez-la pour la journalisation et l'acheminement, pas comme clé de déduplication. Vide pour les demandes de pré-réchauffage, qui démarrent un runner de secours avant toute session spécifique quand [`--min-idle`](/docs/fr/self-hosted-environments-reference#orchestrator-cli-flags) est défini, donc ne supposez pas que la variable est définie. |305| `CLAUDE_RUNNER_SESSION_ID` | La session pour laquelle cette demande est. Elle se répète à chaque re-demande pour la session, donc utilisez-la pour la journalisation et l'acheminement, pas comme clé de déduplication. Vide pour les demandes de pré-réchauffage, qui démarrent un runner de secours avant toute session spécifique quand [`--min-idle`](/docs/fr/self-hosted-environments-reference#orchestrator-cli-flags) est défini, donc ne supposez pas que la variable est définie. |

266| `CLAUDE_RUNNER_SESSION_UUID` | Le même ID de session sous la forme UUID canonique. Vide pour les demandes de pré-réchauffage. |306| `CLAUDE_RUNNER_SESSION_UUID` | Le même ID de session sous la forme UUID canonique. Vide pour les demandes de pré-réchauffage. |

267| `CLAUDE_RUNNER_ATTEMPT` | Combien de demandes de spawn cette session a eues. `0` pour les demandes de pré-réchauffage. |307| `CLAUDE_RUNNER_ATTEMPT` | Un compteur par session à utiliser pour la journalisation. Ce n'est ni un nombre de nouvelles tentatives ni un nombre de demandes. `0` pour les demandes de pré-réchauffage, bien qu'une demande pour une session puisse aussi porter `0`. |

268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Heure du serveur à partir de l'en-tête HTTP `Date` de la réponse du sondage. Quand le hook vérifie le `exp` du JWT du bon de travail, comparez par rapport à cette valeur au lieu de l'horloge locale pour tolérer l'asymétrie. Vide quand la passerelle a omis l'en-tête. |308| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Heure du serveur à partir de l'en-tête HTTP `Date` de la réponse du sondage. Quand le hook vérifie le `exp` du JWT du bon de travail, comparez par rapport à cette valeur au lieu de l'horloge locale pour tolérer l'asymétrie. Vide quand la passerelle a omis l'en-tête. |

269| `CLAUDE_RUNNER_POOL_ID` | L'ID de l'environnement auquel le nouveau runner doit se joindre, sous la forme `ccpool_...` |309| `CLAUDE_RUNNER_POOL_ID` | L'ID de l'environnement auquel le nouveau runner doit se joindre, sous la forme `ccpool_...` |

270| `CLAUDE_RUNNER_ACCOUNT_ID` | ID balisé du compte qui a mis en attente la session, pour l'acheminement par compte, le quota ou la rétrofacturation. Vide quand indisponible, et toujours vide pour les sessions du canal Claude Tag, qu'aucun compte ne met en attente. |310| `CLAUDE_RUNNER_ACCOUNT_ID` | ID balisé du compte qui a mis en attente la session, pour l'acheminement par compte, le quota ou la rétrofacturation. Vide quand indisponible, et toujours vide pour les sessions du canal Claude Tag, qu'aucun compte ne met en attente. |

271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email du compte qui a mis en attente la session. Vide quand indisponible. Traitez l'email comme des informations d'identification personnelle et ne le consignez pas. |311| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email du compte qui a mis en attente la session. Vide quand indisponible. Traitez l'email comme des informations d'identification personnelle et ne le consignez pas. |

272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL de la première source git de la session, pour l'acheminement vers un runner avec ce référentiel pré-réchauffé. Vide quand la session n'a pas de sources git. |312| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL de la première source git de la session, pour l'acheminement vers un runner avec ce référentiel pré-réchauffé. Vide quand la session n'a pas de sources git. |

273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Révision de la première source git de la session : branche, SHA ou tag. Vide quand non spécifié. |313| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Révision de la première source git de la session : branche, SHA, tag ou nom de référence complet. Vide quand non spécifié. |

274| `CLAUDE_RUNNER_REPO_SOURCES` | Tableau JSON de `{url, revision}` pour toutes les sources git de la session, pour les hooks qui acheminent sur un référentiel secondaire. Vide quand il n'y a pas de sources. |314| `CLAUDE_RUNNER_REPO_SOURCES` | Tableau JSON de `{url, revision}` pour toutes les sources git de la session, pour les hooks qui acheminent sur un référentiel secondaire. Vide quand il n'y a pas de sources. |

275| `CLAUDE_RUNNER_CORRELATION_ID` | L'ID de corrélation fourni à la création de la session, renvoyé afin que le hook puisse mapper ce bon de travail à la demande qui a créé la session. Vide quand la session n'en a pas. |315| `CLAUDE_RUNNER_CORRELATION_ID` | L'ID de corrélation fourni à la création de la session, renvoyé afin que le hook puisse mapper ce bon de travail à la demande qui a créé la session. Vide quand la session n'en a pas. |

276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app`, `ios` ou `scheduled_trigger`, pour l'analyse d'adoption. Non défini quand la session n'a pas de surface enregistrée ou reconnue, et pour les demandes de pré-réchauffage ; vérifiez-le avec `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, qui reste sûr sous `set -u`. |316| `CLAUDE_RUNNER_CLIENT_PLATFORM` | La surface client qui a créé la session, comme `web_claude_ai`, `desktop_app`, `ios` ou `scheduled_trigger`, pour l'analyse d'adoption. Non défini quand la session n'a pas de surface enregistrée ou reconnue, et pour les demandes de pré-réchauffage ; vérifiez-le avec `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, qui reste sûr sous `set -u`. |


282* **Utilisez `--capacity 1` sur les runners générés** : un bon de travail lié à une session enregistre exactement un runner lié à cette session, donc une capacité plus élevée ajoute des emplacements qui ne reçoivent jamais de travail, et le runner enregistre un avertissement au démarrage.322* **Utilisez `--capacity 1` sur les runners générés** : un bon de travail lié à une session enregistre exactement un runner lié à cette session, donc une capacité plus élevée ajoute des emplacements qui ne reçoivent jamais de travail, et le runner enregistre un avertissement au démarrage.

283* **Les bons de travail de pré-réchauffage s'enregistrent sans liaison** : le runner de secours n'est pas lié à une session et revendique le travail en attente comme un runner de flotte fixe.323* **Les bons de travail de pré-réchauffage s'enregistrent sans liaison** : le runner de secours n'est pas lié à une session et revendique le travail en attente comme un runner de flotte fixe.

284 324 

285Le contrat a quatre règles agnostiques de l'approvisionneur :325Le contrat a quatre règles, quelle que soit la plateforme sur laquelle votre hook effectue l'approvisionnement :

286 326 

2871. **Soyez idempotent sur `CLAUDE_RUNNER_ORDER_ID`.** La redélivraison de la même demande doit générer au maximum un runner. Dérivez un nom de ressource déterministe à partir de l'ID et laissez votre plateforme rejeter le doublon. Ne clé pas sur `CLAUDE_RUNNER_SESSION_ID` à la place. Chaque re-demande pour une session porte le même ID de session avec un nouvel ID de commande, donc une charge de travail nommée ou dédupliquée par l'ID de session est créée une fois et jamais à nouveau pour cette session.3271. **Soyez idempotent sur `CLAUDE_RUNNER_ORDER_ID`.** La redélivraison de la même demande doit générer au maximum un runner. Dérivez un nom de ressource déterministe à partir de l'ID et laissez votre plateforme rejeter le doublon. Ne clé pas sur `CLAUDE_RUNNER_SESSION_ID` à la place. Chaque re-demande pour une session porte le même ID de session avec un nouvel ID de commande, donc une charge de travail nommée ou dédupliquée par l'ID de session est créée une fois et jamais à nouveau pour cette session.

2882. **Ne réessayez pas la charge de travail.** Un ID de commande signifie au maximum une charge de travail créée. Si le runner ne s'enregistre jamais, Anthropic re-demande avec un ID de commande frais après `--expected-spawn-seconds`.3282. **Ne réessayez pas la charge de travail.** Un ID de commande signifie au maximum une charge de travail créée. Si le runner ne s'enregistre jamais, Anthropic re-demande avec un ID de commande frais après `--expected-spawn-seconds`.

2893. **Utilisez le contrat du code de sortie.** Sortie 0 signifie soumis. Sortie 1 signifie échec réessayable ; la session recule et est re-proposée. Sortie 2 ou supérieure signifie non-réessayable ; la session est bloquée du spawning à nouveau jusqu'à ce qu'un [Owner](/docs/fr/cloud-environments#organization-shared-environments) sélectionne **Retry** sur elle dans l'onglet **Activity** de l'environnement. Sur une sortie non-zéro, la queue du stderr du hook apparaît là comme la raison de l'échec, donc écrivez l'erreur exploitable sur stderr et jamais les secrets. Pour une demande de pré-réchauffage il n'y a pas de session à échouer : l'orchestrateur enregistre une sortie non-zéro localement uniquement, et le serveur re-demande le spawn après le bail.3293. **Utilisez le contrat du code de sortie.** Sortez avec le statut qui correspond au résultat :

2904. **Définissez `--expected-spawn-seconds` à au moins votre temps de démarrage p99.** C'est le bail côté serveur. Toutes les répliques d'orchestrateur doivent utiliser la même valeur.330 

331 * **Sortie 0** : soumis.

332 * **Sortie 1** : échec pouvant être réessayé. La session recule et est re-proposée.

333 * **Sortie 2 ou supérieure** : échec ne pouvant pas être réessayé. La session est empêchée de générer un nouveau spawn jusqu'à ce qu'un utilisateur lui envoie un nouveau message ou qu'un [Owner](/docs/fr/cloud-environments#organization-shared-environments) sélectionne **Retry** sur elle dans l'onglet **Activity** de l'environnement.

334 

335 Sur une sortie non nulle, la fin du stderr du hook apparaît dans l'onglet **Activity** comme raison de l'échec, donc écrivez l'erreur exploitable sur stderr et n'y écrivez jamais de secrets. Dans un hook shell, [gardez les échecs transitoires réessayables](#keep-transient-failures-retryable-in-a-shell-hook).

336 

337 Une demande de pré-réchauffage n'a pas de session à faire échouer : l'orchestrateur consigne une sortie non nulle localement uniquement, et le serveur re-demande le spawn après l'expiration du bail `--expected-spawn-seconds`.

3384. **Définissez `--expected-spawn-seconds` à au moins votre temps p99 entre la demande de spawn et l'enregistrement du runner.** Mesurez à partir du moment où l'orchestrateur reçoit la demande de spawn, et incluez toute attente de capacité sur votre plateforme ainsi que le temps de démarrage. Cette valeur est le bail côté serveur, et le bon de travail expire avec lui, donc un runner dont la charge de travail prend plus de temps ne peut pas s'enregistrer. Toutes les répliques d'orchestrateur doivent utiliser la même valeur.

291 339 

292Tout ce que le hook écrit sur stdout ou stderr apparaît dans le journal de l'orchestrateur avec les identifiants automatiquement supprimés. Si les sessions restent en attente, vérifiez le corps `/healthz` de l'orchestrateur pour les compteurs de file d'attente, puis ouvrez l'onglet **Activity** de votre environnement sur la [page d'administration **Cloud environments**](https://claude.ai/admin-settings/cloud-environments) : développez une session échouée là pour son erreur de spawn, et sélectionnez **Retry** pour la re-demander.340Tout ce que le hook écrit sur stdout ou stderr apparaît dans le journal de l'orchestrateur avec les identifiants automatiquement supprimés. Si les sessions restent en attente, vérifiez le corps `/healthz` de l'orchestrateur pour les compteurs de file d'attente, puis ouvrez l'onglet **Activity** de votre environnement sur la [page d'administration **Cloud environments**](https://claude.ai/admin-settings/cloud-environments) : développez une session échouée là pour son erreur de spawn, et sélectionnez **Retry** pour la re-demander.

293 341 

294Une session qui reste en attente sans erreur de spawn dans l'onglet **Activity** peut signifier que le hook est clé sur l'ID de session. Pour confirmer, vérifiez si votre plateforme a une charge de travail pour la première demande de spawn de cette session et aucune pour les re-demandes. Si c'est le cas, clé la charge de travail sur `CLAUDE_RUNNER_ORDER_ID` à la place.342Une session qui reste en attente sans erreur de spawn dans l'onglet **Activity** peut signifier que le hook est clé sur l'ID de session. Pour confirmer, vérifiez si votre plateforme a une charge de travail pour la première demande de spawn de cette session et aucune pour les re-demandes. Si c'est le cas, clé la charge de travail sur `CLAUDE_RUNNER_ORDER_ID` à la place.

295 343 

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

345 Garder les échecs transitoires réessayables dans un hook shell

346</h4>

347 

348Dans un hook shell qui utilise `set -e`, un échec qu'une nouvelle tentative aurait pu résoudre peut bloquer la session. Le hook s'arrête à la commande en échec et sort avec le statut propre à cette commande, et l'orchestrateur applique le contrat du code de sortie à ce statut. De nombreux échecs renvoient un statut de 2 ou plus, comme `127` quand une commande n'est pas installée et `22` de `curl --fail` sur une erreur HTTP, de sorte qu'ils bloquent la session dès son premier échec.

349 

350Une session que le hook a déjà bloquée reste bloquée jusqu'à ce qu'un utilisateur lui envoie un nouveau message ou qu'un [Owner](/docs/fr/cloud-environments#organization-shared-environments) sélectionne **Retry** sur elle dans l'onglet **Activity** de l'environnement.

351 

352Pour transformer un tel échec en sortie 1, placez ces lignes directement sous la ligne `#!` du hook, au-dessus de tout ce qui peut échouer :

353 

354```bash theme={null}

355set -e

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

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

358```

359 

360Ces lignes modifient le comportement du reste du hook, donc vérifiez-le pour chacun de ces motifs après les avoir ajoutées :

361 

362* **`exit 2` ou supérieur isolé** : avec le trap défini, il devient une sortie 1. Pour une erreur qu'aucune nouvelle tentative ne peut corriger, appelez plutôt `permanent` avec la raison, comme `permanent "namespace claude-runners does not exist"`. Appelez-le dans le shell principal, pas à l'intérieur de `$( )`, `( )` ou d'un pipe.

363* **`exec`** : ne commencez pas la dernière commande du hook par `exec`, car `exec` remplace le shell et le trap ne s'exécute pas.

364* **Second trap `EXIT`** : un second `trap ... EXIT` remplace le premier, donc fusionnez les deux en un seul trap. Placez vos commandes de nettoyage directement après `rc=$?;` et terminez chacune par `|| true;`. Le nettoyage s'exécute alors en cas d'échec comme en cas de succès, et une commande de nettoyage en échec ne définit pas le statut de sortie du hook. Ce trap fusionné illustre la forme, `your-cleanup-command` représentant votre propre commande :

365 

366 ```bash theme={null}

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

368 ```

369* **Commandes autorisées à échouer** : si le hook n'utilisait pas `set -e` auparavant, il s'arrête désormais à la première commande qui renvoie une valeur non nulle, comme une recherche qui ne trouve rien ou une soumission en double que votre plateforme rejette. Si le hook agit sur le résultat, faites de cette commande la condition d'un `if`. S'il ignore le résultat, faites suivre la commande de `|| true`.

370 

371Pour confirmer que le trap fonctionne, ajoutez directement sous la ligne `trap` une ligne qui appelle une commande inexistante, comme `no-such-command`. Exécutez le fichier du hook depuis votre shell et vérifiez que `echo $?` affiche `1`, puis supprimez la ligne.

372 

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

297 Envoyer les requêtes de modèle vers Bedrock ou Agent Platform374 Envoyer les requêtes de modèle vers Bedrock ou Agent Platform

298</h2>375</h2>


381Une session qui envoie des requêtes de modèle à Amazon Bedrock ou à Agent Platform de Google Cloud diffère d'une session sur l'API Anthropic sur les points suivants :458Une session qui envoie des requêtes de modèle à Amazon Bedrock ou à Agent Platform de Google Cloud diffère d'une session sur l'API Anthropic sur les points suivants :

382 459 

383* **Stratégie depuis claude.ai** : les [paramètres gérés par le serveur](/docs/fr/server-managed-settings) n'atteignent pas ces sessions. Les stratégies d'organisation qu'un Owner définit dans les paramètres d'administration de Claude Code ne les atteignent pas non plus ; Claude Code ne les applique donc pas à l'intérieur de la session. Placez les règles sur lesquelles vous comptez dans le [fichier de paramètres gérés](/docs/fr/managed-settings#delivery-mechanisms) de l'image du runner.460* **Stratégie depuis claude.ai** : les [paramètres gérés par le serveur](/docs/fr/server-managed-settings) n'atteignent pas ces sessions. Les stratégies d'organisation qu'un Owner définit dans les paramètres d'administration de Claude Code ne les atteignent pas non plus ; Claude Code ne les applique donc pas à l'intérieur de la session. Placez les règles sur lesquelles vous comptez dans le [fichier de paramètres gérés](/docs/fr/managed-settings#delivery-mechanisms) de l'image du runner.

461* **Skills du compte** : ces sessions ne téléchargent pas les skills activés pour le compte claude.ai d'une personne. Consultez [Comment la configuration de chaque session est assemblée](#how-each-session’s-config-is-assembled).

384* **Fichiers** : les fichiers que les utilisateurs joignent à une session dans claude.ai ou dans l'application mobile ou de bureau ne l'atteignent pas, et Claude ne peut pas renvoyer de fichiers avec l'[outil `SendUserFile`](/docs/fr/tools-reference). Placez plutôt les fichiers d'entrée dans le dépôt ou sur le runner.462* **Fichiers** : les fichiers que les utilisateurs joignent à une session dans claude.ai ou dans l'application mobile ou de bureau ne l'atteignent pas, et Claude ne peut pas renvoyer de fichiers avec l'[outil `SendUserFile`](/docs/fr/tools-reference). Placez plutôt les fichiers d'entrée dans le dépôt ou sur le runner.

385* **Sélection du modèle** : le plan de contrôle d'Anthropic envoie le modèle de chaque session, et lorsqu'une session démarre sans modèle, Claude Code utilise son modèle par défaut pour le fournisseur. Le runner supprime `ANTHROPIC_MODEL` et `ANTHROPIC_DEFAULT_MODEL` de l'environnement qu'il transmet aux sessions. Les exemples des pages des fournisseurs définissent `ANTHROPIC_MODEL`, mais dans l'environnement du runner, aucune de ces variables n'a d'effet. Les variables par famille décrites dans Épingler les versions de modèle pour [Amazon Bedrock](/docs/fr/amazon-bedrock#4-pin-model-versions) et [Agent Platform](/docs/fr/google-vertex-ai#5-pin-model-versions) atteignent bien les sessions. Elles déterminent ce vers quoi un alias comme `opus` est résolu, et non ce vers quoi un ID de modèle complet est résolu.463* **Sélection du modèle** : le plan de contrôle d'Anthropic envoie le modèle de chaque session, et lorsqu'une session démarre sans modèle, Claude Code utilise son modèle par défaut pour le fournisseur. Vous ne pouvez pas choisir le modèle avec `ANTHROPIC_MODEL` ou `ANTHROPIC_DEFAULT_MODEL` dans l'environnement du runner, mais vous pouvez épingler ce vers quoi un alias est résolu :

464 * **`ANTHROPIC_MODEL` et `ANTHROPIC_DEFAULT_MODEL`** : le runner les supprime de l'environnement qu'il transmet aux sessions, même si les exemples des pages des fournisseurs définissent `ANTHROPIC_MODEL`.

465 * **Variables d'épinglage par famille** : les variables décrites dans Épingler les versions de modèle pour [Amazon Bedrock](/docs/fr/amazon-bedrock#4-pin-model-versions) et [Agent Platform](/docs/fr/google-vertex-ai#5-pin-model-versions) atteignent bien les sessions. Elles déterminent ce vers quoi un alias comme `opus` est résolu, et non ce vers quoi un ID de modèle complet est résolu.

386* **Modèles que votre compte ne fournit pas** : une session peut échouer sur un message avec une erreur qui nomme le modèle. Activez les modèles que vos développeurs peuvent choisir, le modèle d'arrière-plan décrit dans Épingler les versions de modèle, ainsi que le modèle de classifieur utilisé par le [mode auto](/docs/fr/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). Sur Amazon Bedrock, autorisez chacun d'eux dans votre stratégie.466* **Modèles que votre compte ne fournit pas** : une session peut échouer sur un message avec une erreur qui nomme le modèle. Activez les modèles que vos développeurs peuvent choisir, le modèle d'arrière-plan décrit dans Épingler les versions de modèle, ainsi que le modèle de classifieur utilisé par le [mode auto](/docs/fr/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). Sur Amazon Bedrock, autorisez chacun d'eux dans votre stratégie.

387* **Recherche web et mode rapide** : la [recherche web](/docs/fr/tools-reference#websearch-tool-behavior) n'est pas disponible sur Amazon Bedrock, et le [mode rapide](/docs/fr/fast-mode) n'est disponible sur aucun des deux fournisseurs. Pour les autres fonctionnalités qui varient selon le fournisseur, consultez [Fonctionnalités de la CLI qui varient selon le fournisseur](/docs/fr/feature-availability#cli-capabilities-that-vary-by-provider).467* **Recherche web et mode rapide** : la [recherche web](/docs/fr/tools-reference#websearch-tool-behavior) n'est pas disponible sur Amazon Bedrock, et le [mode rapide](/docs/fr/fast-mode) n'est disponible sur aucun des deux fournisseurs. Pour les autres fonctionnalités qui varient selon le fournisseur, consultez [Fonctionnalités de la CLI qui varient selon le fournisseur](/docs/fr/feature-availability#cli-capabilities-that-vary-by-provider).

388 468 


411 491 

412Les sessions héritent de l'environnement du runner ; définissez donc [`ENABLE_TOOL_SEARCH`](/docs/fr/mcp#scale-with-mcp-tool-search) à ce niveau pour contrôler la recherche d'outils MCP pour chaque session lancée par un runner ; la page MCP décrit les valeurs possibles.492Les sessions héritent de l'environnement du runner ; définissez donc [`ENABLE_TOOL_SEARCH`](/docs/fr/mcp#scale-with-mcp-tool-search) à ce niveau pour contrôler la recherche d'outils MCP pour chaque session lancée par un runner ; la page MCP décrit les valeurs possibles.

413 493 

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

495 

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

497 Attendre les serveurs MCP avant le premier tour

498</h3>

499 

500Une session auto-hébergée attend brièvement les serveurs MCP qui sont encore en cours de connexion, à deux moments distincts. Un serveur qui manque une attente voit ses outils absents au début du premier tour ; ils deviennent disponibles plus tard sans aucune action de votre part. Les deux attentes sont les suivantes :

501 

502* **Démarrage de la session** : avant que la liste des outils ne soit établie pour la première fois, la session attend par défaut jusqu'à 5 secondes un serveur HTTP ou SSE dont l'entrée définit [`alwaysLoad: true`](/docs/fr/mcp#exempt-a-server-from-deferral), ou tous les serveurs lorsque vous définissez [`MCP_CONNECTION_NONBLOCKING=0`](/docs/fr/env-vars) dans l'environnement du runner. Sinon, les serveurs HTTP et SSE se connectent en arrière-plan. Pendant cette attente, la session s'initialise plus lentement. [`MCP_CONNECT_TIMEOUT_MS`](/docs/fr/env-vars) modifie la valeur par défaut de 5 secondes.

503* **Premier tour** : après l'arrivée du message, le premier tour attend jusqu'à 2 secondes les serveurs stdio qui sont encore en cours de connexion. Pendant cette attente, la première réponse est plus lente. Pour modifier la durée de cette attente, définissez [`CLAUDE_CODE_MCP_STARTUP_WAIT_MS`](/docs/fr/env-vars) dans l'environnement du runner. Cela ne modifie pas les serveurs couverts par l'attente. Nécessite Claude Code v2.1.274 ou une version ultérieure.

504 

505`claude mcp add` n'a pas de flag `alwaysLoad`. Pour définir cette clé, ajoutez plutôt le serveur avec `claude mcp add-json`, qui la reçoit dans le JSON du serveur et l'écrit dans `.claude.json`. Dans votre Dockerfile :

506 

507```dockerfile theme={null}

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

509```

510 

511Si les outils d'un serveur n'apparaissent pas non plus lors des tours suivants, vérifiez si le serveur a bien atteint la session, comme décrit dans [Serveurs MCP](#mcp-servers).

512 

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

415 Désactiver les outils de session intégrés514 Désactiver les outils de session intégrés

416</h3>515</h3>


578 677 

579Définissez `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` pour semer à partir d'un chemin différent, ou pointez-le vers un répertoire vide pour désactiver le semis.678Définissez `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` pour semer à partir d'un chemin différent, ou pointez-le vers un répertoire vide pour désactiver le semis.

580 679 

581Le `.claude/settings.json` commité dans le dépôt se superpose comme paramètres du projet. Dans une session avec plusieurs dépôts, [le fichier d'au plus un dépôt prend effet](#repository-settings-in-sessions-with-several-repositories). Les sessions lisent également [`managed-settings.json`](/docs/fr/settings#where-settings-live) à partir du chemin système standard dans votre image runner. Que ses clés s'appliquent aux côtés des [paramètres gérés par le serveur](/docs/fr/server-managed-settings) suit [comment Claude Code combine les sources gérées](/docs/fr/managed-settings#how-claude-code-combines-managed-sources) : par défaut, quand votre organisation livre des clés gérées par le serveur, les sessions ignorent le fichier de l'image runner à part les [clés que Claude Code lit à partir de chaque source d'administration](/docs/fr/managed-settings#keys-read-from-every-admin-source), comme le bloc `env`, les verrous de sandbox, les chemins binaires de sandbox et `forceRemoteSettingsRefresh`. Voir [priorité des paramètres](/docs/fr/settings#settings-precedence).680Les sessions lisent également ces fichiers de paramètres :

681 

682* **Paramètres du projet** : un `.claude/settings.json` commité dans le dépôt se superpose à la ligne de base au niveau utilisateur. Dans une session avec plusieurs dépôts, [le fichier d'au plus un dépôt prend effet](#repository-settings-in-sessions-with-several-repositories).

683* **Paramètres gérés** : les sessions lisent [`managed-settings.json`](/docs/fr/settings#where-settings-live) à partir du chemin système standard dans votre image runner. Pour savoir si ses clés s'appliquent aux côtés des [paramètres gérés par le serveur](/docs/fr/server-managed-settings), voir [comment Claude Code combine les sources gérées](/docs/fr/managed-settings#how-claude-code-combines-managed-sources).

684 

685Pour l'ordre dans lequel ces sources s'appliquent, voir [priorité des paramètres](/docs/fr/settings#settings-precedence).

582 686 

583Quand le plan de contrôle d'Anthropic fournit une session avec des [hooks Claude Code](/docs/fr/hooks), le runner les installe aux côtés, pas par-dessus, votre propre configuration. Nécessite Claude Code v2.1.229 ou ultérieur.687Quand le plan de contrôle d'Anthropic fournit une session avec des [hooks Claude Code](/docs/fr/hooks), le runner les installe aux côtés, pas par-dessus, votre propre configuration. Nécessite Claude Code v2.1.229 ou ultérieur.

584 688 


586* **Qui les crée** : le plan de contrôle remplit les scripts à partir de constantes fixes dans son propre déploiement, jamais à partir d'entrées par session ou tierces.690* **Qui les crée** : le plan de contrôle remplit les scripts à partir de constantes fixes dans son propre déploiement, jamais à partir d'entrées par session ou tierces.

587* **Ce qui les gouverne toujours** : les hooks livrés via `--settings` entrent dans la configuration de hook fusionnée ordinaire, pas le niveau géré, donc vos paramètres gérés s'appliquent toujours. `disableAllHooks` les désactive, et ils ne font pas partie des catégories que [`allowManagedHooksOnly`](/docs/fr/settings-reference#allowmanagedhooksonly) garde chargées.691* **Ce qui les gouverne toujours** : les hooks livrés via `--settings` entrent dans la configuration de hook fusionnée ordinaire, pas le niveau géré, donc vos paramètres gérés s'appliquent toujours. `disableAllHooks` les désactive, et ils ne font pas partie des catégories que [`allowManagedHooksOnly`](/docs/fr/settings-reference#allowmanagedhooksonly) garde chargées.

588 692 

693Quand une personne démarre sa propre session, Claude Code télécharge aussi les [skills activés pour son compte claude.ai](/docs/fr/skills#skills-in-cowork-and-cloud-sessions) dans le répertoire de configuration de cette session. Une exécution de [routine](/docs/fr/routines) ne reçoit pas les skills de son propriétaire, et une session qui [envoie des requêtes de modèle à Bedrock ou Agent Platform](#send-model-requests-to-bedrock-or-agent-platform) n'en télécharge aucun. Pour un skill dont ces sessions ont besoin, commitez-le dans le `.claude/skills/` du dépôt ou ajoutez-le à votre image runner.

694 

589En dehors des sessions [Claude Tag](https://claude.com/docs/claude-tag/overview), une session dans un environnement auto-hébergé s'exécute avec la [mémoire automatique](/docs/fr/memory#auto-memory) désactivée par défaut. Pour les instructions qui doivent persister d'une session à l'autre, utilisez le `CLAUDE.md` de votre image runner ou du dépôt.695En dehors des sessions [Claude Tag](https://claude.com/docs/claude-tag/overview), une session dans un environnement auto-hébergé s'exécute avec la [mémoire automatique](/docs/fr/memory#auto-memory) désactivée par défaut. Pour les instructions qui doivent persister d'une session à l'autre, utilisez le `CLAUDE.md` de votre image runner ou du dépôt.

590 696 

591L'instantané du `~/.claude/` de l'hôte pris par le runner exclut le répertoire `projects/`. L'emplacement de stockage par défaut de la mémoire automatique se trouve sous ce répertoire. Si vous y placez des fichiers de mémoire, le runner ne les sème pas dans les sessions, et ils n'activent pas la mémoire automatique.697L'instantané du `~/.claude/` de l'hôte pris par le runner exclut le répertoire `projects/`. L'emplacement de stockage par défaut de la mémoire automatique se trouve sous ce répertoire. Si vous y placez des fichiers de mémoire, le runner ne les sème pas dans les sessions, et ils n'activent pas la mémoire automatique.

Details

20 20 

21* **Conteneurs éphémères, par session** : exécutez chaque processus runner dans un conteneur ou une VM fraîche qui est détruite lorsque le processus se termine, avec `--capacity 1` et la valeur par défaut `--drain-grace-sec 0` afin que chaque conteneur serve exactement une session. À une capacité plus élevée, ou avec une période de drainage positive, un conteneur sert plusieurs sessions du même [propriétaire verrouillé](/docs/fr/self-hosted-environments#key-concepts) ; voir [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle). Ne réutilisez pas un système de fichiers entre les redémarrages du runner, sauf dans la configuration délibérée [checkout pré-chauffé](#reuse-a-pre-warmed-checkout), et jamais entre les propriétaires.21* **Conteneurs éphémères, par session** : exécutez chaque processus runner dans un conteneur ou une VM fraîche qui est détruite lorsque le processus se termine, avec `--capacity 1` et la valeur par défaut `--drain-grace-sec 0` afin que chaque conteneur serve exactement une session. À une capacité plus élevée, ou avec une période de drainage positive, un conteneur sert plusieurs sessions du même [propriétaire verrouillé](/docs/fr/self-hosted-environments#key-concepts) ; voir [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle). Ne réutilisez pas un système de fichiers entre les redémarrages du runner, sauf dans la configuration délibérée [checkout pré-chauffé](#reuse-a-pre-warmed-checkout), et jamais entre les propriétaires.

22 * <span id="processes-a-stopped-session-leaves" />Lorsque le runner arrête une session, il n'envoie aucun signal à un processus encore en cours d'exécution après la fin de sa commande shell, comme un service passé en mode daemon. La destruction du conteneur ou de la VM met fin à ce processus.22 * <span id="processes-a-stopped-session-leaves" />Lorsque le runner arrête une session, il n'envoie aucun signal à un processus encore en cours d'exécution après la fin de sa commande shell, comme un service passé en mode daemon. La destruction du conteneur ou de la VM met fin à ce processus.

23* **Pas de larges identifiants dans l'image** : n'incluez pas de clés SSH de longue durée, d'identifiants de fournisseur cloud, ou de jetons d'accès personnel qui accordent plus que ce qu'une session a besoin. Générez les identifiants utilisés pendant une session, tels que les jetons push ou API, par session à partir de votre [script wrapper](/docs/fr/self-hosted-environments-configuration#wrapper-scripts). Pour le clone initial, qui se produit avant l'exécution du wrapper, utilisez un [hook de cycle de vie `checkout`](/docs/fr/self-hosted-environments-configuration#checkout) ou [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) ; voir [Configurer git](#configure-git).23* **Pas de larges identifiants dans l'image** : n'incluez pas de clés SSH de longue durée, d'identifiants de fournisseur cloud, ou de jetons d'accès personnel qui accordent plus que ce qu'une session a besoin. Générez les identifiants utilisés pendant une session, tels que les jetons push ou API, par session à partir de votre [script wrapper](/docs/fr/self-hosted-environments-configuration#wrapper-scripts). Le clone initial se produit avant l'exécution du wrapper ; gérez-le donc avec un [hook de cycle de vie `checkout`](/docs/fr/self-hosted-environments-configuration#checkout), ou avec [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) lorsque tous les dépôts d'une session se trouvent sur github.com. Pour ces deux options, voir [Configurer git](#configure-git).

24* **Tenez les identifiants GitHub de l'hôte à l'écart des sessions** : Claude peut utiliser tout identifiant GitHub qu'une session peut lire, avec l'accès que cet identifiant accorde. Tenez les identifiants GitHub à portée étendue propres à l'hôte runner hors de tout ce qu'une session peut lire. Un tel identifiant peut être un jeton d'accès personnel, le jeton que `gh auth login` enregistre pour votre compte, ou un `GH_TOKEN` dans l'environnement du runner.

25 * **Avec [git géré par Anthropic](#use-the-anthropic-git-proxy)** : avec un tel identifiant, Claude atteint GitHub directement au lieu de passer par git géré par Anthropic.

26 * **Sans git géré par Anthropic** : un identifiant de clone peut rester dans l'image si vous limitez sa portée aussi strictement que le décrit [Intégrer la configuration git dans votre image](#ship-git-config-in-your-image).

24* **Gardez le secret de l'environnement loin des hôtes exécutant les sessions** : le secret de l'environnement peut enregistrer des runners et récupérer toute session mise en file d'attente sur l'environnement. Sur une flotte fixe, il réside sur chaque hôte runner, où le code de toute session peut lire le fichier secret. Préférez les [runners à la demande](/docs/fr/self-hosted-environments-configuration#on-demand-runners), où le secret reste sur l'hôte orchestrateur, qui n'exécute jamais de code utilisateur, et chaque runner reçoit un bon de travail à usage unique qui enregistre exactement un runner. Sur une flotte fixe, traitez le fichier secret-environnement comme lisible par toute session et faites tourner le secret après tout compromis de session suspecté.27* **Gardez le secret de l'environnement loin des hôtes exécutant les sessions** : le secret de l'environnement peut enregistrer des runners et récupérer toute session mise en file d'attente sur l'environnement. Sur une flotte fixe, il réside sur chaque hôte runner, où le code de toute session peut lire le fichier secret. Préférez les [runners à la demande](/docs/fr/self-hosted-environments-configuration#on-demand-runners), où le secret reste sur l'hôte orchestrateur, qui n'exécute jamais de code utilisateur, et chaque runner reçoit un bon de travail à usage unique qui enregistre exactement un runner. Sur une flotte fixe, traitez le fichier secret-environnement comme lisible par toute session et faites tourner le secret après tout compromis de session suspecté.

25* **Sortie réseau par défaut-refuser** : limitez le trafic sortant du conteneur runner et session à votre propre limite réseau sur chaque environnement ; [Sortie par défaut-refuser](#default-deny-egress) couvre ce qu'il faut autoriser et pourquoi.28* **Sortie réseau par défaut-refuser** : limitez le trafic sortant du conteneur runner et session à votre propre limite réseau sur chaque environnement ; [Sortie par défaut-refuser](#default-deny-egress) couvre ce qu'il faut autoriser et pourquoi.

26* **IAM hôte avec privilèges minimaux** : l'identité de calcul attachée à l'hôte runner, telle qu'un profil d'instance ou un compte de service de nœud, ne devrait accorder que ce dont le runner lui-même a besoin. Les sessions devraient obtenir leurs propres identifiants via votre script wrapper plutôt que d'hériter de ceux de l'hôte.29* **IAM hôte avec privilèges minimaux** : l'identité de calcul attachée à l'hôte runner, telle qu'un profil d'instance ou un compte de service de nœud, ne devrait accorder que ce dont le runner lui-même a besoin. Les sessions devraient obtenir leurs propres identifiants via votre script wrapper plutôt que d'hériter de ceux de l'hôte.


42 La garde s'exécute indépendamment de [`--trust-workspace`](/docs/fr/self-hosted-environments-reference#runner-cli-flags), et ne couvre pas les hooks de dépôt, `.mcp.json`, ou les règles Bash ; voir [Permissions et approbation des outils](/docs/fr/self-hosted-environments-configuration#permissions-and-tool-approval) pour savoir où ces autorisations doivent se trouver.45 La garde s'exécute indépendamment de [`--trust-workspace`](/docs/fr/self-hosted-environments-reference#runner-cli-flags), et ne couvre pas les hooks de dépôt, `.mcp.json`, ou les règles Bash ; voir [Permissions et approbation des outils](/docs/fr/self-hosted-environments-configuration#permissions-and-tool-approval) pour savoir où ces autorisations doivent se trouver.

43 46 

44<Note>47<Note>

45 La liste d'autorisation IP de votre organisation ne couvre pas le trafic du runner auto-hébergé par défaut. Ne vous fiez pas à elle comme contrôle réseau pour le trafic du runner ou de la session ; appliquez plutôt une sortie par défaut-refuser à votre propre limite réseau, et contactez votre équipe de compte Anthropic si vous souhaitez l'application de la liste d'autorisation IP pour votre organisation.48 Si votre organisation a activé la [liste d'autorisation IP](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting), ajoutez les adresses de sortie publiques de vos runners et conteneurs de session à la liste d'autorisation avant de les démarrer. Si vous exécutez des [runners à la demande](/docs/fr/self-hosted-environments-configuration#on-demand-runners), ajoutez également l'adresse de l'hôte orchestrateur. Ne vous fiez pas à la liste d'autorisation comme contrôle réseau pour le trafic du runner ou de la session. Appliquez plutôt une sortie par défaut-refuser à votre propre limite réseau.

46</Note>49</Note>

47 50 

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


55 58 

56| Hôte | Port | Utilisé pour |59| Hôte | Port | Utilisé pour |

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

58| `api.anthropic.com` | 443, HTTPS ; WSS pour le connecteur SCM uniquement | Plan de contrôle du runner et streaming de session, inférence de modèle, drapeaux de fonctionnalités, analytique de produit, récupérations de clés [JWKS](/docs/fr/self-hosted-environments-identity), signature de commit, le proxy git quand `--use-anthropic-git-proxy` est défini, et le tunnel [connecteur SCM](/docs/fr/self-hosted-environments-reference#scm-connector-flags) de l'orchestrateur quand `--scm-connector-host` est défini |61| `api.anthropic.com` | 443, HTTPS ; WSS pour le [git géré par Anthropic](#use-the-anthropic-git-proxy) | Plan de contrôle du runner et streaming de session, inférence de modèle, feature flags, analytique de produit, récupérations de clés [JWKS](/docs/fr/self-hosted-environments-identity), signature de commit, et git géré par Anthropic quand `--use-anthropic-git-proxy` est défini |

59| Votre hôte git, tel que `github.com` ou votre hôte GitHub Enterprise | 443 ou 22 | Clonage et push de référentiels. Non nécessaire si le runner utilise `--use-anthropic-git-proxy`, qui route le trafic git via `api.anthropic.com`. |62| Votre hôte git, tel que `github.com` ou votre hôte GitHub Enterprise | 443 ou 22 | Clonage et push de dépôts sur chaque hôte git utilisé par les sessions du runner. Sur un runner qui utilise [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), consultez [quand le chemin `github.com` reste nécessaire](#github-com-egress-with-the-anthropic-git-proxy). |

63 

64<span id="github-com-egress-with-the-anthropic-git-proxy" />Un runner qui utilise [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) route son trafic git `github.com` via `api.anthropic.com`, il n'a donc pas besoin du chemin vers l'hôte git pour `github.com`. Il a toutefois besoin de ce chemin si vous définissez `--push-outcome-on-release` ou si vous effectuez un push depuis un hook `post-session`.

60 65 

61Que ces hôtes soient nécessaires dépend de votre configuration :66Que ces hôtes soient nécessaires dépend de votre configuration :

62 67 


71| `browser-intake-us5-datadoghq.com` | 443 | Téléchargements de rapports d'erreurs Anthropic, envoyés uniquement quand [le rapport d'erreurs](/docs/fr/data-usage#telemetry-services) est activé pour le compte de la session. Supprimé par `DISABLE_ERROR_REPORTING=1` ou `DISABLE_TELEMETRY=1`. |76| `browser-intake-us5-datadoghq.com` | 443 | Téléchargements de rapports d'erreurs Anthropic, envoyés uniquement quand [le rapport d'erreurs](/docs/fr/data-usage#telemetry-services) est activé pour le compte de la session. Supprimé par `DISABLE_ERROR_REPORTING=1` ou `DISABLE_TELEMETRY=1`. |

72| Les endpoints de votre fournisseur cloud pour les requêtes de modèle, les recherches de modèles et le renouvellement des identifiants, tels que `bedrock-runtime.us-east-1.amazonaws.com` ou `aiplatform.googleapis.com` | 443 | Uniquement quand le runner [envoie les requêtes de modèle à Amazon Bedrock ou à Agent Platform de Google Cloud](/docs/fr/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |77| Les endpoints de votre fournisseur cloud pour les requêtes de modèle, les recherches de modèles et le renouvellement des identifiants, tels que `bedrock-runtime.us-east-1.amazonaws.com` ou `aiplatform.googleapis.com` | 443 | Uniquement quand le runner [envoie les requêtes de modèle à Amazon Bedrock ou à Agent Platform de Google Cloud](/docs/fr/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |

73 78 

74Le runner n'atteint pas `statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, ou `platform.claude.com`. Ces hôtes apparaissent dans certaines listes de contrôle réseau d'entreprise plus anciennes, mais vous n'avez pas besoin de les autoriser pour le trafic du runner ou de la session : les récupérations de drapeaux de fonctionnalités vont à `api.anthropic.com`, et le runner s'authentifie avec le secret de l'environnement plutôt qu'avec OAuth interactif. Deux flux côté hôte atteignent `claude.ai`, donc exécutez-les à partir d'un hôte dont la sortie le permet plutôt que d'élargir la sortie du conteneur de session : l'installateur d'une ligne récupère `install.sh` depuis `claude.ai` au moment de l'installation, et `claude auth login` interactif, que le [guide de configuration](/docs/fr/self-hosted-environments-quickstart#set-up-an-environment-and-runner), le mode signé du `doctor`, et [la dispatch CI](/docs/fr/self-hosted-environments-testing#authenticate-from-ci) utilisent, se connecte via `claude.ai`, `claude.com`, et `platform.claude.com`. `mcp-proxy.anthropic.com` n'est pas requis non plus : les sessions auto-hébergées ne l'utilisent pas, et la livraison de vos connecteurs claude.ai d'organisation aux sessions, quand activée pour votre organisation, route via `api.anthropic.com`. Consultez [Serveurs MCP](/docs/fr/self-hosted-environments-configuration#mcp-servers).79Vous n'avez pas besoin d'ajouter ces hôtes à la liste d'autorisation pour le trafic du runner ou de la session :

80 

81* **`statsig.anthropic.com`, `*.sentry.io`, `claude.ai` et `platform.claude.com`** : ces hôtes apparaissent dans certaines listes de contrôle réseau d'entreprise plus anciennes, mais le runner ne les atteint pas. Les récupérations de feature flags vont à `api.anthropic.com`, et le runner s'authentifie avec le secret de l'environnement plutôt qu'avec OAuth interactif.

82* **`mcp-proxy.anthropic.com`** : les sessions auto-hébergées ne l'utilisent pas. Quand la livraison des connecteurs est activée pour votre organisation, les connecteurs claude.ai de votre organisation atteignent les sessions via `api.anthropic.com`. Consultez [Serveurs MCP](/docs/fr/self-hosted-environments-configuration#mcp-servers).

83 

84Ces flux côté hôte atteignent bien `claude.ai`, donc exécutez-les à partir d'un hôte dont la sortie le permet plutôt que d'élargir la sortie du conteneur de session :

85 

86* **L'installateur d'une ligne** : récupère `install.sh` depuis `claude.ai` au moment de l'installation.

87* **`claude auth login` interactif** : se connecte via `claude.ai`, `claude.com` et `platform.claude.com`. La [configuration guidée](/docs/fr/self-hosted-environments-quickstart#run-the-guided-setup), le mode connecté de `doctor` et [le dispatch CI](/docs/fr/self-hosted-environments-testing#authenticate-from-ci) l'utilisent. Le navigateur avec lequel vous vous connectez charge également les vérifications de navigateur de la page de connexion claude.ai depuis `hcaptcha.com`, `*.hcaptcha.com` et `challenges.cloudflare.com`.

75 88 

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

77 Sortie par défaut-refuser90 Sortie par défaut-refuser


127* **Laisser le runner configurer git** : démarrez le runner avec `--configure-git` pour qu'il écrive la même identité et configuration de signature de commit que les sessions hébergées par Anthropic utilisent140* **Laisser le runner configurer git** : démarrez le runner avec `--configure-git` pour qu'il écrive la même identité et configuration de signature de commit que les sessions hébergées par Anthropic utilisent

128* **Livrer la configuration git dans votre image** : définissez l'identité et les identifiants push vous-même, par exemple pour committer sous votre propre identité de bot141* **Livrer la configuration git dans votre image** : définissez l'identité et les identifiants push vous-même, par exemple pour committer sous votre propre identité de bot

129 142 

143Pour les dépôts sur github.com, vous pouvez également démarrer le runner avec [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), ou définir `CLAUDE_RUNNER_USE_GIT_PROXY=1`, pour demander à Anthropic de servir git pour les sessions du runner.

144 

130Planchers de version Git sur l'hôte runner : [`--configure-git`](#let-the-runner-configure-git) la signature de commit SSH nécessite Git 2.34 ou plus récent, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) nécessite 2.32 ou plus récent, et reprendre les sessions à partir de branches poussées par [`--push-outcome-on-release`](/docs/fr/self-hosted-environments-reference#runner-cli-flags) nécessite 2.29 ou plus récent. Git 2.24 est suffisant si vous omettez les trois et gérez l'identité git vous-même.145Planchers de version Git sur l'hôte runner : [`--configure-git`](#let-the-runner-configure-git) la signature de commit SSH nécessite Git 2.34 ou plus récent, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) nécessite 2.32 ou plus récent, et reprendre les sessions à partir de branches poussées par [`--push-outcome-on-release`](/docs/fr/self-hosted-environments-reference#runner-cli-flags) nécessite 2.29 ou plus récent. Git 2.24 est suffisant si vous omettez les trois et gérez l'identité git vous-même.

131 146 

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


138* `user.name = Claude` et `user.email = noreply@anthropic.com`, correspondant aux sessions hébergées par Anthropic153* `user.name = Claude` et `user.email = noreply@anthropic.com`, correspondant aux sessions hébergées par Anthropic

139* Signature de commit et de tag au format SSH, routée via un shim géré par le runner qui signe chaque commit via le service de signature d'Anthropic en utilisant les identifiants de la session. Les signatures sont vérifiables sur GitHub par rapport à la clé de signature SSH publiée d'Anthropic.154* Signature de commit et de tag au format SSH, routée via un shim géré par le runner qui signe chaque commit via le service de signature d'Anthropic en utilisant les identifiants de la session. Les signatures sont vérifiables sur GitHub par rapport à la clé de signature SSH publiée d'Anthropic.

140* `push.negotiate = true`, donc git demande à votre hôte git quels commits il possède déjà avant de préparer un push. Nécessite Claude Code v2.1.257 ou plus récent.155* `push.negotiate = true`, donc git demande à votre hôte git quels commits il possède déjà avant de préparer un push. Nécessite Claude Code v2.1.257 ou plus récent.

141* `core.hooksPath` pointant vers un répertoire de hooks géré par le runner. Ses hooks `commit-msg` et `prepare-commit-msg` ajoutent une remorque `Co-authored-by:` pour le créateur de la session à chaque commit, construite à partir de l'email dans [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/fr/self-hosted-environments-configuration#wrapper-scripts) et omise quand cette variable n'est pas définie. Si votre image définit déjà `core.hooksPath`, le runner laisse votre paramètre en place, ignore l'installation de ces hooks, et affiche un avertissement `[runner:git]`.156* `core.hooksPath` pointant vers un répertoire de hooks géré par le runner. Ses hooks `commit-msg` et `prepare-commit-msg` ajoutent une remorque `Co-authored-by:` pour le créateur de la session à chaque commit. La remorque est construite à partir de l'email dans [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/fr/self-hosted-environments-configuration#wrapper-scripts) et omise quand cette variable n'est pas définie. Si votre image définit déjà `core.hooksPath` et que le runner n'utilise pas [git géré par Anthropic](#use-the-anthropic-git-proxy), le runner laisse votre paramètre en place, ignore l'installation de ces hooks, et affiche un avertissement `[runner:git]`.

142 157 

143La signature de commit nécessite git 2.34 ou plus récent ; le runner vérifie au démarrage et quitte avec une erreur si votre git est plus ancien. Ce drapeau ne configure pas les identifiants push, que vous fournissez toujours dans l'image.158La signature de commit nécessite git 2.34 ou plus récent ; le runner vérifie au démarrage et quitte avec une erreur si votre git est plus ancien. Ce drapeau ne configure pas les identifiants push, que vous fournissez toujours dans l'image.

144 159 

145Sur un runner en v2.1.280 ou plus récent, les commits que vous créez depuis un hook de cycle de vie `checkout` ou `post-session` sont également signés au nom de la session, sans la remorque `Co-authored-by:`. [Configuration git dans les hooks de cycle de vie](/docs/fr/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) décrit les paramètres git que le runner impose dans ces hooks.160Sur un runner en v2.1.280 ou plus récent, les commits que vous créez depuis un hook de cycle de vie `checkout` ou `post-session` sont également signés au nom de la session, sans la remorque `Co-authored-by:`. [Configuration git dans les hooks de cycle de vie](/docs/fr/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) décrit les paramètres git que le runner impose dans ces hooks.

146 161 

162Avec ou sans `--configure-git`, Claude Code demande à Claude de terminer ses messages de commit par une remorque `Claude-Session: <url>` et ses descriptions de pull request par l'URL de la session. Pour omettre les deux, définissez [`attribution.sessionUrl`](/docs/fr/settings-reference#attribution-sessionurl) sur `false` dans le fichier [`~/.claude/settings.json`](/docs/fr/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) de l'hôte runner, puis redémarrez le runner.

163 

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

148 Livrer la configuration git dans votre image165 Livrer la configuration git dans votre image

149</h3>166</h3>


186 Utiliser le proxy git Anthropic203 Utiliser le proxy git Anthropic

187</h3>204</h3>

188 205 

189Démarrez le runner avec `--use-anthropic-git-proxy`, ou définissez `CLAUDE_RUNNER_USE_GIT_PROXY=1`, pour qu'il clone via le proxy git d'Anthropic, authentifié avec le jeton court-durée de la session. Pour les sessions utilisateur ordinaires, le proxy utilise le jeton OAuth GitHub ou GitHub Enterprise stocké pour le créateur de session ; pour les sessions de bot et d'agent, il utilise le jeton d'installation GitHub App de votre organisation. De toute façon, l'image runner n'a besoin d'aucun identifiant git : pas de clés SSH, pas de credential helper, pas de `.netrc`. C'est le même chemin d'authentification que les environnements hébergés par Anthropic utilisent.206Avec le proxy git Anthropic, également appelé git géré par Anthropic, l'image du runner n'a besoin d'aucune clé SSH, d'aucun credential helper, d'aucun `.netrc` ni d'aucun autre identifiant git pour la session elle-même. À la place, le runner demande à Anthropic de servir git pour ses sessions. Pour la session d'un utilisateur qu'Anthropic sert, le clone du runner ainsi que les récupérations et les pushs propres à la session passent par Anthropic, qui utilise le jeton OAuth GitHub stocké pour le créateur de la session. [Comment Anthropic sert git pour une session](#how-anthropic-serves-git-for-a-session) couvre les sessions de bot et d'agent.

207 

208Le proxy git est désactivé tant que vous ne l'[activez](#turn-the-anthropic-git-proxy-on) pas. Un runner qui atteint votre hôte git avec ses propres identifiants n'en a pas besoin, et son git fonctionne avec n'importe quel hôte git.

209 

210En contrepartie, le proxy git limite ce que le runner prend en charge et modifie ce dont il a besoin :

211 

212* **github.com uniquement** : Anthropic ne sert une session que lorsque tous ses dépôts sont sur github.com, et le proxy git ne prend pas encore en charge GitHub Enterprise Server. Sur un runner avec le proxy git, une session ayant un dépôt sur un autre hôte git [ne démarre pas](#when-anthropic-doesnt-serve-a-session).

213* **Identifiants pour les dépôts de la session uniquement** : Anthropic fournit des identifiants git pour les dépôts qui font partie de la session, et non pour les autres dépôts du même hôte git. Un sous-module privé, une dépendance que votre gestionnaire de paquets récupère avec git, ou une marketplace de plugins dans un autre dépôt n'obtient aucun identifiant d'Anthropic. Demandez aux personnes qui créent des sessions d'[ajouter chaque dépôt](/docs/fr/web-quickstart#start-a-task) dont une session a besoin lors de sa création.

214* **Pushs de branches uniquement** : un push qui supprime une branche échoue, tout comme un push vers tout autre type de ref, comme un tag. Pour savoir quelles branches un push peut mettre à jour, consultez [Proxy GitHub](/docs/fr/cloud-environments#github-proxy).

215* **Comptes GitHub connectés** : la personne qui a créé une session utilisateur doit avoir connecté GitHub sur claude.ai, sinon la session [ne démarre pas](#creator-has-no-github-connection).

216* **`--capacity 1`** : le proxy git nécessite une session par processus runner, donc exécutez plus de répliques pour le parallélisme. [Activer le proxy git Anthropic](#turn-the-anthropic-git-proxy-on) liste les exigences.

217* **Configuration git globale remplacée** : le runner [supprime et remplace la configuration git globale](#git-proxy-replaces-global-git-config) de l'utilisateur sous lequel il s'exécute. Exécutez-le en tant qu'utilisateur dédié ou dans un conteneur.

218* **Identifiants de l'hôte pour les pushs de l'hôte** : le push [`--push-outcome-on-release`](/docs/fr/self-hosted-environments-reference#runner-cli-flags) du runner et tout push effectué par votre [hook `post-session`](/docs/fr/self-hosted-environments-configuration#post-session) utilisent toujours les propres identifiants git de l'hôte runner et son [chemin réseau vers `github.com`](#github-com-egress-with-the-anthropic-git-proxy). Pour ces identifiants, consultez [Livrer la configuration git dans votre image](#ship-git-config-in-your-image).

219* **Décision par session** : Anthropic décide pour chaque session du runner s'il sert son git, et une session qu'il ne sert pas ne démarre pas. [Quand des sessions ne démarrent pas sur un runner avec le proxy git](#when-anthropic-doesnt-serve-a-session) couvre les causes.

220 

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

222 

223<Warning>

224 Lorsque `--use-anthropic-git-proxy` est défini, le runner supprime et remplace la configuration git globale de l'utilisateur sous lequel il s'exécute, sans conserver de sauvegarde. Il le fait au démarrage et avant chaque session. Un identifiant de connexion ou un credential helper que vous y conserviez est perdu. Les paramètres écrits par [`--configure-git`](#let-the-runner-configure-git) sont conservés. Exécutez le runner en tant qu'utilisateur dédié ou dans un conteneur, jamais sous votre propre utilisateur.

225</Warning>

226 

227Conservez les paramètres git qui ne sont pas secrets, comme l'identité et `safe.directory`, dans la configuration git système.

228 

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

230 Activer le proxy git Anthropic

231</h4>

232 

233Avant de démarrer le runner avec `--use-anthropic-git-proxy`, vérifiez que l'hôte runner satisfait chacune de ces exigences. Le runner refuse de démarrer lorsque l'exigence de capacité ou de git n'est pas satisfaite :

190 234 

191Le proxy nécessite `--capacity 1` car l'URL du proxy est par session, et git 2.32 ou plus récent car les anciennes versions de git ignorent le mécanisme de configuration que le proxy utilise pour isoler les sessions les unes des autres. Le runner refuse de démarrer si l'une ou l'autre exigence n'est pas satisfaite. Parce que le proxy récupère du côté d'Anthropic, votre hôte git doit être accessible depuis l'infrastructure Anthropic, la même exigence que les sessions hébergées par Anthropic ont ; pour un hôte git qui n'est routable que dans votre réseau, utilisez un [hook de cycle de vie `checkout`](/docs/fr/self-hosted-environments-configuration#checkout) à la place. Chaque processus runner gère une session à la fois, donc exécutez plus de répliques pour le parallélisme. Quand le proxy est activé, `--git-host-rewrite` et `--git-ssh-rewrite` n'ont aucun effet : l'URL du proxy pointe vers `api.anthropic.com`, pas votre hôte git.235* **Claude Code v2.1.267 ou plus récent** : les versions antérieures acceptent le flag mais ne transmettent pas la demande pour qu'Anthropic serve git et n'affichent pas la ligne `Registering as opted in`, donc Anthropic ne sert pas leurs sessions.

236* **`--capacity 1`, la valeur par défaut** : chaque processus runner gère une session à la fois, donc exécutez plus de répliques pour le parallélisme.

237* **Git 2.32 ou plus récent** : les anciennes versions de git ignorent la configuration git par session que le runner met en place pour le proxy git.

192 238 

193<Warning>239<Warning>

194 Les recettes [Kubernetes](#kubernetes) et [Docker Compose](#docker-compose) sur cette page utilisent `--capacity 4`. Si vous ajoutez `--use-anthropic-git-proxy` ou `CLAUDE_RUNNER_USE_GIT_PROXY=1` à l'une d'elles sans changer la capacité à `1`, le runner quitte au démarrage chaque fois que votre orchestrateur le redémarre. Définissez `--capacity 1` et exécutez plus de répliques pour le parallélisme. [When the runner exits](#when-the-runner-exits) affiche la ligne que le runner imprime.240 Les recettes [Kubernetes](#kubernetes) et [Docker Compose](#docker-compose) sur cette page utilisent `--capacity 4`. Si vous ajoutez `--use-anthropic-git-proxy` ou `CLAUDE_RUNNER_USE_GIT_PROXY=1` à l'une d'elles sans changer la capacité à `1`, le runner quitte au démarrage chaque fois que votre orchestrateur le redémarre. Définissez `--capacity 1` et exécutez plus de répliques pour le parallélisme. [When the runner exits](#when-the-runner-exits) affiche la ligne que le runner imprime.

195</Warning>241</Warning>

196 242 

197Le runner signale également l'adhésion à Anthropic quand il s'enregistre, affichant `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)` au démarrage. Signaler l'adhésion nécessite Claude Code v2.1.267 ou plus récent, et les versions antérieures acceptent le drapeau sans le signaler ou afficher cette ligne. Chaque session sur un runner ayant adhéré utilise ensuite soit git géré par Anthropic, soit l'URL du proxy par session. Quand une session utilise l'URL du proxy par session, le runner enregistre une ligne `[runner:warn]` indiquant cela.243Pour activer le proxy git, ajoutez `--use-anthropic-git-proxy` à la commande du runner, ou définissez `CLAUDE_RUNNER_USE_GIT_PROXY=1` dans l'environnement du runner. Cette commande, exécutée dans un shell sur l'hôte runner, démarre le runner du [démarrage rapide](/docs/fr/self-hosted-environments-quickstart#set-up-manually) avec le proxy git activé :

244 

245```bash theme={null}

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

247```

248 

249Au démarrage, le runner affiche `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)`. Anthropic décide ensuite pour chaque session de ce runner s'il sert son git. Pour chaque session qu'il sert, le runner journalise une ligne `[runner:session]` contenant `governed git ACTIVE`. Si une session ne démarre pas, consultez [Quand des sessions ne démarrent pas sur un runner avec le proxy git](#when-anthropic-doesnt-serve-a-session).

250 

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

252 Comment Anthropic sert git pour une session

253</h4>

254 

255Pour une session qu'Anthropic sert, le clone du runner ainsi que les récupérations et les pushs propres à la session passent par Anthropic, authentifiés avec le jeton de courte durée propre à la session :

256 

257* **Sessions utilisateur** : Anthropic utilise le jeton OAuth GitHub stocké pour le créateur de la session.

258* **Sessions de bot et d'agent** : Anthropic utilise le jeton d'installation GitHub App de votre organisation.

259* **Réécritures d'URL** : `--git-host-rewrite` et `--git-ssh-rewrite` n'ont aucun effet sur un dépôt que le proxy git sert.

260 

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

262 Quand des sessions ne démarrent pas sur un runner avec le proxy git

263</h4>

264 

265Sur un runner démarré avec `--use-anthropic-git-proxy`, une session ne démarre pas lorsqu'Anthropic ne sert pas son git. Recherchez dans le log du runner une erreur git qui nomme une adresse `api.anthropic.com` contenant `/git_proxy/`.

266 

267Pour chaque session, un runner sur Claude Code v2.1.267 ou plus récent journalise également soit une ligne `[runner:session]` contenant `governed git ACTIVE` lorsqu'Anthropic sert le git de la session, soit une ligne `[runner:warn]` contenant `the server withheld Anthropic-managed git for this session` lorsqu'il ne le sert pas. Trouvez la ligne que vous voyez parmi ces cas :

268 

269* **Ni `governed git ACTIVE` ni la ligne `withheld`** : un runner antérieur à Claude Code v2.1.267 ne journalise aucune des deux lignes, et Anthropic ne sert pas ses sessions. Mettez à jour le runner vers v2.1.267 ou plus récent en suivant [Épingler la version](#pin-the-version).

270* **La ligne `withheld`** : Anthropic n'a pas servi la session. Un runner qui fonctionnait auparavant avec le proxy git peut échouer ainsi sans aucun changement de votre côté.

271 * **Un dépôt n'est pas sur github.com** : une session ayant ne serait-ce qu'un dépôt sur un autre hôte git, comme GitHub Enterprise Server, n'est pas servie, y compris ses dépôts github.com. [Désactivez le proxy git Anthropic](#turn-the-anthropic-git-proxy-off) pour les runners de cet environnement.

272 * **Tous les dépôts sont sur github.com** : signalez l'échec à [votre équipe de compte Anthropic](#report-an-issue) avec l'identifiant de session figurant dans la ligne `withheld`. Anthropic enregistre la raison de son côté.

273* **Une ligne contenant `remote: access denied by the git proxy`** : une session qu'Anthropic sert peut tout de même être refusée, par exemple lorsque la politique de l'organisation refuse l'accès git pour la session, ou que la session n'est pas autorisée pour le dépôt. Le log du runner affiche alors une ligne contenant `remote: access denied by the git proxy`, et le reste de cette ligne en indique la raison.

274* <span id="creator-has-no-github-connection" />**`GitHub authentication required`** : ce message apparaît lorsque le créateur de la session n'a pas de connexion GitHub fonctionnelle sur claude.ai. Le clone de la session échoue, et l'erreur git indique `GitHub authentication required. Please reconnect your GitHub account.` Demandez à cette personne de connecter ou reconnecter GitHub dans ses paramètres claude.ai.

275 

276Après avoir corrigé la cause, redémarrez les sessions qui ont échoué.

277 

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

279 Désactiver le proxy git Anthropic

280</h4>

281 

282Si des sessions d'un environnement utilisent un dépôt sur un hôte git autre que github.com, comme GitHub Enterprise Server, désactivez `--use-anthropic-git-proxy` pour les runners de cet environnement.

283 

284<Steps>

285 <Step title="Retirer le flag">

286 Retirez `--use-anthropic-git-proxy` de la commande du runner. Si vous avez défini `CLAUDE_RUNNER_USE_GIT_PROXY` dans l'environnement du runner, comme une spécification de pod ou un fichier Compose, retirez-la à cet endroit. Dans un shell, supprimez sa définition :

287 

288 ```bash theme={null}

289 unset CLAUDE_RUNNER_USE_GIT_PROXY

290 ```

291 </Step>

292 

293 <Step title="Fournir des identifiants git au runner">

294 Fournissez des identifiants qui fonctionnent sans invite pour chaque hôte git utilisé par les sessions des runners, github.com compris. Tout identifiant qui se trouvait dans la configuration git globale de l'utilisateur du runner a disparu, car le runner a supprimé cette configuration tant que `--use-anthropic-git-proxy` était défini. [Livrez les identifiants dans votre image](#ship-git-config-in-your-image) ou utilisez un [hook de cycle de vie `checkout`](/docs/fr/self-hosted-environments-configuration#checkout).

295 </Step>

296 

297 <Step title="Ouvrir le chemin réseau">

298 Autorisez le runner à atteindre chaque hôte git utilisé par les sessions des runners sur le port 443 ou 22. Consultez la ligne relative à l'hôte git dans [Exigences réseau](#network-requirements).

299 </Step>

300 

301 <Step title="Redémarrer les runners">

302 Redémarrez les runners pour qu'ils s'enregistrent sans le proxy git. Puis redémarrez chaque session qui a échoué.

303 </Step>

304</Steps>

198 305 

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

200 Accès à l'API GitHub sans la GitHub CLI307 Accès à l'API GitHub sans la GitHub CLI


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

267FROM debian:bookworm-slim374FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION375ARG CLAUDE_CODE_VERSION

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

270 && rm -rf /var/lib/apt/lists/*377 && 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" \378RUN 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/claude379 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners489kubectl create namespace claude-runners

383```490```

384 491 

385Créez le Secret de sauvegarde à partir d'un fichier local contenant la valeur que vous avez copiée à l'étape [**Copier la clé d'environnement**](/docs/fr/self-hosted-environments-quickstart#set-up-an-environment-and-runner) de l'interface utilisateur d'administration, pour que le secret n'apparaisse jamais dans votre historique de shell. Exécutez `(umask 077 && cat > ./environment-secret)`, collez le secret, appuyez sur Entrée, puis Ctrl-D. Ensuite, créez le Secret et supprimez le fichier :492Créez le Secret de sauvegarde à partir d'un fichier local contenant la valeur que vous avez copiée à l'étape [**Copier la clé d'environnement**](/docs/fr/self-hosted-environments-quickstart#set-up-manually) de l'interface utilisateur d'administration, pour que le secret n'apparaisse jamais dans votre historique de shell. Exécutez `(umask 077 && cat > ./environment-secret)`, collez le secret, appuyez sur Entrée, puis Ctrl-D. Ensuite, créez le Secret et supprimez le fichier :

386 493 

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

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


500 Réutiliser un checkout pré-chauffé607 Réutiliser un checkout pré-chauffé

501</h2>608</h2>

502 609 

503Pour les grands référentiels, le clone peut dominer le démarrage de la session. À `--capacity 1` sans [hook `checkout`](/docs/fr/self-hosted-environments-configuration#checkout), le runner garde un clone canonique par référentiel à `<base-dir>/<repo-owner>/<repo>` et le réutilise entre les sessions : il récupère la ref demandée, détache `HEAD`, et réinitialise dur à celle-ci, ce qui est quasi-instantané quand peu a changé. Pour sauter le clone froid, fournissez le clone de l'une de deux façons :610Pour les grands dépôts, le clone peut dominer le démarrage de la session. Pour sauter le clone froid, fournissez vous-même un clone au chemin où le runner conserve le sien. Sans [hook `checkout`](/docs/fr/self-hosted-environments-configuration#checkout), le runner garde un clone canonique par dépôt à `<base-dir>/<repo-owner>/<repo>` et le réutilise entre les sessions :

611 

612* **À `--capacity 1`** : le runner récupère la ref demandée, détache `HEAD`, et réinitialise dur à celle-ci, ce qui est quasi-instantané quand peu a changé.

613* **À une `--capacity` supérieure à un** : le runner récupère dans ce clone, puis extrait un worktree distinct à partir de celui-ci pour chaque session. Un clone pré-chauffé économise le téléchargement, mais pas le checkout.

614 

615Fournissez le clone dans l'image ou sur un volume persistant :

504 616 

505* **Clone dans l'image** : construisez le clone dans votre image runner à ce chemin. Chaque conteneur frais démarre alors avec le clone chaud sans réutiliser un disque.617* **Clone dans l'image** : construisez le clone dans votre image runner à ce chemin. Chaque conteneur frais démarre alors avec le clone chaud sans réutiliser un disque.

506* **Clone sur un volume persistant** : sur les runners que vous pré-verrouillez au compte d'un utilisateur avec [`--lock-to-account`](/docs/fr/self-hosted-environments-reference#runner-cli-flags), pointez `--base-dir` vers un volume persistant, pour que le disque ne serve que ce compte. Un runner pré-verrouillé ne récupère jamais les sessions de canal Claude Tag, donc cette option ne s'applique pas aux runners qui les servent.618* **Clone sur un volume persistant** : sur les runners que vous pré-verrouillez au compte d'un utilisateur avec [`--lock-to-account`](/docs/fr/self-hosted-environments-reference#runner-cli-flags), pointez `--base-dir` vers un volume persistant, pour que le disque ne serve que ce compte. Un runner pré-verrouillé ne récupère jamais les sessions de canal Claude Tag, donc cette option ne s'applique pas aux runners qui les servent.


508Ce que le chemin de réutilisation fait et ne garantit pas :620Ce que le chemin de réutilisation fait et ne garantit pas :

509 621 

510* **N'importe quelle forme de clone fonctionne** : un clone complet, peu profond, ou à branche unique au chemin est utilisé tel quel. Le runner ne passe jamais `--depth` lors de la récupération dans un clone existant, donc un pré-chauffage complet garde son historique complet et un peu profond reste peu profond. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, ou un nombre ; par défaut 50) contrôle uniquement le clone froid que le runner fait quand aucun clone n'existe encore.622* **N'importe quelle forme de clone fonctionne** : un clone complet, peu profond, ou à branche unique au chemin est utilisé tel quel. Le runner ne passe jamais `--depth` lors de la récupération dans un clone existant, donc un pré-chauffage complet garde son historique complet et un peu profond reste peu profond. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, ou un nombre ; par défaut 50) contrôle uniquement le clone froid que le runner fait quand aucun clone n'existe encore.

511* **Les changements suivis se réinitialisent, les fichiers non suivis persistent** : chaque session commence à partir d'une réinitialisation dur qui efface les modifications suivies de la session précédente, mais le runner ne lance jamais `git clean`, donc les fichiers non suivis des sessions antérieures du propriétaire verrouillé restent dans l'arbre.623* **Les changements suivis se réinitialisent, les fichiers non suivis persistent** : à `--capacity 1`, chaque session commence à partir d'une réinitialisation dur qui efface les modifications suivies de la session précédente, mais le runner ne lance jamais `git clean`, donc les fichiers non suivis des sessions antérieures du propriétaire verrouillé restent dans l'arbre.

512* **Les répertoires par session persistent aussi** : à côté du checkout, le runner crée des entrées par session sous `<base-dir>/_sessions/` pour chaque session qu'il exécute. Le répertoire de configuration Claude de la session contient une copie locale de la transcription de la conversation. À côté se trouvent les fichiers téléchargés de la session, quand la session en a. Le répertoire de session s'y trouve aussi : il contient tous les worktrees par session et les checkouts du hook `checkout` pendant que la session s'exécute, et il conserve tout ce que Claude a écrit dedans.624* **Les répertoires par session persistent aussi** : à côté du checkout, le runner crée des entrées par session sous `<base-dir>/_sessions/` pour chaque session qu'il exécute. Le répertoire de configuration Claude de la session contient une copie locale de la transcription de la conversation. À côté se trouvent les fichiers téléchargés de la session, quand la session en a. Le répertoire de session s'y trouve aussi : il contient tous les worktrees par session et les checkouts du hook `checkout` pendant que la session s'exécute, et il conserve tout ce que Claude a écrit dedans.

513 625 

514 Par défaut, le runner les laisse en place quand la session se termine, donc sur un disque qui survit au processus runner, ils s'accumulent. Chaque session s'exécute en tant qu'utilisateur du runner, donc toute session ultérieure que ce disque sert peut les lire. Si vous conservez un `--base-dir` persistant, dimensionnez le volume pour cette croissance. La même chose s'applique à toute configuration qui redémarre le runner sur le même système de fichiers, y compris la [recette Docker Compose](#docker-compose).626 Par défaut, le runner les laisse en place quand la session se termine, donc sur un disque qui survit au processus runner, ils s'accumulent. Chaque session s'exécute en tant qu'utilisateur du runner, donc toute session ultérieure que ce disque sert peut les lire. Si vous conservez un `--base-dir` persistant, dimensionnez le volume pour cette croissance. La même chose s'applique à toute configuration qui redémarre le runner sur le même système de fichiers, y compris la [recette Docker Compose](#docker-compose).


522 634 

523Le processus enfant Claude Code de chaque session exécute le binaire du runner lui-même, et le runner désactive la mise à jour automatique à l'intérieur des sessions qu'il génère, donc chaque session exécute la version que vous avez installée sur l'hôte ou construite dans l'image. Une mise à jour au niveau de l'hôte prend effet la prochaine fois que le runner démarre.635Le processus enfant Claude Code de chaque session exécute le binaire du runner lui-même, et le runner désactive la mise à jour automatique à l'intérieur des sessions qu'il génère, donc chaque session exécute la version que vous avez installée sur l'hôte ou construite dans l'image. Une mise à jour au niveau de l'hôte prend effet la prochaine fois que le runner démarre.

524 636 

525Un modèle que vos sessions utilisent peut nécessiter une version plus récente de Claude Code que celle qu'elles exécutent. Le serveur rejette alors les demandes pour ce modèle avec [Claude Code ne supporte pas ce modèle](/docs/fr/errors#claude-code-does-not-support-this-model). Avant d'épingler une version, vérifiez [les versions de Claude Code que les modèles nécessitent](/docs/fr/model-config#available-models) pour chaque modèle que vos sessions utilisent.637Choisissez la version qu'exécutent vos sessions et le moment où elle change :

526 638 

639* **Avant d'épingler une version** : vérifiez [les versions de Claude Code que les modèles nécessitent](/docs/fr/model-config#available-models) pour chaque modèle que vos sessions utilisent. Si un modèle nécessite une version plus récente que celle qu'exécutent vos sessions, le serveur rejette les requêtes pour ce modèle avec [Claude Code ne supporte pas ce modèle](/docs/fr/errors#claude-code-does-not-support-this-model).

527* **Pour garder une flotte sur une version** : construisez l'image avec une version épinglée, ou sur un hôte nu installez une version spécifique et [désactivez les mises à jour automatiques](/docs/fr/setup#disable-auto-updates)640* **Pour garder une flotte sur une version** : construisez l'image avec une version épinglée, ou sur un hôte nu installez une version spécifique et [désactivez les mises à jour automatiques](/docs/fr/setup#disable-auto-updates)

528* **Pour mettre à niveau** : installez la version plus récente ou reconstruisez l'image, puis redémarrez les runners641* **Pour mettre à niveau une flotte fixe** : lisez les entrées du [changelog](/docs/en/changelog) entre votre version et celle que vous installez, puis installez la version plus récente ou reconstruisez l'image et redémarrez les runners

642* **Pour mettre à niveau des runners à la demande** : lisez les entrées du [changelog](/docs/en/changelog) entre votre version et celle que vous installez, puis modifiez l'image que démarre votre [hook `spawn-runner`](/docs/fr/self-hosted-environments-configuration#the-spawn-runner-hook). Chaque nouveau runner obtient la nouvelle version. Un runner déjà actif, y compris un runner en attente démarré par [`--min-idle`](/docs/fr/self-hosted-environments-reference#orchestrator-cli-flags), conserve sa version jusqu'à ce qu'il se termine. Ne le redémarrez pas, car son ordre de travail est à usage unique.

529* **Plugins** : les places de marché de plugins ne se mettent pas à jour automatiquement non plus ; définissez `FORCE_AUTOUPDATE_PLUGINS=1` dans l'environnement du runner pour laisser les plugins se mettre à jour automatiquement pendant que le binaire reste épinglé643* **Plugins** : les places de marché de plugins ne se mettent pas à jour automatiquement non plus ; définissez `FORCE_AUTOUPDATE_PLUGINS=1` dans l'environnement du runner pour laisser les plugins se mettre à jour automatiquement pendant que le binaire reste épinglé

530 644 

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


580</h3>694</h3>

581 695 

582* **Les sessions reprises perdent le travail non poussé** : un nouveau runner clone à nouveau le dépôt à partir de sa branche de démarrage, donc le travail que la session n'avait pas poussé est perdu.696* **Les sessions reprises perdent le travail non poussé** : un nouveau runner clone à nouveau le dépôt à partir de sa branche de démarrage, donc le travail que la session n'avait pas poussé est perdu.

583 * **Pour conserver le travail commité** : définissez [`--push-outcome-on-release`](/docs/fr/self-hosted-environments-reference#runner-cli-flags). Le runner effectue alors, dans la mesure du possible, un push des branches de résultat de la session avant de la libérer, et la session reprise démarre à partir de ces commits. Les modifications non commitées sont toujours perdues.697 * **Pour conserver le travail commité** : définissez [`--push-outcome-on-release`](/docs/fr/self-hosted-environments-reference#runner-cli-flags) sur chaque runner de l'environnement, car un runner sans ce flag reprend la session à partir de sa branche de démarrage. Un runner avec ce flag effectue, dans la mesure du possible, un push des branches de résultat de la session avant de la libérer, et la session reprise démarre à partir de ces commits. Le push utilise les propres identifiants git de l'hôte runner, y compris sur un runner qui utilise [git géré par Anthropic](#use-the-anthropic-git-proxy). Les modifications non commitées sont toujours perdues.

698 * **Avec un hook `checkout`** : les dépôts extraits via un [hook de cycle de vie `checkout`](/docs/fr/self-hosted-environments-configuration#checkout) ne font pas l'objet d'un push. Créez plutôt un instantané de ces dépôts à partir du [hook `post-session`](/docs/fr/self-hosted-environments-configuration#post-session).

584 * **Avant d'activer le flag** : limitez qui peut pousser vers les refs `claude/*` sur le dépôt distant source. À la reprise, le runner récupère la branche précédemment poussée sans vérifier qui l'a poussée.699 * **Avant d'activer le flag** : limitez qui peut pousser vers les refs `claude/*` sur le dépôt distant source. À la reprise, le runner récupère la branche précédemment poussée sans vérifier qui l'a poussée.

585* **Le clonage d'un dépôt ajouté en milieu de session peut échouer** : Claude le clone avec `git clone` via HTTPS. Sur un runner sans [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), le clonage échoue avec une erreur d'authentification git si rien sur l'hôte ne peut lire le dépôt. Dans la mesure du possible, sélectionnez chaque dépôt dont la session a besoin quand vous la créez.700* **Le clonage d'un dépôt ajouté en milieu de session peut échouer** : Claude le clone avec `git clone` via HTTPS. Sur un runner sans [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), le clonage échoue avec une erreur d'authentification git si rien sur l'hôte ne peut lire le dépôt. Dans la mesure du possible, sélectionnez chaque dépôt dont la session a besoin quand vous la créez.

586* **Certains connecteurs n'apparaissent pas dans les sessions auto-hébergées** : un connecteur que vous n'avez pas encore connecté dans les paramètres claude.ai n'est pas listé dans une session auto-hébergée, et la session ne vous invitera pas à le connecter. Connectez-le d'abord dans les paramètres, puis démarrez une session fraîche. Ajouter un connecteur à une session déjà en cours d'exécution ne rend pas non plus ses outils disponibles à Claude ; démarrez une session fraîche pour récupérer un connecteur nouvellement ajouté.701* **Certains connecteurs n'apparaissent pas dans les sessions auto-hébergées** : un connecteur que vous n'avez pas encore connecté dans les paramètres claude.ai n'est pas listé dans une session auto-hébergée, et la session ne vous invitera pas à le connecter. Connectez-le d'abord dans les paramètres, puis démarrez une session fraîche. Ajouter un connecteur à une session déjà en cours d'exécution ne rend pas non plus ses outils disponibles à Claude ; démarrez une session fraîche pour récupérer un connecteur nouvellement ajouté.


606* **Le runner n'apparaît pas dans l'environnement** : confirmez que l'hôte peut atteindre `api.anthropic.com` sur HTTPS, que le secret de l'environnement est actuel, et que l'horloge de l'hôte est à moins de cinq minutes de l'heure réelle ; un décalage plus grand cause l'échec de l'authentification. Le runner enregistre `[runner:fatal]` avec la raison du rejet en cas d'échec d'authentification.721* **Le runner n'apparaît pas dans l'environnement** : confirmez que l'hôte peut atteindre `api.anthropic.com` sur HTTPS, que le secret de l'environnement est actuel, et que l'horloge de l'hôte est à moins de cinq minutes de l'heure réelle ; un décalage plus grand cause l'échec de l'authentification. Le runner enregistre `[runner:fatal]` avec la raison du rejet en cas d'échec d'authentification.

607* **Le runner quitte au démarrage avec `cannot create or write to base directory`** : le runner ne peut pas créer ou écrire à `--base-dir`, qui par défaut est `/workspace`. Corrigez la propriété du répertoire ou pointez `--base-dir` vers un chemin inscriptible, comme décrit dans [Garder le répertoire de base et la capacité identiques sur tous les runners](#keep-the-base-directory-and-capacity-identical-across-runners). Si le runner enregistre à la place `[runner:fatal]` disant que la vérification du répertoire de base a expiré, le répertoire est sur un montage NFS ou CSI suspendu. Vérifiez la santé du montage plutôt que les permissions. Le runner imprime ces deux échecs de démarrage à stderr avant d'ouvrir `--log-file`, donc cherchez-les dans le terminal ou les journaux de conteneur de votre plateforme plutôt que dans le fichier journal. Avant v2.1.225, le runner ne vérifiait pas le répertoire de base au démarrage, et cette mauvaise configuration échouait les sessions après la récupération à la place.722* **Le runner quitte au démarrage avec `cannot create or write to base directory`** : le runner ne peut pas créer ou écrire à `--base-dir`, qui par défaut est `/workspace`. Corrigez la propriété du répertoire ou pointez `--base-dir` vers un chemin inscriptible, comme décrit dans [Garder le répertoire de base et la capacité identiques sur tous les runners](#keep-the-base-directory-and-capacity-identical-across-runners). Si le runner enregistre à la place `[runner:fatal]` disant que la vérification du répertoire de base a expiré, le répertoire est sur un montage NFS ou CSI suspendu. Vérifiez la santé du montage plutôt que les permissions. Le runner imprime ces deux échecs de démarrage à stderr avant d'ouvrir `--log-file`, donc cherchez-les dans le terminal ou les journaux de conteneur de votre plateforme plutôt que dans le fichier journal. Avant v2.1.225, le runner ne vérifiait pas le répertoire de base au démarrage, et cette mauvaise configuration échouait les sessions après la récupération à la place.

608* **Les sessions restent en attente** : chaque runner en ligne peut être verrouillé à un propriétaire différent. Vérifiez la métrique `claude_code_self_hosted_runner_locked_account` de chaque runner [métrique](/docs/fr/self-hosted-environments-reference#prometheus-metrics) ou le champ `locked_account` de sa ligne de journal `[runner:health]` pour voir qui la détient. Les deux affichent l'email du propriétaire uniquement après que le runner ait reçu un jeton de session portant une réclamation `act.email`, ce qu'une session d'agent Claude Tag ne fait jamais. Sans la réclamation, le runner n'émet aucune série `locked_account` et enregistre `locked_account=yes`, ce qui vous dit que le runner est verrouillé mais pas à quel propriétaire. Ajoutez des répliques, ou attendez qu'un runner existant se draine et redémarre. Si l'environnement utilise des runners à la demande, vérifiez l'orchestrateur à la place ; consultez [Runners à la demande](/docs/fr/self-hosted-environments-configuration#on-demand-runners).723* **Les sessions restent en attente** : chaque runner en ligne peut être verrouillé à un propriétaire différent. Vérifiez la métrique `claude_code_self_hosted_runner_locked_account` de chaque runner [métrique](/docs/fr/self-hosted-environments-reference#prometheus-metrics) ou le champ `locked_account` de sa ligne de journal `[runner:health]` pour voir qui la détient. Les deux affichent l'email du propriétaire uniquement après que le runner ait reçu un jeton de session portant une réclamation `act.email`, ce qu'une session d'agent Claude Tag ne fait jamais. Sans la réclamation, le runner n'émet aucune série `locked_account` et enregistre `locked_account=yes`, ce qui vous dit que le runner est verrouillé mais pas à quel propriétaire. Ajoutez des répliques, ou attendez qu'un runner existant se draine et redémarre. Si l'environnement utilise des runners à la demande, vérifiez l'orchestrateur à la place ; consultez [Runners à la demande](/docs/fr/self-hosted-environments-configuration#on-demand-runners).

609* **Les sessions échouent immédiatement après la récupération** : ouvrez la session dans claude.ai/code pour voir l'erreur. Les causes les plus courantes sont les identifiants git manquants [identifiants git](#configure-git) dans l'image runner et les outils de build qui ne sont pas installés. Un répertoire de base non inscriptible arrête le runner au démarrage au lieu d'échouer les sessions. Consultez l'entrée **Le runner quitte au démarrage avec `cannot create or write to base directory`** dans cette liste.724* **Les sessions échouent immédiatement après la récupération** : ouvrez la session dans claude.ai/code pour voir l'erreur. Les causes les plus courantes sont des [identifiants git](#configure-git) manquants dans l'image runner et les outils de build qui ne sont pas installés. Sur un runner démarré avec `--use-anthropic-git-proxy`, consultez [Quand les sessions ne démarrent pas sur un runner avec le proxy git](#when-anthropic-doesnt-serve-a-session). Un répertoire de base non inscriptible arrête le runner au démarrage au lieu d'échouer les sessions. Consultez l'entrée **Le runner quitte au démarrage avec `cannot create or write to base directory`** dans cette liste.

725* **Les sessions ne démarrent pas sur un runner qui a défini `--use-anthropic-git-proxy`** : cherchez dans le journal du runner `access denied by the git proxy`, ou une erreur git qui nomme une adresse `api.anthropic.com` contenant `/git_proxy/`. Pour déterminer si Anthropic a servi la session et corriger la cause, consultez [Quand les sessions ne démarrent pas sur un runner avec le proxy git](#when-anthropic-doesnt-serve-a-session).

610* **Les sessions ne peuvent pas atteindre le réseau via un proxy de sortie authentifiant** : quand la source que vous avez définie avec [`--proxy-authorization-command` ou `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) échoue, expire après 30 secondes, ou produit une valeur vide, le runner répond à cette connexion `502 Bad Gateway` et enregistre pourquoi. Le runner rédige la stderr de la commande dans ce journal et ne journalise jamais la valeur de l'en-tête. Avec `--proxy-authorization-command`, exécutez la commande vous-même sur l'hôte pour confirmer qu'elle imprime la valeur d'en-tête entière sur stdout. Si le runner quitte à la place au démarrage avec `could not start the proxy-authorization listener`, il ne pouvait pas ouvrir son écouteur de boucle locale.726* **Les sessions ne peuvent pas atteindre le réseau via un proxy de sortie authentifiant** : quand la source que vous avez définie avec [`--proxy-authorization-command` ou `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) échoue, expire après 30 secondes, ou produit une valeur vide, le runner répond à cette connexion `502 Bad Gateway` et enregistre pourquoi. Le runner rédige la stderr de la commande dans ce journal et ne journalise jamais la valeur de l'en-tête. Avec `--proxy-authorization-command`, exécutez la commande vous-même sur l'hôte pour confirmer qu'elle imprime la valeur d'en-tête entière sur stdout. Si le runner quitte à la place au démarrage avec `could not start the proxy-authorization listener`, il ne pouvait pas ouvrir son écouteur de boucle locale.

611* **Le runner enregistre des lignes `Poll failed` contenant `rejecting the malformed poll response`** : le runner a reçu une réponse de sondage dont le corps n'est pas le JSON attendu de la file d'attente, le plus souvent parce que quelque chose entre le runner et `api.anthropic.com`, comme un proxy d'interception ou un portail captif, a répondu avec sa propre page. Le runner rejette la réponse, la compte sous le type `transport` de la [métrique](/docs/fr/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, et réessaie selon le calendrier de sondage échoué décrit dans [Cycle de vie de la session](/docs/fr/self-hosted-environments#session-lifecycle). Le runner continue de servir ses sessions en direct. Configurez le proxy pour passer les réponses de `api.anthropic.com` inchangées. Avant v2.1.246, le runner lisait une telle réponse comme une file d'attente de travail vide, ce qui pouvait terminer ses sessions en direct ou le faire quitter.727* **Le runner enregistre des lignes `Poll failed` contenant `rejecting the malformed poll response`** : le runner a reçu une réponse de sondage dont le corps n'est pas le JSON attendu de la file d'attente, le plus souvent parce que quelque chose entre le runner et `api.anthropic.com`, comme un proxy d'interception ou un portail captif, a répondu avec sa propre page. Le runner rejette la réponse, la compte sous le type `transport` de la [métrique](/docs/fr/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, et réessaie selon le calendrier de sondage échoué décrit dans [Cycle de vie de la session](/docs/fr/self-hosted-environments#session-lifecycle). Le runner continue de servir ses sessions en direct. Configurez le proxy pour passer les réponses de `api.anthropic.com` inchangées. Avant v2.1.246, le runner lisait une telle réponse comme une file d'attente de travail vide, ce qui pouvait terminer ses sessions en direct ou le faire quitter.

612* **La branche d'une session n'existe plus sur la télécommande** : pour une source git que la session ne lit que, le runner saute cette source et continue sur les autres. Pour la source vers laquelle la session pousse les résultats, une branche supprimée, généralement parce qu'elle a été fusionnée et supprimée automatiquement, échoue la session avec une erreur nommant le référentiel et la branche et vous demandant de restaurer la branche et de réessayer. Le runner échoue la session avec la même erreur quand sauter laisserait sans référentiel du tout. Avant v2.1.228, une telle session démarrait dans un répertoire vide.728* **La branche d'une session n'existe plus sur la télécommande** : pour une source git que la session ne lit que, le runner saute cette source et continue sur les autres. Pour la source vers laquelle la session pousse les résultats, une branche supprimée, généralement parce qu'elle a été fusionnée et supprimée automatiquement, échoue la session avec une erreur nommant le référentiel et la branche et vous demandant de restaurer la branche et de réessayer. Le runner échoue la session avec la même erreur quand sauter laisserait sans référentiel du tout. Avant v2.1.228, une telle session démarrait dans un répertoire vide.


616 732 

617 La vérification d'accès s'exécute à nouveau chaque fois que la session démarre sur un runner, donc une fois que l'identité git du runner a accès en lecture, le prochain démarrage clone le référentiel. Avant v2.1.274, chacun de ces refus échouait le démarrage de la session.733 La vérification d'accès s'exécute à nouveau chaque fois que la session démarre sur un runner, donc une fois que l'identité git du runner a accès en lecture, le prochain démarrage clone le référentiel. Avant v2.1.274, chacun de ces refus échouait le démarrage de la session.

618* **Les sessions prennent des minutes pour démarrer** : le clone initial domine généralement. Regardez la [métrique](/docs/fr/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` pour confirmer, et coupez le clone avec un [checkout pré-chauffé](#reuse-a-pre-warmed-checkout) ou un `CLAUDE_RUNNER_FETCH_DEPTH` plus petit.734* **Les sessions prennent des minutes pour démarrer** : le clone initial domine généralement. Regardez la [métrique](/docs/fr/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` pour confirmer, et coupez le clone avec un [checkout pré-chauffé](#reuse-a-pre-warmed-checkout) ou un `CLAUDE_RUNNER_FETCH_DEPTH` plus petit.

619* **Les tours échouent avec un 401** : chaque session authentifie les appels de modèle avec le [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/fr/self-hosted-environments-configuration#wrapper-scripts) de courte durée que le runner récupère auprès d'Anthropic et fait tourner sur stdin de la session. Quand un tour se termine avec un 401 ou 403 de l'API du modèle, le runner récupère un jeton frais et le transmet à la session. Le tour échoué n'est pas réessayé.735* **Les tours échouent avec un 401** : quand un tour se termine avec un 401 ou 403 de l'API Anthropic, le runner récupère un [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/fr/self-hosted-environments-configuration#wrapper-scripts) frais auprès d'Anthropic et le transmet à la session. Le tour échoué n'est pas réessayé. Ce jeton est de courte durée, et le runner le fait tourner via le stdin de la session.

620 736 

621 Quand une récupération échoue, le runner enregistre une ligne `inference_token refresh failed` qui dit quand il réessayera, et il continue à réessayer aussi longtemps que la session s'exécute.737 Quand une récupération échoue, le runner enregistre une ligne `inference_token refresh failed` qui dit quand il réessayera, et il continue à réessayer aussi longtemps que la session s'exécute.

622 738 


637 753 

638* **Une sortie normale** : le runner a terminé ses sessions et s'est drainé, a atteint son heure de retraite, ou a reçu l'ordre de s'arrêter. Redémarrez-le pour que l'environnement ait à nouveau de la capacité. [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle) décrit ces sorties.754* **Une sortie normale** : le runner a terminé ses sessions et s'est drainé, a atteint son heure de retraite, ou a reçu l'ordre de s'arrêter. Redémarrez-le pour que l'environnement ait à nouveau de la capacité. [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle) décrit ces sorties.

639* **Un démarrage échoué** : le runner ne peut pas démarrer avec la configuration ou l'hôte qui lui a été donné, donc il quitte quelques secondes après son démarrage, et il quitte de la même manière chaque fois que vous le redémarrez. Le redémarrer plus rapidement n'aide pas. Quelqu'un doit lire sa sortie et corriger la cause.755* **Un démarrage échoué** : le runner ne peut pas démarrer avec la configuration ou l'hôte qui lui a été donné, donc il quitte quelques secondes après son démarrage, et il quitte de la même manière chaque fois que vous le redémarrez. Le redémarrer plus rapidement n'aide pas. Quelqu'un doit lire sa sortie et corriger la cause.

756* **Perte de contact** : un runner qui ne peut pas joindre Anthropic pendant plus longtemps que son [bail](/docs/fr/self-hosted-environments#session-lifecycle), par exemple pendant que son hôte est en veille, peut être retiré de l'environnement. Quand un runner retiré se reconnecte, il quitte. Son journal peut afficher une ligne `[runner:fatal]` qui contient `runner record gone server-side` ou, après une panne plus longue, [`poll auth failed`](/docs/fr/self-hosted-environments-quickstart#set-up-an-environment-and-runner). Le runner ne se réenregistre pas de lui-même, donc redémarrez-le.

640 757 

641Configurez votre superviseur pour redémarrer le runner chaque fois qu'il quitte, pour attendre plus longtemps entre les redémarrages quand le runner continue de quitter juste après son démarrage, et pour avertir quelqu'un quand cela continue de se produire.758Configurez votre superviseur pour redémarrer le runner chaque fois qu'il quitte, pour attendre plus longtemps entre les redémarrages quand le runner continue de quitter juste après son démarrage, et pour avertir quelqu'un quand cela continue de se produire.

642 759 

Details

195 195 

196Les wrappers reçoivent le chemin absolu du binaire du runner lui-même dans `CLAUDE_RUNNER_CLAUDE_BIN` ; utilisez ce chemin plutôt qu'un `claude` résolu par PATH afin que le décodage s'exécute sur le même binaire que le runner lui-même utilise.196Les wrappers reçoivent le chemin absolu du binaire du runner lui-même dans `CLAUDE_RUNNER_CLAUDE_BIN` ; utilisez ce chemin plutôt qu'un `claude` résolu par PATH afin que le décodage s'exécute sur le même binaire que le runner lui-même utilise.

197 197 

198Utilisez `jq -re` plutôt que `jq -r` afin qu'un claim manquant provoque une sortie non-zéro. Avec `-r` seul, un claim manquant imprime la chaîne littérale `null` et sort zéro, ce qui transmet silencieusement une mauvaise valeur en aval. Passez `--no-verify` à `decode-token` uniquement pour l'inspection hors ligne où l'endpoint JWKS est inaccessible.198Utilisez `jq -re` plutôt que `jq -r` afin qu'un claim manquant provoque une sortie non-zéro. Avec `-r` seul, un claim manquant imprime la chaîne littérale `null` et sort zéro, ce qui transmet silencieusement une mauvaise valeur en aval.

199 

200Si `decode-token` ne peut pas récupérer les clés depuis l'endpoint JWKS ou ne peut pas vérifier le token, il imprime la raison sur stderr, n'imprime aucun claim et sort avec le code 1. Passez `--no-verify` à `decode-token` uniquement pour l'inspection hors ligne où l'endpoint JWKS est inaccessible.

199 201 

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

201 Référence des claims203 Référence des claims

Details

34L'hôte du runner a besoin de :34L'hôte du runner a besoin de :

35 35 

36* Un hôte ou conteneur Linux ou macOS avec HTTPS sortant vers `api.anthropic.com`, vers `claude.ai` et les hôtes de téléchargement vers lesquels il redirige pour l'étape d'installation ci-dessous, et vers votre hôte git pour le clone ; le [tableau des exigences réseau](/docs/fr/self-hosted-environments-deploy#network-requirements) a la liste complète. Windows n'est pas pris en charge en tant qu'hôte runner ; exécutez le runner dans un conteneur Linux à la place. Les postes de travail des développeurs ne sont pas affectés, car les sessions démarrent à partir de claude.ai dans un navigateur.36* Un hôte ou conteneur Linux ou macOS avec HTTPS sortant vers `api.anthropic.com`, vers `claude.ai` et les hôtes de téléchargement vers lesquels il redirige pour l'étape d'installation ci-dessous, et vers votre hôte git pour le clone ; le [tableau des exigences réseau](/docs/fr/self-hosted-environments-deploy#network-requirements) a la liste complète. Windows n'est pas pris en charge en tant qu'hôte runner ; exécutez le runner dans un conteneur Linux à la place. Les postes de travail des développeurs ne sont pas affectés, car les sessions démarrent à partir de claude.ai dans un navigateur.

37* Un dépôt pour la session de test : un dépôt public, ou un dépôt que cet hôte peut déjà cloner via son URL HTTPS sans que des identifiants lui soient demandés.

37* Une horloge synchronisée à l'heure réelle, par exemple avec NTP. L'authentification échoue lorsque l'horloge est décalée de plus de cinq minutes ; consultez [Dépannage](/docs/fr/self-hosted-environments-deploy#troubleshooting).38* Une horloge synchronisée à l'heure réelle, par exemple avec NTP. L'authentification échoue lorsque l'horloge est décalée de plus de cinq minutes ; consultez [Dépannage](/docs/fr/self-hosted-environments-deploy#troubleshooting).

38 39 

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


57 Configurer un environnement et un runner58 Configurer un environnement et un runner

58</h2>59</h2>

59 60 

60Claude Code inclut une configuration guidée : une session Claude Code interactive qui vous guide à travers la création de l'environnement dans l'interface d'administration, démarre un runner local avec le fichier secret que vous enregistrez, confirme que le runner s'enregistre, et écrit une feuille de triche dans `./runner-setup/CHEAT-SHEET.md`. Exécutez-le sur une machine où vous vous êtes connecté avec `claude auth login` en utilisant un compte qui détient un rôle Propriétaire ; il n'est pas disponible avec les clés API ou les fournisseurs de modèles tiers. Sur les hôtes où une session interactive n'est pas possible, utilisez plutôt les étapes manuelles ci-dessous. Confirmez d'abord que la [vérification de version](#software-on-the-runner-host) a réussi : sur les versions antérieures à 2.1.224, cette commande démarre une session Claude ordinaire avec les mots comme invite au lieu de la configuration guidée. Pour démarrer la configuration guidée, exécutez la sous-commande setup et suivez les invites :61Utilisez soit la [configuration guidée](#run-the-guided-setup), soit les [étapes manuelles](#set-up-manually). La configuration guidée est une commande unique qui démarre une session Claude Code interactive et vous guide à travers le reste. Utilisez plutôt les étapes manuelles sur un hôte où une session interactive n'est pas possible. Utilisez-les également lorsqu'une personne détenant le rôle Propriétaire a créé l'environnement et vous a remis son secret, car la configuration guidée nécessite une connexion Propriétaire.

62 

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

64 Exécuter la configuration guidée

65</h3>

66 

67La configuration guidée vous accompagne dans la création de l'environnement dans l'interface d'administration, démarre un runner local avec le fichier secret que vous enregistrez, confirme que le runner s'enregistre, et écrit une feuille de triche dans `./runner-setup/CHEAT-SHEET.md`. Avant de l'exécuter, vérifiez votre connexion et votre version :

68 

69* **Connexion** : exécutez-la sur une machine où vous vous êtes connecté avec `claude auth login` en utilisant un compte qui détient un rôle Propriétaire. Avec seulement une clé API ou un fournisseur de modèles tiers, la session démarre mais ses vérifications d'organisation échouent.

70* **Version** : confirmez que la [vérification de version](#software-on-the-runner-host) a réussi. Sur les versions antérieures à 2.1.224, la commande setup démarre une session Claude avec les mots comme prompt au lieu de la configuration guidée.

71 

72Pour démarrer la configuration guidée, exécutez la sous-commande setup dans votre shell et suivez les instructions :

61 73 

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

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

64```76```

65 77 

66Pour configurer manuellement à la place :78La configuration ne démarre pas elle-même de session de test : elle vous indique d'en démarrer une sur claude.ai/code. La dernière étape de la configuration arrête le runner qu'elle a démarré. Si vous quittez la configuration avant cette étape, le runner continue de s'exécuter. Pour continuer après la dernière étape, redémarrez le runner dans votre shell avec la commande figurant dans `./runner-setup/CHEAT-SHEET.md`, puis [routez une session vers l'environnement](#route-a-session).

79 

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

81 Configurer manuellement

82</h3>

83 

84Créez l'environnement sur claude.ai, démarrez le runner depuis un terminal sur l'hôte, puis revenez sur claude.ai pour confirmer que le runner apparaît et y router une session. Si une personne détenant le rôle Propriétaire a déjà créé l'environnement et vous a remis son secret, commencez à l'étape 2.

67 85 

68<Steps>86<Steps>

69 <Step title="Créer un environnement">87 <Step title="Créer un environnement">

70 Allez à la [page **Environnements cloud**](https://claude.ai/admin-settings/cloud-environments) dans les paramètres d'administration. Sous **Environnements auto-hébergés**, sélectionnez **Nouveau**, nommez l'environnement, et sélectionnez **Créer**. À la deuxième étape de l'assistant, sélectionnez **Copier la clé d'environnement** pour copier le secret d'environnement, que l'interface d'administration étiquette comme clé d'environnement. claude.ai affiche le secret une fois, et vous ne pouvez pas le récupérer plus tard ; il expire 365 jours après sa création. L'ID `ccpool_...` de l'environnement reste visible dans sa boîte de dialogue de détail ; vous en aurez besoin pour la vérification `aud` dans [vérification de token](/docs/fr/self-hosted-environments-identity) et pour dispatcher [les sessions de test à partir de CI](/docs/fr/self-hosted-environments-testing#run-the-test-loop).88 Allez à la [page **Environnements cloud**](https://claude.ai/admin-settings/cloud-environments) dans les paramètres d'administration. Sous **Environnements auto-hébergés**, sélectionnez **Nouveau**, nommez l'environnement, et sélectionnez **Créer**. À la deuxième étape de l'assistant, sélectionnez **Copier la clé d'environnement** pour copier le secret d'environnement, que l'interface d'administration étiquette comme clé d'environnement. claude.ai affiche le secret une fois, et vous ne pouvez pas le récupérer plus tard ; il expire 365 jours après sa création. L'ID `ccpool_...` de l'environnement reste visible dans sa boîte de dialogue de détail ; vous en aurez besoin pour la vérification `aud` dans [vérification de token](/docs/fr/self-hosted-environments-identity) et pour dispatcher [les sessions de test à partir de CI](/docs/fr/self-hosted-environments-testing#run-the-test-loop).

71 89 

72 Si vous perdez le secret ou avez besoin de le faire tourner, créez un nouveau secret à partir de l'onglet **Configuration** de l'environnement, déployez le nouveau secret sur vos runners, puis révoquez l'ancien. Les runners détenant un secret révoqué échouent leur prochain sondage authentifié et se terminent, en enregistrant `poll auth failed`, et votre orchestrateur les redémarre avec le nouveau secret.90 Si vous perdez le secret ou avez besoin de le faire tourner, créez un nouveau secret à partir de l'onglet **Configuration** de l'environnement, déployez le nouveau secret sur vos runners, puis révoquez l'ancien. Les runners détenant un secret révoqué échouent leur prochain sondage authentifié et se terminent, en consignant `poll auth failed`, et votre orchestrateur les redémarre avec le nouveau secret.

73 </Step>91 </Step>

74 92 

75 <Step title="Démarrer un runner">93 <Step title="Démarrer un runner">

76 Créez le répertoire secret. Cette étape et la suivante nécessitent root pour le chemin `/etc/claude` ; n'importe quel chemin que le processus runner peut lire fonctionne, donc ajustez les deux commandes et la valeur `--environment-secret-file` ensemble si vous en utilisez un différent.94 Créez le répertoire secret. Cette commande et la suivante utilisent `/etc/claude`, qui nécessite root, et le fichier secret qu'elles créent n'est lisible que par l'utilisateur qui les exécute. Si le runner s'exécute sous un autre utilisateur, il se termine avec `error: Failed to read environment secret file <path> (EACCES: permission denied, open '<path>')`. Dans ce cas, exécutez les deux commandes en tant qu'utilisateur du runner avec un répertoire dans lequel cet utilisateur peut écrire à la place de `/etc/claude`, et passez le même chemin à `--environment-secret-file`. N'importe quel chemin que le processus runner peut lire fonctionne.

77 95 

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

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


89 107 

90 Si le runner ne peut pas créer ou écrire dans le chemin, il se termine au démarrage avec une erreur nommant le répertoire au lieu de s'enregistrer. Consultez [Dépannage](/docs/fr/self-hosted-environments-deploy#troubleshooting).108 Si le runner ne peut pas créer ou écrire dans le chemin, il se termine au démarrage avec une erreur nommant le répertoire au lieu de s'enregistrer. Consultez [Dépannage](/docs/fr/self-hosted-environments-deploy#troubleshooting).

91 109 

92 Ensuite, démarrez le runner avec `--environment-secret-file` et `--base-dir`. Le runner s'enregistre auprès de votre environnement et commence à interroger le travail. Si le runner se termine, redémarrez-le manuellement. Les déploiements en production exécutent le runner sous un orchestrateur qui redémarre les runners terminés, normalement avec un système de fichiers frais par redémarrage ; [Réutiliser un checkout pré-chauffé](/docs/fr/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) couvre la configuration de disque persistant prise en charge.110 Ensuite, démarrez le runner avec `--environment-secret-file` et `--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 Le runner consigne `Registered: runner_id=<runner-id>` une fois qu'il s'est enregistré auprès de votre environnement, puis commence à interroger pour obtenir du travail. Si le runner se termine plus tard, redémarrez-le vous-même. Consultez [Si le runner se termine](#if-the-runner-exits) pour savoir quand cela se produit.

97 </Step>117 </Step>

98 118 

99 <Step title="Vérifier que le runner apparaît">119 <Step title="Vérifier que le runner apparaît">

100 Retournez à la [page **Environnements cloud**](https://claude.ai/admin-settings/cloud-environments). Le statut de votre environnement passe de **Aucun runner déployé** à **Sain** en quelques secondes après le démarrage du runner ; ouvrez l'environnement et sélectionnez **Activité** pour voir le runner lui-même.120 Retournez à la [page **Environnements cloud**](https://claude.ai/admin-settings/cloud-environments). Le statut de votre environnement passe de **Aucun runner déployé** à **Sain** en quelques secondes après le démarrage du runner ; ouvrez l'environnement et sélectionnez **Activité** pour voir le runner lui-même. Si vous n'avez pas accès à la page d'administration, la ligne `Registered: runner_id=<runner-id>` dans le log du runner de l'étape précédente vous donne le même signal.

101 </Step>121 </Step>

102 122 

103 <Step title="Router une session vers l'environnement">123 <Step title="Router une session vers l'environnement">

104 Démarrez une session à claude.ai/code et sélectionnez votre environnement dans le sélecteur d'environnement, où les environnements auto-hébergés apparaissent aux côtés des environnements hébergés par Anthropic. Le runner clone avec les identifiants git que l'hôte a déjà, donc choisissez un référentiel que cet hôte peut déjà cloner, ou un public ; les options d'identifiants pour les référentiels privés en production sont sur [Configurer git](/docs/fr/self-hosted-environments-deploy#configure-git). Le prochain runner disponible récupère la session en attente et enregistre `Picked up session <session-id>` ainsi que son nombre actif et sa capacité, afin que vous puissiez confirmer à partir de la propre sortie du runner quel hôte a pris la session. Regardez la session fonctionner et lisez les réponses de Claude à [claude.ai/code](https://claude.ai/code). Si la session reste en attente à la place, consultez [Dépannage](/docs/fr/self-hosted-environments-deploy#troubleshooting).124 <span id="route-a-session" />Démarrez une session sur claude.ai/code et sélectionnez votre environnement dans le sélecteur d'environnement, où les environnements auto-hébergés apparaissent aux côtés des environnements hébergés par Anthropic. Pour le dépôt, choisissez celui des [prérequis](#host-and-network) : un dépôt public, ou un dépôt que cet hôte peut déjà cloner. Le runner clone avec les identifiants git dont l'hôte dispose déjà.

125 

126 Le prochain runner disponible récupère la session en attente et consigne `Picked up session <session-id>` ainsi que son nombre de sessions actives et sa capacité, afin que vous puissiez confirmer à partir de la propre sortie du runner quel hôte a pris la session. Regardez la session travailler et lisez les réponses de Claude sur [claude.ai/code](https://claude.ai/code).

127 

128 Si la session ne commence pas à travailler, identifiez ce que vous observez :

129 

130 * **La session reste en attente** : consultez [Dépannage](/docs/fr/self-hosted-environments-deploy#troubleshooting).

131 * **La session ne démarre pas en raison d'une erreur git** : l'erreur apparaît dans la session et dans le log du runner. Si elle contient le message git `could not read Username for` suivi de l'URL de votre hôte git, le runner ne disposait d'aucun identifiant HTTPS pour cet hôte. Consultez [Configurer git](/docs/fr/self-hosted-environments-deploy#configure-git), qui couvre également les options d'identifiants pour les dépôts privés en production.

105 </Step>132 </Step>

106</Steps>133</Steps>

107 134 

108Le runner se termine par conception une fois que ses sessions actives se terminent ; consultez [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle). Pour la production, déployez-le sous un orchestrateur qui le redémarre à la sortie et attend plus longtemps entre les redémarrages lorsque le runner continue à se terminer juste après son démarrage. Consultez [Déployer en production](/docs/fr/self-hosted-environments-deploy) et [Quand le runner se termine](/docs/fr/self-hosted-environments-deploy#when-the-runner-exits).135<h3 id="if-the-runner-exits">

136 Si le runner se termine

137</h3>

138 

139Si le runner se termine pendant ce démarrage rapide, redémarrez-le avec la même commande. Le runner peut se terminer de lui-même :

140 

141* **Sessions terminées** : le log affiche `[runner:exit] account workload drained — exiting`. Le runner se termine par conception une fois que ses sessions actives se terminent. Consultez [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle).

142* **Contact perdu** : le log affiche une ligne `[runner:fatal]` avec `runner record gone server-side` ou avec `poll auth failed`. Si le runner perd le contact avec Anthropic pendant un certain temps, par exemple parce que l'hôte se met en veille, il peut se terminer lorsqu'il joint à nouveau Anthropic.

143 

144Un tour terminé ne met pas fin à votre session de test. Après le premier tour, la session est toujours attachée et le runner est toujours actif, vous pouvez donc [envoyer un message de suivi à la session](#send-a-follow-up-message-to-a-running-session) sans redémarrer le runner au préalable.

145 

146Pour la production, déployez le runner sous un orchestrateur qui le redémarre à la sortie et attend plus longtemps entre les redémarrages lorsque le runner continue à se terminer juste après son démarrage. Consultez [Déployer en production](/docs/fr/self-hosted-environments-deploy) et [Quand le runner se termine](/docs/fr/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 Envoyer un message de suivi à une session en cours d'exécution149 Envoyer un message de suivi à une session en cours d'exécution

Details

52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Libérer un créneau de session après N minutes d'inactivité une fois qu'un tour se termine ou que la session attend l'action de l'utilisateur. Une session qui est toujours au milieu d'un tour, y compris une qui détient une tâche de fond qui ne finit jamais ou une approbation demandée de l'intérieur d'un appel d'outil en cours d'exécution, ne compte pas comme inactive ; associer avec `--kill-session-after-min` comme butée dure. Après la fin de la tâche de fond d'une session, le runner considère la session comme occupée jusqu'au tour de suivi qui lit le résultat commence, pendant au maximum la fenêtre [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Jusqu'à ce que le runner reçoive un signal d'arrêt ou atteigne son heure de retraite, une libération qui laisse le runner sans sessions actives démarre le même chemin de sortie qu'un drainage normal, gouverné par `--drain-grace-sec`. Après un premier signal que vous avez différé avec [`--defer-shutdown-max-min`](/docs/fr/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), le runner se termine dès qu'une libération le laisse sans sessions. `0` désactive. |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Libérer un créneau de session après N minutes d'inactivité une fois qu'un tour se termine ou que la session attend l'action de l'utilisateur. Une session qui est toujours au milieu d'un tour, y compris une qui détient une tâche de fond qui ne finit jamais ou une approbation demandée de l'intérieur d'un appel d'outil en cours d'exécution, ne compte pas comme inactive ; associer avec `--kill-session-after-min` comme butée dure. Après la fin de la tâche de fond d'une session, le runner considère la session comme occupée jusqu'au tour de suivi qui lit le résultat commence, pendant au maximum la fenêtre [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Jusqu'à ce que le runner reçoive un signal d'arrêt ou atteigne son heure de retraite, une libération qui laisse le runner sans sessions actives démarre le même chemin de sortie qu'un drainage normal, gouverné par `--drain-grace-sec`. Après un premier signal que vous avez différé avec [`--defer-shutdown-max-min`](/docs/fr/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), le runner se termine dès qu'une libération le laisse sans sessions. `0` désactive. |

53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | désactivé | Supprimer les répertoires par session d'une session sous `<base-dir>/_sessions/` quand la session se termine sur ce runner, quel que soit le résultat. [Réutiliser un checkout pré-chauffé](/docs/fr/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) décrit ce qu'ils contiennent et qui peut les lire quand ils restent. La suppression est meilleur effort : les répertoires par session restent en place quand le runner est tué ou atteint sa date limite de drainage avant que le nettoyage ne s'exécute. Avec le drapeau activé, le log de débogage d'une session échouée ou interrompue n'est pas conservé sur le disque. Nécessite Claude Code v2.1.268 ou ultérieur. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | désactivé | Supprimer les répertoires par session d'une session sous `<base-dir>/_sessions/` quand la session se termine sur ce runner, quel que soit le résultat. [Réutiliser un checkout pré-chauffé](/docs/fr/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) décrit ce qu'ils contiennent et qui peut les lire quand ils restent. La suppression est meilleur effort : les répertoires par session restent en place quand le runner est tué ou atteint sa date limite de drainage avant que le nettoyage ne s'exécute. Avec le drapeau activé, le log de débogage d'une session échouée ou interrompue n'est pas conservé sur le disque. Nécessite Claude Code v2.1.268 ou ultérieur. |

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | non défini | Retirer le runner à un timestamp Unix absolu en secondes, pour l'infrastructure qui tue le runner à un moment connu ; [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle) décrit la séquence de libération et comment dimensionner la marge. Les valeurs avant 2001 ou après l'année 5138 sont rejetées par le drapeau et ignorées par la variable d'environnement. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | non défini | Retirer le runner à un timestamp Unix absolu en secondes, pour l'infrastructure qui tue le runner à un moment connu ; [Cycle de vie du runner](/docs/fr/self-hosted-environments#runner-lifecycle) décrit la séquence de libération et comment dimensionner la marge. Les valeurs avant 2001 ou après l'année 5138 sont rejetées par le drapeau et ignorées par la variable d'environnement. |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Lesquelles des listes de règles du classifieur du [mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) que le plan de contrôle envoie avec une session peuvent atteindre cette session : `all`, `no-allow` ou `none`. Voir [Listes de règles du mode auto](#auto-mode-rule-lists) pour ce que chaque valeur applique. Une valeur invalide arrête le runner au démarrage. Nécessite Claude Code v2.1.295 ou ultérieur. |

55| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Combien de temps attendre que le processus Claude se termine proprement après la fin d'une session, avant de le tuer de force. Augmentez la valeur si les hooks `SessionEnd` propres de l'enfant ont besoin de plus de temps. |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Combien de temps attendre que le processus Claude se termine proprement après la fin d'une session, avant de le tuer de force. Augmentez la valeur si les hooks `SessionEnd` propres de l'enfant ont besoin de plus de temps. |

56| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Libérer un créneau de session si l'enfant n'a pas signalé qu'il s'était initialisé dans N minutes après le lancement. Effacé par le signal d'init de l'enfant sur le [canal d'activité](/docs/fr/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), pas par la sortie ordinaire, après quoi `--release-idle-session-min` prend le relais. `0` désactive. |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Libérer un créneau de session si l'enfant n'a pas signalé qu'il s'était initialisé dans N minutes après le lancement. Le clonage a lieu avant le lancement, donc le temps de clonage n'est pas compté. Effacé par le signal d'init de l'enfant sur le [canal d'activité](/docs/fr/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), pas par la sortie ordinaire, après quoi `--release-idle-session-min` prend le relais. `0` désactive. |

57| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | activé | Amorcer la confiance persistante pour les chemins de dépôt de chaque session afin que les `permissions.allow` et `additionalDirectories` validés par le dépôt soient honorés. Définir `false` pour supprimer les subventions de permission validées par le dépôt et configurer les règles d'autorisation dans le `settings.json` de la configuration d'hôte à la place ; les paramètres `sandbox.*` validés par le dépôt s'appliquent toujours de toute façon, c'est pourquoi la [garde de paramètres de dépôt](/docs/fr/self-hosted-environments-deploy#harden-your-deployment) les analyse indépendamment de ce drapeau. |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | activé | Amorcer la confiance persistante pour les chemins de dépôt de chaque session afin que les `permissions.allow` et `additionalDirectories` validés par le dépôt soient honorés. Définir `false` pour supprimer les subventions de permission validées par le dépôt et configurer les règles d'autorisation dans le `settings.json` de la configuration d'hôte à la place ; les paramètres `sandbox.*` validés par le dépôt s'appliquent toujours de toute façon, c'est pourquoi la [garde de paramètres de dépôt](/docs/fr/self-hosted-environments-deploy#harden-your-deployment) les analyse indépendamment de ce drapeau. |

58| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | désactivé | Cloner via le [proxy git Anthropic](/docs/fr/self-hosted-environments-deploy#use-the-anthropic-git-proxy) au lieu de l'authentification git gérée par le client. Nécessite `--capacity 1` et git 2.32 ou plus récent ; le runner refuse de démarrer sinon. Remplace les drapeaux de réécriture. |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | désactivé | Cloner les dépôts hébergés sur github.com via le [proxy git Anthropic](/docs/fr/self-hosted-environments-deploy#use-the-anthropic-git-proxy) au lieu de l'authentification git gérée par le client. Nécessite `--capacity 1` et git 2.32 ou plus récent ; le runner refuse de démarrer sinon. Remplace les flags de réécriture. |

59 60 

60La plupart des drapeaux de durée ont un maximum, choisi pour garder chaque délai d'attente en dessous du plafond de minuteur 32 bits du runtime d'environ 24,85 jours. Les drapeaux `--*-min` sont plafonnés à 10080 minutes, 7 jours ; `--drain-grace-sec` à 604800 secondes, également 7 jours ; et `--drain-wait-sec` à 86400 secondes, 24 heures. `--session-stop-grace-sec` et `--post-session-hook-timeout-sec` ne sont pas plafonnés. Dépasser un plafond se comporte différemment par surface :61La plupart des drapeaux de durée ont un maximum, choisi pour garder chaque délai d'attente en dessous du plafond de minuteur 32 bits du runtime d'environ 24,85 jours. Les drapeaux `--*-min` sont plafonnés à 10080 minutes, 7 jours ; `--drain-grace-sec` à 604800 secondes, également 7 jours ; et `--drain-wait-sec` à 86400 secondes, 24 heures. `--session-stop-grace-sec` et `--post-session-hook-timeout-sec` ne sont pas plafonnés. Dépasser un plafond se comporte différemment par surface :

61 62 

62* **Drapeau** : le démarrage échoue avec une erreur.63* **Drapeau** : le démarrage échoue avec une erreur.

63* **Variable d'environnement** : le runner serre la valeur au plafond de minuteur plutôt que de la rejeter.64* **Variable d'environnement** : le runner serre la valeur au plafond de minuteur plutôt que de la rejeter.

64 65 

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

67 Listes de règles du mode auto

68</h3>

69 

70`--server-auto-mode-lists` vous permet de décider quelles règles du classifieur du [mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) provenant de l'extérieur du runner atteignent les sessions sur vos runners. Le plan de contrôle d'Anthropic peut envoyer des listes de règles avec une session et demander au runner de les appliquer. Certaines entrées peuvent être des règles rédigées par un administrateur de votre organisation. Les listes sont `environment`, `soft_deny` et `allow` :

71 

72* **`environment`** : une entrée peut amener le classifieur à autoriser davantage comme à autoriser moins.

73* **`soft_deny`** : une entrée bloque une action sauf si l'utilisateur l'a explicitement demandée ou si une exception `allow` s'applique.

74* **`allow`** : les exceptions aux entrées `soft_deny`.

75 

76La valeur du flag détermine quelles listes le runner applique :

77 

78* **`no-allow`** : la valeur par défaut. Applique `environment` et `soft_deny` et retient `allow`. Une entrée `environment` peut toujours amener le classifieur à autoriser davantage, donc la valeur par défaut n'exclut pas tout assouplissement.

79* **`all`** : applique les trois listes.

80* **`none`** : n'en applique aucune. Choisissez `none` pour exclure tout assouplissement provenant de ces listes. Cela supprime également les restrictions `soft_deny`.

81 

82Aucun paramètre du runner ne fait en sorte que le plan de contrôle demande au runner d'appliquer les listes. Quand il ne le demande pas, les sessions ne reçoivent aucune liste, quelle que soit la valeur que vous définissez. Pour voir ce qui s'est passé, démarrez le runner avec `--log-level debug`. Pour chaque session, le runner journalise alors une ligne contenant `the server asked this runner to apply`, ou une ligne contenant `the server did not ask this runner to apply the auto mode lists it sends`.

83 

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

66 Drapeaux CLI de l'orchestrateur85 Drapeaux CLI de l'orchestrateur

67</h2>86</h2>


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

73| `--hook-concurrency <n>` | `4` | Nombre maximum de hooks `spawn-runner` s'exécutant en parallèle. Limite également le nombre de demandes de génération réclamées par interrogation. |92| `--hook-concurrency <n>` | `4` | Nombre maximum de hooks `spawn-runner` s'exécutant en parallèle. Limite également le nombre de demandes de génération réclamées par interrogation. |

74| `--hook-timeout <sec>` | `60` | Terminer l'arborescence des processus du hook après ce nombre de secondes. Le délai d'attente plus sa grâce de suppression de 5 secondes doit rester en dessous de `--expected-spawn-seconds` ; l'orchestrateur applique ceci au démarrage. |93| `--hook-timeout <sec>` | `60` | Terminer l'arborescence des processus du hook après ce nombre de secondes. Le délai d'attente plus sa grâce de suppression de 5 secondes doit rester en dessous de `--expected-spawn-seconds` ; l'orchestrateur applique ceci au démarrage. |

75| `--expected-spawn-seconds <sec>` | `120` | Temps de démarrage p99 attendu pour les runners générés, dans la plage appliquée par le serveur 10 à 3600. Envoyé à chaque interrogation comme le bail côté serveur ; si aucun runner ne s'enregistre avant son expiration, la session est re-proposée avec un nouvel ID de commande. Tous les réplicas doivent partager cette valeur. |94| `--expected-spawn-seconds <sec>` | `120` | Temps p99 attendu entre le moment où l'orchestrateur reçoit une demande de génération et celui où le runner s'enregistre, y compris toute attente de capacité sur votre plateforme. Le serveur applique une plage de 10 à 3600. Envoyé à chaque interrogation comme bail côté serveur : si aucun runner ne s'enregistre avant son expiration, la session est re-proposée avec un nouvel ID de commande. Tous les réplicas doivent partager cette valeur. |

76| `--min-idle <n>` | `0` | Garder au moins N créneaux de session inactifs libres en générant proactivement des runners de secours. `0` désactive le préchauffage. Associer avec le `--exit-if-unused-min` du runner afin que les runners de secours excédentaires se réclament eux-mêmes. |95| `--min-idle <n>` | `0` | Garder au moins N créneaux de session inactifs libres en générant proactivement des runners de secours. `0` désactive le préchauffage. Associer avec le `--exit-if-unused-min` du runner afin que les runners de secours excédentaires se réclament eux-mêmes. |

77| `--debug-dir <path>` | non défini | Écrire le bon de travail de chaque demande de génération et la stderr du hook sur le disque. Débogage uniquement ; ne jamais définir en production. |96| `--debug-dir <path>` | non défini | Écrire le bon de travail de chaque demande de génération et la stderr du hook sur le disque. Débogage uniquement ; ne jamais définir en production. |

78 97 


108| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Limite supérieure du temps pendant lequel le runner compte une session comme occupée pour le drainage `--drain-wait-sec` après la fin d'un tour, tandis que le processus de la session signale la fin du tour à Anthropic. `0` ou une valeur inutilisable revient à la valeur par défaut, donc la retenue ne peut pas être désactivée. Nécessite Claude Code v2.1.275 ou ultérieur. |127| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Limite supérieure du temps pendant lequel le runner compte une session comme occupée pour le drainage `--drain-wait-sec` après la fin d'un tour, tandis que le processus de la session signale la fin du tour à Anthropic. `0` ou une valeur inutilisable revient à la valeur par défaut, donc la retenue ne peut pas être désactivée. Nécessite Claude Code v2.1.275 ou ultérieur. |

109| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Combien de temps le runner attend que le système d'exploitation livre `SIGKILL` à un enfant bloqué dans les E/S non interruptibles avant de se terminer lui-même. Plancher à `--post-session-hook-timeout-sec` plus 15 secondes, et 30 de plus quand `--push-outcome-on-release` est défini, donc le minimum effectif est 75 secondes aux valeurs par défaut. |128| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Combien de temps le runner attend que le système d'exploitation livre `SIGKILL` à un enfant bloqué dans les E/S non interruptibles avant de se terminer lui-même. Plancher à `--post-session-hook-timeout-sec` plus 15 secondes, et 30 de plus quand `--push-outcome-on-release` est défini, donc le minimum effectif est 75 secondes aux valeurs par défaut. |

110| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profondeur de récupération git pour les clones frais. Définir un entier positif, ou `full` ou `0` pour une récupération complète. Les dépôts déjà présents dans l'espace de travail conservent leur profondeur existante. |129| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profondeur de récupération git pour les clones frais. Définir un entier positif, ou `full` ou `0` pour une récupération complète. Les dépôts déjà présents dans l'espace de travail conservent leur profondeur existante. |

130| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Durée en millisecondes, par tentative, pendant laquelle une récupération git peut attendre ses premières données tant que les indicateurs de progression du serveur git lui-même continuent d'augmenter, par exemple lorsque le serveur prépare le pack d'un dépôt volumineux. `0` ou `off` désactive cette attente : une telle récupération est alors interrompue après deux minutes sans données. Tout autre nombre entier est borné entre `120000` et `1800000`, soit 2 à 30 minutes. Nécessite Claude Code v2.1.295 ou ultérieur. |

111| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | non défini | Quand `1`, ignorer la vérification de présence `.git` après l'exécution d'un hook `checkout`. Définir ceci quand votre hook matérialise une source non-git. |131| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | non défini | Quand `1`, ignorer la vérification de présence `.git` après l'exécution d'un hook `checkout`. Définir ceci quand votre hook matérialise une source non-git. |

112| `FORCE_AUTOUPDATE_PLUGINS` | non défini | Quand `1`, laisser les marchés de plugins se mettre à jour automatiquement même si le binaire est épinglé |132| `FORCE_AUTOUPDATE_PLUGINS` | non défini | Quand `1`, laisser les marchés de plugins se mettre à jour automatiquement même si le binaire est épinglé |

113| `CLAUDE_CODE_DISABLE_ARTIFACT` | non défini | Quand `1`, désactiver l'outil Artifact dans les sessions indépendamment du paramètre d'administration de l'organisation, et supprimer l'exigence de sortie `*.frame.claudeusercontent.com` |133| `CLAUDE_CODE_DISABLE_ARTIFACT` | non défini | Quand `1`, désactiver l'outil Artifact dans les sessions indépendamment du paramètre d'administration de l'organisation, et supprimer l'exigence de sortie `*.frame.claudeusercontent.com` |


178| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Cumul des échecs PollSpawnHints par type : `transport`, `timeout`, `5xx`, `429`, ou `4xx`. Les cinq séries sont présentes depuis le démarrage du processus ; alertez sur `rate(...[5m]) > 0`. |198| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Cumul des échecs PollSpawnHints par type : `transport`, `timeout`, `5xx`, `429`, ou `4xx`. Les cinq séries sont présentes depuis le démarrage du processus ; alertez sur `rate(...[5m]) > 0`. |

179| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Demandes de spawn revendicables maintenant |199| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Demandes de spawn revendicables maintenant |

180| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Demandes de spawn en retry backoff après un échec de hook réessayable |200| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Demandes de spawn en retry backoff après un échec de hook réessayable |

181| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Demandes de spawn bloquées jusqu'à ce qu'un Owner les réessaie à partir de l'onglet **Activity** de l'environnement ; alertez si au-dessus de zéro |201| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Sessions dont le spawn est bloqué. Chacune reste bloquée jusqu'à ce qu'un utilisateur lui envoie un nouveau message ou qu'un Owner la réessaie à partir de l'onglet **Activity** de l'environnement. Le compteur peut rester au-dessus de zéro après que vous avez corrigé la cause. Alertez si au-dessus de zéro. |

182| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total des sessions attendant un runner pour cet environnement. Agrégat à l'échelle de l'environnement, identique sur chaque instance d'orchestrateur : utilisez `MAX` plutôt que `SUM` entre les instances. |202| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total des sessions attendant un runner pour cet environnement. Agrégat à l'échelle de l'environnement, identique sur chaque instance d'orchestrateur : utilisez `MAX` plutôt que `SUM` entre les instances. |

183| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sessions actuellement assignées à un runner vivant dans cet environnement. Agrégat à l'échelle de l'environnement, identique sur chaque instance d'orchestrateur : utilisez `MAX` plutôt que `SUM` entre les instances. |203| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Sessions actuellement assignées à un runner vivant dans cet environnement. Agrégat à l'échelle de l'environnement, identique sur chaque instance d'orchestrateur : utilisez `MAX` plutôt que `SUM` entre les instances. |

184| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Cumul des résultats du hook `spawn-runner` : `ok`, `retryable`, `non_retryable`. Compte les invocations de hook d'orchestrateur, pas les enfants de session que les runners génèrent : non comparable à `sessions_started_total`, puisque la capacité au-dessus d'un, les pools chauds, et les runners générés à nouveau pour la même session divergent les deux. |204| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Cumul des résultats du hook `spawn-runner` : `ok`, `retryable`, `non_retryable`. Compte les invocations de hook d'orchestrateur, pas les enfants de session que les runners génèrent : non comparable à `sessions_started_total`, puisque la capacité au-dessus d'un, les pools chauds, et les runners générés à nouveau pour la même session divergent les deux. |


285 for: 1m305 for: 1m

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

287 annotations:307 annotations:

288 summary: "{{ $value }} sessions circuit-broken — le hook spawn-runner est répétitivement non-réessayable ; corrigez l'infra puis réessayez à partir de l'onglet Activity"308 summary: "Sessions dont le spawn est bloqué : {{ $value }}. Lisez l'erreur de chacune dans l'onglet Activity, corrigez la cause, puis sélectionnez 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 

321Avant v2.1.260, le runner terminait chaque session qui atteignait sa limite `--kill-session-after-min` et la comptait dans `sessions_interrupted_total`.341Avant v2.1.260, le runner terminait chaque session qui atteignait sa limite `--kill-session-after-min` et la comptait dans `sessions_interrupted_total`.

322 342 

323Le hook [`post-session`](/docs/fr/self-hosted-environments-configuration#post-session) classifie différemment les remises propres avec `CLAUDE_RUNNER_EXIT_REASON`. Le hook signale une libération, un timeout de démarrage, et une désassignation serveur comme `interrupted`, parce que le runner a arrêté l'enfant. Ces compteurs enregistrent les mêmes événements que `completed`, parce que le slot a été remis correctement.343Le hook [`post-session`](/docs/fr/self-hosted-environments-configuration#post-session) classifie différemment les remises propres avec `CLAUDE_RUNNER_EXIT_REASON`. Le hook les signale comme `interrupted`, parce que le runner a arrêté l'enfant : une libération, un timeout de démarrage, une désassignation serveur, et un archivage ou une suppression que le poll a remarqué en premier. Ces compteurs enregistrent les mêmes événements que `completed`, parce que le slot a été remis correctement.

324 344 

325Si vous réconciliez les reçus de hook directement contre `sessions_completed_total`, vous sous-comptez les complétions. Utilisez le hook pour les garanties par session et les compteurs pour les taux agrégés.345Si vous réconciliez les reçus de hook directement contre `sessions_completed_total`, vous sous-comptez les complétions. Utilisez le hook pour les garanties par session et les compteurs pour les taux agrégés.

326 346 

Details

87 87 

88Les drapeaux de dispatch `--environment` et `--ref` nécessitent Claude Code v2.1.224 ou ultérieur sur la machine qui exécute le script, le même plancher que le runner lui-même. Avec le hook en place et un runner démarré sur cet hôte, le script de test :88Les drapeaux de dispatch `--environment` et `--ref` nécessitent Claude Code v2.1.224 ou ultérieur sur la machine qui exécute le script, le même plancher que le runner lui-même. Avec le hook en place et un runner démarré sur cet hôte, le script de test :

89 89 

901. Crée une session sur l'environnement de test avec `claude -p "<prompt>" --environment <environment-id> --output-format json`, exécuté à partir d'une extraction git pour que la CLI puisse détecter automatiquement le référentiel à partir de la télécommande `origin`. Le `--ref <branch>` optionnel base l'extraction de la session sur une ref nommée au lieu du HEAD local. La commande crée la session, imprime une ligne de JSON contenant `session_id`, et se termine sans attendre la réponse de Claude.901. Crée une session sur l'environnement de test avec `claude -p "<prompt>" --environment <environment-id> --output-format json`. Exécutez la commande à partir d'une extraction git pour que la CLI puisse détecter automatiquement le dépôt à partir du dépôt distant `origin`. Le `--ref <branch>` optionnel base l'extraction de la session sur une ref nommée au lieu du HEAD local. La commande se termine sans attendre la réponse de Claude. Ce qu'elle imprime indique le résultat à votre script :

91 * **Session créée** : une ligne de JSON telle que `{"ok":true,"session_id":"session_...","title":"...","url":"...","pool_id":"..."}`

92 * **Échec de la création de la session** : la ligne `{"ok":false,"error":"..."}`, et la commande se termine avec le statut 1

93 * **Certaines erreurs antérieures**, comme l'indisponibilité des sessions cloud pour votre organisation ou un prompt manquant : l'erreur sur stderr sans ligne JSON, et la commande se termine avec le statut 1

912. Attend que la réponse apparaisse dans `$E2E_REPLY_DIR/<session_id>.txt`, écrite par le hook Stop sur le runner une fois le tour terminé.942. Attend que la réponse apparaisse dans `$E2E_REPLY_DIR/<session_id>.txt`, écrite par le hook Stop sur le runner une fois le tour terminé.

923. Envoie un suivi avec `claude -p "<message>" --cloud <session_id> --output-format json` (voir [Envoyer un message de suivi à une session en cours d'exécution](/docs/fr/claude-code-on-the-web#send-follow-ups-from-the-cli)), qui publie un événement utilisateur à la session existante et se termine.953. Envoie un suivi avec `claude -p "<message>" --cloud <session_id> --output-format json` (voir [Envoyer un message de suivi à une session en cours d'exécution](/docs/fr/claude-code-on-the-web#send-follow-ups-from-the-cli)), qui publie un événement utilisateur à la session existante et se termine.

934. Attend la réponse du suivi de la même manière qu'à l'étape 2.964. Attend la réponse du suivi de la même manière qu'à l'étape 2.


104 Exemple de script107 Exemple de script

105</h2>108</h2>

106 109 

107Le script ci-dessous exécute la boucle complète contre `$CLAUDE_TEST_ENVIRONMENT_ID`, l'ID `ccpool_...` de votre environnement de test, affiché dans la boîte de dialogue de détail de l'environnement sur la page d'administration ou retourné par l'[appel create-environment](#create-a-dedicated-test-environment), et affirme sur une phrase sentinelle dans chaque réponse. Exécutez-le à partir d'une extraction git du dépôt dans lequel vous voulez que la session fonctionne, après avoir démarré un runner sur cet hôte avec le hook de capture installé et `E2E_REPLY_DIR` exporté. Connectez-vous d'abord avec un compte claude.ai sur la machine qui exécute le script, comme décrit dans [S'authentifier depuis la CI](#authenticate-from-ci). Sans cette connexion, le premier envoi échoue avec une erreur telle que `Unable to get organization UUID for cloud session creation`.110L'exemple de script s'exécute sur la même machine que le test runner. Avant de l'exécuter, préparez cette machine :

111 

112* **Extraction du dépôt** : exécutez le script à partir d'une extraction git du dépôt dans lequel vous voulez que la session fonctionne.

113* **Runner** : démarrez un runner sur cet hôte avec le hook de capture installé et `E2E_REPLY_DIR` exporté.

114* **Connexion** : connectez-vous avec un compte claude.ai sur la machine qui exécute le script, comme décrit dans [S'authentifier depuis la CI](#authenticate-from-ci).

115* **ID d'environnement** : définissez `CLAUDE_TEST_ENVIRONMENT_ID` sur l'ID `ccpool_...` de votre environnement de test, affiché dans la boîte de dialogue de détail de l'environnement sur la page d'administration ou retourné par l'[appel create-environment](#create-a-dedicated-test-environment).

116 

117Le script ci-dessous exécute la boucle complète contre `$CLAUDE_TEST_ENVIRONMENT_ID` et affirme sur une phrase sentinelle dans chaque réponse.

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 

Details

638| [`claudeMdExcludes`](#claudemdexcludes) | Ignorez les fichiers [CLAUDE.md](/docs/fr/memory#exclude-specific-claude-md-files) spécifiques lors du chargement de la mémoire | Memory and context | Any file |638| [`claudeMdExcludes`](#claudemdexcludes) | Ignorez les fichiers [CLAUDE.md](/docs/fr/memory#exclude-specific-claude-md-files) spécifiques lors du chargement de la mémoire | Memory and context | Any file |

639| [`cleanupPeriodDays`](#cleanupperioddays) | Choisissez le nombre de jours que Claude Code conserve les [transcriptions](/docs/fr/data-usage#data-retention) avant de les supprimer | Privacy and telemetry | Any file |639| [`cleanupPeriodDays`](#cleanupperioddays) | Choisissez le nombre de jours que Claude Code conserve les [transcriptions](/docs/fr/data-usage#data-retention) avant de les supprimer | Privacy and telemetry | Any file |

640| [`companyAnnouncements`](#companyannouncements) | Affichez les annonces de votre organisation au démarrage | Interface and terminal | Any file |640| [`companyAnnouncements`](#companyannouncements) | Affichez les annonces de votre organisation au démarrage | Interface and terminal | Any file |

641| [`copyFullResponse`](#copyfullresponse) | Faites en sorte que [`/copy`](/docs/fr/commands) copie la réponse complète sans afficher le sélecteur de bloc de code | Global config settings | Global config |641| [`copyFullResponse`](#copyfullresponse) | Faites en sorte que [`/copy`](/docs/fr/commands) copie la réponse complète sans afficher le sélecteur | Global config settings | Global config |

642| [`copyOnSelect`](#copyonselect) | Désactivez la copie automatique du texte que vous sélectionnez avec la souris dans le [rendu en plein écran](/docs/fr/fullscreen#use-the-mouse) et la vue agent | Global config settings | Global config |642| [`copyOnSelect`](#copyonselect) | Désactivez la copie automatique du texte que vous sélectionnez avec la souris dans le [rendu en plein écran](/docs/fr/fullscreen#use-the-mouse) et la vue agent | Global config settings | Global config |

643| [`crossSessionInbound`](#crosssessioninbound) | Choisissez si Claude Code livre les [messages de vos autres sessions](/docs/fr/cross-session-messaging#control-inbound-messages), affiche un avis sans les livrer, ou les refuse | Agents, sessions, and worktrees | Any file |643| [`crossSessionInbound`](#crosssessioninbound) | Choisissez si Claude Code livre les [messages de vos autres sessions](/docs/fr/cross-session-messaging#control-inbound-messages), affiche un avis sans les livrer, ou les refuse | Agents, sessions, and worktrees | Any file |

644| [`defaultShell`](#defaultshell) | Choisissez si Bash ou PowerShell exécute les commandes shell que vous tapez avec le préfixe [`!`](/docs/fr/interactive-mode#shell-mode-with-prefix) | Interface and terminal | Any file |644| [`defaultShell`](#defaultshell) | Choisissez si Bash ou PowerShell exécute les commandes shell que vous tapez avec le préfixe [`!`](/docs/fr/interactive-mode#shell-mode-with-prefix) | Interface and terminal | Any file |


684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Désactivez ou activez les instantanés de fichiers que [`/rewind`](/docs/fr/checkpointing) restaure | Memory and context | Any file |684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Désactivez ou activez les instantanés de fichiers que [`/rewind`](/docs/fr/checkpointing) restaure | Memory and context | Any file |

685| [`fileSuggestion`](#filesuggestion) | Fournissez l'[autocomplétion de fichier `@`](/docs/fr/interactive-mode#quick-commands) à partir de votre propre commande | Interface and terminal | Any file |685| [`fileSuggestion`](#filesuggestion) | Fournissez l'[autocomplétion de fichier `@`](/docs/fr/interactive-mode#quick-commands) à partir de votre propre commande | Interface and terminal | Any file |

686| [`footerLinksRegexes`](#footerlinksregexes) | Transformez les ID d'issue ou de revue en sortie en [liens cliquables](/docs/fr/statusline#clickable-links) sous la zone de saisie | Interface and terminal | User or managed |686| [`footerLinksRegexes`](#footerlinksregexes) | Transformez les ID d'issue ou de revue en sortie en [liens cliquables](/docs/fr/statusline#clickable-links) sous la zone de saisie | Interface and terminal | User or managed |

687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Définissez l'[URL de passerelle](/docs/fr/claude-apps-gateway#set-the-gateway-url) à laquelle l'écran de connexion se connecte | Authentication and providers | Managed |687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Définissez l'[URL de passerelle](/docs/fr/claude-apps-gateway#set-the-gateway-url) à laquelle l'écran de connexion se connecte | Authentication and providers | User or managed |

688| [`forceLoginMethod`](#forceloginmethod) | [Limitez la connexion](/docs/fr/authentication#restrict-login-to-your-organization) à claude.ai, Claude Console, ou une [passerelle cloud](/docs/fr/claude-apps-gateway) | Authentication and providers | Any file |688| [`forceLoginMethod`](#forceloginmethod) | [Limitez la connexion](/docs/fr/authentication#restrict-login-to-your-organization) à claude.ai, Claude Console, ou une [passerelle cloud](/docs/fr/claude-apps-gateway) | Authentication and providers | Any file |

689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Épinglez les connexions claude.ai à votre organisation](/docs/fr/authentication#restrict-login-to-your-organization) ; seule une source gérée l'applique | Authentication and providers | Any file |689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Épinglez les connexions claude.ai à votre organisation](/docs/fr/authentication#restrict-login-to-your-organization) ; seule une source gérée l'applique | Authentication and providers | Any file |

690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Bloquez le démarrage jusqu'à ce que les [paramètres gérés par serveur](/docs/fr/server-managed-settings) soient fraîchement récupérés | Enterprise and managed settings | Managed |690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Bloquez le démarrage jusqu'à ce que les [paramètres gérés par serveur](/docs/fr/server-managed-settings) soient fraîchement récupérés | Enterprise and managed settings | Managed |


6085 6085 

6086Restreignez le type de compte avec lequel les gens peuvent se connecter. Définissez `"claudeai"` pour autoriser uniquement les comptes claude.ai, `"console"` pour autoriser uniquement les comptes Claude Console, ou `"gateway"` pour envoyer les gens vers une [passerelle cloud](/docs/fr/claude-apps-gateway) au lieu d'une connexion propriétaire. Les administrateurs la définissent dans les paramètres gérés et l'associent à [`forceLoginOrgUUID`](#forceloginorguuid) pour garder les connexions claude.ai des développeurs à l'intérieur d'une organisation. Si vous la définissez à `"claudeai"` ou `"console"` dans n'importe quel fichier de paramètres, Claude Code arrête également d'offrir la [connexion Console sans clé](/docs/fr/authentication#sign-in-without-an-api-key) dans les sessions auxquelles ce fichier s'applique.6086Restreignez le type de compte avec lequel les gens peuvent se connecter. Définissez `"claudeai"` pour autoriser uniquement les comptes claude.ai, `"console"` pour autoriser uniquement les comptes Claude Console, ou `"gateway"` pour envoyer les gens vers une [passerelle cloud](/docs/fr/claude-apps-gateway) au lieu d'une connexion propriétaire. Les administrateurs la définissent dans les paramètres gérés et l'associent à [`forceLoginOrgUUID`](#forceloginorguuid) pour garder les connexions claude.ai des développeurs à l'intérieur d'une organisation. Si vous la définissez à `"claudeai"` ou `"console"` dans n'importe quel fichier de paramètres, Claude Code arrête également d'offrir la [connexion Console sans clé](/docs/fr/authentication#sign-in-without-an-api-key) dans les sessions auxquelles ce fichier s'applique.

6087 6087 

6088* **Portée** : [`Any file`](#scopes). Claude Code honore `"gateway"` uniquement à partir d'une source gérée sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un aide de politique. Il traite `"gateway"` comme non défini dans les paramètres utilisateur, projet, locaux, HKCU et gérés par le serveur, la même règle que [`forceLoginGatewayUrl`](#forcelogingatewayurl).6088* **Portée** : [`Any file`](#scopes). Claude Code honore `"gateway"` à partir des mêmes sources que [`forceLoginGatewayUrl`](#forcelogingatewayurl) et le traite comme non défini partout ailleurs.

6089* **Type** : chaîne, l'une de :6089* **Type** : chaîne, l'une de :

6090 * `"claudeai"` : seuls les comptes claude.ai peuvent se connecter6090 * `"claudeai"` : seuls les comptes claude.ai peuvent se connecter

6091 * `"console"` : seuls les comptes Claude Console peuvent se connecter6091 * `"console"` : seuls les comptes Claude Console peuvent se connecter


6108 6108 

6109Définissez l'URL de la passerelle à laquelle l'écran `/login` Cloud gateway se connecte, afin que les gens atteignent votre [passerelle cloud](/docs/fr/claude-apps-gateway) sans taper son adresse. L'écran n'a pas de champ URL : avec cette clé définie, il affiche l'URL de votre passerelle et se connecte lorsque la personne appuie sur Entrée ; sans elle, il leur dit de contacter leur administrateur IT.6109Définissez l'URL de la passerelle à laquelle l'écran `/login` Cloud gateway se connecte, afin que les gens atteignent votre [passerelle cloud](/docs/fr/claude-apps-gateway) sans taper son adresse. L'écran n'a pas de champ URL : avec cette clé définie, il affiche l'URL de votre passerelle et se connecte lorsque la personne appuie sur Entrée ; sans elle, il leur dit de contacter leur administrateur IT.

6110 6110 

6111Cette clé ou `forceLoginMethod: "gateway"` rend la machine réservée à la passerelle, sauf pour les sessions qui sélectionnent un fournisseur cloud avec `CLAUDE_CODE_USE_*`. `/login` s'ouvre alors sur l'écran Cloud gateway sans sélecteur de méthode de connexion. Voir [La politique de l'administrateur nécessite une connexion à la passerelle Cloud](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) pour ce qui se passe avec une connexion propriétaire restante ou une clé API. Définissez les deux clés afin que l'écran se connecte au lieu d'afficher une erreur.6111Dans les paramètres gérés, cette clé ou `forceLoginMethod: "gateway"` rend la machine réservée à la passerelle, sauf pour les sessions qui sélectionnent un fournisseur cloud avec `CLAUDE_CODE_USE_*`. `/login` s'ouvre alors sur l'écran Cloud gateway sans sélecteur de méthode de connexion. Voir [La politique de l'administrateur nécessite une connexion à la passerelle Cloud](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) pour ce qui se passe avec une connexion propriétaire restante ou une clé API. Définissez les deux clés afin que l'écran se connecte au lieu d'afficher une erreur.

6112 6112 

6113* **Portée** : [`Managed`](#scopes). Lu uniquement à partir d'une source sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un aide de politique. Claude Code l'ignore dans les paramètres HKCU et gérés par le serveur.6113* **Portée** : [`User or managed`](#scopes). Lu à partir d'une source gérée sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un aide de politique. Sur une machine qui n'en possède aucune, Claude Code v2.1.295 ou ultérieur le lit également à partir des [paramètres utilisateur](/docs/fr/claude-apps-gateway#set-the-gateway-url-in-user-settings). Claude Code l'ignore dans les paramètres HKCU et gérés par le serveur.

6114* **Type** : chaîne, une URL complète incluant le schéma6114* **Type** : chaîne, une URL complète incluant le schéma

6115* **Défaut** : non défini, donc l'écran Cloud gateway affiche une erreur indiquant aux gens de contacter leur administrateur IT6115* **Défaut** : non défini, donc l'écran Cloud gateway affiche une erreur indiquant aux gens de contacter leur administrateur IT

6116 6116 


6806 `copyFullResponse`6806 `copyFullResponse`

6807</h3>6807</h3>

6808 6808 

6809Faites en sorte que [`/copy`](/docs/fr/commands) copie la réponse complète à chaque fois, sans le sélecteur qu'il affiche autrement lorsque la réponse contient des blocs de code. Sélectionner **Always copy full response** dans ce sélecteur définit cette clé à `true`. Apparaît dans `/config` sous **Skip the /copy picker**.6809Faites en sorte que [`/copy`](/docs/fr/commands) copie la réponse complète à chaque fois, sans afficher le sélecteur. Sélectionner **Always copy full response** dans ce sélecteur définit cette clé à `true`. Apparaît dans `/config` sous **Skip the /copy picker**.

6810 6810 

6811* **Scope** : [`Global config`](#scopes)6811* **Scope** : [`Global config`](#scopes)

6812* **Type** : Boolean6812* **Type** : Boolean

6813 * `true` : `/copy` copie la réponse complète sans afficher le sélecteur6813 * `true` : `/copy` copie la réponse complète sans afficher le sélecteur

6814 * `false` : lorsque la réponse contient des blocs de code, `/copy` affiche un sélecteur où vous choisissez un bloc de code ou la réponse complète6814 * `false` : lorsque la réponse contient des blocs de code ou des citations, `/copy` affiche un sélecteur où vous choisissez un bloc ou la réponse complète

6815* **Default** : `false`6815* **Default** : `false`

6816 6816 

6817```json ~/.claude.json theme={null}6817```json ~/.claude.json theme={null}

skills.md +1 −1

Details

235 235 

236Si une skill existe uniquement dans `~/.claude/skills/` sur votre machine, Claude Code signale que la skill n'a pas été trouvée quand une [routine](/docs/fr/routines) l'invoque, car chaque exécution de routine démarre en tant que nouvelle session cloud. Pour rendre une skill personnelle disponible dans ces sessions :236Si une skill existe uniquement dans `~/.claude/skills/` sur votre machine, Claude Code signale que la skill n'a pas été trouvée quand une [routine](/docs/fr/routines) l'invoque, car chaque exécution de routine démarre en tant que nouvelle session cloud. Pour rendre une skill personnelle disponible dans ces sessions :

237 237 

238* Pour les sessions Cowork et cloud, activez la skill pour votre compte claude.ai.238* Pour les sessions Cowork et cloud, activez le skill pour votre compte claude.ai. [Certaines sessions dans un environnement auto-hébergé](/docs/fr/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) ne chargent pas les skills de votre compte.

239* Pour les sessions cloud, vous pouvez à la place valider la skill dans le `.claude/skills/` du référentiel. Les plugins déclarés dans le `.claude/settings.json` du référentiel et les plugins activés uniquement dans vos paramètres utilisateur [ne se chargent pas dans les sessions cloud](/docs/fr/cloud-environments#what-carries-over-from-your-setup).239* Pour les sessions cloud, vous pouvez à la place valider la skill dans le `.claude/skills/` du référentiel. Les plugins déclarés dans le `.claude/settings.json` du référentiel et les plugins activés uniquement dans vos paramètres utilisateur [ne se chargent pas dans les sessions cloud](/docs/fr/cloud-environments#what-carries-over-from-your-setup).

240 240 

241Les [tâches planifiées Desktop](/docs/fr/desktop-scheduled-tasks) s'exécutent localement sur votre machine, donc elles chargent `~/.claude/skills/`.241Les [tâches planifiées Desktop](/docs/fr/desktop-scheduled-tasks) s'exécutent localement sur votre machine, donc elles chargent `~/.claude/skills/`.

Details

122}122}

123```123```

124 124 

125<h2 id="see-session-status-in-your-terminal">

126 Voir le statut de la session dans votre terminal

127</h2>

128 

129Si votre terminal implémente le protocole OSC 7501 Program Status Protocol, il peut indiquer si chaque session interactive de Claude Code est en cours de travail, en attente de votre intervention ou terminée, ce qui est utile lorsque vous exécutez des tâches longues ou plusieurs sessions à la fois. Il n'y a rien à activer dans Claude Code. Pour savoir si votre terminal implémente le protocole et où il affiche le statut, consultez sa documentation.

130 

131Si c'est le cas et que vous ne voyez aucun statut pour une session, vérifiez chacune de ces causes :

132 

133* **Version de Claude Code** : le signalement du statut nécessite Claude Code v2.1.295 ou une version ultérieure. Exécutez `claude --version` dans votre shell pour vérifier.

134* **tmux** : dans tmux, Claude Code vérifie la prise en charge auprès de tmux plutôt que de votre terminal, et [`allow-passthrough`](#configure-tmux) n'a aucun effet sur ce point. Démarrez la session en dehors de tmux.

135* **Session en arrière-plan** : une [session en arrière-plan](/docs/fr/agent-view) ne signale pas son statut à votre terminal, même lorsque vous y êtes attaché. La vue agent affiche son statut à la place.

136* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](/docs/fr/env-vars#variables)** : si vous définissez cette variable sur `1`, Claude Code ne vérifie pas la prise en charge et ne signale pas le statut. Supprimez-la.

137 

125<h2 id="configure-tmux">138<h2 id="configure-tmux">

126 Configurer tmux139 Configurer tmux

127</h2>140</h2>

tools-reference.md +27 −10

Details

279 279 

280L'outil Edit effectue un remplacement de chaîne exact. Il prend une `old_string` et une `new_string` et remplace la première par la seconde. Il n'utilise pas d'expressions régulières ni de correspondance approximative.280L'outil Edit effectue un remplacement de chaîne exact. Il prend une `old_string` et une `new_string` et remplace la première par la seconde. Il n'utilise pas d'expressions régulières ni de correspondance approximative.

281 281 

282Trois vérifications doivent réussir pour qu'une modification s'applique. Avant l'une d'elles, un chemin correspondant à une [règle de refus `Read`](/docs/fr/permissions#tool-specific-permission-rules) est refusé, y compris la création d'un nouveau fichier à cet endroit. Le refus nécessite Claude Code v2.1.208 ou une version ultérieure.282Ces vérifications doivent réussir pour qu'une modification s'applique. Avant l'une d'elles, un chemin correspondant à une [règle de refus `Read`](/docs/fr/permissions#tool-specific-permission-rules) est refusé, y compris la création d'un nouveau fichier à cet endroit. Le refus nécessite Claude Code v2.1.208 ou une version ultérieure.

283 283 

284* **Read-before-edit** : Claude lit le fichier dans la conversation actuelle avant de le modifier, et une lecture interrompue avec un avis [`PARTIAL view`](#read-tool-behavior) ne compte pas. Claude Opus 4.6, Claude Haiku 4.5 et les modèles plus anciens nécessitent toujours la lecture. Les modèles plus récents peuvent modifier un fichier non lu lorsque la lecture ne nécessiterait pas une invite de permission et que l'outil Read est disponible.284* **Read-before-edit** : Claude lit le fichier dans la conversation actuelle avant de le modifier, et une lecture interrompue avec un avis [`PARTIAL view`](#large-files) ne compte pas. Claude Opus 4.6, Claude Haiku 4.5 et les modèles plus anciens nécessitent toujours la lecture. Les modèles plus récents peuvent modifier un fichier non lu lorsque la lecture ne nécessiterait pas de demande de permission et que l'outil Read est disponible.

285* **Match** : `old_string` doit apparaître dans le fichier exactement tel qu'écrit. Une seule différence d'espace blanc ou d'indentation suffit à manquer la correspondance.285* **Match** : `old_string` doit apparaître dans le fichier exactement tel qu'écrit. Une seule différence d'espace blanc ou d'indentation suffit à manquer la correspondance.

286* **Unicité** : `old_string` doit apparaître exactement une fois. Lorsqu'il apparaît plus d'une fois, Claude fournit soit une chaîne plus longue avec suffisamment de contexte environnant pour identifier une occurrence, soit définit `replace_all: true` pour les remplacer tous.286* **Unicité** : `old_string` doit apparaître exactement une fois. Lorsqu'il apparaît plus d'une fois, Claude fournit soit une chaîne plus longue avec suffisamment de contexte environnant pour identifier une occurrence, soit définit `replace_all: true` pour les remplacer tous.

287 287 

288Un fichier qui a changé sur le disque après la dernière lecture par Claude peut toujours être modifié lorsque `old_string` correspond exactement au contenu actuel et sans ambiguïté et que Claude Code peut lire le fichier sans invite. La correspondance avec le contenu actuel du fichier maintient la sécurité, et le résultat note que le fichier contient d'autres modifications afin que Claude le relise avant les modifications qui dépendent du contenu environnant. Dans tout autre cas, comme une `old_string` obsolète ou une qui correspond à plus d'une occurrence sans `replace_all`, Claude lit le fichier à nouveau avant la modification. La gestion assouplie des fichiers non lus et modifiés nécessite Claude Code v2.1.208 ou une version ultérieure ; avant cela, Claude Code refusait toute modification d'un fichier qu'il n'avait pas lu dans la conversation ou qui avait changé sur le disque après la lecture.288Un fichier qui a changé sur le disque après la dernière lecture par Claude peut toujours être modifié lorsque `old_string` correspond exactement au contenu actuel et sans ambiguïté et que Claude Code peut lire le fichier sans invite. La correspondance avec le contenu actuel du fichier maintient la sécurité, et le résultat note que le fichier contient d'autres modifications afin que Claude le relise avant les modifications qui dépendent du contenu environnant. Dans tout autre cas, comme une `old_string` obsolète ou une qui correspond à plus d'une occurrence sans `replace_all`, Claude lit le fichier à nouveau avant la modification. La gestion assouplie des fichiers non lus et modifiés nécessite Claude Code v2.1.208 ou une version ultérieure ; avant cela, Claude Code refusait toute modification d'un fichier qu'il n'avait pas lu dans la conversation ou qui avait changé sur le disque après la lecture.

289 289 

290Afficher un fichier avec Bash satisfait également l'exigence read-before-edit lorsque la commande est `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, ou `rg` sur un seul fichier sans pipes ni redirections. La sortie redirigée et les autres commandes Bash ne comptent pas vers la vérification read-before-edit.290Afficher un fichier avec Bash satisfait également l'exigence read-before-edit lorsque la commande est `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, ou `rg` sur un seul fichier sans pipes ni redirections. Une recherche qui ne trouve aucune correspondance laisse le fichier non lu. La sortie redirigée et les autres commandes Bash ne comptent pas vers la vérification read-before-edit.

291 291 

292Lorsque Claude affiche un fichier de cette manière, Claude Code charge également tout [`CLAUDE.md` de sous-répertoire](/docs/fr/memory#how-claude-md-files-load) et toutes les [règles limitées à un chemin](/docs/fr/memory#path-specific-rules) qui s'appliquent à ce fichier. Consultez [Règles de permission Read et Edit](/docs/fr/permissions#read-and-edit) pour savoir quelles commandes Bash vos règles de refus `Read` et `Edit` couvrent.292Lorsque Claude affiche un fichier de cette manière, Claude Code charge également tout [`CLAUDE.md` de sous-répertoire](/docs/fr/memory#how-claude-md-files-load) et toutes les [règles limitées à un chemin](/docs/fr/memory#path-specific-rules) qui s'appliquent à ce fichier. Consultez [Règles de permission Read et Edit](/docs/fr/permissions#read-and-edit) pour savoir quelles commandes Bash vos règles de refus `Read` et `Edit` couvrent.

293 293 

294<h3 id="non-utf-8-files">

295 Fichiers non UTF-8

296</h3>

297 

298Edit et [NotebookEdit](#notebookedit-tool-behavior) refusent de modifier un fichier dont les octets ne se décodent pas en UTF-8, et n'écrivent rien, car le réenregistrer en UTF-8 transformerait chaque octet qu'ils n'ont pas pu décoder en caractère de remplacement `U+FFFD`. Cela couvre, par exemple, un fichier contenant du texte non ASCII dans un encodage hérité tel que Windows-1252 ou Shift-JIS, un fichier binaire et un fichier UTF-8 contenant une séquence d'octets invalide. L'[erreur que Claude reçoit](/docs/fr/errors#file-is-not-valid-utf-8) lui indique d'effectuer la modification avec une commande shell qui lit et écrit le fichier dans son propre encodage, ou de vous demander s'il faut d'abord convertir le fichier en UTF-8. Edit lit plutôt en UTF-16 un fichier qui commence par une marque d'ordre d'octets UTF-16 little-endian, afin que ce fichier reste modifiable.

299 

300Write ne partage pas ce refus. Sur un fichier qu'Edit refuserait, Write remplace l'intégralité du fichier par le nouveau contenu et l'enregistre en UTF-8, de sorte que l'encodage d'origine du fichier est perdu. Write refuse, et n'écrit rien, lorsque le fichier sur le disque ne se décode pas et que le nouveau contenu contient `U+FFFD`, le caractère que Read affiche pour les octets qu'il ne peut pas décoder.

301 

294<h2 id="endconversation-tool-behavior">302<h2 id="endconversation-tool-behavior">

295 Comportement de l'outil EndConversation303 Comportement de l'outil EndConversation

296</h2>304</h2>


455* `insert` : ajoute une nouvelle cellule après la cible. Sans `cell_id`, la nouvelle cellule va au début du notebook. Nécessite que `cell_type` soit défini à `code` ou `markdown`.463* `insert` : ajoute une nouvelle cellule après la cible. Sans `cell_id`, la nouvelle cellule va au début du notebook. Nécessite que `cell_type` soit défini à `code` ou `markdown`.

456* `delete` : supprime la cellule cible.464* `delete` : supprime la cellule cible.

457 465 

466NotebookEdit refuse un fichier notebook qui ne se décode pas en UTF-8, selon la [même règle qu'Edit](#non-utf-8-files), et n'écrit rien.

467 

458Les règles de permission utilisent le format de chemin `Edit(...)`. Une règle comme `Edit(notebooks/**)` couvre les appels NotebookEdit sur les fichiers dans ce répertoire.468Les règles de permission utilisent le format de chemin `Edit(...)`. Une règle comme `Edit(notebooks/**)` couvre les appels NotebookEdit sur les fichiers dans ce répertoire.

459 469 

460<h2 id="powershell-tool">470<h2 id="powershell-tool">


547 557 

548L'outil Read prend un chemin de fichier et retourne le contenu avec les numéros de ligne. Claude est configuré pour toujours passer des chemins absolus.558L'outil Read prend un chemin de fichier et retourne le contenu avec les numéros de ligne. Claude est configuré pour toujours passer des chemins absolus.

549 559 

550Par défaut, Read retourne le fichier depuis le début. Quand une lecture de fichier complet dépasse la limite de tokens, Read retourne la première page avec un avis `PARTIAL view` qui indique à Claude combien du fichier il a reçu et comment lire plus avec `offset` et `limit`. Une lecture qui passe un `offset` ou `limit` explicite et dépasse toujours la limite de tokens retourne une erreur.

551 

552Une lecture avec un `limit` explicite s'arrête dès que les lignes sélectionnées dépassent ce que la limite de tokens pourrait jamais contenir et retourne une erreur sans charger le reste de la plage. L'erreur indique à Claude d'utiliser un `limit` plus petit, ou de rechercher du contenu spécifique avec [Grep](#grep-tool-behavior) à la place quand une seule ligne est aussi grande. Avant v2.1.208, Claude Code chargeait toute la plage en mémoire avant de la rejeter, donc lire un fichier avec une seule ligne extrêmement longue pouvait le faire manquer de mémoire.

553 

554Lire un fichier vide retourne un avis que le fichier existe mais que son contenu est vide, et un `offset` au-delà de la dernière ligne retourne un avis donnant le nombre de lignes du fichier. Avant v2.1.208, lire un fichier vide retournait l'avis de fin de fichier à la place.560Lire un fichier vide retourne un avis que le fichier existe mais que son contenu est vide, et un `offset` au-delà de la dernière ligne retourne un avis donnant le nombre de lignes du fichier. Avant v2.1.208, lire un fichier vide retournait l'avis de fin de fichier à la place.

555 561 

556Read gère plusieurs types de fichiers au-delà du texte brut :562Read gère plusieurs types de fichiers au-delà du texte brut :

557 563 

558* **Images** : PNG, JPG et autres formats d'image sont retournés comme contenu visuel que Claude peut voir, pas comme des octets bruts. Claude Code redimensionne et récompresse les grandes images pour s'adapter aux limites de taille d'image du modèle avant de les envoyer, donc Claude peut voir une version réduite d'une grande capture d'écran. Une image qui est toujours plus grande que 500 KB après ce redimensionnement est réencodée en JPEG à qualité réduite avec ses dimensions en pixels inchangées. Si Claude manque des détails fins au niveau des pixels dans une grande image, demandez-lui de d'abord recadrer la région d'intérêt, par exemple avec ImageMagick via Bash.564* **Images** : PNG, JPG et autres formats d'image sont retournés comme contenu visuel que Claude peut voir, pas comme des octets bruts. Claude Code redimensionne et récompresse les grandes images pour s'adapter aux limites de taille d'image du modèle avant de les envoyer, donc Claude peut voir une version réduite d'une grande capture d'écran. Une image qui est toujours plus grande que 500 KB après ce redimensionnement est réencodée en JPEG à qualité réduite avec ses dimensions en pixels inchangées. Si Claude manque des détails fins au niveau des pixels dans une grande image, demandez-lui de d'abord recadrer la région d'intérêt, par exemple avec ImageMagick via Bash.

559* **PDFs** : Claude lit les fichiers `.pdf` courts en entier. Pour les PDFs plus longs que 10 pages, il lit par plages avec un paramètre `pages`, tel que `"1-5"`, jusqu'à 20 pages à la fois. Les lectures par plage de pages restituent les pages avec `pdftoppm` de poppler-utils, donc installez-le avec `brew install poppler` sur macOS ou `apt-get install poppler-utils` sur Debian et Ubuntu. Sur Windows et autres plates-formes, installez une version poppler qui met `pdftoppm` sur votre `PATH`. Sans cela, une lecture par plage de pages échoue avec `pdftoppm is not installed`.565* **PDFs** : Claude lit les fichiers `.pdf` courts en entier. Pour les PDFs plus longs que 10 pages, il lit par plages avec un paramètre `pages`, tel que `"1-5"`, jusqu'à 20 pages à la fois. Les lectures par plage de pages restituent les pages avec `pdftoppm` de poppler-utils, donc installez-le avec `brew install poppler` sur macOS ou `apt-get install poppler-utils` sur Debian et Ubuntu. Sur Windows et autres plates-formes, installez une version poppler qui met `pdftoppm` sur votre `PATH`. Sans cela, une lecture par plage de pages échoue avec `pdftoppm is not installed`.

560* **Notebooks Jupyter** : les fichiers `.ipynb` retournent toutes les cellules avec leurs résultats, y compris le code, le markdown et les visualisations. Claude Code refuse de lire un fichier notebook de plus de 100 MB ; l'erreur indique à Claude comment lire une portion du notebook à la place, comme une tranche de cellules, avec une commande shell.566* **Notebooks Jupyter** : les fichiers `.ipynb` retournent toutes les cellules avec leurs résultats, y compris le code, le markdown et les visualisations. Un notebook dont les cellules dépassent 256 KB, ou la [limite de tokens](#large-files), retourne une erreur à la place. Claude Code refuse de lire un fichier notebook de plus de 100 MB ; l'erreur indique à Claude comment lire une portion du notebook à la place, comme une tranche de cellules, avec une commande shell.

561 567 

562Read lit uniquement les fichiers, pas les répertoires. Claude liste le contenu des répertoires avec une commande shell telle que `ls`.568Read lit uniquement les fichiers, pas les répertoires. Claude liste le contenu des répertoires avec une commande shell telle que `ls`.

563 569 

570<h3 id="large-files">

571 Fichiers volumineux

572</h3>

573 

574Claude peut lire un fichier texte plus volumineux que ce que retourne un seul appel à Read. Par défaut, un appel retourne au maximum 25 000 tokens, ou la valeur que vous définissez dans [`CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS`](/docs/fr/env-vars), et refuse un fichier complet de plus de 256 KB, donc Claude lit un fichier plus volumineux par pages avec `offset` et `limit`. Sur Claude Code v2.1.296 ou ultérieur, il peut à la place lire le fichier complet, ou une longue plage de lignes, en un seul appel en définissant `allow_large: true` lorsqu'il en a besoin, par exemple parce que vous avez demandé le fichier entier. Cette lecture est dimensionnée en fonction de l'espace restant dans la [fenêtre de contexte](/docs/fr/context-window) de la session plutôt que selon les limites par défaut. Les images, les PDFs et les notebooks conservent leurs limites.

575 

576Ce que Claude reçoit lorsqu'une lecture dépasse les limites par défaut :

577 

578* **Fichier complet au-delà de la limite de tokens** : la première page du fichier, avec un avis `PARTIAL view` indiquant quelle part du fichier il a reçue et comment en lire davantage avec `offset` et `limit`

579* **Fichier complet de plus de 256 KB, ou lecture avec `offset` ou `limit` au-delà de la limite de tokens** : une erreur lui indiquant de lire une portion avec `offset` et `limit`, ou de rechercher du contenu spécifique avec [Grep](#grep-tool-behavior) à la place

580 

564<h2 id="sendfeedback-tool-behavior">581<h2 id="sendfeedback-tool-behavior">

565 Comportement de l'outil SendFeedback582 Comportement de l'outil SendFeedback

566</h2>583</h2>


734 Comportement de l'outil Write751 Comportement de l'outil Write

735</h2>752</h2>

736 753 

737L'outil Write crée un nouveau fichier ou remplace un fichier existant par le contenu complet fourni. Il n'ajoute pas ou ne fusionne pas.754L'outil Write crée un nouveau fichier ou remplace un fichier existant par le contenu complet fourni. Il n'ajoute pas ou ne fusionne pas. Write remplace également un fichier existant dont les octets ne peuvent pas être décodés et enregistre le nouveau contenu en UTF-8, comme décrit dans [fichiers non UTF-8](#non-utf-8-files).

738 755 

739Le fait que Claude doive lire un fichier existant dans la conversation actuelle avant de le remplacer dépend du modèle et du fichier :756Le fait que Claude doive lire un fichier existant dans la conversation actuelle avant de le remplacer dépend du modèle et du fichier :

740 757 

741* Claude Opus 4.6, Claude Haiku 4.5 et les modèles plus anciens exigent toujours la lecture, donc une Write vers un fichier existant non lu échoue avec une erreur.758* Claude Opus 4.6, Claude Haiku 4.5 et les modèles plus anciens exigent toujours la lecture, donc une Write vers un fichier existant non lu échoue avec une erreur.

742* Les modèles plus récents peuvent remplacer un fichier qu'ils n'ont jamais lu cette session dans les mêmes conditions que [read-before-edit](#edit-tool-behavior) : le lire ne nécessiterait pas une invite de permission et l'outil Read est disponible.759* Les modèles plus récents peuvent remplacer un fichier qu'ils n'ont jamais lu cette session dans les mêmes conditions que [read-before-edit](#edit-tool-behavior) : le lire ne nécessiterait pas une invite de permission et l'outil Read est disponible.

743* Les notebooks Jupyter et les fichiers que Claude a lus partiellement avec un avis [`PARTIAL view`](#read-tool-behavior) exigent la lecture sur tous les modèles.760* Les notebooks Jupyter et les fichiers que Claude a lus partiellement avec un [avis `PARTIAL view`](#large-files) exigent la lecture sur tous les modèles.

744 761 

745Cette contrainte ne s'applique pas aux nouveaux fichiers. Avant v2.1.228, tous les modèles exigeaient la lecture avant de remplacer un fichier existant.762Cette contrainte ne s'applique pas aux nouveaux fichiers. Avant v2.1.228, tous les modèles exigeaient la lecture avant de remplacer un fichier existant.

746 763 

vs-code.md +1 −1

Details

479 479 

480Claude ouvre de nouveaux onglets pour les tâches du navigateur et partage l'état de connexion de votre navigateur, ce qui lui permet d'accéder à n'importe quel site auquel vous êtes déjà connecté.480Claude ouvre de nouveaux onglets pour les tâches du navigateur et partage l'état de connexion de votre navigateur, ce qui lui permet d'accéder à n'importe quel site auquel vous êtes déjà connecté.

481 481 

482Pour que chaque session se connecte à votre navigateur dès son démarrage, sans taper `@browser`, consultez [Activer Chrome par défaut](/docs/fr/chrome#enable-chrome-by-default). Pour les cas où Claude Code vous demande confirmation avant une action du navigateur dans une session connectée de cette façon, consultez [Demandes de permission dans les sessions VS Code](/docs/fr/chrome#permission-prompts-in-vs-code-sessions).482Pour que chaque session se connecte à votre navigateur dès son démarrage, sans taper `@browser`, consultez [Activer Chrome par défaut](/docs/fr/chrome#enable-chrome-by-default). Pour les cas où Claude Code vous demande confirmation avant une action du navigateur, consultez [Demandes de permission dans les sessions VS Code](/docs/fr/chrome#permission-prompts-in-vs-code-sessions).

483 483 

484Pour les instructions de configuration, la liste complète des capacités et le dépannage, consultez [Utiliser Claude Code avec Chrome](/docs/fr/chrome).484Pour les instructions de configuration, la liste complète des capacités et le dépannage, consultez [Utiliser Claude Code avec Chrome](/docs/fr/chrome).

485 485