SpyBara
Go Premium

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

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

artifacts.md +1 −3

Details

340 340 

341Claude Docs se connecte à Claude Code en tant que [connecteur](https://code.claude.com/docs/fr/mcp.md#use-mcp-servers-from-claude-ai) claude.ai plutôt qu'en tant que commande. Lorsqu'il est connecté, `/mcp` le répertorie en tant que `claude.ai Claude Docs`. Une demande de document destiné à d'autres personnes est alors envoyée à Claude Docs au lieu d'une page d'artefact : une spécification, une proposition ou une rédaction du plan que vous avez élaboré au cours de la session. Claude vous donne le lien du document lorsqu'il est rédigé.341Claude Docs se connecte à Claude Code en tant que [connecteur](https://code.claude.com/docs/fr/mcp.md#use-mcp-servers-from-claude-ai) claude.ai plutôt qu'en tant que commande. Lorsqu'il est connecté, `/mcp` le répertorie en tant que `claude.ai Claude Docs`. Une demande de document destiné à d'autres personnes est alors envoyée à Claude Docs au lieu d'une page d'artefact : une spécification, une proposition ou une rédaction du plan que vous avez élaboré au cours de la session. Claude vous donne le lien du document lorsqu'il est rédigé.

342 342 

343Un document qui appartient à la base de code, comme un README, reste un fichier. Pour obtenir un fichier pour quelque chose que Claude mettrait autrement dans Claude Docs, nommez le format, par exemple `.docx` ou un fichier Markdown dans le référentiel.343Un document qui appartient à la base de code, comme un README, reste un fichier. Pour obtenir un fichier pour quelque chose que Claude mettrait autrement dans Claude Docs, nommez le format, par exemple `.docx` ou un fichier Markdown dans le dépôt. Pour désactiver uniquement le connecteur `claude.ai Claude Docs`, consultez [Désactiver les connecteurs claude.ai](https://code.claude.com/docs/fr/mcp.md#disable-claude-ai-connectors).

344 

345Pour désactiver le connecteur, ajoutez `claude.ai Claude Docs` à `deniedMcpServers` ou utilisez le bouton bascule `/mcp`, tous deux décrits dans [Désactiver les connecteurs claude.ai](https://code.claude.com/docs/fr/mcp.md#disable-claude-ai-connectors).

346 344 

347## Contraintes de page345## Contraintes de page

348 346 

Details

458 458 

459#### Effet des clés de hook et de skill dans les paramètres parents459#### Effet des clés de hook et de skill dans les paramètres parents

460 460 

461Si vous transmettez `disableAllHooks: true` comme paramètre parent via l'option `managedSettings` de l'Agent SDK, tous les hooks ne s'arrêtent pas. Vos [callbacks de hook du SDK](https://code.claude.com/docs/fr/agent-sdk/hooks.md) s'exécutent toujours, tout comme les hooks de l'administrateur, que votre application ne peut pas désactiver.461Les clés que votre application transmet dans l'option [`managedSettings`](https://code.claude.com/docs/fr/agent-sdk/typescript#options) de l'Agent SDK sont des paramètres parents. Sur une machine où un administrateur déploie des paramètres gérés, Claude Code ignore les paramètres parents sauf si l'administrateur [autorise un hôte d'intégration à ajouter une politique](https://code.claude.com/docs/fr/managed-settings.md#let-an-embedding-host-add-policy).

462 462 

463Sur une machine où un administrateur déploie des paramètres gérés, Claude Code ignore les paramètres parents sauf si l'administrateur [autorise un hôte d'intégration à ajouter une politique](https://code.claude.com/docs/fr/managed-settings.md#let-an-embedding-host-add-policy).463Si vous transmettez [`disableAllHooks: true`](https://code.claude.com/docs/fr/settings-reference#disableallhooks) dans `managedSettings` :

464 

465* **S'arrêtent** : les hooks utilisateur, de projet et locaux, ainsi que les hooks déclarés dans le frontmatter d'un agent ou dans l'[option `settings`](https://code.claude.com/docs/fr/agent-sdk/typescript#options) du SDK.

466* **Continuent de s'exécuter** : les [callbacks de hook du SDK](https://code.claude.com/docs/fr/agent-sdk/hooks.md) de votre application et les hooks d'un administrateur issus des paramètres gérés. Votre application ne peut pas désactiver les hooks de l'administrateur.

464 467 

465| Ce que vous transmettez | Ce qui se passe |468| Ce que vous transmettez | Ce qui se passe |

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

467| `disableAllHooks: true` | Traité comme `allowManagedHooksOnly: true` ; les hooks listés comme [bloqués sous `allowManagedHooksOnly`](https://code.claude.com/docs/fr/settings-reference#what-runs-under-allowmanagedhooksonly) s'arrêtent donc, tout comme les hooks de l'[option `settings`](https://code.claude.com/docs/fr/agent-sdk/typescript#options) du SDK. |470| `hooks`, ou `allowedHttpHookUrls` ou `httpHookAllowedEnvVars` avec des entrées | Claude Code ignore la clé. Utilisez plutôt l'option `settings` du SDK. |

468| [`disableSkillShellExecution: true`](https://code.claude.com/docs/fr/settings-reference#disableskillshellexecution) | Prend effet. |

469| `allowedHttpHookUrls: []` | Prend effet sauf si l'administrateur définit `hooks` ou active un plugin. Aucun hook HTTP ne s'exécute, sauf pour les URL listées par une autre source de paramètres. |471| `allowedHttpHookUrls: []` | Prend effet sauf si l'administrateur définit `hooks` ou active un plugin. Aucun hook HTTP ne s'exécute, sauf pour les URL listées par une autre source de paramètres. |

470| `httpHookAllowedEnvVars: []` | Prend effet sauf si l'administrateur définit `hooks` ou active un plugin. Les en-têtes des hooks HTTP ne peuvent inclure que les variables d'environnement listées par une autre source de paramètres. |472| `httpHookAllowedEnvVars: []` | Prend effet sauf si l'administrateur définit `hooks` ou active un plugin. Les en-têtes des hooks HTTP ne peuvent inclure que les variables d'environnement listées par une autre source de paramètres. |

471| `allowedHttpHookUrls` ou `httpHookAllowedEnvVars` avec des entrées | Claude Code l'ignore, car la fusion élargirait la liste d'un administrateur. Utilisez plutôt l'option `settings` du SDK. |473| [`disableSkillShellExecution: true`](https://code.claude.com/docs/fr/settings-reference#disableskillshellexecution) | Prend effet. |

472 474 

473La transmission de ces clés dans `managedSettings` nécessite Claude Code v2.1.309 ou ultérieur, ou le TypeScript Agent SDK v0.3.309 ou ultérieur.475La transmission de ces clés dans `managedSettings` nécessite Claude Code v2.1.309 ou ultérieur, ou le TypeScript Agent SDK v0.3.309 ou ultérieur.

474 476 

Details

8 8 

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

10>10>

11> Les sessions cloud sont disponibles sur les plans Pro, Max et Team, ainsi que pour les utilisateurs Enterprise disposant de sièges premium ou de sièges Chat + Claude Code. Si votre organisation Enterprise gère votre accès avec des [rôles personnalisés](https://support.claude.com/en/articles/13930452), vous avez également besoin d'un rôle qui inclut la permission des sessions cloud. Demandez à un Owner de vérifier vos rôles et de l'ajouter dans [**Organization settings > Roles**](https://claude.ai/admin-settings/roles) s'il est manquant.11> Les sessions cloud sont disponibles sur les plans Pro, Max et Team, ainsi que pour les utilisateurs Enterprise disposant de sièges premium ou de sièges Chat + Claude Code. Si des [rôles personnalisés](https://support.claude.com/en/articles/13930452) régissent votre accès, vous avez également besoin d'un rôle qui inclut la permission des sessions cloud pour démarrer des sessions sur l'infrastructure d'Anthropic depuis le navigateur, les applications ou le terminal. Demandez à un Owner de l'ajouter à l'un de vos rôles dans [**Organization settings > Roles**](https://claude.ai/admin-settings/roles).

12 12 

13Une session cloud est une session Claude Code qui s'exécute sur l'infrastructure cloud au lieu de sur votre machine. Par défaut, elle s'exécute sur l'infrastructure gérée par Anthropic, ou sur l'[environnement auto-hébergé](https://code.claude.com/docs/fr/self-hosted-environments) de votre organisation lorsqu'elle y est acheminée. La session continue de s'exécuter après que vous fermiez votre ordinateur portable, et vous pouvez la vérifier ou la diriger depuis n'importe quel appareil. Elle est comptabilisée dans les limites d'utilisation de votre plan, avec le reste de votre utilisation de Claude et de Claude Code, et la VM cloud ne fait l'objet d'aucune facturation séparée.13Une session cloud est une session Claude Code qui s'exécute sur l'infrastructure cloud au lieu de sur votre machine. Par défaut, elle s'exécute sur l'infrastructure gérée par Anthropic, ou sur l'[environnement auto-hébergé](https://code.claude.com/docs/fr/self-hosted-environments) de votre organisation lorsqu'elle y est acheminée. La session continue de s'exécuter après que vous fermiez votre ordinateur portable, et vous pouvez la vérifier ou la diriger depuis n'importe quel appareil. Elle est comptabilisée dans les limites d'utilisation de votre plan, avec le reste de votre utilisation de Claude et de Claude Code, et la VM cloud ne fait l'objet d'aucune facturation séparée.

14 14 

Details

109 109 

110#### Ajouter un secret110#### Ajouter un secret

111 111 

112Vous ajoutez les secrets un à la fois, et vous ne pouvez pas modifier un secret après l'avoir ajouté. Pour modifier les hôtes ou la valeur d'un secret, supprimez-le et ajoutez-le à nouveau.112Vous ajoutez les secrets un à la fois. Pour modifier les hôtes ou la valeur d'un secret, supprimez-le et ajoutez-le à nouveau.

113 113 

114Pour ajouter un secret à un [environnement partagé](#organization-shared-environments), ouvrez-le pour modification à partir de la page **Cloud environments** dans les [paramètres d'administration](https://claude.ai/admin-settings), puis poursuivez à partir de l'étape 2 dans sa section **Network secrets**. Si vous êtes sur un plan Team et ne détenez pas de [rôle d'administrateur d'organisation](#requirements), suivez l'étape 1 sur votre propre environnement, puis [remplissez le formulaire plus court](#add-a-secret-without-the-role).114Pour ajouter un secret à un [environnement partagé](#organization-shared-environments), ouvrez-le pour modification à partir de la page **Cloud environments** dans les [paramètres d'administration](https://claude.ai/admin-settings), puis poursuivez à partir de l'étape 2 dans sa section **Network secrets**. Si vous êtes sur un plan Team et ne détenez pas de [rôle d'administrateur d'organisation](#requirements), suivez l'étape 1 sur votre propre environnement, puis [remplissez le formulaire plus court](#add-a-secret-without-the-role).

115 115 


119 119 

120**2. Ajouter le secret**120**2. Ajouter le secret**

121 121 

122Sélectionnez **Add secret** et remplissez le formulaire. Conservez le **Secret type** par défaut, **Bearer**, pour une clé API qui voyage dans un en-tête de requête, et remplissez ces champs :122Sélectionnez **Add secret**, libellé **Add** dans les paramètres d'administration, et remplissez le formulaire. Conservez le **Secret type** par défaut, **Bearer**, pour une clé API qui voyage dans un en-tête de requête, et remplissez ces champs :

123 123 

124* **Name** : une étiquette pour le secret, comme `Internal billing API`124* **Name** : une étiquette pour le secret, comme `Internal billing API`

125* **Allowed websites** : les hôtes de l'API, comme `api.example.com`. Un `*.` initial correspond à chaque sous-domaine125* **Allowed websites** : les hôtes de l'API, comme `api.example.com`. Un `*.` initial correspond à chaque sous-domaine


443 443 

444### Exigences du script444### Exigences du script

445 445 

446Un script de configuration a trois contraintes à contourner :446Un script de configuration a quatre contraintes à contourner :

447 447 

448* **Quitter zéro** : si le script quitte non-zéro, la session échoue à démarrer. Ajoutez `|| true` aux commandes non critiques afin qu'une défaillance d'installation intermittente ne bloque pas la session.448* **Quitter zéro** : si le script quitte non-zéro, la session échoue à démarrer. Ajoutez `|| true` aux commandes non critiques afin qu'une défaillance d'installation intermittente ne bloque pas la session.

449* **Terminer en cinq minutes** : gardez le temps d'exécution total du script sous environ cinq minutes afin que le [cache d'environnement](#environment-caching) puisse se construire. Quand la configuration prend plus de temps que cela, l'environnement n'est pas mis en cache. Exécutez les installations indépendantes en parallèle avec `&` et `wait`, et déplacez tout téléchargement unique qui ne rentre pas dans un crochet [SessionStart](#setup-scripts-vs-sessionstart-hooks) qui le lance en arrière-plan. Si les nouvelles sessions se figent ou échouent pendant la configuration, consultez [Les nouvelles sessions se figent ou expirent pendant la configuration](https://code.claude.com/docs/fr/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).449* **Terminer en cinq minutes** : gardez le temps d'exécution total du script sous environ cinq minutes afin que le [cache d'environnement](#environment-caching) puisse se construire. Quand la configuration prend plus de temps que cela, l'environnement n'est pas mis en cache. Exécutez les installations indépendantes en parallèle avec `&` et `wait`, et déplacez tout téléchargement unique qui ne rentre pas dans un crochet [SessionStart](#setup-scripts-vs-sessionstart-hooks) qui le lance en arrière-plan. Si les nouvelles sessions se figent ou échouent pendant la configuration, consultez [Les nouvelles sessions se figent ou expirent pendant la configuration](https://code.claude.com/docs/fr/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).

450* **Accès réseau pour les installations** : les installations de paquets doivent atteindre les registres. Le niveau **Trusted** par défaut couvre les [registres de paquets courants](#default-allowed-domains) incluant npm, PyPI, RubyGems et crates.io ; avec un accès réseau **None**, les installations échouent.450* **Accès réseau pour les installations** : les installations de paquets doivent atteindre les registres. Le niveau **Trusted** par défaut couvre les [registres de paquets courants](#default-allowed-domains) incluant npm, PyPI, RubyGems et crates.io ; avec un accès réseau **None**, les installations échouent.

451* **Les variables de l'environnement ne sont pas encore définies** : le script s'exécute avant que la session ne définisse les [variables d'environnement](#set-environment-variables) de l'environnement. Définissez toute valeur dont le script a besoin dans le script lui-même.

451 452 

452### Mise en cache d'environnement453### Mise en cache d'environnement

453 454 

Details

123 123 

124Lorsqu'une revue n'applique pas un fichier inclus, vérifiez chacun des points suivants :124Lorsqu'une revue n'applique pas un fichier inclus, vérifiez chacun des points suivants :

125 125 

126* **Emplacement** : déplacez le fichier à la racine du dépôt. Un chemin vers un sous-répertoire tel que `@docs/review-rules.md` n'est pas inclus.126* **Emplacement** : déplacez le fichier à la racine du dépôt. À l'exception d'un [fichier de skill](#include-a-skill-file), un chemin vers un sous-répertoire tel que `@docs/review-rules.md` n'est pas inclus.

127* **Nom** : faites correspondre exactement le nom du fichier, casse comprise, et utilisez un nom sans espaces. Une ligne dont le nom ne correspond à aucun fichier situé à côté de `REVIEW.md` reste dans `REVIEW.md` sous forme de texte brut, et le check run ne la signale pas comme une inclusion ignorée.127* **Nom** : faites correspondre exactement le nom du fichier, casse comprise, et utilisez un nom sans espaces. Une ligne dont le nom ne correspond à aucun fichier situé à côté de `REVIEW.md` reste dans `REVIEW.md` sous forme de texte brut, et le check run ne la signale pas comme une inclusion ignorée.

128* **Un seul niveau** : listez chaque fichier dans le `REVIEW.md` racine. Une ligne `@` dans un fichier inclus ou dans un `REVIEW.md` de sous-répertoire reste sous forme de texte brut, et un lien Markdown vers un autre fichier ne constitue pas une inclusion.128* **Un seul niveau** : listez chaque fichier dans le `REVIEW.md` racine. Une ligne `@` dans un fichier inclus ou dans un `REVIEW.md` de sous-répertoire reste sous forme de texte brut ([les fichiers de skill font exception](#include-a-skill-file)), et un lien Markdown vers un autre fichier ne constitue pas une inclusion.

129* **Limites** : incluez au maximum huit fichiers différents, et maintenez `REVIEW.md` et les fichiers qu'il inclut sous 150 000 octets au total. Un fichier qui atteindrait la limite d'octets est ignoré en entier, et non tronqué. Le check run indique combien de lignes d'inclusion il a ignorées pour l'une ou l'autre limite.129* **Limites** : incluez au maximum huit fichiers différents, et maintenez `REVIEW.md` et les fichiers qu'il inclut sous 150 000 octets au total. Un fichier qui atteindrait la limite d'octets est ignoré en entier, et non tronqué. Le check run indique combien de lignes d'inclusion il a ignorées pour l'une ou l'autre limite.

130* **Liens** : limitez les liens Markdown à 64 au maximum dans `REVIEW.md` et les fichiers qu'il inclut. Les liens vers des adresses `http`, `https` ou `mailto` et vers des ancres `#` ne sont pas comptés. Au-delà de cette limite, la revue ignore l'ensemble de votre `REVIEW.md` racine, et pas seulement les fichiers inclus. Le check run [indique alors que les instructions n'ont pas été appliquées](https://code.claude.com/docs/fr/code-review-troubleshooting.md#the-check-run-mentions-review-md).130* **Liens** : limitez les liens Markdown à 64 au maximum dans `REVIEW.md` et les fichiers qu'il inclut. Les liens vers des adresses `http`, `https` ou `mailto` et vers des ancres `#` ne sont pas comptés, pas plus que les liens présents dans un [fichier de skill](#include-a-skill-file). Au-delà de cette limite, la revue ignore l'ensemble de votre `REVIEW.md` racine, et pas seulement les fichiers inclus. Le check run [indique alors que les instructions n'ont pas été appliquées](https://code.claude.com/docs/fr/code-review-troubleshooting.md#the-check-run-mentions-review-md).

131* **Copie fusionnée** : fusionnez le fichier inclus dans la [branche depuis laquelle `REVIEW.md` est lu](#which-branch-review-md-is-read-from). La revue lit les deux depuis le même commit, jamais depuis les modifications de la pull request elle-même.131* **Copie fusionnée** : fusionnez le fichier inclus dans la [branche depuis laquelle `REVIEW.md` est lu](#which-branch-review-md-is-read-from). La revue lit les deux depuis le même commit, jamais depuis les modifications de la pull request elle-même.

132 132 

133### Inclure un fichier de skill

134 

135Pour que les revues suivent des consignes que vous conservez dans un [skill](https://code.claude.com/docs/fr/skills.md), incluez le `SKILL.md` du skill dans votre `REVIEW.md` racine. Code Review n'exécute pas les skills.

136 

137Ajoutez `@` suivi du chemin vers `SKILL.md`, sous la forme `.claude/skills/<folder>/SKILL.md`, sur une ligne à part :

138 

139```markdown theme={null}

140# Review instructions

141 

142Report at most five Nits per review.

143 

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

145 

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

147```

148 

149Protégez la [branche depuis laquelle `REVIEW.md` est lu](#which-branch-review-md-is-read-from), car Code Review n'inclut un fichier de skill que lorsqu'il lit `REVIEW.md` depuis une branche protégée. Le fichier de skill est pris en compte dans les limites de huit fichiers et de 150 000 octets, et possède sa propre limite de 30 000 octets.

150 

151#### Rédiger une ligne de skill que Code Review inclut

152 

153Utilisez un nom de dossier sans espaces. Une ligne dont le chemin contient un espace reste dans `REVIEW.md` sous forme de texte brut, et le check run ne la signale pas comme une inclusion ignorée.

154 

155Si la ligne `@` d'un skill enfreint l'une des règles ci-dessous, Code Review n'inclut pas le skill depuis cette ligne :

156 

157* **Chemin** : écrivez le chemin sous la forme `.claude/skills/<folder>/SKILL.md` depuis la racine du dépôt, avec le dossier du skill placé directement sous `skills/`. Contrairement à un nom de fichier à la racine, un chemin de cette forme qui ne correspond à aucun fichier est ignoré et comptabilisé.

158* **Source** : copiez les consignes provenant de tout autre fichier sous `.claude/`, ou d'un [skill intégré, personnel ou de plugin](https://code.claude.com/docs/fr/skills.md#where-skills-live), dans un fichier situé à côté de `REVIEW.md`. Vous ne pouvez pas les inclure directement.

159* **Fichier** : faites un commit de `SKILL.md` en tant que fichier texte ordinaire. Code Review ne suit pas les liens symboliques, que le lien soit le fichier lui-même ou un dossier de son chemin.

160* **Taille** : maintenez `SKILL.md` à 30 000 octets au maximum, frontmatter compris

161* **Nombre** : écrivez au maximum huit lignes de skill. Une ligne répétée est comptée à nouveau dans ces huit.

162* **Blocs dans `REVIEW.md`** : placez la ligne `@` en dehors des blocs de code. Fermez chaque commentaire HTML et chaque bloc `<pre>`, `<script>`, `<style>` ou `<textarea>` situé au-dessus.

163 

164Lorsque Code Review ignore une ligne de skill parce qu'elle enfreint la règle Fichier, Taille, Nombre ou Blocs, le [message du check run concernant les lignes d'inclusion ignorées](https://code.claude.com/docs/fr/code-review-troubleshooting.md#the-check-run-mentions-review-md) la comptabilise. Ce message n'apparaît que lorsque la revue applique `REVIEW.md` depuis une branche protégée.

165 

166#### Vérifier ce qu'une revue obtient d'un skill

167 

168Lorsque le skill est inclus, une revue obtient le corps de `SKILL.md` et rien d'autre du skill ; vérifiez donc le skill à l'aide de la liste ci-dessous.

169 

170* **Frontmatter** : répétez dans le corps tout ce dont une revue a besoin provenant du [frontmatter](https://code.claude.com/docs/fr/skills.md#frontmatter-reference), par exemple les conditions d'utilisation du skill indiquées par `description`

171* **Commandes injectées** : écrivez explicitement ce qu'une [commande `!`](https://code.claude.com/docs/fr/skills#inject-dynamic-context) fournirait. Code Review n'exécute pas la commande et remplace la ligne ou le bloc entier qui la contient par un espace réservé.

172* **Substitutions** : remplacez `$ARGUMENTS` et les autres [substitutions](https://code.claude.com/docs/fr/skills.md#available-string-substitutions) par du texte fixe, car une revue ne transmet aucun argument et les laisse telles qu'elles sont écrites

173* **Fichiers annexes** : copiez dans `SKILL.md` ce dont une revue a besoin, car Code Review ne charge pas les scripts, les fichiers liés ni les références `@file`

174* **Exclusions et plafonds de Nits** : écrivez les instructions qui excluent des résultats ou plafonnent les Nits dans `REVIEW.md` ou dans un fichier situé à côté, et non dans le skill. Code Review n'accepte le texte d'un skill comme motif ni pour l'un ni pour l'autre.

175* **Liens vers des fichiers du dépôt** : indiquez en toutes lettres ce vers quoi pointe un lien ou une référence `@file`. La revue voit le chemin sous forme de texte brut ou d'espace réservé.

176 

177Si vous modifiez les commandes `!`, `$ARGUMENTS` ou les liens du skill, vous modifiez également son fonctionnement dans Claude Code. Si votre équipe s'appuie sur ces éléments, copiez les consignes dans un fichier situé à côté de `REVIEW.md` et incluez ce fichier à la place du skill.

178 

179#### Caractères que Code Review modifie dans le texte d'un skill

180 

181Code Review modifie certains caractères dans le texte du skill ; vos exemples de code parviennent donc à une revue sous la forme ci-dessous.

182 

183```text theme={null}

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

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

186 

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

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

189```

190 

191Lorsqu'une règle dépend de l'un de ces caractères, énoncez-la également en toutes lettres.

192 

133### Depuis quelle branche REVIEW\.md est lu193### Depuis quelle branche REVIEW\.md est lu

134 194 

135Code Review lit `REVIEW.md` depuis la branche de base de la pull request ou depuis la branche par défaut, jamais depuis les modifications de la pull request elle-même. Pour modifier le comportement de la revue, fusionnez d'abord la modification de `REVIEW.md`.195Code Review lit `REVIEW.md` depuis la branche de base de la pull request ou depuis la branche par défaut, jamais depuis les modifications de la pull request elle-même. Pour modifier le comportement de la revue, fusionnez d'abord la modification de `REVIEW.md`.


140* Exclure des chemins, des fichiers ou des catégories de problèmes200* Exclure des chemins, des fichiers ou des catégories de problèmes

141* Plafonner les commentaires de type nit201* Plafonner les commentaires de type nit

142 202 

203Écrivez les exclusions et les plafonds de Nits dans `REVIEW.md` ou dans un fichier situé à côté, et non dans un [skill inclus](#include-a-skill-file).

204 

143#### Ce qui compte comme protection de branche205#### Ce qui compte comme protection de branche

144 206 

145Code Review considère ces paramètres comme une protection :207Code Review considère ces paramètres comme une protection :

Details

67 67 

68## Le check run mentionne REVIEW\.md68## Le check run mentionne REVIEW\.md

69 69 

70Voici trois des messages qu'un check run peut afficher à propos de `REVIEW.md` :70Voici quatre des messages qu'un check run peut afficher à propos de `REVIEW.md` :

71 71 

72* **« This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes. »** : la revue a lu uniquement le fichier racine. Consultez [Depuis quelle branche REVIEW.md est lu](https://code.claude.com/docs/fr/code-review-customize.md#which-branch-review-md-is-read-from) pour savoir ce que change la protection de la branche.72* **« This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes. »** : la revue a lu uniquement le fichier racine. Consultez [Depuis quelle branche REVIEW.md est lu](https://code.claude.com/docs/fr/code-review-customize.md#which-branch-review-md-is-read-from) pour savoir ce que change la protection de la branche.

73* **« were not applied to this review: branch protection could not be confirmed »** : la revue n'a lu aucun `REVIEW.md`.73* **« were not applied to this review: branch protection could not be confirmed »** : la revue n'a lu aucun `REVIEW.md`.


75 * **Trop de liens** : il contient plus de 64 liens Markdown. Réduisez les liens à [64 ou moins](https://code.claude.com/docs/fr/code-review-customize.md#include-other-files-in-review-md).75 * **Trop de liens** : il contient plus de 64 liens Markdown. Réduisez les liens à [64 ou moins](https://code.claude.com/docs/fr/code-review-customize.md#include-other-files-in-review-md).

76 * **Un lien que la revue ne peut pas analyser** : il contient un lien Markdown mal formé. Corrigez ou supprimez le lien.76 * **Un lien que la revue ne peut pas analyser** : il contient un lien Markdown mal formé. Corrigez ou supprimez le lien.

77 * **Un lien vers un fichier modifié** : il pointe vers un fichier ou un dossier que cette pull request modifie, et la revue n'a pas pu exclure uniquement les lignes contenant ce lien. Rédigez la règle directement dans `REVIEW.md`.77 * **Un lien vers un fichier modifié** : il pointe vers un fichier ou un dossier que cette pull request modifie, et la revue n'a pas pu exclure uniquement les lignes contenant ce lien. Rédigez la règle directement dans `REVIEW.md`.

78* **« include line(s) in the root REVIEW\.md were skipped on this review »** : votre `REVIEW.md` racine a été appliqué, mais pas les fichiers désignés par ces lignes. Vérifiez les listes sous [Inclure d'autres fichiers dans REVIEW.md](https://code.claude.com/docs/fr/code-review-customize.md#include-other-files-in-review-md) et, pour un skill, sous [Inclure un fichier de skill](https://code.claude.com/docs/fr/code-review-customize.md#include-a-skill-file).

78 79 

79## Problèmes de configuration80## Problèmes de configuration

80 81 

desktop.md +2 −2

Details

844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/fr/env-vars#variables) ou [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/fr/env-vars#variables) | Définissez-la à [l'un des endroits où vous définiriez une variable pour les serveurs de développement](#set-environment-variables-for-dev-servers), puis quittez et rouvrez Desktop |844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/fr/env-vars#variables) ou [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/fr/env-vars#variables) | Définissez-la à [l'un des endroits où vous définiriez une variable pour les serveurs de développement](#set-environment-variables-for-dev-servers), puis quittez et rouvrez Desktop |

845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` ou une autre variable que Desktop définit lui-même | Consultez [Variables d'environnement que Desktop définit lui-même](#environment-variables-desktop-sets-itself) |845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL` ou une autre variable que Desktop définit lui-même | Consultez [Variables d'environnement que Desktop définit lui-même](#environment-variables-desktop-sets-itself) |

846 846 

847Sous macOS ou Linux, si vous avez déjà défini votre variable avec `export` dans `~/.zshrc` ou `~/.bashrc`, consultez [Variable exportée absente ou incorrecte dans les commandes que Claude exécute](#exported-variable-missing-or-wrong-in-commands-claude-runs).847Sous macOS ou Linux, si une variable que vous avez définie avec `export` est manquante ou incorrecte dans une commande exécutée par Claude, consultez [Variable exportée manquante ou incorrecte dans les commandes exécutées par Claude](#exported-variable-missing-or-wrong-in-commands-claude-runs).

848 848 

849#### Définir des variables d'environnement pour les sessions locales849#### Définir des variables d'environnement pour les sessions locales

850 850 


908 908 

909**4. Utiliser un environnement enregistré**909**4. Utiliser un environnement enregistré**

910 910 

911Ajoutez la variable à un [environnement local enregistré](#set-environment-variables-for-local-sessions), puis démarrez une nouvelle session à partir de cet environnement. Pour une variable telle que `PATH` ou `CLAUDE_CONFIG_DIR`, suivez plutôt [ses propres instructions](#environment-variables-in-local-sessions).911Ajoutez la variable à un [environnement local enregistré](#set-environment-variables-for-local-sessions), puis démarrez une nouvelle session à partir de cet environnement. Pour une variable telle que `PATH`, `CLAUDE_CONFIG_DIR` ou `API_TIMEOUT_MS`, suivez plutôt [ses propres instructions](#environment-variables-in-local-sessions).

912 912 

913Avant la v2.1.304, Claude Code ne transmet pas les variables exportées aux commandes : [vérifiez donc quelle version la session exécute](#claude-code-version-in-the-code-tab).913Avant la v2.1.304, Claude Code ne transmet pas les variables exportées aux commandes : [vérifiez donc quelle version la session exécute](#claude-code-version-in-the-code-tab).

914 914 

Details

15 15 

16Cette page couvre les tâches planifiées locales ; pour les tâches planifiées cloud et leurs options de déclenchement, consultez [Automatiser le travail avec des tâches planifiées](https://code.claude.com/docs/fr/routines.md).16Cette page couvre les tâches planifiées locales ; pour les tâches planifiées cloud et leurs options de déclenchement, consultez [Automatiser le travail avec des tâches planifiées](https://code.claude.com/docs/fr/routines.md).

17 17 

18> [!NOTE]

19>

20> Si votre application affiche la fonctionnalité sous son [ancien nom](https://code.claude.com/docs/fr/routines.md#where-the-name-routines-still-appears), cliquez sur **Routines** partout où cette page indique **Planifiées** et sur **Nouvelle routine** là où elle indique **Nouvelle tâche**.

21 

18## Comparer les options de planification22## Comparer les options de planification

19 23 

20Claude Code offre trois façons de planifier des tâches récurrentes ou ponctuelles :24Claude Code offre trois façons de planifier des tâches récurrentes ou ponctuelles :


45 49 

46**1. Ouvrir la page des tâches planifiées**50**1. Ouvrir la page des tâches planifiées**

47 51 

48Dans l'[onglet **Code**](https://code.claude.com/docs/fr/desktop.md), cliquez sur **Scheduled** dans la barre latérale ou dans le menu **More** de la barre latérale.52Dans l'[onglet **Code**](https://code.claude.com/docs/fr/desktop.md), cliquez sur **Scheduled** dans la barre latérale ou dans le menu **More** de la barre latérale. Si la barre latérale affiche **Routines** au lieu de **Scheduled**, cliquez sur **Routines**, puis sur **New routine**, et poursuivez avec [Formulaire pleine page](#full-page-form).

49 53 

50**2. Démarrer une nouvelle tâche**54**2. Démarrer une nouvelle tâche**

51 55 

52Cliquez sur **New task**. Si un menu s'ouvre avec **Create with Claude** et **Set up manually**, sélectionnez **Set up manually**. La boîte de dialogue **New scheduled task** s'ouvre. Si **Only on this computer** se trouve en haut de la boîte de dialogue, consultez [Boîte de dialogue avec Only on this computer en haut](#dialog-with-only-on-this-computer-at-the-top) avant de saisir quoi que ce soit.56Cliquez sur **New task** pour ouvrir la boîte de dialogue **New scheduled task**. Vérifiez si l'un de ces écrans apparaît avant de continuer :

57 

58* Si un menu s'ouvre avec **Create with Claude** et **Set up manually**, sélectionnez **Set up manually** pour ouvrir la boîte de dialogue.

59* Si **Only on this computer** se trouve en haut de la boîte de dialogue, consultez [Boîte de dialogue avec Only on this computer en haut](#dialog-with-only-on-this-computer-at-the-top) avant de saisir quoi que ce soit.

60* Si un menu avec **Local** et **Cloud** s'ouvre, ou si une page complète s'ouvre à la place de la boîte de dialogue, consultez [Formulaire pleine page](#full-page-form).

53 61 

54**3. Nommer la tâche**62**3. Nommer la tâche**

55 63 


99 107 

100Cliquez sur **Create**. La page de détails de la tâche s'ouvre.108Cliquez sur **Create**. La page de détails de la tâche s'ouvre.

101 109 

110### Formulaire pleine page

111 

112Si un menu avec **Local** et **Cloud** s'ouvre, sélectionnez **Local**. Une page intitulée **New local routine** ou **New local scheduled task** s'ouvre. Remplissez ses champs :

113 

114* **Name** : saisissez un nom unique parmi vos tâches.

115* **Description** : saisissez-en une.

116* **Instructions** : saisissez ce que Claude doit faire lorsque la tâche s'exécute. Dans la même zone, sélectionnez le mode de permission, le modèle et le dossier dans lequel la tâche s'exécute.

117* **Schedule** : sélectionnez l'une des [options de planification](#schedule-options).

118 

119Si **Create** n'est pas disponible, survolez-le pour voir ce qu'il manque encore au formulaire. Cliquez sur **Create** : la page de détails de la tâche s'ouvre.

120 

102## Options de planification121## Options de planification

103 122 

104Lorsque vous activez **Only on this computer** sous **Advanced settings**, la carte **Trigger** propose Hourly, Daily, Weekdays et Weekly. Pour obtenir **Manual** ou **Custom** pour une telle tâche, ouvrez son [formulaire **Edit**](#manage-scheduled-tasks) après l'avoir créée. Ce formulaire et la [boîte de dialogue avec **Only on this computer** en haut](#dialog-with-only-on-this-computer-at-the-top) proposent ces six options :123Lorsque vous activez **Only on this computer** sous **Advanced settings**, la carte **Trigger** propose Hourly, Daily, Weekdays et Weekly. Pour obtenir **Manual** ou **Custom** pour une telle tâche, ouvrez son [formulaire **Edit**](#manage-scheduled-tasks) après l'avoir créée. Ce formulaire, la [boîte de dialogue avec **Only on this computer** en haut](#dialog-with-only-on-this-computer-at-the-top) et le [formulaire pleine page](#full-page-form) proposent ces six options :

105 124 

106* **Hourly** : s'exécute toutes les heures125* **Hourly** : s'exécute toutes les heures

107* **Daily** : s'exécute chaque jour à l'heure locale que vous choisissez126* **Daily** : s'exécute chaque jour à l'heure locale que vous choisissez

env-vars.md +1 −1

Details

298| `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 |298| `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 |

299| `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 |299| `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 |

300| `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](https://code.claude.com/docs/fr/fullscreen.md), cette variable ne change pas le moteur de rendu |300| `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](https://code.claude.com/docs/fr/fullscreen.md), cette variable ne change pas le moteur de rendu |

301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Définir sur `1` pour dessiner les [éléments `Image` des mods](https://code.claude.com/docs/fr/plugins/mods/reference#elements) sous forme d'images lorsque votre terminal dessine les images du protocole graphique kitty avec des placeholders Unicode et que vous voyez toujours le texte `alt` grisé d'un `Image`. Voir [quels terminaux dessinent un `Image`](https://code.claude.com/docs/fr/plugins/mods/gallery#image-and-client) et pourquoi cette variable n'aide pas dans tmux ou screen |301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Définissez sur `1` pour dessiner les [éléments `Image` des mods](https://code.claude.com/docs/fr/plugins/mods/reference#elements) sous forme d'images lorsque votre terminal dessine les images du protocole graphique kitty avec des espaces réservés Unicode et que vous voyez toujours le texte `alt` grisé d'une `Image`. Consultez [quels terminaux dessinent une `Image` et où ne pas définir cette variable](https://code.claude.com/docs/fr/plugins/mods/gallery#image-and-client) |

302| `CLAUDE_CODE_FORK_SUBAGENT` | Contrôle le mode fork, activé par défaut, qui permet à Claude de lancer des [forks](https://code.claude.com/docs/fr/sub-agents.md#fork-the-current-conversation) de lui-même. Tant que le mode fork est activé, Claude ne peut pas non plus [attendre un sous-agent](https://code.claude.com/docs/fr/sub-agents.md#run-subagents-in-foreground-or-background) dans les sessions de terminal interactif, VS Code ou de bureau sur votre machine. Définir sur `0` pour désactiver le mode fork. Pour les versions, voir [Désactiver le mode fork](https://code.claude.com/docs/fr/sub-agents.md#turn-fork-mode-on-or-off) |302| `CLAUDE_CODE_FORK_SUBAGENT` | Contrôle le mode fork, activé par défaut, qui permet à Claude de lancer des [forks](https://code.claude.com/docs/fr/sub-agents.md#fork-the-current-conversation) de lui-même. Tant que le mode fork est activé, Claude ne peut pas non plus [attendre un sous-agent](https://code.claude.com/docs/fr/sub-agents.md#run-subagents-in-foreground-or-background) dans les sessions de terminal interactif, VS Code ou de bureau sur votre machine. Définir sur `0` pour désactiver le mode fork. Pour les versions, voir [Désactiver le mode fork](https://code.claude.com/docs/fr/sub-agents.md#turn-fork-mode-on-or-off) |

303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Définir sur `1` pour émettre le texte et les blocs de réflexion des [sous-agents](https://code.claude.com/docs/fr/sub-agents.md) dans la sortie de `claude -p --output-format stream-json`, avec le même comportement que le flag [`--forward-subagent-text`](https://code.claude.com/docs/fr/cli-reference#cli-flags). Utilisez la variable lorsqu'un harnais invoque `claude` et ne peut pas transmettre le flag lui-même. Contrairement au flag, qui termine avec une erreur en dehors du mode non interactif avec sortie stream-json, la variable y est ignorée afin que les invocations imbriquées continuent de fonctionner lorsqu'elle est définie pour l'ensemble du processus. Nécessite Claude Code v2.1.211 ou ultérieur |303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Définir sur `1` pour émettre le texte et les blocs de réflexion des [sous-agents](https://code.claude.com/docs/fr/sub-agents.md) dans la sortie de `claude -p --output-format stream-json`, avec le même comportement que le flag [`--forward-subagent-text`](https://code.claude.com/docs/fr/cli-reference#cli-flags). Utilisez la variable lorsqu'un harnais invoque `claude` et ne peut pas transmettre le flag lui-même. Contrairement au flag, qui termine avec une erreur en dehors du mode non interactif avec sortie stream-json, la variable y est ignorée afin que les invocations imbriquées continuent de fonctionner lorsqu'elle est définie pour l'ensemble du processus. Nécessite Claude Code v2.1.211 ou ultérieur |

304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Définir sur `1` pour envoyer les [en-têtes d'indication de passerelle](https://code.claude.com/docs/fr/llm-gateway-protocol.md#gateway-hint-headers), tels que `x-claude-code-request-class` et `x-claude-code-compaction`, vers un proxy personnalisé ou un fournisseur tiers tel qu'Amazon Bedrock ou Claude Platform on AWS. Définir sur `0` pour cesser de les envoyer sur toutes les connexions, y compris une connexion directe à l'API Anthropic, où Claude Code les envoie par défaut. Nécessite Claude Code v2.1.273 ou ultérieur |304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Définir sur `1` pour envoyer les [en-têtes d'indication de passerelle](https://code.claude.com/docs/fr/llm-gateway-protocol.md#gateway-hint-headers), tels que `x-claude-code-request-class` et `x-claude-code-compaction`, vers un proxy personnalisé ou un fournisseur tiers tel qu'Amazon Bedrock ou Claude Platform on AWS. Définir sur `0` pour cesser de les envoyer sur toutes les connexions, y compris une connexion directe à l'API Anthropic, où Claude Code les envoie par défaut. Nécessite Claude Code v2.1.273 ou ultérieur |

errors.md +64 −7

Details

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

318| `Error: No such tool available: <tool name>` | [Erreurs d'outil](#no-such-tool-available) |318| `Error: No such tool available: <tool name>` | [Erreurs d'outil](#no-such-tool-available) |

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

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

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

320| `would be spawned with zero tools — refusing` | [Erreurs d'outil](#agent-would-be-spawned-with-zero-tools) |322| `would be spawned with zero tools — refusing` | [Erreurs d'outil](#agent-would-be-spawned-with-zero-tools) |

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

322| `cannot contain null bytes (\0)` | [Erreurs d'outil](#path-cannot-contain-null-bytes) |324| `cannot contain null bytes (\0)` | [Erreurs d'outil](#path-cannot-contain-null-bytes) |


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

349| `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) |351| `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) |

350| `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) |352| `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) |

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

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

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

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


487 490 

488Pendant que Claude consulte le [conseiller](https://code.claude.com/docs/fr/advisor.md), la bannière apparaît après 90 secondes sans données au lieu de 20, parce qu'un long examen du conseiller peut ne rien envoyer pendant bien plus de 20 secondes. Avant v2.1.214, le seuil de 20 secondes s'appliquait également pendant les appels du conseiller, donc la bannière apparaissait pendant les examens du conseiller même lorsque rien n'allait mal.491Pendant que Claude consulte le [conseiller](https://code.claude.com/docs/fr/advisor.md), la bannière apparaît après 90 secondes sans données au lieu de 20, parce qu'un long examen du conseiller peut ne rien envoyer pendant bien plus de 20 secondes. Avant v2.1.214, le seuil de 20 secondes s'appliquait également pendant les appels du conseiller, donc la bannière apparaissait pendant les examens du conseiller même lorsque rien n'allait mal.

489 492 

493#### La bannière d'attente apparaît et disparaît derrière une passerelle

494 

495Si la bannière `Waiting for API response` apparaît et disparaît pendant que Claude réfléchit et que vous vous connectez via une passerelle, [mettez à jour Claude Code](https://code.claude.com/docs/fr/setup.md#update-claude-code) vers v2.1.309 ou ultérieur. La bannière apparaît après 45 secondes sans données sur ces connexions :

496 

497* [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/fr/env-vars) défini sur un hôte autre que l'API Anthropic, tel qu'une [passerelle LLM](https://code.claude.com/docs/fr/llm-gateway)

498* Une session [Claude apps gateway](https://code.claude.com/docs/fr/claude-apps-gateway)

499* [Claude Platform on AWS](https://code.claude.com/docs/fr/claude-platform-on-aws.md) avec `ANTHROPIC_AWS_BASE_URL` défini

500 

501Avant v2.1.309, la bannière apparaissait après 20 secondes sur ces connexions.

502 

490### Ajuster le comportement des nouvelles tentatives503### Ajuster le comportement des nouvelles tentatives

491 504 

492Vous pouvez ajuster le comportement des nouvelles tentatives avec ces variables d'environnement :505Vous pouvez ajuster le comportement des nouvelles tentatives avec ces variables d'environnement :


3256 3269 

3257**Que faire :**3270**Que faire :**

3258 3271 

3259* Dans un script ou une tâche CI, ajoutez `--trust-workspace` pour accorder votre confiance au checkout pour cette exécution uniquement : `claude ultrareview --trust-workspace`. Ajoutez-le uniquement pour du code auquel vous faites confiance, car la configuration git du checkout et les paramètres de projet Claude Code peuvent alors exécuter des programmes. Pour faire la revue d'une pull request dont vous ne faites pas confiance au code, consultez [comment en faire la revue depuis un checkout auquel vous faites confiance](https://code.claude.com/docs/fr/ultrareview.md#trust-the-folder-before-the-review-runs).3272* Dans un script ou une tâche de CI, ajoutez `--trust-workspace` pour faire confiance au dossier pour cette exécution : `claude ultrareview --trust-workspace`. Ajoutez-le uniquement pour du code auquel vous faites confiance, car git et Claude Code peuvent alors exécuter des programmes nommés dans la configuration git et les paramètres de projet du dossier. Pour une pull request dont vous ne faites pas confiance au code, [exécutez la revue depuis une branche de confiance](https://code.claude.com/docs/fr/ultrareview.md#trust-the-folder-before-the-review-runs).

3260* Sur votre propre machine, exécutez `claude` dans ce dossier et acceptez la [boîte de dialogue de confiance de l'espace de travail](https://code.claude.com/docs/fr/permissions.md#project-allow-rules-and-workspace-trust), puis exécutez à nouveau votre commande d'origine3273* Sur votre propre machine, exécutez `claude` dans ce dossier et acceptez la [boîte de dialogue de confiance de l'espace de travail](https://code.claude.com/docs/fr/permissions.md#project-allow-rules-and-workspace-trust), puis exécutez à nouveau votre commande d'origine

3261 3274 

3262Chacun de ces messages de `claude ultrareview` signifie qu'aucune revue n'a démarré et que le code de sortie est 1 :3275Chacun de ces messages de `claude ultrareview` signifie qu'aucune revue n'a démarré et que le code de sortie est 1 :


3265* **`Error: Workspace not trusted. <folder> is your home directory`** : comme la confiance accordée à votre répertoire personnel n'est jamais enregistrée, exécuter d'abord `claude` à cet endroit ne peut pas aider. Exécutez plutôt `claude ultrareview` depuis un répertoire de projet, après y avoir exécuté `claude` une fois pour accepter la boîte de dialogue de confiance, ou ajoutez `--trust-workspace`.3278* **`Error: Workspace not trusted. <folder> is your home directory`** : comme la confiance accordée à votre répertoire personnel n'est jamais enregistrée, exécuter d'abord `claude` à cet endroit ne peut pas aider. Exécutez plutôt `claude ultrareview` depuis un répertoire de projet, après y avoir exécuté `claude` une fois pour accepter la boîte de dialogue de confiance, ou ajoutez `--trust-workspace`.

3266* **`No answer in time.` suivi de `Error: Workspace not trusted`** : la question `Trust <folder>? [y/N]` est restée sans réponse pendant 5 minutes. Exécutez à nouveau `claude ultrareview` et répondez-y.3279* **`No answer in time.` suivi de `Error: Workspace not trusted`** : la question `Trust <folder>? [y/N]` est restée sans réponse pendant 5 minutes. Exécutez à nouveau `claude ultrareview` et répondez-y.

3267* **`Ultrareview did not start: <folder> is not trusted`** : vous avez refusé à la question `Trust <folder>? [y/N]`, par exemple en répondant `n` ou en appuyant sur Entrée. Pour démarrer la revue, exécutez à nouveau `claude ultrareview` et répondez `y`.3280* **`Ultrareview did not start: <folder> is not trusted`** : vous avez refusé à la question `Trust <folder>? [y/N]`, par exemple en répondant `n` ou en appuyant sur Entrée. Pour démarrer la revue, exécutez à nouveau `claude ultrareview` et répondez `y`.

3268* **``Ultrareview did not start: `--trust-workspace` takes no value``** : autre chose qu'un flag suit `--trust-workspace`, comme un numéro de PR ou `false`. Si vous ne faites pas confiance au dossier, omettez le flag. Pour lui accorder votre confiance pour cette exécution, placez le numéro de PR ou la branche de base avant le flag : `claude ultrareview 1234 --trust-workspace`.3281* **``Ultrareview did not start: `--trust-workspace` takes no value``** : autre chose qu'un flag suit `--trust-workspace`, comme un numéro de PR ou `false`. Si vous ne faites pas confiance au dossier, omettez le flag. Pour lui faire confiance pour cette exécution, placez le numéro de PR ou la branche de base avant le flag : `claude ultrareview 1234 --trust-workspace`.

3269 3282 

3270Avant la v2.1.309, `claude ultrareview` n'acceptait pas `--trust-workspace`.3283Avant la v2.1.309, `claude ultrareview` n'acceptait pas `--trust-workspace`.

3271 3284 


3526 3539 

3527Des messages voisins se déclenchent avant même l'exécution de la commande :3540Des messages voisins se déclenchent avant même l'exécution de la commande :

3528 3541 

3529* `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](https://code.claude.com/docs/fr/skills.md#permission-checks-on-injected-commands) explique quels résultats provoquent l'interruption dans chaque mode de permission et comment pré-approuver une commande avec `allowed-tools`3542* `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 des commandes injectées](https://code.claude.com/docs/fr/skills.md#permission-checks-on-injected-commands) explique quels résultats interrompent l'invocation dans chaque mode de permission et comment pré-approuver une commande avec `allowed-tools`

3530* ``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 [How injected commands run](https://code.claude.com/docs/fr/skills.md#how-injected-commands-run)3543* ``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](https://code.claude.com/docs/fr/skills.md#how-injected-commands-run)

3531* `No shell command in <name> was run` : l'une des commandes `!` du fichier contient un caractère de contrôle brut autre qu'une tabulation ou un saut de ligne, donc aucune d'elles ne s'exécute. Consultez [comment trouver et supprimer le caractère](#no-shell-command-was-run)3544* `No shell command in <name> was run` : l'une des commandes `!` du fichier contient un caractère de contrôle brut autre qu'une tabulation ou un saut de ligne, donc aucune d'elles ne s'exécute. Consultez [comment trouver et supprimer le caractère](#no-shell-command-was-run)

3532 3545 

3533**Que faire :**3546**Que faire :**


4419* Si l'action n'a pas eu lieu, demandez à Claude d'exécuter l'outil à nouveau. Vous n'avez pas besoin de reconnecter le serveur au préalable, car Claude Code s'y reconnecte lors du prochain appel à l'un de ses outils. Si cette connexion échoue également, consultez [Coupures d'un serveur distant en cours de session](https://code.claude.com/docs/fr/mcp.md#mid-session-drops-of-a-remote-server).4432* Si l'action n'a pas eu lieu, demandez à Claude d'exécuter l'outil à nouveau. Vous n'avez pas besoin de reconnecter le serveur au préalable, car Claude Code s'y reconnecte lors du prochain appel à l'un de ses outils. Si cette connexion échoue également, consultez [Coupures d'un serveur distant en cours de session](https://code.claude.com/docs/fr/mcp.md#mid-session-drops-of-a-remote-server).

4420* Si vous développez le serveur et que l'outil peut être appelé deux fois sans risque, [marquez-le comme pouvant être répété sans risque](https://code.claude.com/docs/fr/mcp.md#tool-calls-pending-when-a-connection-closes) afin que Claude Code puisse répéter un appel perdu4433* Si vous développez le serveur et que l'outil peut être appelé deux fois sans risque, [marquez-le comme pouvant être répété sans risque](https://code.claude.com/docs/fr/mcp.md#tool-calls-pending-when-a-connection-closes) afin que Claude Code puisse répéter un appel perdu

4421 4434 

4435### MCP server is disabled

4436 

4437Ce message dans un résultat d'outil signifie que Claude a appelé un outil d'un [serveur MCP](https://code.claude.com/docs/fr/mcp.md) qui est [désactivé](https://code.claude.com/docs/fr/mcp.md#disable-a-server-without-removing-it). Claude Code ne s'est pas connecté au serveur, donc l'outil ne s'est pas exécuté, et Claude a reçu ce texte à la place d'un résultat :

4438 

4439```text wrap theme={null}

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

4441```

4442 

4443**Que faire :**

4444 

4445* Si vous aviez l'intention de désactiver le serveur, vous n'avez rien à faire

4446* Si Claude a besoin des outils du serveur, réactivez-le depuis `/mcp` à l'invite de Claude Code

4447* Dans une application [Agent SDK](https://code.claude.com/docs/fr/agent-sdk/overview.md), réactivez le serveur en appelant [`toggleMcpServer()`](https://code.claude.com/docs/fr/agent-sdk/typescript#togglemcpserver) en TypeScript avec `enabled` défini sur `true`, ou [`toggle_mcp_server()`](https://code.claude.com/docs/fr/agent-sdk/python#claudesdkclient) en Python avec `enabled` défini sur `True`

4448 

4449### MCP tool call timed out with the server's question unanswered

4450 

4451En [mode non interactif](https://code.claude.com/docs/fr/headless.md), un [serveur MCP](https://code.claude.com/docs/fr/mcp.md) a demandé une saisie via l'[élicitation](https://code.claude.com/docs/fr/mcp.md#respond-to-mcp-elicitation-requests) pendant un appel d'outil, et le délai de l'appel a expiré avant qu'une réponse n'arrive :

4452 

4453```text theme={null}

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

4455```

4456 

4457Avant la v2.1.310, le résultat se terminait par `timed out after <N>s` et ne mentionnait pas la question.

4458 

4459**Que faire :**

4460 

4461* Configurez un [hook `Elicitation`](https://code.claude.com/docs/fr/hooks#elicitation) qui répond aux requêtes du serveur

4462* Dans une application Agent SDK TypeScript, faites en sorte que votre callback [`onElicitation`](https://code.claude.com/docs/fr/agent-sdk/typescript#options) renvoie sa réponse avant l'expiration du délai

4463* Pour laisser plus de temps à une réponse, définissez un [`timeout`](https://code.claude.com/docs/fr/mcp#time-limits-on-mcp-tool-calls) plus long en millisecondes dans l'entrée de configuration du serveur, par exemple `"timeout": 600000` pour 10 minutes

4464* Exécutez plutôt la tâche dans une session interactive et répondez vous-même à la [boîte de dialogue](https://code.claude.com/docs/fr/mcp.md#respond-to-mcp-elicitation-requests) du serveur

4465 

4422### Agent would be spawned with zero tools4466### Agent would be spawned with zero tools

4423 4467 

4424Chaque entrée de la liste [`tools` du sous-agent](https://code.claude.com/docs/fr/sub-agents#supported-frontmatter-fields) n'a pas correspondu à un outil utilisable, donc Claude Code a refusé de lancer le sous-agent : sans outils, il ne pouvait pas agir. Le message regroupe vos entrées par ce qui s'est mal passé :4468Chaque entrée de la liste [`tools` du sous-agent](https://code.claude.com/docs/fr/sub-agents#supported-frontmatter-fields) n'a pas correspondu à un outil utilisable, donc Claude Code a refusé de lancer le sous-agent : sans outils, il ne pouvait pas agir. Le message regroupe vos entrées par ce qui s'est mal passé :


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

4742```4786```

4743 4787 

4744Les trois autres messages suivent une commande qui s'est exécutée et s'est terminée avec un code non nul. Cet exemple correspond à la forme `Disk full:` :4788Les messages `Disk full:`, `Disk quota used up:` et `Nearly out of inodes:` suivent une commande qui s'est exécutée et s'est terminée avec un code non nul. Par exemple :

4745 4789 

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

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


4751 4795 

4752* Sur macOS et Linux, exécutez `df -h <dir>` dans votre shell pour voir quel volume contient le répertoire et à quel point il est plein. `df -i <dir>` indique combien d'inodes sont libres. `<dir>` est le répertoire que nomme votre message, comme dans `df -i /tmp/claude-501`4796* Sur macOS et Linux, exécutez `df -h <dir>` dans votre shell pour voir quel volume contient le répertoire et à quel point il est plein. `df -i <dir>` indique combien d'inodes sont libres. `<dir>` est le répertoire que nomme votre message, comme dans `df -i /tmp/claude-501`

4753* **`Disk full: this computer's volume` ou `disk is full (ENOSPC)`** : n'importe où sur ce volume, supprimez les fichiers dont vous n'avez pas besoin4797* **`Disk full: this computer's volume` ou `disk is full (ENOSPC)`** : n'importe où sur ce volume, supprimez les fichiers dont vous n'avez pas besoin

4754* **`Disk quota used up:` ou `Disk full: a test write`** : supprimez vos propres fichiers sur ce volume, même s'il affiche encore de l'espace libre4798* **`Disk quota used up:`, `disk quota is used up (EDQUOT)` ou `Disk full: a test write`** : supprimez vos propres fichiers sur ce volume, même s'il affiche encore de l'espace libre

4755* **`disk quota is used up (EDQUOT)`** : supprimez vos propres fichiers sur ce volume

4756* **`Nearly out of inodes:`** : supprimez de nombreux fichiers sur ce volume. Chacun occupe un inode quelle que soit sa taille, donc c'est leur nombre qui compte, pas leur taille4799* **`Nearly out of inodes:`** : supprimez de nombreux fichiers sur ce volume. Chacun occupe un inode quelle que soit sa taille, donc c'est leur nombre qui compte, pas leur taille

4757* Ou redémarrez Claude Code avec [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/fr/env-vars) défini sur un répertoire situé sur un volume disposant de place4800* Ou redémarrez Claude Code avec [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/fr/env-vars) défini sur un répertoire situé sur un volume disposant de place

4758* Puis demandez à Claude d'exécuter la commande à nouveau4801* Puis demandez à Claude d'exécuter la commande à nouveau


4766 4809 

4767Avant la v2.1.305, une commande que Claude Code ne pouvait pas démarrer parce que le disque était plein ne renvoyait que le texte d'erreur du système d'exploitation. Ce texte se lisait, par exemple, `ENOSPC: no space left on device, open <path>.output`.4810Avant la v2.1.305, une commande que Claude Code ne pouvait pas démarrer parce que le disque était plein ne renvoyait que le texte d'erreur du système d'exploitation. Ce texte se lisait, par exemple, `ENOSPC: no space left on device, open <path>.output`.

4768 4811 

4812### git is not installed on this Mac

4813 

4814Ce message signifie qu'une étape de Claude Code avait besoin de git, et que le git trouvé est le substitut d'Apple situé à `/usr/bin/git`. Les outils de développement qui fournissent git ne sont pas installés.

4815 

4816Claude Code ne lance pas le substitut et affiche ce texte à la place, par exemple au sein d'un message plus long :

4817 

4818```text wrap theme={null}

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

4820```

4821 

4822**Que faire :**

4823 

4824* Dans Terminal, exécutez `xcode-select --install`, terminez l'installation qu'il lance, puis réessayez ce que vous faisiez dans Claude Code

4825 

4769### File is not valid UTF-84826### File is not valid UTF-8

4770 4827 

4771Claude 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 :4828Claude 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 :

fast-mode.md +21 −11

Details

155 155 

156Avant d'offrir le mode rapide, Claude Code vérifie la disponibilité du mode rapide de votre organisation avec une demande directe à `api.anthropic.com`. La vérification ne suit pas [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential), donc sur un réseau qui achemine le trafic Claude via une [passerelle LLM](https://code.claude.com/docs/fr/llm-gateway) et bloque la sortie directe vers `api.anthropic.com`, la vérification échoue même si les demandes d'inférence fonctionnent. La vérification utilise un [proxy HTTP](https://code.claude.com/docs/fr/network-config.md#proxy-configuration) configuré, donc un blocage réseau échoue la vérification uniquement où `api.anthropic.com` est inaccessible même via le proxy.156Avant d'offrir le mode rapide, Claude Code vérifie la disponibilité du mode rapide de votre organisation avec une demande directe à `api.anthropic.com`. La vérification ne suit pas [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential), donc sur un réseau qui achemine le trafic Claude via une [passerelle LLM](https://code.claude.com/docs/fr/llm-gateway) et bloque la sortie directe vers `api.anthropic.com`, la vérification échoue même si les demandes d'inférence fonctionnent. La vérification utilise un [proxy HTTP](https://code.claude.com/docs/fr/network-config.md#proxy-configuration) configuré, donc un blocage réseau échoue la vérification uniquement où `api.anthropic.com` est inaccessible même via le proxy.

157 157 

158Lorsque la vérification échoue, `/fast` signale « Le mode rapide n'est pas disponible en raison de problèmes de connectivité réseau », et les demandes s'exécutent à vitesse standard, même si votre organisation a activé le mode rapide. Une vérification qui a réussi dans le passé continue de fonctionner à partir de son résultat en cache, donc une vérification bloquée affecte principalement les nouvelles installations.158Si votre organisation a activé le mode rapide et que `/fast` indique le contraire, trouvez le message qu'il affiche parmi les cas suivants.

159 159 

160Le même message de connectivité apparaît sur un réseau ouvert lorsque la vérification atteint `api.anthropic.com` mais présente une credential qu'Anthropic rejette. Une session dont la clé résolue est une credential émise par la passerelle, détenue dans [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential) ou produite par un [`apiKeyHelper`](https://code.claude.com/docs/fr/settings-reference#apikeyhelper), envoie la vérification avec cette clé, et la demande rejetée est signalée comme une défaillance de connectivité.160#### Fast mode unavailable due to network connectivity issues

161 161 

162Pour restaurer le mode rapide, autorisez la sortie directe vers `api.anthropic.com` où un blocage réseau est la cause, ou définissez la variable qui correspond à la façon dont la vérification échoue :162La vérification de disponibilité a échoué, par exemple parce que votre réseau bloque `api.anthropic.com`, et les requêtes s'exécutent à vitesse standard. Une vérification qui a réussi dans le passé continue de fonctionner à partir de son résultat en cache, donc une vérification bloquée affecte principalement les nouvelles installations.

163 163 

164* `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` traite une vérification échouée comme disponible et honore toujours une réponse « désactivé par votre organisation ». Utilisez-le lorsque votre réseau refuse la connexion, ou lorsqu'Anthropic rejette une credential de passerelle ; l'autorisation ne aide pas le cas de credential, puisque rien n'est bloqué.164Pour restaurer le mode rapide, autorisez la sortie directe vers `api.anthropic.com`, ou définissez `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`, qui traite une vérification échouée comme disponible et honore toujours une réponse « désactivé par votre organisation ».

165* `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` ignore complètement la vérification. Utilisez-le lorsque votre réseau intercepte la demande plutôt que de la refuser.

166 165 

167Deux configurations de passerelle signalent « Le mode rapide a été désactivé par votre organisation » plutôt que le message de connectivité, même si votre organisation a activé le mode rapide :166#### Fast mode is currently unavailable

168 167 

169* Une session qui s'authentifie avec [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential) seul ignore la vérification : sans connexion claude.ai ou clé API Anthropic, et sans vérification réussie en cache, Claude Code traite le mode rapide comme désactivé par votre organisation sans envoyer la demande.168Derrière une passerelle, vérifiez les configurations suivantes, dans lesquelles Claude Code n'envoie pas la vérification de disponibilité et n'a aucune vérification réussie antérieure en cache :

170* Un proxy qui intercepte la vérification et répond avec sa propre page, par exemple un proxy inspectant TLS renvoyant une page de blocage HTTP 200, est lu comme une réponse indiquant que votre organisation a désactivé le mode rapide.

171 169 

172Dans les deux cas, définissez `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` pour restaurer le mode rapide. `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS` ne s'applique à aucun des deux cas, puisqu'il contourne uniquement les vérifications échouées et les deux produisent une réponse désactivée à la place. L'autorisation de la sortie directe n'aide pas le cas du jeton porteur, qui n'envoie jamais la demande.170* Vous pointez `ANTHROPIC_BASE_URL` vers votre passerelle et définissez [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential) sur une clé émise par la passerelle qui n'est pas au format d'une clé API Anthropic. Claude Code ne transmet pas une telle clé à `api.anthropic.com`.

171* Vous définissez [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/fr/env-vars), donc Claude Code ignore la vérification.

173 172 

174Les variables affectent uniquement la vérification côté client. Lorsque votre organisation a désactivé le mode rapide, l'API rejette les demandes de mode rapide qu'elles soient définies ou non. Un rejet de l'API persiste même avec une variable de saut définie. Claude Code réessaie la demande rejetée à vitesse standard, désactive le mode rapide, et `/fast` signale que votre organisation a désactivé le mode rapide.173Pour restaurer le mode rapide dans l'une ou l'autre configuration, définissez `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`.

175 174 

176La définition de `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` supprime également la vérification de disponibilité. Sans vérification réussie précédemment en cache, `/fast` signale « Le mode rapide n'est actuellement pas disponible » ; les deux variables de saut restaurent le mode rapide dans cette configuration également.175#### Fast mode has been disabled by your organization

176 

177Derrière une passerelle, vous pouvez voir ce message même lorsque votre organisation a activé le mode rapide, dans l'une ou l'autre de ces configurations :

178 

179* Vous vous authentifiez uniquement avec [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential), sans connexion claude.ai, sans clé API et sans vérification réussie en cache. Claude Code traite alors le mode rapide comme désactivé par votre organisation sans envoyer la requête.

180* Un proxy intercepte la vérification et répond avec sa propre page, par exemple un proxy d'inspection TLS renvoyant une page de blocage HTTP 200. Claude Code interprète cette page comme une réponse indiquant que votre organisation a désactivé le mode rapide.

181 

182Dans les deux cas, définissez `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`, qui ignore complètement la vérification, plutôt que `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS`, qui ne s'applique à aucun des deux.

183 

184> [!NOTE]

185>

186> Les variables de contournement modifient uniquement la vérification côté client. Lorsque votre organisation a désactivé le mode rapide, l'API rejette les requêtes de mode rapide, qu'elles soient définies ou non. Claude Code réessaie alors la requête à vitesse standard, désactive le mode rapide, et `/fast` signale que votre organisation a désactivé le mode rapide.

177 187 

178### Opt-in par session188### Opt-in par session

179 189 

hooks.md +17 −6

Details

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

962```962```

963 963 

964Pour savoir pourquoi le hook a échoué, consultez le [journal de débogage](#debug-hooks). Choisissez la correction qui correspond à votre hook :964Si l'erreur indique également `PowerShell started no program`, commencez par [les corrections pour une `command` composée uniquement de chaînes entre guillemets](#powershell-started-no-program), que PowerShell imprime au lieu de les exécuter.

965 965 

966* **L'action doit se poursuivre lorsque le hook échoue** : ajoutez [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) au hook966Sans Git Bash, tout code de sortie autre que 0 ou 2 de ce hook compte comme un [échec](#block-the-action-when-a-hook-fails), même lorsqu'il imprime du JSON qui ne refuse pas l'appel. Pour savoir pourquoi le hook a échoué, consultez le [journal de débogage](#debug-hooks). Choisissez ensuite la correction qui correspond à votre hook :

967* **Le hook est écrit pour Bash** : un hook sous [forme shell](#exec-form-and-shell-form) sans `shell` défini s'exécute dans PowerShell lorsque Git Bash n'est pas installé, où un script écrit pour Bash peut ne pas s'exécuter tel quel. Installez [Git for Windows](https://git-scm.com/downloads/win), ou définissez [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/fr/env-vars) si Git Bash est installé à un endroit où Claude Code ne le trouve pas, puis démarrez une nouvelle session967 

968* **L'appel doit se poursuivre lorsque le hook échoue** : ajoutez [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) au hook

969* **Le hook quitte avec 1 pour avertir mais doit bloquer lorsqu'il plante** : avec `"onFailure": "continue"`, l'appel se poursuit sur le code de sortie 1, qu'il s'agisse d'un avertissement ou d'un plantage. Ajoutez plutôt `"onFailure": "block"`, et terminez le script avec le code de sortie 0 là où il avertit, afin que ces appels se poursuivent. Pour afficher quand même l'avertissement sur `PreToolUse`, imprimez-le sur stdout dans le champ [`systemMessage`](#json-output) d'un seul objet JSON.

970* **Le hook est écrit pour Bash** : sans Git Bash, un hook sous [forme shell](#exec-form-and-shell-form) sans `shell` défini s'exécute dans PowerShell, où il peut échouer. Installez [Git for Windows](https://git-scm.com/downloads/win), ou définissez [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/fr/env-vars) si Git Bash est installé à un endroit où Claude Code ne le trouve pas. Démarrez ensuite une nouvelle session.

968* **Le hook exécute un seul `.exe`, pas un fichier `.cmd` ou `.bat`** : placez le programme dans `command` et ses arguments dans `args` pour utiliser la forme exec, et ajoutez `"onFailure": "block"`. Claude Code démarre alors le programme sans shell. Sans `"onFailure": "block"`, l'appel peut se poursuivre lorsque le programme échoue, est absent ou expire971* **Le hook exécute un seul `.exe`, pas un fichier `.cmd` ou `.bat`** : placez le programme dans `command` et ses arguments dans `args` pour utiliser la forme exec, et ajoutez `"onFailure": "block"`. Claude Code démarre alors le programme sans shell. Sans `"onFailure": "block"`, l'appel peut se poursuivre lorsque le programme échoue, est absent ou expire

969* **Le hook quitte avec 1 pour avertir mais doit bloquer lorsqu'il plante** : avec `"onFailure": "continue"`, l'appel se poursuit sur le code de sortie 1, qu'il s'agisse d'un avertissement ou d'un plantage. Ajoutez plutôt `"onFailure": "block"`, et terminez le script avec le code de sortie 0 là où il avertit, afin que ces appels se poursuivent. Pour afficher l'avertissement sur `PreToolUse` après le code de sortie 0, imprimez-le sur stdout dans le champ [`systemMessage`](#json-output) d'un seul objet JSON

970* **Un hook de garde PowerShell qui doit bloquer en cas d'échec** : sans `onFailure` défini, il cesse de le faire une fois que Git for Windows est installé et que Claude Code trouve Git Bash. Ajoutez `"onFailure": "block"` afin qu'un échec ou un délai d'expiration bloque l'appel avec ou sans Git Bash. Définissez également `"shell": "powershell"` afin que le hook continue désormais de s'exécuter dans PowerShell plutôt que dans Git Bash972* **Un hook de garde PowerShell qui doit bloquer en cas d'échec** : sans `onFailure` défini, il cesse de le faire une fois que Git for Windows est installé et que Claude Code trouve Git Bash. Ajoutez `"onFailure": "block"` afin qu'un échec ou un délai d'expiration bloque l'appel avec ou sans Git Bash. Définissez également `"shell": "powershell"` afin que le hook continue désormais de s'exécuter dans PowerShell plutôt que dans Git Bash

971 973 

972Pour un hook qui affiche cette erreur, tout code de sortie autre que 0 ou 2 compte comme un [échec](#block-the-action-when-a-hook-fails), même lorsque le hook imprime du JSON qui ne refuse pas l'appel.

973 

974Avant la v2.1.309, le message était `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`974Avant la v2.1.309, le message était `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`

975 975 

976#### PowerShell started no program

977 

978Un hook avec cette erreur s'est exécuté dans PowerShell, qui imprime une `command` composée uniquement de chaînes entre guillemets, comme `"command": "\"C:\\Tools\\guard.exe\""`, au lieu de l'exécuter.

979 

980* **Pour imprimer du texte, comme du JSON** : définissez `"shell": "powershell"`, et le hook quitte avec 0

981* **Pour exécuter un fichier `.ps1`, `.cmd` ou `.bat`, ou un `.exe` dont le chemin contient une variable** : définissez `"shell": "powershell"` et placez `&` avant le chemin entre guillemets. Laissez `$HOME` tel quel, et écrivez les variables d'environnement comme l'[exemple `check.ps1`](#reference-scripts-by-path-in-powershell-hooks) écrit `$env:CLAUDE_PROJECT_DIR`

982* **Pour exécuter un seul `.exe` à un chemin sans `$`** : supprimez les guillemets internes de `command`, puis appliquez la [correction pour un hook qui exécute un seul `.exe`](#failed-hooks-on-windows-without-git-bash), en écrivant `"args": []` si le programme ne prend aucun argument

983* **Pour exécuter un script écrit pour Bash** : appliquez la [correction pour un hook écrit pour Bash](#failed-hooks-on-windows-without-git-bash)

984 

976#### Comportement du code de sortie 2 par événement985#### Comportement du code de sortie 2 par événement

977 986 

978Exit code 2 est la façon dont un hook signale « arrêtez, ne faites pas cela ». L'effet dépend de l'événement, car certains événements représentent des actions qui peuvent être bloquées (comme un appel d'outil qui ne s'est pas encore produit) et d'autres représentent des choses qui se sont déjà produites ou ne peuvent pas être empêchées.987Exit code 2 est la façon dont un hook signale « arrêtez, ne faites pas cela ». L'effet dépend de l'événement, car certains événements représentent des actions qui peuvent être bloquées (comme un appel d'outil qui ne s'est pas encore produit) et d'autres représentent des choses qui se sont déjà produites ou ne peuvent pas être empêchées.


4187}4196}

4188```4197```

4189 4198 

4199### Référencer des scripts par chemin dans les hooks PowerShell

4200 

4190Pour référencer la racine du projet à partir d'une commande PowerShell en forme shell, écrivez `${CLAUDE_PROJECT_DIR}` ou `$env:CLAUDE_PROJECT_DIR`. Claude Code réécrit les placeholders `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` et `${CLAUDE_PLUGIN_DATA}` dans une commande PowerShell en forme shell vers la forme `${env:NAME}` de PowerShell, que le hook soit défini dans `settings.json`, un plugin ou un skill. PowerShell résout ensuite la valeur à partir de l'environnement exporté après l'analyse, donc le placeholder fonctionne à l'intérieur des chaînes entre guillemets doubles mais pas à l'intérieur des chaînes entre guillemets simples, où PowerShell n'étend jamais les variables.4201Pour référencer la racine du projet à partir d'une commande PowerShell en forme shell, écrivez `${CLAUDE_PROJECT_DIR}` ou `$env:CLAUDE_PROJECT_DIR`. Claude Code réécrit les placeholders `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}` et `${CLAUDE_PLUGIN_DATA}` dans une commande PowerShell en forme shell vers la forme `${env:NAME}` de PowerShell, que le hook soit défini dans `settings.json`, un plugin ou un skill. PowerShell résout ensuite la valeur à partir de l'environnement exporté après l'analyse, donc le placeholder fonctionne à l'intérieur des chaînes entre guillemets doubles mais pas à l'intérieur des chaînes entre guillemets simples, où PowerShell n'étend jamais les variables.

4191 4202 

4192N'écrivez pas l'orthographe nue `$CLAUDE_PROJECT_DIR` dans un hook PowerShell. PowerShell l'analyse comme une variable locale indéfinie et la résout en `$null`, ce qui laisse le chemin du script sans son préfixe de racine de projet. Claude Code ne réécrit pas cette forme ; il enregistre plutôt un avertissement dans le [journal de débogage](#debug-hooks).4203N'écrivez pas l'orthographe nue `$CLAUDE_PROJECT_DIR` dans un hook PowerShell. PowerShell l'analyse comme une variable locale indéfinie et la résout en `$null`, ce qui laisse le chemin du script sans son préfixe de racine de projet. Claude Code ne réécrit pas cette forme ; il enregistre plutôt un avertissement dans le [journal de débogage](#debug-hooks).

jetbrains.md +1 −1

Details

61/ide61/ide

62```62```

63 63 

64Lorsque la connexion réussit, Claude Code confirme avec un message comme `Connected to IntelliJ IDEA.` Si Claude Code détecte un IDE en cours d'exécution qui n'a pas le plugin, `/ide` installe le plugin pour vous et vous demande de redémarrer l'IDE.64Lorsque la connexion réussit, Claude Code confirme avec un message comme `Connected to IntelliJ IDEA.`

65 65 

66Si vous souhaitez que Claude ait accès aux mêmes fichiers que votre IDE, démarrez Claude Code à partir du même répertoire que la racine du projet de votre IDE.66Si vous souhaitez que Claude ait accès aux mêmes fichiers que votre IDE, démarrez Claude Code à partir du même répertoire que la racine du projet de votre IDE.

67 67 

Details

519| `400` erreurs sur chaque demande, dans les propres termes de la passerelle rejetant un schéma d'entrée d'outil ou son `pattern`, sur Claude Code v2.1.265 à v2.1.267 | Dans un déploiement progressif sur ces versions, le schéma de l'[outil Artifact](https://code.claude.com/docs/fr/artifacts.md#availability) porte une expression régulière avec des classes de caractères Unicode `\p{...}`. L'API Anthropic l'accepte, mais une passerelle ou un amont qui vérifie le `pattern` de chaque schéma d'outil avec son propre moteur regex rejette la demande entière | Mettez à jour vers v2.1.268 ou ultérieur, qui n'envoie pas l'expression régulière. Sur une version affectée, [désactivez les artifacts](https://code.claude.com/docs/fr/artifacts.md#disable-artifacts), ce qui supprime l'outil et son schéma des demandes |519| `400` erreurs sur chaque demande, dans les propres termes de la passerelle rejetant un schéma d'entrée d'outil ou son `pattern`, sur Claude Code v2.1.265 à v2.1.267 | Dans un déploiement progressif sur ces versions, le schéma de l'[outil Artifact](https://code.claude.com/docs/fr/artifacts.md#availability) porte une expression régulière avec des classes de caractères Unicode `\p{...}`. L'API Anthropic l'accepte, mais une passerelle ou un amont qui vérifie le `pattern` de chaque schéma d'outil avec son propre moteur regex rejette la demande entière | Mettez à jour vers v2.1.268 ou ultérieur, qui n'envoie pas l'expression régulière. Sur une version affectée, [désactivez les artifacts](https://code.claude.com/docs/fr/artifacts.md#disable-artifacts), ce qui supprime l'outil et son schéma des demandes |

520| `400` erreurs sur chaque demande, dans les propres termes de la passerelle rejetant un type d'outil non reconnu, comme `Input tag 'advisor_20260301'`, sur Claude Code v2.1.275 | Dans un déploiement progressif sur cette version, les demandes portent une entrée d'[outil advisor](https://code.claude.com/docs/fr/advisor.md) même avec l'advisor désactivé. L'API Anthropic l'accepte, mais une passerelle ou un amont qui valide les types d'outil rejette la demande entière ; celui qui [transfère les champs du corps de la demande sans modification](https://code.claude.com/docs/fr/llm-gateway-protocol.md#forward-as-open-lists) la transmet sans être affecté. L'entrée est une déclaration qui ne porte aucun contenu de conversation | Mettez à jour vers v2.1.276 ou ultérieur, qui n'envoie pas l'entrée derrière une passerelle `ANTHROPIC_BASE_URL` à moins que vous n'activiez l'advisor. Sur v2.1.275, définissez [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/fr/env-vars), qui supprime l'entrée des demandes |520| `400` erreurs sur chaque demande, dans les propres termes de la passerelle rejetant un type d'outil non reconnu, comme `Input tag 'advisor_20260301'`, sur Claude Code v2.1.275 | Dans un déploiement progressif sur cette version, les demandes portent une entrée d'[outil advisor](https://code.claude.com/docs/fr/advisor.md) même avec l'advisor désactivé. L'API Anthropic l'accepte, mais une passerelle ou un amont qui valide les types d'outil rejette la demande entière ; celui qui [transfère les champs du corps de la demande sans modification](https://code.claude.com/docs/fr/llm-gateway-protocol.md#forward-as-open-lists) la transmet sans être affecté. L'entrée est une déclaration qui ne porte aucun contenu de conversation | Mettez à jour vers v2.1.276 ou ultérieur, qui n'envoie pas l'entrée derrière une passerelle `ANTHROPIC_BASE_URL` à moins que vous n'activiez l'advisor. Sur v2.1.275, définissez [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/fr/env-vars), qui supprime l'entrée des demandes |

521| Modèles manquants du sélecteur `/model` | Les noms de modèle de passerelle ne sont pas dans la liste intégrée de Claude Code, ou Claude Code affiche une ligne [`modelPicker`](https://code.claude.com/docs/fr/settings-reference#modelpicker) qui remplace les options intégrées | Activez la [découverte de modèle de passerelle](#add-gateway-models-to-the-model-picker) ou ajoutez des noms avec les variables de [configuration de modèle](https://code.claude.com/docs/fr/model-config.md). Si Claude Code affiche une ligne `modelPicker` de remplacement, ajoutez les modèles de passerelle à celle-ci, ou demandez à votre administrateur de les ajouter quand les paramètres gérés le fournissent |521| Modèles manquants du sélecteur `/model` | Les noms de modèle de passerelle ne sont pas dans la liste intégrée de Claude Code, ou Claude Code affiche une ligne [`modelPicker`](https://code.claude.com/docs/fr/settings-reference#modelpicker) qui remplace les options intégrées | Activez la [découverte de modèle de passerelle](#add-gateway-models-to-the-model-picker) ou ajoutez des noms avec les variables de [configuration de modèle](https://code.claude.com/docs/fr/model-config.md). Si Claude Code affiche une ligne `modelPicker` de remplacement, ajoutez les modèles de passerelle à celle-ci, ou demandez à votre administrateur de les ajouter quand les paramètres gérés le fournissent |

522| `/fast` signale `Fast mode unavailable due to network connectivity issues` tandis que les demandes d'inférence fonctionnent | La vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) va directement à `api.anthropic.com` et ne suit pas `ANTHROPIC_BASE_URL`, de sorte que l'accès direct sortant bloqué échoue à la vérification. Le même message apparaît sur un réseau ouvert quand la vérification présente une clé émise par passerelle de `ANTHROPIC_API_KEY` ou d'un `apiKeyHelper` et Anthropic la rejette | Mettez en liste blanche `api.anthropic.com` si l'accès sortant est bloqué, ou définissez une variable de saut ; pour une clé de passerelle rejetée, seules les variables de saut aident. Voir [utiliser le mode rapide derrière les proxies et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` signale `Fast mode unavailable due to network connectivity issues` tandis que les requêtes d'inférence fonctionnent | La vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) va directement à `api.anthropic.com` et ne suit pas `ANTHROPIC_BASE_URL`, de sorte que le blocage de l'accès direct sortant fait échouer la vérification | Ajoutez `api.anthropic.com` à la liste d'autorisation si l'accès sortant est bloqué, ou définissez une variable de saut. Voir [utiliser le mode rapide derrière les proxys et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/fast` signale `Fast mode has been disabled by your organization` dans une session authentifiée avec `ANTHROPIC_AUTH_TOKEN`, même si l'organisation a le mode rapide activé | La vérification de disponibilité nécessite une connexion claude.ai ou une clé API Anthropic ; avec seulement un jeton porteur, Claude Code traite le mode rapide comme désactivé sans envoyer la vérification | Définissez `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` ; voir [utiliser le mode rapide derrière les proxies et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |523| `/fast` signale `Fast mode is currently unavailable` dans une session qui s'authentifie avec une clé émise par la passerelle dans `ANTHROPIC_API_KEY` | Tant que `ANTHROPIC_BASE_URL` pointe vers votre passerelle, Claude Code ne transmet pas à `api.anthropic.com` une clé qui n'a pas le format d'une clé API Anthropic. La vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) n'est alors pas envoyée et, sans vérification réussie antérieure en cache, Claude Code considère le mode rapide comme indisponible | Définissez `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` ; voir [utiliser le mode rapide derrière les proxys et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| `/fast` signale `Fast mode has been disabled by your organization` dans une session authentifiée avec `ANTHROPIC_AUTH_TOKEN`, même si l'organisation a le mode rapide activé | La vérification de disponibilité nécessite une connexion claude.ai ou une clé API ; avec seulement un jeton porteur, Claude Code traite le mode rapide comme désactivé sans envoyer la vérification | Définissez `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` ; voir [utiliser le mode rapide derrière les proxys et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| Claude Code vous demande de vous connecter même si le [test curl](#verify-the-connection) réussit | La CLI n'a pas d'identifiant propre : une URL de base accessible n'en est pas une, et dans une session interactive un bloc `env` dans le `.claude/settings.json` ou `.claude/settings.local.json` d'un projet s'applique uniquement après l'assistant de première exécution et l'[invite de confiance](https://code.claude.com/docs/fr/permissions.md#what-runs-before-you-trust-a-folder) | Définissez `ANTHROPIC_AUTH_TOKEN` quelque part que Claude Code lit avant la configuration de première exécution : un export shell, le bloc `env` dans `~/.claude/settings.json`, ou les paramètres gérés |525| Claude Code vous demande de vous connecter même si le [test curl](#verify-the-connection) réussit | La CLI n'a pas d'identifiant propre : une URL de base accessible n'en est pas une, et dans une session interactive un bloc `env` dans le `.claude/settings.json` ou `.claude/settings.local.json` d'un projet s'applique uniquement après l'assistant de première exécution et l'[invite de confiance](https://code.claude.com/docs/fr/permissions.md#what-runs-before-you-trust-a-folder) | Définissez `ANTHROPIC_AUTH_TOKEN` quelque part que Claude Code lit avant la configuration de première exécution : un export shell, le bloc `env` dans `~/.claude/settings.json`, ou les paramètres gérés |

525| `ANTHROPIC_API_KEY` est défini mais ignoré, sans invite | La clé a besoin d'une approbation unique dans les sessions interactives, et une clé précédemment refusée est ignorée sans demander à nouveau | Activez-la sous `/config` avec l'option `Use custom API key` |526| `ANTHROPIC_API_KEY` est défini mais ignoré, sans invite | La clé a besoin d'une approbation unique dans les sessions interactives, et une clé précédemment refusée est ignorée sans demander à nouveau | Activez-la sous `/config` avec l'option `Use custom API key` |

526| `This machine's managed settings require a first-party login`, ou [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) quand les paramètres gérés définissent `forceLoginMethod` à `"gateway"` ou définissent aussi `forceLoginGatewayUrl` | Les paramètres gérés incluent `forceLoginMethod` ou `forceLoginOrgUUID`, qui ne peuvent pas coexister avec `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, ou `apiKeyHelper` | Votre administrateur doit supprimer `forceLoginMethod`, `forceLoginOrgUUID`, et `forceLoginGatewayUrl` des paramètres gérés pour utiliser les identifiants de passerelle, ou supprimer l'identifiant de passerelle et utiliser la connexion que les paramètres gérés exigent. Les deux ne peuvent pas être combinés |527| `This machine's managed settings require a first-party login`, ou [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) quand les paramètres gérés définissent `forceLoginMethod` à `"gateway"` ou définissent aussi `forceLoginGatewayUrl` | Les paramètres gérés incluent `forceLoginMethod` ou `forceLoginOrgUUID`, qui ne peuvent pas coexister avec `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, ou `apiKeyHelper` | Votre administrateur doit supprimer `forceLoginMethod`, `forceLoginOrgUUID`, et `forceLoginGatewayUrl` des paramètres gérés pour utiliser les identifiants de passerelle, ou supprimer l'identifiant de passerelle et utiliser la connexion que les paramètres gérés exigent. Les deux ne peuvent pas être combinés |

mcp.md +4 −4

Details

250 250 

251Les statuts dans cette liste signalent une décision de configuration plutôt qu'une tentative de connexion, donc Claude Code les imprime sans se connecter au serveur :251Les statuts dans cette liste signalent une décision de configuration plutôt qu'une tentative de connexion, donc Claude Code les imprime sans se connecter au serveur :

252 252 

253* ``⏸ Pending approval (run `claude` to approve)`` : un serveur de portée projet issu de `.mcp.json` que vous n'avez pas encore approuvé. Claude Code l'affiche à la fois dans `claude mcp list` et dans `claude mcp get <name>`. Exécutez `claude` en mode interactif pour l'examiner et l'approuver.253* ``⏸ Pending approval (run `claude` to approve)`` : un serveur de portée projet provenant de `.mcp.json` que vous n'avez pas encore approuvé. Claude Code l'affiche à la fois dans `claude mcp list` et dans `claude mcp get <name>`. Exécutez `claude` de manière interactive pour l'examiner et l'approuver.

254* `✘ Rejected (see disabledMcpjsonServers in settings)` : un serveur `.mcp.json` qu'une entrée [`disabledMcpjsonServers`](https://code.claude.com/docs/fr/settings-reference#disabledmcpjsonservers) rejette. Claude Code l'affiche uniquement dans `claude mcp get <name>`.254* `✘ Rejected (see disabledMcpjsonServers in settings)` : un serveur `.mcp.json` qu'une entrée [`disabledMcpjsonServers`](https://code.claude.com/docs/fr/settings-reference#disabledmcpjsonservers) rejette. Claude Code l'affiche uniquement dans `claude mcp get <name>`.

255* `⊘ Disabled for this project (re-enable via /mcp)` : un serveur que la liste [`disabledMcpServers`](#disable-a-server-without-removing-it) du projet nomme. Claude Code l'affiche à la fois dans `claude mcp list` et `claude mcp get <name>`. Réactivez le serveur à partir du panneau `/mcp`.255* `⊘ Disabled for this project (re-enable via /mcp)` : un serveur que la liste [`disabledMcpServers`](#disable-a-server-without-removing-it) du projet nomme. Claude Code l'affiche à la fois dans `claude mcp list` et `claude mcp get <name>`. Réactivez le serveur à partir du panneau `/mcp`.

256 256 


384Ces nouvelles tentatives ne s'appliquent pas dans ces cas :384Ces nouvelles tentatives ne s'appliquent pas dans ces cas :

385 385 

386* La première connexion d'un serveur stdio. Pour la réessayer, voir [Serveurs stdio qui se terminent ou ne démarrent pas](#stdio-servers-that-exit-or-fail-to-start)386* La première connexion d'un serveur stdio. Pour la réessayer, voir [Serveurs stdio qui se terminent ou ne démarrent pas](#stdio-servers-that-exit-or-fail-to-start)

387* La première connexion d'un serveur WebSocket387* La première connexion d'un serveur WebSocket. Pour la retenter dans une session de terminal interactive, sélectionnez **Reconnect** dans le menu du serveur dans `/mcp`

388* Une erreur d'authentification ou de ressource introuvable, car elle nécessite une modification de configuration pour être résolue. Lorsqu'un [`headersHelper`](#use-dynamic-headers-for-custom-authentication) est la seule source de l'en-tête `Authorization` du serveur, Claude Code réessaie quand même après une erreur d'authentification, car il réexécute le helper à chaque tentative et peut récupérer des identifiants frais388* Une erreur d'authentification ou de ressource introuvable, car elle nécessite une modification de configuration pour être résolue. Lorsqu'un [`headersHelper`](#use-dynamic-headers-for-custom-authentication) est la seule source de l'en-tête `Authorization` du serveur, Claude Code réessaie quand même après une erreur d'authentification, car il réexécute le helper à chaque tentative et peut récupérer des identifiants frais

389 389 

390#### Serveurs stdio qui se terminent ou ne démarrent pas390#### Serveurs stdio qui se terminent ou ne démarrent pas


403 403 

404#### Réessayer vous-même les serveurs en échec404#### Réessayer vous-même les serveurs en échec

405 405 

406Pour réessayer tous les serveurs qui ont échoué ou qui nécessitent une authentification, exécutez `/mcp reconnect all`. Dans le terminal interactif, cela nécessite Claude Code v2.1.284 ou ultérieur, et les versions antérieures y affichent `MCP server "all" not found`.406Pour réessayer tous les serveurs en échec ou nécessitant une authentification, exécutez `/mcp reconnect all` à l'invite de Claude Code dans une session de terminal interactive. Cela nécessite Claude Code v2.1.284 ou une version ultérieure. Les versions antérieures affichent `MCP server "all" not found`.

407 407 

408#### Comment Claude apprend qu'un serveur a échoué408#### Comment Claude apprend qu'un serveur a échoué

409 409 


1332 1332 

1333Les serveurs de claude.ai apparaissent dans la liste avec des indicateurs montrant qu'ils proviennent de claude.ai.1333Les serveurs de claude.ai apparaissent dans la liste avec des indicateurs montrant qu'ils proviennent de claude.ai.

1334 1334 

1335Anthropic fournit également certains connecteurs lui-même, sans que vous ou un administrateur les ajoute. Sur les comptes où [Claude Docs](https://code.claude.com/docs/fr/artifacts.md#write-a-document-with-claude-docs) est disponible, `/mcp` liste `claude.ai Claude Docs` sans configuration, et Claude l'utilise lorsque vous demandez un document destiné à d'autres personnes. Pour le désactiver, ajoutez une entrée `serverName` de `"claude.ai Claude Docs"` à `deniedMcpServers` ou utilisez le bouton bascule `/mcp`, tous deux décrits dans [Désactiver les connecteurs claude.ai](#disable-claude-ai-connectors).1335Anthropic fournit également certains connecteurs lui-même, sans que vous ou un administrateur les ajoute. Sur les comptes où [Claude Docs](https://code.claude.com/docs/fr/artifacts.md#write-a-document-with-claude-docs) est disponible, `/mcp` liste `claude.ai Claude Docs` sans configuration, et Claude l'utilise lorsque vous demandez un document destiné à d'autres personnes. Pour désactiver uniquement ce connecteur, consultez [Désactiver les connecteurs claude.ai](#disable-claude-ai-connectors).

1336 1336 

1337Claude Code marque un connecteur comme `managed` dans `/mcp` et dans le gestionnaire [`/plugin`](https://code.claude.com/docs/fr/plugins/install) lorsque votre organisation gère son authentification dans claude.ai. Le statut managed ne change pas la façon dont Claude Code se connecte au connecteur ou applique les [contrôles d'outils](#organization-controls-on-connector-tools) de votre organisation.1337Claude Code marque un connecteur comme `managed` dans `/mcp` et dans le gestionnaire [`/plugin`](https://code.claude.com/docs/fr/plugins/install) lorsque votre organisation gère son authentification dans claude.ai. Le statut managed ne change pas la façon dont Claude Code se connecte au connecteur ou applique les [contrôles d'outils](#organization-controls-on-connector-tools) de votre organisation.

1338 1338 

model-config.md +7 −2

Details

349 349 

350Lorsque les paramètres gérés que Claude Code applique définissent `availableModels`, cette liste seule s'applique, à part une [plateforme hôte qui fournit la sienne](https://code.claude.com/docs/fr/settings.md#exceptions-to-managed-settings-precedence) : les entrées dans les paramètres utilisateur, projet ou local ne peuvent pas l'étendre, et Claude Code ne fusionne jamais `availableModels` entre les sources gérées non plus ; [comment Claude Code combine les sources gérées](https://code.claude.com/docs/fr/managed-settings.md#how-claude-code-combines-managed-sources) indique quelle liste de source s'applique. Sinon, les listes des paramètres utilisateur, projet et local sont [concaténées et dédupliquées](https://code.claude.com/docs/fr/settings.md#settings-precedence) comme d'autres paramètres de tableau. Avant Claude Code v2.1.175, les entrées des portées de priorité inférieure fusionnaient dans la liste gérée au lieu d'être remplacées par elle.350Lorsque les paramètres gérés que Claude Code applique définissent `availableModels`, cette liste seule s'applique, à part une [plateforme hôte qui fournit la sienne](https://code.claude.com/docs/fr/settings.md#exceptions-to-managed-settings-precedence) : les entrées dans les paramètres utilisateur, projet ou local ne peuvent pas l'étendre, et Claude Code ne fusionne jamais `availableModels` entre les sources gérées non plus ; [comment Claude Code combine les sources gérées](https://code.claude.com/docs/fr/managed-settings.md#how-claude-code-combines-managed-sources) indique quelle liste de source s'applique. Sinon, les listes des paramètres utilisateur, projet et local sont [concaténées et dédupliquées](https://code.claude.com/docs/fr/settings.md#settings-precedence) comme d'autres paramètres de tableau. Avant Claude Code v2.1.175, les entrées des portées de priorité inférieure fusionnaient dans la liste gérée au lieu d'être remplacées par elle.

351 351 

352Dans la liste effective, une entrée nommant un modèle spécifique dans une famille, qu'il s'agisse d'un préfixe de version ou d'un ID de modèle complet, désactive l'entrée de caractère générique de cette famille : `["sonnet", "claude-sonnet-4-5"]` permet uniquement les versions Sonnet 4.5, pas tous les modèles Sonnet.352Dans la liste effective, une entrée nommant un modèle spécifique dans une famille, qu'il s'agisse d'un préfixe de version ou d'un ID de modèle complet, désactive l'entrée de caractère générique de cette famille. Par exemple, avec `["sonnet", "claude-sonnet-4-5"]`, les utilisateurs ne peuvent choisir que les ID de modèle auxquels `claude-sonnet-4-5` [correspond](#restrict-model-selection), et non tous les modèles Sonnet.

353 353 

354### ID de modèle Mantle354### ID de modèle Mantle

355 355 


946>946>

947> Une liste d'autorisation `availableModels` livrée via [MDM ou un fichier de paramètres gérés](https://code.claude.com/docs/fr/managed-settings.md#delivery-mechanisms) s'applique toujours lors de l'utilisation de fournisseurs tiers ; les [paramètres gérés par le serveur ne sont pas livrés là](https://code.claude.com/docs/fr/server-managed-settings.md#platform-availability).947> Une liste d'autorisation `availableModels` livrée via [MDM ou un fichier de paramètres gérés](https://code.claude.com/docs/fr/managed-settings.md#delivery-mechanisms) s'applique toujours lors de l'utilisation de fournisseurs tiers ; les [paramètres gérés par le serveur ne sont pas livrés là](https://code.claude.com/docs/fr/server-managed-settings.md#platform-availability).

948>948>

949> Le filtrage correspond à un alias de modèle tel que `opus`, un préfixe de version tel que `claude-opus-4-8`, ou l'ID de modèle complet spécifique au fournisseur. Les préfixes spécifiques au fournisseur tels que `us.anthropic.` ne sont pas supprimés, donc pour autoriser un modèle spécifique, listez son ID complet spécifique au fournisseur, ou mappez-le via [`modelOverrides`](#override-model-ids-per-version). Pour un modèle épinglé, cet ID est la valeur que vous avez définie dans sa variable `ANTHROPIC_DEFAULT_*_MODEL`. Tout suffixe `[1m]` est supprimé de l'entrée de la liste d'autorisation et du modèle demandé avant la correspondance.949> Le filtrage correspond à un alias de modèle tel que `opus`, un préfixe de version tel que `claude-opus-4-8`, ou l'ID de modèle complet spécifique au fournisseur. Les préfixes spécifiques au fournisseur tels que `us.anthropic.` ne sont pas supprimés, donc pour autoriser un modèle spécifique, mappez-le via [`modelOverrides`](#override-model-ids-per-version) ou listez son ID complet spécifique au fournisseur :

950>

951> * **Google Cloud's Agent Platform** : lorsque l'ID demandé par Claude Code comporte une date après `@`, comme `claude-sonnet-4-5@20250929`, incluez la date dans votre entrée de liste d'autorisation. À lui seul, `claude-sonnet-4-5` ne correspond pas à cet ID, quel que soit le paramètre [`availableModelsMatch`](https://code.claude.com/docs/fr/settings-reference#availablemodelsmatch).

952> * **Modèles épinglés** : listez la valeur que vous avez définie dans la variable `ANTHROPIC_DEFAULT_*_MODEL` du modèle

953>

954> Tout suffixe `[1m]` est supprimé de l'entrée de la liste d'autorisation et du modèle demandé avant la correspondance.

950 955 

951### Personnaliser l'affichage et les capacités du modèle épinglé956### Personnaliser l'affichage et les capacités du modèle épinglé

952 957 

Details

605 605 

606* `prompt.id` : UUID corrélant un prompt utilisateur avec tous les événements suivants jusqu'au prompt suivant. Consultez [Attributs de corrélation des événements](#event-correlation-attributes).606* `prompt.id` : UUID corrélant un prompt utilisateur avec tous les événements suivants jusqu'au prompt suivant. Consultez [Attributs de corrélation des événements](#event-correlation-attributes).

607* `workspace.host_paths` : répertoires de l'espace de travail hôte sélectionnés dans l'application de bureau, sous forme de tableau de chaînes607* `workspace.host_paths` : répertoires de l'espace de travail hôte sélectionnés dans l'application de bureau, sous forme de tableau de chaînes

608* `workflow.run_id` : identifiant d'exécution, préfixé par `wf_`, sur les événements d'API et d'outil émis par les agents appartenant à une exécution de l'outil [Workflow](https://code.claude.com/docs/fr/workflows.md). Filtrer les événements par un `workflow.run_id` permet de reconstituer les requêtes API et les résultats d'outils de cette exécution. L'identifiant couvre les agents que le script du workflow lance ainsi que tous les agents que ceux-ci lancent à leur tour, comme les invocations de skills. Il correspond à l'identifiant d'exécution indiqué dans le résultat de l'outil Workflow. Absent sur tous les autres événements.608* `workflow.run_id` : identifiant d'exécution, préfixé par `wf_`, présent sur les événements d'API et d'outil émis par les agents appartenant à une exécution de l'outil [Workflow](https://code.claude.com/docs/fr/workflows.md). Filtrer les événements par un `workflow.run_id` permet de reconstituer les requêtes API et les résultats d'outils de cette exécution. L'identifiant couvre les agents que lance le script du workflow ainsi que tous les agents que ceux-ci lancent à leur tour, comme les invocations de skills. Il correspond à l'identifiant d'exécution indiqué dans le résultat de l'outil Workflow.

609* `workflow.name` : nom du workflow, le `meta.name` de son script, émis avec `workflow.run_id`. Les noms des workflows intégrés apparaissent tels quels lorsque l'exécution utilise le script intégré non modifié. Les noms définis par l'utilisateur, y compris les copies modifiées de scripts intégrés, sont remplacés par `custom`, sauf si `OTEL_LOG_TOOL_DETAILS=1` est défini.609* `workflow.name` : nom du workflow, le `meta.name` de son script, émis avec `workflow.run_id`. Les noms des workflows intégrés apparaissent tels quels lorsque l'exécution utilise le script intégré non modifié. Les noms définis par l'utilisateur, y compris les copies modifiées de scripts intégrés, sont remplacés par `custom`, sauf si `OTEL_LOG_TOOL_DETAILS=1` est défini.

610* `agent_id` : identifiant du [sous-agent](https://code.claude.com/docs/fr/sub-agents.md) à l'origine de l'événement, tel que `a3f2c1b4d5e6f7a80`. Les événements qui le portent incluent les événements d'API et d'outil d'un sous-agent, ses événements [`assistant_response`](#assistant-response-event), et [`subagent_completed`](#subagent-completed-event) pour le sous-agent terminé. Absent sur les événements de la session principale et des [coéquipiers en processus](https://code.claude.com/docs/fr/agent-teams.md#choose-a-display-mode). Le [`agent_id` de span](#span-attributes) du sous-agent a la même valeur, ou ajoute un libellé après le `a` initial, comme dans `acompact-3f2c1b4d5e6f7a80`. Nécessite Claude Code v2.1.310 ou ultérieur

611* `parent_agent_id` : le `agent_id` de l'agent qui a lancé ou repris en dernier le sous-agent à l'origine de l'événement. Absent lorsque cet agent est la session principale. Nécessite Claude Code v2.1.310 ou ultérieur

610 612 

611#### Attributs de dépôt613#### Attributs de dépôt

612 614 


755| `prompt.id` | Identifiant UUID v4 reliant tous les événements produits lors du traitement d'un même prompt utilisateur |757| `prompt.id` | Identifiant UUID v4 reliant tous les événements produits lors du traitement d'un même prompt utilisateur |

756| `event.sequence` | Compteur commençant à 0 pour ordonner les événements, comptabilisé par processus Claude Code plutôt que par session |758| `event.sequence` | Compteur commençant à 0 pour ordonner les événements, comptabilisé par processus Claude Code plutôt que par session |

757| `message.uuid` | UUID du message tel qu'il est conservé dans la transcription de la session, les fichiers `~/.claude/projects/*/*.jsonl`. Présent sur `assistant_response`, sur `api_response_body` et sur `user_prompt`, sauf pour les exécutions de commandes, qui peuvent produire zéro ou plusieurs messages. Sur `assistant_response` et `api_response_body`, il s'agit de l'entrée finale de la réponse dans la transcription, à partir de laquelle s'enchaîne le `parentUuid` du tour suivant. Nécessite Claude Code v2.1.274 ou ultérieur sur `api_response_body` |759| `message.uuid` | UUID du message tel qu'il est conservé dans la transcription de la session, les fichiers `~/.claude/projects/*/*.jsonl`. Présent sur `assistant_response`, sur `api_response_body` et sur `user_prompt`, sauf pour les exécutions de commandes, qui peuvent produire zéro ou plusieurs messages. Sur `assistant_response` et `api_response_body`, il s'agit de l'entrée finale de la réponse dans la transcription, à partir de laquelle s'enchaîne le `parentUuid` du tour suivant. Nécessite Claude Code v2.1.274 ou ultérieur sur `api_response_body` |

758| `request_id` | ID attribué par le serveur à la requête API, lu depuis l'en-tête de réponse `request-id`, par exemple `req_011...`. Pour une réponse sans en-tête `request-id`, comme sur [Amazon Bedrock](https://code.claude.com/docs/fr/amazon-bedrock.md), la valeur provient plutôt de l'en-tête `x-amzn-requestid`. Présent sur `api_request`, `api_error`, `api_refusal`, `assistant_response` et `api_response_body` lorsque la réponse contient l'un de ces en-têtes. Correspond au même attribut sur le span de trace `llm_request`. La source `x-amzn-requestid` nécessite Claude Code v2.1.282 ou ultérieur |760| `request_id` | ID de la requête API attribué par le serveur, lu depuis l'en-tête de réponse `request-id`, tel que `req_011...`. Sur une réponse sans en-tête `request-id`, comme sur [Amazon Bedrock](https://code.claude.com/docs/fr/amazon-bedrock.md), la valeur provient plutôt de l'en-tête `x-amzn-requestid`. Présent sur `api_request`, `api_error`, `api_refusal`, `assistant_response`, `api_response_body`, [`tool_result`](#tool-result-event) et [`tool_decision`](#tool-decision-event) lorsque la réponse contient l'un ou l'autre de ces en-têtes. Correspond au même attribut sur le span de trace `llm_request`. La source `x-amzn-requestid` nécessite Claude Code v2.1.282 ou ultérieur |

759| `client_request_id` | UUID généré par le client et envoyé dans l'en-tête de requête `x-client-request-id`. Présent sur `api_request` et `api_error` sur les connexions à l'API first-party ; absent sur les backends de fournisseurs tiers et lorsque la requête a été réessayée via la solution de repli sans streaming. Associe une requête à sa réponse et reste disponible en cas d'échecs, comme les délais d'expiration, qui n'ont jamais produit de `request_id` serveur. Correspond au même attribut sur le span de trace `llm_request` |761| `client_request_id` | UUID généré par le client et envoyé dans l'en-tête de requête `x-client-request-id`. Présent sur `api_request` et `api_error` sur les connexions à l'API first-party ; absent sur les backends de fournisseurs tiers et lorsque la requête a été réessayée via la solution de repli sans streaming. Associe une requête à sa réponse et reste disponible en cas d'échecs, comme les délais d'expiration, qui n'ont jamais produit de `request_id` serveur. Correspond au même attribut sur le span de trace `llm_request` |

760 762 

761Pour retracer toute l'activité déclenchée par un même prompt, filtrez vos événements sur une valeur `prompt.id` spécifique. Vous obtenez ainsi l'événement user\_prompt, les éventuels événements api\_request et les éventuels événements tool\_result survenus pendant le traitement de ce prompt.763Pour retracer toute l'activité déclenchée par un même prompt, filtrez vos événements sur une valeur `prompt.id` spécifique. Vous obtenez ainsi l'événement user\_prompt, les éventuels événements api\_request et les éventuels événements tool\_result survenus pendant le traitement de ce prompt.


820* `event.sequence` : compteur par processus pour ordonner les événements, décrit dans [Attributs de corrélation des événements](#event-correlation-attributes)822* `event.sequence` : compteur par processus pour ordonner les événements, décrit dans [Attributs de corrélation des événements](#event-correlation-attributes)

821* `tool_name` : nom de l'outil823* `tool_name` : nom de l'outil

822* `tool_use_id` : identifiant unique de cette invocation d'outil. Correspond au `tool_use_id` transmis aux hooks, ce qui permet de corréler les événements OTel avec les données capturées par les hooks.824* `tool_use_id` : identifiant unique de cette invocation d'outil. Correspond au `tool_use_id` transmis aux hooks, ce qui permet de corréler les événements OTel avec les données capturées par les hooks.

825* `request_id` : le [`request_id`](#event-correlation-attributes) de la réponse API qui contenait cet appel d'outil, pour vous permettre de joindre l'appel aux événements d'API de cette réponse. Absent lorsque cette réponse n'avait pas d'ID de requête, ou lorsqu'aucune réponse API ne contenait l'appel. Nécessite Claude Code v2.1.310 ou ultérieur

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

824* `duration_ms` : durée d'exécution en millisecondes827* `duration_ms` : durée d'exécution en millisecondes

825* `error_type` : chaîne de catégorie d'erreur lorsque l'outil a échoué, par exemple `"Error:ENOENT"` ou `"ShellError"`828* `error_type` : chaîne de catégorie d'erreur lorsque l'outil a échoué, par exemple `"Error:ENOENT"` ou `"ShellError"`


972* `event.sequence` : compteur par processus pour ordonner les événements, décrit dans [Attributs de corrélation des événements](#event-correlation-attributes)975* `event.sequence` : compteur par processus pour ordonner les événements, décrit dans [Attributs de corrélation des événements](#event-correlation-attributes)

973* `tool_name` : nom de l'outil (par exemple, "Read", "Edit", "Write", "NotebookEdit")976* `tool_name` : nom de l'outil (par exemple, "Read", "Edit", "Write", "NotebookEdit")

974* `tool_use_id` : identifiant unique de cette invocation d'outil. Correspond au `tool_use_id` transmis aux hooks, ce qui permet de corréler les événements OTel avec les données capturées par les hooks.977* `tool_use_id` : identifiant unique de cette invocation d'outil. Correspond au `tool_use_id` transmis aux hooks, ce qui permet de corréler les événements OTel avec les données capturées par les hooks.

978* `request_id` : le [`request_id`](#event-correlation-attributes) de la réponse API qui contenait cet appel d'outil, pour vous permettre de joindre l'appel aux événements d'API de cette réponse. Absent lorsque cette réponse n'avait pas d'ID de requête, ou lorsqu'aucune réponse API ne contenait l'appel. Nécessite Claude Code v2.1.310 ou ultérieur

975* `decision` : `"accept"` ou `"reject"`979* `decision` : `"accept"` ou `"reject"`

976* `tool_source` : Toujours présent. La provenance de l'outil, sous forme d'un ensemble fermé de valeurs définies par la CLI :980* `tool_source` : Toujours présent. La provenance de l'outil, sous forme d'un ensemble fermé de valeurs définies par la CLI :

977 * `"builtin"` : les propres outils de la CLI981 * `"builtin"` : les propres outils de la CLI


1024 * Pour l'outil Skill : inclut `skill_name`1028 * Pour l'outil Skill : inclut `skill_name`

1025 * Pour l'outil Agent ou l'ancien outil Task : inclut `subagent_type`1029 * Pour l'outil Agent ou l'ancien outil Task : inclut `subagent_type`

1026 1030 

1027Si vous abaissez le `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` du SDK OpenTelemetry en dessous du nombre d'attributs d'un événement `tool_decision`, le SDK supprime les attributs que Claude Code a définis en dernier. Le SDK supprime d'abord `permission_mode`, puis `classifier_category`, puis `classifier_verdict`, et ne supprime les autres attributs de l'événement qu'après ces trois-là. Cet ordre nécessite Claude Code v2.1.302 ou version ultérieure.1031Si vous abaissez le paramètre `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` du SDK OpenTelemetry en dessous du nombre d'attributs d'un événement `tool_decision`, le SDK supprime les attributs que Claude Code a définis en dernier. Le SDK les supprime avant tout autre attribut, dans cet ordre, en ignorant ceux que l'événement ne porte pas :

1032 

10331. `parent_agent_id`

10342. `agent_id`

10353. `request_id`

10364. `permission_mode`

10375. `classifier_category`

10386. `classifier_verdict`

1039 

1040`permission_mode`, `classifier_category` et `classifier_verdict` sont supprimés dans cet ordre sur Claude Code v2.1.302 ou ultérieur. `parent_agent_id`, `agent_id` et `request_id` nécessitent la v2.1.310 ou ultérieure.

1028 1041 

1029#### Événement de sécurité1042#### Événement de sécurité

1030 1043 

Details

240 240 

241Les deux hôtes d'entrée Datadog ne transportent que la télémétrie opérationnelle facultative, et la définition de [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/fr/env-vars) désactive les deux. Les sessions sur les fournisseurs tiers n'envoient jamais à ces hôtes, même lorsqu'une plateforme définit [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/fr/env-vars) et que les métriques de télémétrie sont activées par défaut. Consultez [Services de télémétrie](https://code.claude.com/docs/fr/data-usage.md#telemetry-services) pour tout ce que Claude Code envoie et comment le désactiver avant de finaliser votre liste blanche.241Les deux hôtes d'entrée Datadog ne transportent que la télémétrie opérationnelle facultative, et la définition de [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/fr/env-vars) désactive les deux. Les sessions sur les fournisseurs tiers n'envoient jamais à ces hôtes, même lorsqu'une plateforme définit [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/fr/env-vars) et que les métriques de télémétrie sont activées par défaut. Consultez [Services de télémétrie](https://code.claude.com/docs/fr/data-usage.md#telemetry-services) pour tout ce que Claude Code envoie et comment le désactiver avant de finaliser votre liste blanche.

242 242 

243### Routage via un fournisseur cloud et une passerelle LLM

244 

243Lors de l'utilisation d'[Amazon Bedrock](https://code.claude.com/docs/fr/amazon-bedrock.md), de la [plateforme d'agent de Google Cloud](https://code.claude.com/docs/fr/google-vertex-ai.md), de [Microsoft Foundry](https://code.claude.com/docs/fr/microsoft-foundry.md) ou d'une session de [passerelle d'applications Claude](https://code.claude.com/docs/fr/claude-apps-gateway) connectée, le trafic du modèle et l'authentification vont à votre fournisseur ou passerelle au lieu de `api.anthropic.com`, `claude.ai` ou `platform.claude.com`. L'outil WebFetch appelle toujours `api.anthropic.com` pour sa [vérification de sécurité du domaine](https://code.claude.com/docs/fr/data-usage.md#webfetch-domain-safety-check) sauf si vous définissez `skipWebFetchPreflight: true` dans [paramètres](https://code.claude.com/docs/fr/settings.md).245Lors de l'utilisation d'[Amazon Bedrock](https://code.claude.com/docs/fr/amazon-bedrock.md), de la [plateforme d'agent de Google Cloud](https://code.claude.com/docs/fr/google-vertex-ai.md), de [Microsoft Foundry](https://code.claude.com/docs/fr/microsoft-foundry.md) ou d'une session de [passerelle d'applications Claude](https://code.claude.com/docs/fr/claude-apps-gateway) connectée, le trafic du modèle et l'authentification vont à votre fournisseur ou passerelle au lieu de `api.anthropic.com`, `claude.ai` ou `platform.claude.com`. L'outil WebFetch appelle toujours `api.anthropic.com` pour sa [vérification de sécurité du domaine](https://code.claude.com/docs/fr/data-usage.md#webfetch-domain-safety-check) sauf si vous définissez `skipWebFetchPreflight: true` dans [paramètres](https://code.claude.com/docs/fr/settings.md).

244 246 

245Lors du routage via une [passerelle LLM](https://code.claude.com/docs/fr/llm-gateway) avec [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential), la vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) appelle toujours `api.anthropic.com` plutôt que l'URL de base de la passerelle. La vérification honore un proxy HTTP configuré, donc lorsqu'un bloc réseau est la cause, une entrée de liste blanche pour `api.anthropic.com` dans le proxy est la solution. Un bloc réseau échoue la vérification uniquement lorsque l'hôte est inaccessible même via le proxy, et le mode rapide signale alors une erreur de connectivité. La même erreur de connectivité apparaît lorsque la vérification présente une credential émise par la passerelle qu'Anthropic rejette ; la mise en liste blanche n'aide pas là, puisque rien n'est bloqué. Consultez [utiliser le mode rapide derrière les proxies et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) pour les variables qui le restaurent.247Si vos développeurs utilisent le [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) derrière une [passerelle LLM](https://code.claude.com/docs/fr/llm-gateway) définie avec [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential), veillez à ce que `api.anthropic.com` reste accessible via votre proxy. Lorsque Claude Code envoie la vérification de disponibilité du mode rapide, celle-ci est adressée à cet hôte via tout proxy HTTP configuré, jamais à la passerelle. Pour savoir dans quels cas la vérification n'est pas envoyée, et quelle variable restaure le mode rapide dans chaque cas, consultez [Utiliser le mode rapide derrière des proxys et des passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways).

246 248 

247### Listes blanches IP d'organisation et sortie proxy249### Listes blanches IP d'organisation et sortie proxy

248 250 

Details

106 106 

107Le code du module de hooks est trop profondément imbriqué, ou sa chaîne d'imports est trop longue, pour que Claude Code puisse le charger. La ligne commence par le nom du mod et `hooks module did not load:`, puis donne le nom d'un fichier et cette raison.107Le code du module de hooks est trop profondément imbriqué, ou sa chaîne d'imports est trop longue, pour que Claude Code puisse le charger. La ligne commence par le nom du mod et `hooks module did not load:`, puis donne le nom d'un fichier et cette raison.

108 108 

109Parcourez ce fichier et les fichiers atteints via ses imports pour trouver la partie la plus profondément imbriquée, et réécrivez-la pour réduire l'imbrication, ou raccourcissez la chaîne d'imports. Si vous avez installé le mod sans l'avoir écrit, demandez à son auteur de le faire.109Parcourez ce fichier et les fichiers atteints via ses imports pour trouver la partie la plus profondément imbriquée, et réécrivez-la pour réduire l'imbrication, ou raccourcissez la chaîne d'imports. Si vous n'avez pas écrit le mod, demandez à son auteur de le corriger.

110 110 

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

112 112 

routines.md +20 −2

Details

25* Une tâche avec uniquement un déclencheur API s'exécute lorsque vous appelez son endpoint.25* Une tâche avec uniquement un déclencheur API s'exécute lorsque vous appelez son endpoint.

26* Une tâche avec uniquement un déclencheur GitHub s'exécute lorsqu'un événement de dépôt correspondant se produit.26* Une tâche avec uniquement un déclencheur GitHub s'exécute lorsqu'un événement de dépôt correspondant se produit.

27 27 

28Les tâches planifiées sont disponibles sur les plans Pro, Max, Team et Enterprise. Créez-les et gérez-les sur [claude.ai/code/routines](https://claude.ai/code/routines), ou à partir de la CLI avec `/schedule`. L'ancien nom, routines, [apparaît encore](#where-the-name-routines-still-appears) dans l'adresse web, la CLI et l'API.28Les tâches planifiées sont disponibles sur les plans Pro, Max, Team et Enterprise. Créez-les et gérez-les sur [claude.ai/code/routines](https://claude.ai/code/routines), ou à partir de la CLI avec `/schedule`. L'ancien nom, routines, [apparaît encore](#where-the-name-routines-still-appears).

29 29 

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

31>31>


66 66 

67**1. Ouvrir la boîte de dialogue de création**67**1. Ouvrir la boîte de dialogue de création**

68 68 

69Rendez-vous sur [claude.ai/code/routines](https://claude.ai/code/routines) et cliquez sur **New task**. Si un menu s'ouvre d'abord, sélectionnez **Set up manually**. La boîte de dialogue **New scheduled task** s'ouvre. L'autre option du menu, **Create with Claude**, vous permet plutôt de décrire la tâche dans un chat et de laisser Claude la créer.69Rendez-vous sur [claude.ai/code/routines](https://claude.ai/code/routines) et cliquez sur **New task** pour ouvrir la boîte de dialogue **New scheduled task**. Vérifiez si l'un de ces écrans apparaît avant de continuer :

70 

71* Si le bouton indique **New routine** au lieu de **New task**, cliquez sur **New routine** et poursuivez avec [Formulaire pleine page](#full-page-form).

72* Dans l'application Desktop, si un menu avec **Local** et **Cloud** s'ouvre, passez à [Formulaire pleine page](#full-page-form).

73* Si un menu s'ouvre avec **Create with Claude** et **Set up manually**, sélectionnez **Set up manually** pour ouvrir la boîte de dialogue. **Create with Claude** vous permet plutôt de décrire la tâche dans un chat et de laisser Claude la créer.

74* Si une page complète s'ouvre à la place de la boîte de dialogue, passez à [Formulaire pleine page](#full-page-form).

70 75 

71Si **Repositories** et **Environment** sont déjà affichés à l'ouverture de la boîte de dialogue, consultez [en quoi cette boîte de dialogue diffère](#dialog-with-repositories-and-environment-in-the-main-view). Sinon, cette boîte de dialogue crée également des tâches planifiées pour le chat claude.ai. Pour que la vôtre soit ce que la boîte de dialogue appelle une tâche Claude Code, sélectionnez un dépôt ou ajoutez un déclencheur d'événement GitHub ou API dans les étapes qui suivent. Ce type de tâche exécute Claude Code dans une session cloud.76Si **Repositories** et **Environment** sont déjà affichés à l'ouverture de la boîte de dialogue, consultez [en quoi cette boîte de dialogue diffère](#dialog-with-repositories-and-environment-in-the-main-view). Sinon, cette boîte de dialogue crée également des tâches planifiées pour le chat claude.ai. Pour que la vôtre soit ce que la boîte de dialogue appelle une tâche Claude Code, sélectionnez un dépôt ou ajoutez un déclencheur d'événement GitHub ou API dans les étapes qui suivent. Ce type de tâche exécute Claude Code dans une session cloud.

72 77 


126 131 

127Sélectionnez le dépôt avant d'ajouter un déclencheur d'événement GitHub, car ce déclencheur n'est pas disponible tant qu'aucun dépôt n'est sélectionné.132Sélectionnez le dépôt avant d'ajouter un déclencheur d'événement GitHub, car ce déclencheur n'est pas disponible tant qu'aucun dépôt n'est sélectionné.

128 133 

134#### Formulaire pleine page

135 

136Dans l'application Desktop, si un menu avec **Local** et **Cloud** s'ouvre, sélectionnez **Cloud**. Une page intitulée **New routine** ou **New scheduled task** s'ouvre. Remplissez ses champs :

137 

138* **Name** : saisissez-en un.

139* **Instructions** : saisissez le prompt. Dans la même zone, sélectionnez le modèle, les dépôts et l'environnement. Pour savoir ce que chacun contrôle, consultez les étapes sous [Créer à partir du web](#create-from-the-web).

140* **Select a trigger** : sélectionnez **Schedule**, **GitHub event** ou **API**. Pour une planification, consultez [Ajouter un déclencheur de planification](#add-a-schedule-trigger). Pour un [événement GitHub](#add-a-github-trigger), sélectionnez un dépôt. Pour un [déclencheur API](#add-an-api-trigger), copiez le jeton depuis la boîte de dialogue **API token** qui s'ouvre après avoir cliqué sur **Create**, car il n'est affiché qu'une seule fois. Pour combiner plusieurs déclencheurs, cliquez sur **Add another trigger**.

141* **Connectors** : tous vos connecteurs connectés sont inclus par défaut, supprimez donc ceux dont la tâche n'a pas besoin.

142 

143Si **Create** n'est pas disponible, survolez-le pour voir ce qui manque encore au formulaire. Cliquez sur **Create**, et la page de détail de la tâche s'ouvre.

144 

129### Créer à partir de la CLI145### Créer à partir de la CLI

130 146 

131Exécutez `/schedule` dans n'importe quelle session pour créer une tâche planifiée de manière conversationnelle. Vous pouvez également transmettre directement une description, pour une tâche récurrente comme `/schedule daily PR review at 9am` ou ponctuelle comme `/schedule clean up feature flag in one week`. Claude passe en revue les mêmes informations que celles recueillies par la boîte de dialogue web, puis enregistre la tâche sur votre compte. La commande est également disponible sous l'alias `/routines`.147Exécutez `/schedule` dans n'importe quelle session pour créer une tâche planifiée de manière conversationnelle. Vous pouvez également transmettre directement une description, pour une tâche récurrente comme `/schedule daily PR review at 9am` ou ponctuelle comme `/schedule clean up feature flag in one week`. Claude passe en revue les mêmes informations que celles recueillies par la boîte de dialogue web, puis enregistre la tâche sur votre compte. La commande est également disponible sous l'alias `/routines`.


152* **Exécutions à l'heure pile** : si vous planifiez une exécution exactement à l'heure pile, par exemple 9:00, elle peut démarrer avec plusieurs minutes de retard. Pour démarrer au plus près de l'heure planifiée, choisissez quelques minutes après l'heure, par exemple 9:07.168* **Exécutions à l'heure pile** : si vous planifiez une exécution exactement à l'heure pile, par exemple 9:00, elle peut démarrer avec plusieurs minutes de retard. Pour démarrer au plus près de l'heure planifiée, choisissez quelques minutes après l'heure, par exemple 9:07.

153* **Intervalles personnalisés** : pour une cadence absente des préréglages, créez la tâche et sélectionnez **Custom** dans sa [boîte de dialogue de modification](#edit-and-control-scheduled-tasks). Saisissez ensuite une expression cron, telle que `0 */2 * * *` pour toutes les deux heures. Pour en définir une à partir de la CLI, exécutez [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Les expressions qui s'exécutent plus d'une fois par heure sont rejetées.169* **Intervalles personnalisés** : pour une cadence absente des préréglages, créez la tâche et sélectionnez **Custom** dans sa [boîte de dialogue de modification](#edit-and-control-scheduled-tasks). Saisissez ensuite une expression cron, telle que `0 */2 * * *` pour toutes les deux heures. Pour en définir une à partir de la CLI, exécutez [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Les expressions qui s'exécutent plus d'une fois par heure sont rejetées.

154* **Fuseau horaire** : lorsque vous choisissez une fréquence prédéfinie, saisissez l'heure dans votre fuseau horaire local.170* **Fuseau horaire** : lorsque vous choisissez une fréquence prédéfinie, saisissez l'heure dans votre fuseau horaire local.

171* **Fuseau horaire de l'expression cron** : lorsque l'expression se compose uniquement de cinq champs, écrivez les heures en UTC, ainsi `0 9 * * 1-5` s'exécute à 9:00 UTC les jours de semaine. Si le champ commence par un préfixe `CRON_TZ=`, conservez-le et écrivez les heures dans son fuseau, ou supprimez-le et écrivez-les en UTC.

155 172 

156#### Planifier une exécution ponctuelle173#### Planifier une exécution ponctuelle

157 174 


455 472 

456Les tâches planifiées s'appelaient auparavant routines, et les emplacements suivants conservent l'ancien nom. Chacun désigne la même fonctionnalité :473Les tâches planifiées s'appelaient auparavant routines, et les emplacements suivants conservent l'ancien nom. Chacun désigne la même fonctionnalité :

457 474 

475* **Application** : sur certains comptes, l'entrée de la barre latérale et le titre de la page indiquent **Routines**, le bouton indique **New routine** et d'autres libellés mentionnent routine. Pour y créer une tâche, consultez [Formulaire pleine page](#full-page-form).

458* **Adresse web** : `claude.ai/code/routines`476* **Adresse web** : `claude.ai/code/routines`

459* **CLI** : l'alias `/routines` de `/schedule`, la description de la commande et les réponses de Claude pendant qu'il configure une tâche477* **CLI** : l'alias `/routines` de `/schedule`, la description de la commande et les réponses de Claude pendant qu'il configure une tâche

460* **API** : le chemin de l'endpoint `/fire`, son en-tête bêta, le `type` de sa réponse, la balise `<routine-fire-payload>` et la page de référence [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)478* **API** : le chemin de l'endpoint `/fire`, son en-tête bêta, le `type` de sa réponse, la balise `<routine-fire-payload>` et la page de référence [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)

sandboxing.md +13 −1

Details

537 537 

538* **Dans votre répertoire de travail et les répertoires parents** : les fichiers de paramètres `.claude`, les répertoires `.claude/skills`, `.claude/agents`, `.claude/commands` et `.claude/hooks`, `.mcp.json`, ainsi que les fichiers que Claude Code exécute de lui-même, tels que `.claude/workflows` et `.claude/scheduled_tasks.json`538* **Dans votre répertoire de travail et les répertoires parents** : les fichiers de paramètres `.claude`, les répertoires `.claude/skills`, `.claude/agents`, `.claude/commands` et `.claude/hooks`, `.mcp.json`, ainsi que les fichiers que Claude Code exécute de lui-même, tels que `.claude/workflows` et `.claude/scheduled_tasks.json`

539* **Dans votre répertoire de travail uniquement** : les fichiers de démarrage du shell tels que `.bashrc` et `.zshrc`, `.gitconfig`, les répertoires `.vscode` et `.idea`, ainsi que `hooks` et `config` dans `.git`539* **Dans votre répertoire de travail uniquement** : les fichiers de démarrage du shell tels que `.bashrc` et `.zshrc`, `.gitconfig`, les répertoires `.vscode` et `.idea`, ainsi que `hooks` et `config` dans `.git`

540* **Les fichiers qui transformeraient votre répertoire de travail en dépôt git bare** : `HEAD`, `objects` et `refs` au niveau racine, ainsi que les entrées `config` et `hooks` existantes à cet endroit lorsqu'un `HEAD` se trouve à côté. Un fichier nommé `config` est refusé même en l'absence de `HEAD`. Sous Linux et WSL2, le sandbox supprime un fichier `HEAD` ou un répertoire `objects` ou `refs` de niveau racine qui apparaît pendant l'exécution d'une commande en sandbox540* **Les fichiers qui transformeraient votre répertoire de travail en dépôt git bare** : `HEAD`, `objects` et `refs` au niveau racine, ainsi que les entrées `config` et `hooks` existantes à cet endroit lorsqu'un fichier ou un lien symbolique `HEAD` se trouve à côté. Un fichier nommé `config` est refusé même en l'absence de `HEAD`. [Un `HEAD`, `objects` ou `refs` qui apparaît ultérieurement peut être supprimé](#when-the-sandbox-deletes-head-objects-or-refs). Sous Linux et WSL2, une commande en sandbox peut en créer un là où il n'en existe pas.

541* **Dans `~/.claude`, ou le répertoire vers lequel pointe `CLAUDE_CONFIG_DIR`** : la majeure partie de son contenu, ainsi que `~/.claude.json` et le magasin d'identifiants `.credentials.json`541* **Dans `~/.claude`, ou le répertoire vers lequel pointe `CLAUDE_CONFIG_DIR`** : la majeure partie de son contenu, ainsi que `~/.claude.json` et le magasin d'identifiants `.credentials.json`

542 542 

543Si un lien symbolique apparaît au chemin d'un fichier de paramètres protégé pendant la session, le sandbox refuse également les écritures dans le fichier vers lequel il pointe, à partir de la commande suivante.543Si un lien symbolique apparaît au chemin d'un fichier de paramètres protégé pendant la session, le sandbox refuse également les écritures dans le fichier vers lequel il pointe, à partir de la commande suivante.


552 552 

553Si `git merge` ou `git checkout` échoue avec `unable to unlink old` sur l'un de ces chemins, consultez [Une commande git échoue avec `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).553Si `git merge` ou `git checkout` échoue avec `unable to unlink old` sur l'un de ces chemins, consultez [Une commande git échoue avec `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).

554 554 

555#### Quand le sandbox supprime `HEAD`, `objects` ou `refs`

556 

557Une fois qu'une commande en sandbox se termine, une entrée `HEAD`, `objects` ou `refs` plus récente au niveau racine de votre répertoire de travail est supprimée, sauf s'il s'agit d'un dossier non vide. Plus récente signifie que l'entrée n'existait pas lorsque le sandbox a construit sa configuration pour la dernière fois : au démarrage de la session, ou après un changement tel que [`/cd`](https://code.claude.com/docs/fr/commands).

558 

559Un dossier `objects` ou `refs` plus récent et non vide est également supprimé, avec son contenu, lorsqu'un fichier ou un lien symbolique `HEAD` était présent la dernière fois que le sandbox a construit sa configuration. Pour conserver un dossier, consultez [Un dossier nommé `objects` ou `refs` disparaît après une commande](#a-folder-named-objects-or-refs-disappears-after-a-command).

560 

555#### Chemins refusés qui passent par un lien symbolique561#### Chemins refusés qui passent par un lien symbolique

556 562 

557Sous macOS, lorsqu'un chemin refusé passe par un lien symbolique, comme un `~/.claude` qui est un lien vers un dépôt de dotfiles, le sandbox refuse également l'emplacement réel du chemin. Cela couvre les refus propres au sandbox ainsi que vos entrées littérales `denyWrite` et `denyRead`.563Sous macOS, lorsqu'un chemin refusé passe par un lien symbolique, comme un `~/.claude` qui est un lien vers un dépôt de dotfiles, le sandbox refuse également l'emplacement réel du chemin. Cela couvre les refus propres au sandbox ainsi que vos entrées littérales `denyWrite` et `denyRead`.


881 887 

882Après l'échec, Claude peut [proposer de réexécuter la commande en dehors du sandbox](#the-unsandboxed-retry-escape-hatch). Approuvez cette nouvelle tentative ou exécutez la commande git vous-même dans un autre terminal. Si vous avez défini `allowUnsandboxedCommands` sur `false`, Claude ne peut pas proposer la nouvelle tentative, alors exécutez la commande vous-même.888Après l'échec, Claude peut [proposer de réexécuter la commande en dehors du sandbox](#the-unsandboxed-retry-escape-hatch). Approuvez cette nouvelle tentative ou exécutez la commande git vous-même dans un autre terminal. Si vous avez défini `allowUnsandboxedCommands` sur `false`, Claude ne peut pas proposer la nouvelle tentative, alors exécutez la commande vous-même.

883 889 

890### Un dossier nommé `objects` ou `refs` disparaît après une commande

891 

892Un dossier `objects` ou `refs` de premier niveau apparu pendant la session peut être [supprimé à la fin d'une commande sandboxée](#when-the-sandbox-deletes-head-objects-or-refs). Peu importe qu'il ait été créé par une commande, par Claude ou par vous. Pour conserver un dossier, laissez-y quelque chose. Si un fichier ou un lien symbolique `HEAD` s'est trouvé au premier niveau pendant la session, déplacez-le ailleurs, puis redémarrez chaque session Claude Code ouverte à cet emplacement.

893 

894Avant v2.1.307, le dossier était supprimé même s'il contenait quelque chose et en l'absence de `HEAD`. Si vous utilisez une version antérieure, [mettez à jour Claude Code](https://code.claude.com/docs/fr/setup.md#update-claude-code).

895 

884### Bubblewrap échoue à démarrer à l'intérieur d'un conteneur896### Bubblewrap échoue à démarrer à l'intérieur d'un conteneur

885 897 

886Dans un conteneur sans privilèges, [bubblewrap](#os-level-enforcement) ne peut pas monter un système de fichiers `/proc` frais, donc les commandes sandboxées échouent avec une erreur `bwrap` telle que `Can't mount proc on /newroot/proc: Operation not permitted`. Définissez [`enableWeakerNestedSandbox`](https://code.claude.com/docs/fr/settings-reference#sandbox-enableweakernestedsandbox) sur `true` pour que le sandbox bind-monte le `/proc` existant du conteneur à la place. Utilisez ce paramètre uniquement lorsque le conteneur externe fournit déjà la limite d'isolation dont vous avez besoin, car il expose aux commandes sandboxées des informations de processus qu'un montage `/proc` frais cacherait.898Dans un conteneur sans privilèges, [bubblewrap](#os-level-enforcement) ne peut pas monter un système de fichiers `/proc` frais, donc les commandes sandboxées échouent avec une erreur `bwrap` telle que `Can't mount proc on /newroot/proc: Operation not permitted`. Définissez [`enableWeakerNestedSandbox`](https://code.claude.com/docs/fr/settings-reference#sandbox-enableweakernestedsandbox) sur `true` pour que le sandbox bind-monte le `/proc` existant du conteneur à la place. Utilisez ce paramètre uniquement lorsque le conteneur externe fournit déjà la limite d'isolation dont vous avez besoin, car il expose aux commandes sandboxées des informations de processus qu'un montage `/proc` frais cacherait.

Details

30 30 

31Les deux boîtes Claude Code dans le diagramme sont des processus de session : un runner exécutant deux sessions à la fois, jusqu'à sa capacité configurée. Un runner sert un [propriétaire](#key-concepts) à la fois et se verrouille à ce propriétaire quand il réclame sa première session, donc le code extrait ne se mélange jamais entre les propriétaires ; [Cycle de vie du runner](#runner-lifecycle) couvre la règle.31Les deux boîtes Claude Code dans le diagramme sont des processus de session : un runner exécutant deux sessions à la fois, jusqu'à sa capacité configurée. Un runner sert un [propriétaire](#key-concepts) à la fois et se verrouille à ce propriétaire quand il réclame sa première session, donc le code extrait ne se mélange jamais entre les propriétaires ; [Cycle de vie du runner](#runner-lifecycle) couvre la règle.

32 32 

33Vous pouvez démarrer les runners vous-même et les maintenir en fonctionnement, ou exécuter l'[orchestrateur de mise à l'échelle automatique](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners), un deuxième processus que vous hébergez, qui démarre les runners à mesure que les sessions s'accumulent ; chaque runner se termine de lui-même quand son travail est terminé. De toute façon, vous configurez l'environnement une fois, et il apparaît dans le sélecteur sur chaque surface prise en charge.33Vous pouvez démarrer les runners vous-même et les maintenir en fonctionnement, ou exécuter l'[orchestrateur de mise à l'échelle automatique](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners), un deuxième processus que vous hébergez, qui démarre les runners à mesure que les sessions s'accumulent. De toute façon, vous configurez l'environnement une fois, et il apparaît dans le sélecteur sur chaque surface prise en charge.

34 34 

35## Disponibilité et limitations35## Disponibilité et limitations

36 36 


122 122 

123Les proxies de sortie d'entreprise sont pris en charge. Le runner et l'[orchestrateur de mise à l'échelle automatique](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners) optionnel honorent le proxy et les variables d'environnement mTLS décrites dans [Configuration réseau](https://code.claude.com/docs/fr/network-config.md), telles que `HTTPS_PROXY` et `NO_PROXY` ; définissez-les dans l'environnement de chaque processus. Les variables couvrent les appels du plan de contrôle, le WebSocket du [connecteur SCM](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#scm-connector-flags) de l'orchestrateur, et le clone intégré pour les télécommandes HTTPS, et les sessions les héritent du runner. Le streaming de session utilise les événements envoyés par le serveur sur HTTPS, donc un proxy dans le chemin ne doit pas mettre en mémoire tampon les réponses.123Les proxies de sortie d'entreprise sont pris en charge. Le runner et l'[orchestrateur de mise à l'échelle automatique](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners) optionnel honorent le proxy et les variables d'environnement mTLS décrites dans [Configuration réseau](https://code.claude.com/docs/fr/network-config.md), telles que `HTTPS_PROXY` et `NO_PROXY` ; définissez-les dans l'environnement de chaque processus. Les variables couvrent les appels du plan de contrôle, le WebSocket du [connecteur SCM](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#scm-connector-flags) de l'orchestrateur, et le clone intégré pour les télécommandes HTTPS, et les sessions les héritent du runner. Le streaming de session utilise les événements envoyés par le serveur sur HTTPS, donc un proxy dans le chemin ne doit pas mettre en mémoire tampon les réponses.

124 124 

125Si votre proxy nécessite également un en-tête `Proxy-Authorization`, le runner peut l'ajouter à chaque connexion qu'il ouvre au proxy ; consultez [S'authentifier auprès d'un proxy de sortie](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).125* **Authentification au proxy** : si votre proxy nécessite également un en-tête `Proxy-Authorization`, le runner peut l'ajouter à chaque connexion qu'il ouvre au proxy ; consultez [S'authentifier auprès d'un proxy de sortie](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).

126* **Réponses de longue durée** : si un runner récupère une session mais que Claude ne répond jamais à son premier message, votre proxy peut en être la cause. Consultez [Une session est récupérée, mais Claude ne répond jamais à son premier message](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#when-a-sessions-first-message-is-never-answered).

126 127 

127## Ce qui reste sur votre infrastructure128## Ce qui reste sur votre infrastructure

128 129 

Details

36| `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é. |36| `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é. |

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

38| `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. |38| `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_CODE_REMOTE_SLACK_CHANNEL_ID` | Pour une session Claude Tag, l'ID du canal Slack ou du message direct que la session sert ou dans lequel se trouve son fil, comme `C0123ABCDE`. Un horodatage Slack identifie un message au sein d'un seul canal, donc enregistrez cet ID avec `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`. Non défini pour les autres sessions, et peut aussi être non défini pour une session Claude Tag. |

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. |40| `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`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags) ; voir [Réutiliser un checkout pré-chauffé](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |41| `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`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags) ; voir [Réutiliser un checkout pré-chauffé](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

41| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Chemin vers un fichier de `CLAUDE_CONFIG_DIR` contenant les définitions de serveurs MCP que le plan de contrôle d'Anthropic a livrées pour cette session. Si votre wrapper reconstruit l'environnement de l'enfant, transmettez cette variable. Sans elle, lorsque le plan de contrôle met à jour les serveurs livrés, l'enfant arrête tout serveur stdio, HTTP ou SSE que votre wrapper ajoute avec [`--mcp-config`](https://code.claude.com/docs/fr/cli-reference#cli-flags) et qui ne figure pas dans la mise à jour. Nécessite Claude Code v2.1.299 ou ultérieur. |42| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Chemin vers un fichier de `CLAUDE_CONFIG_DIR` contenant les définitions de serveurs MCP que le plan de contrôle d'Anthropic a livrées pour cette session. Si votre wrapper reconstruit l'environnement de l'enfant, transmettez cette variable. Sans elle, lorsque le plan de contrôle met à jour les serveurs livrés, l'enfant arrête tout serveur stdio, HTTP ou SSE que votre wrapper ajoute avec [`--mcp-config`](https://code.claude.com/docs/fr/cli-reference#cli-flags) et qui ne figure pas dans la mise à jour. Nécessite Claude Code v2.1.299 ou ultérieur. |


44 45 

45Le 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.

46 47 

47`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.48Vous pouvez lire les variables `CLAUDE_CODE_REMOTE_SLACK_*` dans votre wrapper ou votre [hook `command`](#command), ainsi que dans 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.

48 49 

49### Donner une valeur par défaut aux variables qui peuvent être non définies50### Donner une valeur par défaut aux variables qui peuvent être non définies

50 51 

51`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:-}"`.52Si votre script utilise `set -u`, développez `CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` et `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` avec une valeur par défaut, comme `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`. Chacune peut être non définie, et avec `set -u`, Bash s'arrête avec `unbound variable` lorsqu'il développe une variable non définie.

52 53 

53### Mettre entre guillemets les arguments et les variables que votre script développe54### Mettre entre guillemets les arguments et les variables que votre script développe

54 55 


89* **Transmettez-les** : terminez le wrapper avec `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, qui transmet les flags de fichier avec tous les autres arguments. Ne les supprimez pas et ne les réécrivez pas. Si une session perd un flag de fichier de prompt, elle s'exécute sans les instructions que le plan de contrôle lui a envoyées.90* **Transmettez-les** : terminez le wrapper avec `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, qui transmet les flags de fichier avec tous les autres arguments. Ne les supprimez pas et ne les réécrivez pas. Si une session perd un flag de fichier de prompt, elle s'exécute sans les instructions que le plan de contrôle lui a envoyées.

90* **Sur un runner en v2.1.281 ou ultérieur, un flag de fichier que vous ajoutez remplace celui du serveur, sans jamais s'y ajouter** : chaque flag de fichier de prompt n'accepte qu'une seule valeur et Claude Code conserve la dernière occurrence, donc si vous ajoutez `--append-system-prompt-file <path>` après `"$@"`, le contenu de votre fichier remplace les instructions ajoutées par le serveur. Pour ajouter des instructions en plus de celles du serveur, placez-les dans le `CLAUDE.md` de l'image du runner, que le runner [injecte dans la configuration de niveau utilisateur de chaque session](#how-each-session’s-config-is-assembled).91* **Sur un runner en v2.1.281 ou ultérieur, un flag de fichier que vous ajoutez remplace celui du serveur, sans jamais s'y ajouter** : chaque flag de fichier de prompt n'accepte qu'une seule valeur et Claude Code conserve la dernière occurrence, donc si vous ajoutez `--append-system-prompt-file <path>` après `"$@"`, le contenu de votre fichier remplace les instructions ajoutées par le serveur. Pour ajouter des instructions en plus de celles du serveur, placez-les dans le `CLAUDE.md` de l'image du runner, que le runner [injecte dans la configuration de niveau utilisateur de chaque session](#how-each-session’s-config-is-assembled).

91 92 

93#### Corriger `Argument list too long` au démarrage de la session

94 

95Sur Linux, si vous réunissez le prompt du plan de contrôle et votre propre texte dans un seul argument `--append-system-prompt`, le runner consigne une ligne comme celle-ci dès que l'argument atteint 128 Ko :

96 

97```text theme={null}

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

99```

100 

101Linux limite chaque argument individuel à 32 pages mémoire, soit 128 Ko avec les pages habituelles de 4 Ko. La valeur renvoyée par `getconf ARG_MAX`, souvent 2 Mo, est une limite distincte qui porte sur l'ensemble des arguments et de l'environnement.

102 

103Sur Claude Code v2.1.283 ou ultérieur, laissez les flags de fichier dans `"$@"` et transmettez uniquement votre propre texte avec `--append-system-prompt`. Claude Code [utilise les deux](https://code.claude.com/docs/fr/cli-reference.md#system-prompt-flags), d'abord le prompt du plan de contrôle, puis votre propre texte :

104 

105```bash theme={null}

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

107```

108 

109Sur Linux, si votre propre texte atteint 128 Ko, déplacez-le dans le `CLAUDE.md` de l'image du runner, car il reste un seul argument.

110 

111En v2.1.281 ou v2.1.282, cette commande se termine avec `Cannot use both --append-system-prompt and --append-system-prompt-file`. Sur les versions antérieures, votre texte remplace le prompt du plan de contrôle sans erreur. Dans tous ces cas, effectuez d'abord la mise à jour, ou déplacez votre propre texte dans `CLAUDE.md`.

112 

92### Provisionner les identifiants limités au créateur de la session113### Provisionner les identifiants limités au créateur de la session

93 114 

94Utilisez la sous-commande `decode-token` pour lire les revendications du JWT de session. Elle lit le token à partir d'un argument, de `CLAUDE_CODE_SESSION_ACCESS_TOKEN` ou de stdin, dans cet ordre ; voir [Vérifier le token à l'intérieur de la session](https://code.claude.com/docs/fr/self-hosted-environments-identity.md#verify-the-token-inside-the-session) pour ce qu'elle vérifie. L'exemple ci-dessous décode l'identité du créateur, l'échange contre des identifiants AWS de courte durée et exec dans Claude Code :115Utilisez la sous-commande `decode-token` pour lire les revendications du JWT de session. Elle lit le token à partir d'un argument, de `CLAUDE_CODE_SESSION_ACCESS_TOKEN` ou de stdin, dans cet ordre ; voir [Vérifier le token à l'intérieur de la session](https://code.claude.com/docs/fr/self-hosted-environments-identity.md#verify-the-token-inside-the-session) pour ce qu'elle vérifie. L'exemple ci-dessous décode l'identité du créateur, l'échange contre des identifiants AWS de courte durée et exec dans Claude Code :


122| Variable | Description |143| Variable | Description |

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

124| `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 |145| `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 |

125| `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. |146| `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/heads/<branch>` ou `refs/pull/<number>/head`. Vide signifie la branche par défaut du dépôt. |

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

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

128| `CLAUDE_RUNNER_SESSION_UUID` | Le même ID de session sous la forme UUID canonique |149| `CLAUDE_RUNNER_SESSION_UUID` | Le même ID de session sous la forme UUID canonique |


303 324 

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

305 326 

3061. **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 de commande et laissez votre plateforme rejeter le doublon. Ne vous basez pas plutôt sur `CLAUDE_RUNNER_SESSION_ID`. Chaque re-demande pour une session porte le même ID de session avec un nouvel ID de commande. Une charge de travail nommée ou dédupliquée par l'ID de session n'est pas recréée tant que la première existe.

3072. **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`.

3083. **Utilisez le contrat du code de sortie.** Sortez avec le statut qui correspond au résultat :3293. **Utilisez le contrat du code de sortie.** Sortez avec le statut qui correspond au résultat :

309 330 

310 * **Sortie 0** : soumis.331 * **Sortie 0** : soumis.

311 * **Sortie 1, ou hook toujours en cours d'exécution à l'expiration de `--hook-timeout`** : échec pouvant être réessayé. La session recule et est re-proposée.332 * **Sortie 1, ou hook toujours en cours d'exécution à l'expiration de `--hook-timeout`** : échec pouvant être réessayé. La session recule et est re-proposée. Après 10 demandes échouées consécutives, elle est bloquée comme après une sortie 2 ou supérieure.

312 * **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](https://code.claude.com/docs/fr/cloud-environments.md#organization-shared-environments) sélectionne **Retry** sur elle dans l'onglet **Activity** de l'environnement.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](https://code.claude.com/docs/fr/cloud-environments.md#organization-shared-environments) sélectionne **Retry** sur elle dans l'onglet **Activity** de l'environnement.

313 334 

314 Pendant qu'une session recule, elle affiche **Queued** dans l'onglet **Activity** sans erreur de spawn, donc lisez la sortie du hook dans le journal de l'orchestrateur. Une fois bloquée, la session affiche **Failed**. Développez-la pour lire l'erreur de spawn, tirée des 512 derniers caractères du stderr du hook. Écrivez une erreur exploitable sur stderr, sans aucun secret. Dans un hook shell, [gardez les échecs transitoires réessayables](#keep-transient-failures-retryable-in-a-shell-hook).335 Pendant qu'une session recule, elle affiche **Queued** dans l'onglet **Activity** sans erreur de spawn, donc lisez la sortie du hook dans le journal de l'orchestrateur. Une fois bloquée, la session affiche **Failed**. Développez-la pour lire l'erreur de spawn, tirée des 512 derniers caractères du stderr du hook. Écrivez une erreur exploitable sur stderr, sans aucun secret. Dans un hook shell, [gardez les échecs transitoires réessayables](#keep-transient-failures-retryable-in-a-shell-hook).


318 339 

319Tout 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.

320 341 

321Une 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.342#### Corriger les sessions rouvertes qui restent Queued ou affichent Failed

343 

344Si des sessions rouvertes restent **Queued** ou affichent **Failed**, ou si votre hook expire sur elles, l'une des causes possibles est un hook qui nomme ou déduplique les charges de travail par l'ID de session. Une session est rouverte lorsque son utilisateur lui envoie un message après la sortie de son runner. Par exemple, prenons un hook qui construit le nom de chaque charge de travail ainsi :

345 

346```bash theme={null}

347name="runner-${CLAUDE_RUNNER_SESSION_ID}"

348```

349 

3501. Lors de la première demande de spawn de la session, le hook crée une charge de travail portant ce nom, et un runner démarre

3512. Le runner se termine, par exemple après [`--release-idle-session-min`](#make-on-demand-runners-exit-when-idle), et l'utilisateur rouvre plus tard la session

3523. La demande de spawn suivante de la session porte le même ID de session et un nouvel ID de commande, donc le hook construit le même nom

3534. Si votre plateforme possède encore la charge de travail de la première demande, parce que rien ne l'a [supprimée](#make-on-demand-runners-exit-when-idle) lorsque son runner s'est terminé, le hook ne crée aucune nouvelle charge de travail et aucun runner ne démarre

3545. Chaque demande de spawn ultérieure pour la session se termine de la même manière

355 

356Ouvrez votre propre hook et lisez ce qu'il fait lorsque la charge de travail existe déjà, par exemple lorsque votre plateforme rejette le nom en double. Repérez ce comportement dans la première colonne pour voir ce que la session rouverte affiche dans l'onglet **Activity** :

357 

358| Lorsque la charge de travail existe, votre hook | **Queued** passe à **Failed** | Erreur de spawn |

359| :- | :- | :- |

360| Sort avec 0 sans rien créer | Après 10 demandes de ce type consécutives | `runner did not register within ETA after max attempts` |

361| Sort avec 1 | Après 10 demandes de ce type consécutives | La fin du stderr de votre hook, ou `exit 1` s'il n'a rien écrit sur stderr |

362| Sort avec 2 ou plus | Immédiatement | La fin du stderr de votre hook, ou `exit` suivi du code, comme `exit 2`, s'il n'a rien écrit sur stderr |

363| Attend l'expiration de `--hook-timeout` | Après 10 demandes de ce type consécutives | La fin du stderr de votre hook, ou `spawn-runner hook timed out after 60000ms` s'il n'a rien écrit sur stderr |

364 

365Dans l'erreur de spawn de la dernière ligne, `60000` correspond à votre `--hook-timeout` en millisecondes. Lorsqu'un hook attend l'expiration de `--hook-timeout`, le journal de l'orchestrateur reçoit aussi une ligne `timed out after`.

366 

367Pour corriger le hook, construisez chaque nom ou clé à partir de `CLAUDE_RUNNER_ORDER_ID`, comme l'exige [la règle 1 du contrat du hook](#the-spawn-runner-hook). Dans l'exemple, le nom devient :

368 

369```bash theme={null}

370name="runner-${CLAUDE_RUNNER_ORDER_ID}"

371```

372 

373Si votre hook attend, faites-le également sortir une fois qu'il a soumis la charge de travail, car un hook qui attend [retarde les hooks suivants de son orchestrateur](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#orchestrator-cli-flags). Après avoir modifié le hook, vérifiez le statut de chaque session bloquée dans l'onglet **Activity** :

374 

375* **Queued** : la session reçoit d'elle-même sa prochaine demande de spawn

376* **Failed** : sélectionnez **Retry** sur elle en tant qu'Owner, ou demandez à son utilisateur de lui envoyer un nouveau message

322 377 

323#### Faire quitter les runners à la demande lorsqu'ils sont inactifs378#### Faire quitter les runners à la demande lorsqu'ils sont inactifs

324 379 


748 803 

749L'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.804L'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.

750 805 

806### Arrêter les sessions qui ne parviennent pas à récupérer les paramètres gérés par le serveur

807 

808Pour empêcher une session qui récupère des [paramètres gérés par le serveur](https://code.claude.com/docs/fr/server-managed-settings.md) de démarrer lorsque cette récupération échoue, définissez [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/fr/settings-reference#forceremotesettingsrefresh) sur `true` dans le [`managed-settings.json`](https://code.claude.com/docs/fr/settings#where-settings-live) de votre image runner. Une réponse de l'API d'Anthropic indiquant que votre organisation n'a aucun paramètre géré par le serveur compte comme une récupération réussie.

809 

810Avant d'ajouter la clé, vérifiez si l'environnement exécute des sessions de canal Claude Tag ou envoie des requêtes de modèle à Bedrock ou Agent Platform :

811 

812* **Sessions de canal Claude Tag** : n'ajoutez pas la clé sur les runners d'un environnement vers lequel un Owner [achemine des canaux Claude Tag](https://code.claude.com/docs/fr/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses). L'API d'Anthropic refuse la requête de paramètres gérés par le serveur de ces sessions, donc avec la clé définie, elles ne démarrent pas. Placez leurs règles dans le `managed-settings.json` de l'image runner, qu'[elles lisent toujours](https://code.claude.com/docs/fr/managed-settings.md#where-and-when-a-policy-applies). Pour utiliser la clé pour vos autres sessions, exécutez-les dans un environnement séparé.

813* **Bedrock ou Agent Platform** : les sessions sur ces fournisseurs [ne récupèrent pas les paramètres gérés par le serveur](#what-differs-from-sessions-on-the-anthropic-api), elles démarrent donc que vous définissiez la clé ou non. Appliquez plutôt vos règles à partir du même `managed-settings.json`.

814 

815Ce `managed-settings.json` définit la clé :

816 

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

818{

819 "forceRemoteSettingsRefresh": true

820}

821```

822 

823Définissez la clé dans ce fichier même si vous la définissez également dans la console d'administration de claude.ai. Une nouvelle session ne dispose d'aucune [copie en cache](https://code.claude.com/docs/fr/server-managed-settings.md#fetch-and-caching-behavior) de vos paramètres gérés par le serveur, donc si vous définissez la clé uniquement dans la console, la session ne l'a pas encore. Si sa récupération échoue ensuite, la session s'exécute sans ces paramètres jusqu'à ce qu'une récupération ultérieure réussisse.

824 

825Pour confirmer qu'un échec de récupération des paramètres est la raison pour laquelle une session n'a pas démarré, consultez [la dernière sortie de Claude Code](#keep-stdin-and-file-descriptor-3-attached) dans la session ou le log du runner. Elle contient `Your organization requires remote managed settings to load, but they could not be loaded.`

826 

751### Paramètres de dépôt dans les sessions avec plusieurs dépôts827### Paramètres de dépôt dans les sessions avec plusieurs dépôts

752 828 

753Dans un fil d'un [projet](https://code.claude.com/docs/fr/claude-projects.md#what-threads-pick-up-from-your-repositories), aucun `.claude/settings.json` de dépôt ne prend effet comme paramètres du projet et aucun `.mcp.json` ni aucun skill de dépôt ne se charge, quel que soit l'endroit où le fil démarre. Pour fournir un skill à ces fils, ajoutez-le à votre image runner.829Dans un fil d'un [projet](https://code.claude.com/docs/fr/claude-projects.md#what-threads-pick-up-from-your-repositories), aucun `.claude/settings.json` de dépôt ne prend effet comme paramètres du projet et aucun `.mcp.json` ni aucun skill de dépôt ne se charge, quel que soit l'endroit où le fil démarre. Pour fournir un skill à ces fils, ajoutez-le à votre image runner.

Details

313 313 

314Pour chaque session qui utilise git géré par Anthropic, le runner enregistre également une ligne `[runner:warn]` qui commence par `governed git: GIT_SSL_CAINFO is set` ou `governed git: GIT_SSL_NO_VERIFY is set`. La ligne dit ce que le runner a fait avec cette variable pour son propre git, pour git à l'intérieur de la session, et pour vos hooks de cycle de vie. Elle se termine par si vous devez changer quelque chose.314Pour chaque session qui utilise git géré par Anthropic, le runner enregistre également une ligne `[runner:warn]` qui commence par `governed git: GIT_SSL_CAINFO is set` ou `governed git: GIT_SSL_NO_VERIFY is set`. La ligne dit ce que le runner a fait avec cette variable pour son propre git, pour git à l'intérieur de la session, et pour vos hooks de cycle de vie. Elle se termine par si vous devez changer quelque chose.

315 315 

316### Ajouter des dépôts github.com aux sessions de canal Claude Tag

317 

318Si Claude ne parvient pas à ajouter un dépôt github.com à une session de canal Claude Tag, assurez-vous que le canal y a accès, même lorsque votre runner peut le cloner. Cet accès provient de paramètres sur GitHub et dans votre organisation Claude, et non des identifiants git de votre runner.

319 

320**1. Installer la GitHub App Claude**

321 

322Installez la [GitHub App Claude](https://github.com/apps/claude) sur l'organisation ou le compte GitHub propriétaire du dépôt, et incluez ce dépôt dans l'installation.

323 

324**2. Lier l'organisation ou le compte GitHub**

325 

326Dans [**Paramètres de l'organisation > Fournisseurs Git**](https://claude.ai/admin-settings/source-control), liez cette organisation ou ce compte à votre organisation Claude. Un Owner de votre organisation Claude qui est également propriétaire de l'organisation GitHub peut la lier. Consultez [Lier votre organisation GitHub](https://claude.com/docs/claude-tag/admins/configure-github#link-your-github-organization).

327 

328**3. Accorder l'accès au dépôt**

329 

330Dans les [paramètres d'administration de Claude Tag](https://claude.ai/admin-settings/claude-tag), accordez le dépôt au canal ou à une portée plus large qui inclut le canal : son espace de travail Slack ou l'ensemble de Slack. Une personne ayant le rôle Owner ou la permission Claude Tag Admin peut l'accorder. Un gestionnaire de canal peut également l'ajouter à son propre canal si son compte GitHub est administrateur du dépôt. Consultez [Accorder l'accès au dépôt](https://claude.com/docs/claude-tag/admins/configure-github#grant-repository-access).

331 

332Démarrez ensuite un nouveau fil dans le canal et [nommez le dépôt](https://claude.com/docs/claude-tag/admins/configure-github#how-granted-repositories-reach-a-session) dans votre premier message.

333 

334Si Claude ne parvient toujours pas à ajouter le dépôt, consultez [Si Claude ne peut pas atteindre un dépôt](https://claude.com/docs/claude-tag/admins/configure-github#if-claude-can%E2%80%99t-reach-a-repository) pour savoir où vérifier le lien GitHub et l'accès accordé au dépôt.

335 

316### Réécrire les URL git pour les réseaux privés336### Réécrire les URL git pour les réseaux privés

317 337 

318Les URL de dépôt arrivent du plan de contrôle en HTTPS, avec le nom d'hôte de votre hôte git ; pour GitHub Enterprise, c'est le nom d'hôte que vous avez configuré pour l'[intégration GitHub Enterprise](https://code.claude.com/docs/fr/github-enterprise-server.md) sur claude.ai. Deux flags répétables réécrivent ces URL avant le clone :338Les URL de dépôt arrivent du plan de contrôle en HTTPS, avec le nom d'hôte de votre hôte git ; pour GitHub Enterprise, c'est le nom d'hôte que vous avez configuré pour l'[intégration GitHub Enterprise](https://code.claude.com/docs/fr/github-enterprise-server.md) sur claude.ai. Deux flags répétables réécrivent ces URL avant le clone :


376 396 

377Les builds et les tests constituent généralement la plus grande et la plus variable partie de la charge d'une session, donc exécutez un build représentatif de votre référentiel, mesurez son pic de CPU et de mémoire, et augmentez toute valeur de départ qui ne laisse pas de place au processus Claude Code en plus de ce pic.397Les builds et les tests constituent généralement la plus grande et la plus variable partie de la charge d'une session, donc exécutez un build représentatif de votre référentiel, mesurez son pic de CPU et de mémoire, et augmentez toute valeur de départ qui ne laisse pas de place au processus Claude Code en plus de ce pic.

378 398 

379Le runner utilise `--capacity` pour limiter le nombre de sessions qu'il exécute à la fois. Il ne divise pas le CPU ou la mémoire entre elles, donc les sessions sur un runner partagent le CPU et la mémoire du conteneur. Pour limiter la part d'une session, appliquez les limites de votre [script wrapper](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#wrapper-scripts). Ce qu'il faut donner à un conteneur dépend donc du nombre de sessions qu'il dessert à la fois :399Le runner utilise `--capacity` pour limiter le nombre de sessions qu'il exécute à la fois. Il ne divise pas le CPU ou la mémoire entre elles, donc les sessions sur un runner partagent le CPU et la mémoire du conteneur. Pour éviter que la consommation de mémoire d'une session ne mette fin aux autres, exécutez une session par runner avec [sa propre limite de mémoire](#give-each-session-its-own-memory-limit).

380 400 

381* **Une session par runner** : donnez à chaque conteneur les valeurs d'une session. Utilisez ce dimensionnement à `--capacity 1`, que la [section de durcissement](#harden-your-deployment) recommande, et pour les [runners à la demande](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners), où vous définissez les valeurs sur la charge de travail que votre [hook `spawn-runner`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#the-spawn-runner-hook) soumet, comme un modèle de pod de Job Kubernetes.401* **Une session par runner** : donnez à chaque conteneur les valeurs d'une session. Utilisez ce dimensionnement à `--capacity 1`, que la [section de durcissement](#harden-your-deployment) recommande, et pour les [runners à la demande](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners), où vous définissez les valeurs sur la charge de travail que votre [hook `spawn-runner`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#the-spawn-runner-hook) soumet, comme un modèle de pod de Job Kubernetes.

382* **Plusieurs sessions par runner** : à un `--capacity` supérieur à un, multipliez les valeurs d'une session par la capacité, car jusqu'à ce nombre de sessions peuvent s'exécuter dans le conteneur en même temps. Les recettes [Kubernetes](#kubernetes) et [Docker Compose](#docker-compose) exécutent `--capacity 4` sans limites de CPU ou de mémoire, donc ajoutez des limites dimensionnées pour la capacité que vous exécutez.402* **Plusieurs sessions par runner** : à un `--capacity` supérieur à un, multipliez les valeurs d'une session par la capacité, car jusqu'à ce nombre de sessions peuvent s'exécuter dans le conteneur en même temps. Les recettes [Kubernetes](#kubernetes) et [Docker Compose](#docker-compose) exécutent `--capacity 4` sans limites de CPU ou de mémoire, donc ajoutez des limites dimensionnées pour la capacité que vous exécutez.

403* **Plusieurs conteneurs de runner sur un même hôte** : dimensionnez l'hôte pour la somme des capacités des runners, car chaque runner ne décompte que ses propres sessions par rapport à `--capacity` :

404 

405 * **Mémoire** : multipliez la mémoire d'une session par cette somme, puis ajoutez ce qu'utilisent les propres processus de l'hôte

406 * **CPU** : multipliez la demande de CPU d'une session par cette somme. Pour permettre à toutes les sessions de dépasser leur demande en même temps, multipliez plutôt sa limite de CPU.

407 

408 Donnez à chaque runner son propre conteneur. Utilisez le [même chemin `--base-dir`](#keep-the-base-directory-and-capacity-identical-across-runners) dans chacun, sur un stockage qu'aucun autre conteneur de runner ne monte, afin que chaque runner dispose de [son propre répertoire de travail](#harden-your-deployment).

409 

410### Donner à chaque session sa propre limite de mémoire

411 

412Pour empêcher une session de mettre fin aux autres lorsque la mémoire vient à manquer, exécutez chaque runner à `--capacity 1` sous sa propre limite de mémoire, définie à la mémoire d'une session :

413 

414* **Dans un conteneur** : exécutez un runner par conteneur, et définissez la limite de mémoire du conteneur, comme `limits.memory` sur Kubernetes, `--memory` sur Docker, ou `mem_limit` dans un fichier Compose. Gardez la somme des limites des conteneurs en dessous de la mémoire de l'hôte, car lorsque l'hôte lui-même manque de mémoire, le noyau peut tuer des processus n'importe où sur l'hôte.

415* **Sous systemd sans conteneur** : définissez `MemoryMax` sur l'unité du runner, et exécutez un runner par hôte, car les runners qui [utilisent le même `--base-dir`](#keep-the-base-directory-and-capacity-identical-across-runners) sur un même système de fichiers partagent les dépôts qui y sont clonés. Par exemple, à `--capacity 1` sans hook `checkout`, leurs sessions sur un même dépôt peuvent travailler simultanément dans le même checkout. Pour exécuter plusieurs runners sur un même hôte, donnez à chacun un conteneur.

416 

417Lorsqu'un conteneur ou une unité atteint sa limite de mémoire, le noyau tue des processus uniquement à l'intérieur de celui-ci. Si vous définissez `--capacity` au-dessus de un, les sessions partagent une seule limite. Lorsqu'elles l'atteignent, le noyau ne choisit pas par session les processus à tuer, donc la consommation de mémoire d'une session peut mettre fin aux autres.

418 

419Sur Kubernetes, vous ne pouvez séparer les sessions avec aucune des valeurs du paramètre `singleProcessOOMKill` du kubelet. Vous ne pouvez pas non plus plafonner la mémoire totale d'une session avec un `ulimit` de mémoire dans votre [script wrapper](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#wrapper-scripts). Le noyau applique une valeur comme `ulimit -v` à chaque processus séparément.

420 

421### Laisser de la marge sous les limites de processus et de threads

422 

423Pour dimensionner une limite de processus et de threads, mesurez ce dont une session a besoin et multipliez-le par le nombre de sessions qui partagent la limite. Lorsque ces sessions atteignent la limite, le noyau refuse les nouveaux processus et threads, de sorte que les commandes, les builds et les tests de n'importe laquelle d'entre elles peuvent échouer. L'appel refusé renvoie `EAGAIN`, dont le message standard est `Resource temporarily unavailable`.

424 

425Supposons qu'une session atteigne un pic de 300 processus et threads, et que quatre sessions partagent la limite. Ensemble, elles ont besoin de 1 200, et avec une limite de 2 400, vous laissez de la marge pour des builds qui en nécessitent deux fois plus.

426 

427#### Où définir chaque limite

428 

429Chaque limite de ce tableau compte les threads ainsi que les processus, et `pids.max` est le fichier qui contient la limite d'un cgroup :

430 

431| Limite | Où la définir | Ce qui la partage |

432| :- | :- | :- |

433| `pids.max` sur Kubernetes | `podPidsLimit` dans la configuration du kubelet des nœuds qui exécutent les runners. Vous ne pouvez pas la définir dans une spécification de Pod. | Les conteneurs d'un même Pod |

434| `pids.max` sur Docker | `--pids-limit`, ou `pids_limit` dans un fichier Compose | Un conteneur |

435| `pids.max` sous systemd | `TasksMax` sur l'unité du runner | Une unité |

436| `ulimit -u` | Le shell ou le service qui démarre le runner | Tout ce qui, sur l'hôte, s'exécute sous l'ID utilisateur du runner. Non appliquée pour root. |

437 

438Lorsque vous ne définissez pas `TasksMax`, systemd applique `DefaultTasksMax`, qui vaut par défaut 15 % de la plus petite des valeurs parmi `kernel.pid_max`, `kernel.threads-max` et le `pids.max` du cgroup racine.

439 

440#### Mesurer le pic d'une session

441 

442Pour obtenir les chiffres de vos propres runners, mesurez une session sur son hôte, qui, sur Kubernetes, est le nœud :

443 

444**1. Démarrer un runner seul**

445 

446Démarrez un runner à `--capacity 1` sans rien d'autre dans son conteneur ou son unité systemd, seul sur son hôte et dans son environnement :

447 

448* **Son hôte** : utilisez-en un qui n'exécute aucun autre runner. Vous pourrez alors repérer son processus à l'étape suivante.

449* **Son environnement** : faites-en le seul runner présent, par exemple dans un environnement que vous [créez pour le test](https://code.claude.com/docs/fr/self-hosted-environments-quickstart.md#set-up-manually). Les sessions sont acheminées vers un environnement et non vers un runner.

450 

451Ne démarrez pas encore de session, car vous avez besoin du répertoire de l'étape suivante avant que le build ne commence.

452 

453**2. Trouver le répertoire cgroup du runner**

454 

455Sur l'hôte, et non à l'intérieur du conteneur, trouvez l'ID de processus du runner, par exemple avec `ps`. Lisez `/proc/<pid>/cgroup` pour cet ID :

456 

457* **Une ligne contient `:pids:`** : l'hôte utilise cgroup v1, et le répertoire est `/sys/fs/cgroup/pids` suivi du texte qui suit `:pids:`

458* **La seule ligne commence par `0::`** : l'hôte utilise cgroup v2, et le répertoire est `/sys/fs/cgroup` suivi du texte qui suit `0::`

459 

460**3. Exécuter un build représentatif et relever le pic**

461 

462Faites passer une session par un build représentatif, et relevez le pic depuis le répertoire cgroup du runner :

463 

464* **Le répertoire contient `pids.peak`** : lisez le fichier une fois le build terminé

465* **Le répertoire ne contient pas `pids.peak`** : lisez `pids.current` une fois par seconde pendant l'exécution du build, et conservez la valeur la plus élevée. Un pic survenant entre deux lectures passe inaperçu, considérez donc cette valeur comme une estimation basse.

466 

467**4. Multiplier par les sessions qui partagent la limite**

468 

469* **Le Pod, le conteneur ou l'unité d'un seul runner** : multipliez le pic par le `--capacity` du runner

470* **Une limite que plusieurs runners partagent** : multipliez le pic par la somme de leurs capacités

471 

472Ajoutez ensuite le pic de tout ce qui partage également la limite, comme un autre conteneur du Pod.

473 

474**5. Définir la limite au-dessus du résultat**

475 

476Avec une limite plus élevée, vous laissez de la marge pour des builds plus lourds, et avec une limite plus basse, vous arrêtez plus tôt une fork bomb.

477 

478#### Vérifier une limite `pids.max`

479 

480* **Vérifier si `pids.max` a été atteinte** : recherchez dans le log du noyau de l'hôte, par exemple avec `dmesg`, une ligne contenant `cgroup: fork rejected by pids controller in` et le chemin d'un cgroup. Le noyau ne la consigne que la première fois qu'il refuse un processus ou un thread dans ce cgroup, recherchez donc dans l'ensemble du log.

481* **Voir la limite en vigueur** : lisez `pids.max` dans le répertoire cgroup du runner et dans chaque répertoire situé au-dessus. La valeur la plus basse est la limite en vigueur, et `max` signifie qu'il n'y a aucune limite à ce niveau.

383 482 

384## Kubernetes483## Kubernetes

385 484 


577 676 

578Ce que le chemin de réutilisation fait et ne garantit pas :677Ce que le chemin de réutilisation fait et ne garantit pas :

579 678 

580* **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.679* **Profondeur du clone** : créez le clone sans `--depth`, avec ou sans `--single-branch`. Le runner ne passe jamais `--depth` lorsqu'il récupère dans un clone doté d'un remote `origin`, même si vous définissez [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/fr/self-hosted-environments-reference#environment-variable-only-settings). Avec un clone complet, chaque session ne télécharge que les commits qui manquent au clone. Avec un clone peu profond, une session sur une branche qui a divergé avant le commit le plus ancien du clone télécharge tout l'historique de cette branche.

581* **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.680* **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.

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

583 682 


587* **Avec le proxy git, un pré-chauffage `reftable` perd ses refs** : quand le runner assainit `.git/` avant chaque session, il conserve `.git/refs/` et supprime le répertoire `.git/reftable/`. Un clone pré-chauffé au format de ref `reftable` de git perd ainsi ses refs ; pré-chauffez donc plutôt le clone au format de ref `files` de git.686* **Avec le proxy git, un pré-chauffage `reftable` perd ses refs** : quand le runner assainit `.git/` avant chaque session, il conserve `.git/refs/` et supprime le répertoire `.git/reftable/`. Un clone pré-chauffé au format de ref `reftable` de git perd ainsi ses refs ; pré-chauffez donc plutôt le clone au format de ref `files` de git.

588* **Les longs clones n'ont besoin d'aucune solution de contournement** : le runner limite chaque opération git avec un watchdog sans progrès de 120 secondes et un plafond dur de 30 minutes, pas un délai d'expiration plat, donc un clone froid lent qui continue de signaler le progrès se termine.687* **Les longs clones n'ont besoin d'aucune solution de contournement** : le runner limite chaque opération git avec un watchdog sans progrès de 120 secondes et un plafond dur de 30 minutes, pas un délai d'expiration plat, donc un clone froid lent qui continue de signaler le progrès se termine.

589 688 

689### Confirmer que le runner utilise votre clone

690 

691Pour confirmer que le runner utilise votre clone, démarrez-le avec [`--log-level debug`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags) et lancez une session sur le dépôt. Le runner consigne `Prefetched repo found at` et le chemin du clone. S'il consigne plutôt `No prefetched repo, fresh init at`, il n'a trouvé aucun clone utilisable au chemin indiqué dans cette ligne. Vérifiez que votre clone se trouve à ce chemin, qu'il appartient à l'utilisateur du runner et qu'il possède un remote nommé `origin`.

692 

693Si le runner trouve votre clone et que les sessions démarrent toujours lentement, vérifiez si le clone est peu profond.

694 

590## Épingler la version695## Épingler la version

591 696 

592Par défaut, le processus enfant 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. Avec ce comportement par défaut, chaque session exécute la version que vous avez installée sur l'hôte ou intégrée à l'image. Une mise à jour au niveau de l'hôte prend effet la prochaine fois que le runner démarre.697Par défaut, le processus enfant 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. Avec ce comportement par défaut, chaque session exécute la version que vous avez installée sur l'hôte ou intégrée à l'image. Une mise à jour au niveau de l'hôte prend effet la prochaine fois que le runner démarre.


609* **Flotte fixe** : exécutez un ensemble statique de répliques runner et mettez à l'échelle sur les [métriques Prometheus](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#prometheus-metrics) que chaque runner sert714* **Flotte fixe** : exécutez un ensemble statique de répliques runner et mettez à l'échelle sur les [métriques Prometheus](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#prometheus-metrics) que chaque runner sert

610* **Runners à la demande** : exécutez la sous-commande `claude self-hosted-runner orchestrator`, qui interroge Anthropic pour les sessions en attente sans runner disponible et invoque votre hook `spawn-runner` pour en démarrer un par session. Consultez [Runners à la demande](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners).715* **Runners à la demande** : exécutez la sous-commande `claude self-hosted-runner orchestrator`, qui interroge Anthropic pour les sessions en attente sans runner disponible et invoque votre hook `spawn-runner` pour en démarrer un par session. Consultez [Runners à la demande](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners).

611 716 

717### Libérer les sessions inactives sur une flotte fixe

718 

719Si des sessions restent en attente sur une flotte fixe alors que chaque runner est en ligne, les sessions inactives peuvent en être la cause. Par défaut, une session conserve son emplacement une fois son tour terminé, et son runner reste verrouillé sur le [propriétaire](https://code.claude.com/docs/fr/self-hosted-environments#key-concepts) de cette session. Si la [tâche planifiée cloud](https://code.claude.com/docs/fr/routines.md) de votre équipe démarre une nouvelle session à chaque exécution, ses sessions inactives peuvent occuper tous les emplacements.

720 

721Pour vérifier, lisez `claude_code_self_hosted_runner_session_idle_seconds` dans les [métriques Prometheus](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#prometheus-metrics) de chaque runner. Chaque session détenue par un runner possède sa propre série : `0` tant que la session est occupée, sinon le nombre de secondes écoulées depuis qu'elle est devenue inactive. Choisissez la durée d'inactivité que vous autorisez : plus longue que les pauses que les gens font en cours de tâche, et suffisamment courte pour que chaque exécution soit libérée avant le démarrage de la suivante de la tâche planifiée. Comparez ensuite les séries à cette durée.

722 

723* **Séries au-dessus de cette durée, comme `1800` pour 30 minutes** : des sessions inactives occupent ces emplacements, définissez donc `--release-idle-session-min`

724* **Toutes les séries en dessous** : aucune session n'est restée inactive aussi longtemps. Ajoutez des runners, ou définissez [`--kill-session-after-min`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags) pour les [sessions qui ne deviennent jamais inactives](#some-sessions-don’t-count-as-idle).

725* **Un runner sans aucune série** : aucune session ne l'occupe. Consultez **Sessions stay queued** sous [Dépannage](#troubleshooting).

726* **Un runner dont les métriques ne répondent pas** : son processus s'est peut-être arrêté. Consultez **An environment that looks healthy** sous [Quand le runner s'arrête](#when-the-runner-exits).

727 

728Pour libérer les sessions inactives, démarrez chaque runner avec [`--release-idle-session-min`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags) suivi de cette durée en minutes, par exemple `--release-idle-session-min 30`. Le runner libère alors toute session qui reste inactive aussi longtemps, qu'elle ait été démarrée par une tâche planifiée ou par une personne.

729 

730* **Travail non poussé** : une session libérée reprend à son prochain message, sans le travail qu'elle n'avait pas poussé. Pour conserver ses commits, consultez [Les sessions reprises perdent le travail non poussé](#additional-limitations).

731* **Arrêt du runner** : un runner qui libère sa dernière session entame un [arrêt normal](#when-the-runner-exits). Faites-le redémarrer par votre superviseur sur un système de fichiers vierge, comme le décrit [Renforcer votre déploiement](#harden-your-deployment).

732* **Sessions qui ne deviennent jamais inactives** : définissez également [`--kill-session-after-min`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags), car [certaines sessions ne comptent pas comme inactives](#some-sessions-don’t-count-as-idle)

733 

612## Problèmes connus et limitations734## Problèmes connus et limitations

613 735 

614Voici les limitations de cette version, avec des solutions de contournement où l'une existe.736Voici les limitations de cette version, avec des solutions de contournement où l'une existe.


642### Limitations supplémentaires764### Limitations supplémentaires

643 765 

644* **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.766* **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.

645 * **Pour conserver le travail commité** : définissez [`--push-outcome-on-release`](https://code.claude.com/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.767 * **Pour conserver le travail commité** : définissez [`--push-outcome-on-release`](https://code.claude.com/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).

646 * **Avec un hook `checkout`** : les dépôts extraits via un [hook de cycle de vie `checkout`](https://code.claude.com/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`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#post-session).768 * **Avec un hook `checkout`** : les dépôts extraits via un [hook de cycle de vie `checkout`](https://code.claude.com/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`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#post-session).

647 * **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.769 * **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.

770 * **Les modifications non commitées sont toujours perdues** : pour demander à Claude de créer un commit et de pousser lorsqu'il a fini de répondre, consultez [Demander aux sessions de pousser leur travail](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)

648* **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.771* **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.

649* **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é.772* **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é.

650* **Quand quelqu'un archive ou supprime une session, ou libère son runner depuis le menu de la session** : ne comptez pas sur le push de [`--push-outcome-on-release`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags). Pour sauvegarder les commits dans ces cas, poussez `HEAD` vers une branche de secours à partir d'un [hook `post-session`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#post-session). Si vous partez de l'exemple qui s'y trouve, faites-le pousser même lorsqu'il n'y a aucune modification non commitée, car il ne pousse qu'après un commit d'instantané.773* **Quand quelqu'un archive ou supprime une session, ou libère son runner depuis le menu de la session** : ne comptez pas sur le push de [`--push-outcome-on-release`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags). Pour sauvegarder les commits dans ces cas, poussez `HEAD` vers une branche de secours à partir d'un [hook `post-session`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#post-session). Si vous partez de l'exemple qui s'y trouve, faites-le pousser même lorsqu'il n'y a aucune modification non commitée, car il ne pousse qu'après un commit d'instantané.


684* **Les sessions échouent immédiatement après leur prise en charge** : ouvrez la session dans claude.ai/code pour voir l'erreur. Si l'erreur indique que git n'a pas pu s'authentifier, vérifiez les [identifiants git](#configure-git) du runner. Sur un runner démarré avec `--use-anthropic-git-proxy`, consultez [Lorsque les sessions ne démarrent pas sur un runner avec le proxy git](#when-anthropic-doesnt-serve-a-session).807* **Les sessions échouent immédiatement après leur prise en charge** : ouvrez la session dans claude.ai/code pour voir l'erreur. Si l'erreur indique que git n'a pas pu s'authentifier, vérifiez les [identifiants git](#configure-git) du runner. Sur un runner démarré avec `--use-anthropic-git-proxy`, consultez [Lorsque les sessions ne démarrent pas sur un runner avec le proxy git](#when-anthropic-doesnt-serve-a-session).

685 808 

686 Un répertoire de base non accessible en écriture arrête le runner au démarrage au lieu de faire échouer les sessions. Consultez l'entrée **Le runner s'arrête au démarrage avec `cannot create or write to base directory`** de cette liste.809 Un répertoire de base non accessible en écriture arrête le runner au démarrage au lieu de faire échouer les sessions. Consultez l'entrée **Le runner s'arrête au démarrage avec `cannot create or write to base directory`** de cette liste.

810* **Une session est prise en charge, mais Claude ne répond jamais à son premier message** : si vos runners joignent `api.anthropic.com` via un proxy, configurez-le pour qu'il transmette la réponse `/worker/events/stream` de la session au fur et à mesure de son arrivée. Augmenter les délais d'expiration du runner n'aide pas. Pour confirmer la cause dans le log du runner, consultez [Une session est prise en charge, mais Claude ne répond jamais à son premier message](#when-a-sessions-first-message-is-never-answered).

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

688* **Les sessions ne peuvent pas accéder au réseau via un proxy de sortie avec authentification** : lorsque la source que vous avez définie avec [`--proxy-authorization-command` ou `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) échoue, expire au bout de 30 secondes ou renvoie une valeur vide, le runner répond `502 Bad Gateway` à cette connexion et journalise la raison. Le runner masque le stderr de la commande dans ce log et ne journalise jamais la valeur de l'en-tête. Avec `--proxy-authorization-command`, exécutez vous-même la commande sur l'hôte pour vérifier qu'elle affiche la valeur complète de l'en-tête sur stdout. Si le runner s'arrête plutôt au démarrage avec `could not start the proxy-authorization listener`, il n'a pas pu ouvrir son listener de loopback.812* **Les sessions ne peuvent pas accéder au réseau via un proxy de sortie avec authentification** : lorsque la source que vous avez définie avec [`--proxy-authorization-command` ou `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) échoue, expire au bout de 30 secondes ou renvoie une valeur vide, le runner répond `502 Bad Gateway` à cette connexion et journalise la raison. Le runner masque le stderr de la commande dans ce log et ne journalise jamais la valeur de l'en-tête. Avec `--proxy-authorization-command`, exécutez vous-même la commande sur l'hôte pour vérifier qu'elle affiche la valeur complète de l'en-tête sur stdout. Si le runner s'arrête plutôt au démarrage avec `could not start the proxy-authorization listener`, il n'a pas pu ouvrir son listener de loopback.

689* **Le runner journalise des lignes `Poll failed` contenant `rejecting the malformed poll response`** : le runner a reçu une réponse d'interrogation de travail dont le corps n'est pas le JSON attendu de la file d'attente. L'une des causes possibles est un proxy d'interception ou un portail captif qui répond avec sa propre page. Si le runner se connecte via un proxy, configurez le proxy pour qu'il transmette sans modification les réponses de `api.anthropic.com`.813* **Le runner journalise des lignes `Poll failed` contenant `rejecting the malformed poll response`** : le runner a reçu une réponse d'interrogation de travail dont le corps n'est pas le JSON attendu de la file d'attente. L'une des causes possibles est un proxy d'interception ou un portail captif qui répond avec sa propre page. Si le runner se connecte via un proxy, configurez le proxy pour qu'il transmette sans modification les réponses de `api.anthropic.com`.


708* **Une session échoue au démarrage avec `This runner couldn't read`** : le runner a demandé un dépôt à l'hôte git avec ses [identifiants git](#configure-git) et a reçu une réponse indiquant que le dépôt est introuvable. Le dépôt n'existe pas, ou ces identifiants ne permettent pas d'atteindre le dépôt.832* **Une session échoue au démarrage avec `This runner couldn't read`** : le runner a demandé un dépôt à l'hôte git avec ses [identifiants git](#configure-git) et a reçu une réponse indiquant que le dépôt est introuvable. Le dépôt n'existe pas, ou ces identifiants ne permettent pas d'atteindre le dépôt.

709 * **Si vous administrez le runner** : accordez à ses identifiants git un accès en lecture au dépôt, puis démarrez une nouvelle session.833 * **Si vous administrez le runner** : accordez à ses identifiants git un accès en lecture au dépôt, puis démarrez une nouvelle session.

710 * **Si vous avez démarré la session** : si le dépôt n'existe pas, démarrez une nouvelle session avec le bon dépôt. Si le runner ne peut pas atteindre le dépôt, demandez à l'administrateur du runner d'accorder l'accès, puis démarrez une nouvelle session.834 * **Si vous avez démarré la session** : si le dépôt n'existe pas, démarrez une nouvelle session avec le bon dépôt. Si le runner ne peut pas atteindre le dépôt, demandez à l'administrateur du runner d'accorder l'accès, puis démarrez une nouvelle session.

711* **Les sessions mettent plusieurs minutes à démarrer** : le clone initial en est généralement la cause principale. Surveillez la [métrique](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` pour le confirmer, et réduisez la durée du clone avec un [checkout préchauffé](#reuse-a-pre-warmed-checkout) ou une valeur de `CLAUDE_RUNNER_FETCH_DEPTH` plus petite.835* **Les sessions mettent plusieurs minutes à démarrer ou à reprendre** : l'une des causes est un clone initial. Sur une flotte qui démarre chaque runner sur un disque vide, sans [hook `checkout`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#checkout), le runner clone à nouveau les dépôts de la session avant de démarrer Claude Code. Une session qui reprend sur un disque vide attend de nouveau ce même clone.

836 

837 Pour éviter le clone initial, fournissez un [checkout préchauffé](#reuse-a-pre-warmed-checkout). Si vous en fournissez déjà un, [vérifiez que le runner l'utilise](#confirm-that-the-runner-uses-your-clone). Lorsque le runner effectue lui-même le clone et s'arrête après une seule session, réduisez [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/fr/self-hosted-environments-reference#environment-variable-only-settings) par rapport à sa valeur par défaut de 50 commits afin de récupérer moins d'historique.

838 

839 Si vous utilisez un hook, il s'exécute à la place du clone du runner ; examinez donc plutôt ce que fait votre hook. Surveillez la [métrique](https://code.claude.com/docs/fr/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` pour connaître la durée des démarrages.

712* **Les tours échouent avec une erreur 401** : lorsqu'un tour se termine par une erreur 401 ou 403 de l'API Anthropic, le runner récupère un nouveau [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#wrapper-scripts) auprès d'Anthropic et le transmet à la session. Le tour échoué n'est pas réessayé. Ce jeton a une durée de vie courte, et le runner le renouvelle via le stdin de la session.840* **Les tours échouent avec une erreur 401** : lorsqu'un tour se termine par une erreur 401 ou 403 de l'API Anthropic, le runner récupère un nouveau [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#wrapper-scripts) auprès d'Anthropic et le transmet à la session. Le tour échoué n'est pas réessayé. Ce jeton a une durée de vie courte, et le runner le renouvelle via le stdin de la session.

713 841 

714 Lorsqu'une récupération échoue, le runner journalise une ligne `inference_token refresh failed` indiquant quand il réessaiera, et il continue de réessayer tant que la session s'exécute.842 Lorsqu'une récupération échoue, le runner journalise une ligne `inference_token refresh failed` indiquant quand il réessaiera, et il continue de réessayer tant que la session s'exécute.


788 916 

789Pour un diagnostic guidé sur l'hôte du runner, exécutez la [sous-commande doctor](#troubleshooting).917Pour un diagnostic guidé sur l'hôte du runner, exécutez la [sous-commande doctor](#troubleshooting).

790 918 

919### Une session est prise en charge, mais Claude ne répond jamais à son premier message

920 

921Si un runner prend en charge une session mais que Claude ne répond jamais au premier message, et que vos runners joignent `api.anthropic.com` via un proxy, le proxy peut en être la cause. Anthropic envoie à une session ses messages via une unique réponse en streaming qui reste ouverte. Si votre proxy la met en tampon, ou y met fin avant d'avoir transmis quoi que ce soit, le premier message n'arrive jamais. Les autres requêtes de la session réussissent quand même.

922 

923Pour corriger le problème, modifiez la façon dont le proxy traite cette requête :

924 

925```text theme={null}

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

927```

928 

929* **Ne mettez pas la réponse en tampon** : transmettez-la au fur et à mesure de son arrivée. Son type de contenu est `text/event-stream`.

930* **Laissez la réponse ouverte** : elle peut rester ouverte jusqu'à une heure. Si le proxy a un délai d'inactivité, maintenez-le bien au-dessus de 15 secondes, car Anthropic envoie par défaut un keep-alive au moins aussi souvent.

931 

932Démarrez ensuite une nouvelle session et vérifiez que Claude répond. Augmenter les délais d'expiration du runner n'aide pas : vous attendez seulement plus longtemps avant que le runner n'arrête la session.

933 

934#### Confirmer la cause dans le log du runner

935 

936Ces étapes concernent les runners sur Claude Code v2.1.287 ou ultérieure, avec le niveau par défaut `--log-level info`. Les runners plus anciens journalisent ces lignes plus tard, voire pas du tout.

937 

9381. Attendez que [`--startup-timeout-min`](https://code.claude.com/docs/fr/self-hosted-environments-reference#runner-cli-flags) soit écoulé, 15 minutes par défaut. Le runner arrête alors la session et journalise une ligne qui contient `no child output for` et se termine par `— releasing`.

9392. Cherchez `SDKStartup: SSE` dans le log du runner. Ces lignes suivent une ligne `finished: interrupted`, quelques lignes après celle de l'étape 1. La plupart n'ont pas d'horodatage ; un collecteur de logs peut donc les afficher ailleurs.

9403. Trouvez la ligne dans ce tableau :

941 

942| La ligne de log contient | Que faire |

943| :- | :- |

944| `SSE connect failed (no response in 30s)` ou `SSE liveness timeout` | Vérifiez que le proxy transmet la requête, qu'il transmet les en-têtes et les données de la réponse au fur et à mesure de leur arrivée, et qu'il ne coupe pas la connexion |

945| `SSE connect failed (HTTP` et un code de statut | Consultez le log du proxy lui-même. Si le proxy a répondu lui-même à la requête, laissez la requête le traverser. |

946| `SSE connect failed (` et tout autre texte | Le texte entre parenthèses est l'erreur. Cherchez la même connexion dans le log du proxy lui-même. |

947| `SSE stream ended by server`, encore et encore | Vérifiez la limite de durée du proxy pour les réponses de longue durée. Une seule ligne de ce type est normale. |

948| `SSE reconnected after` | Cherchez l'une des autres lignes après celle-ci. Cette ligne ne signifie pas que quoi que ce soit a atteint la session. |

949 

950Si le log ne contient aucune de ces lignes, ou si le log du proxy ne montre aucune anomalie, [signalez un problème](#report-an-issue).

951 

952#### Empêcher la session de réessayer

953 

954La session conserve le message en attente, et un runner capable de servir le propriétaire de la session la reprend en charge. Tant que vous n'avez pas modifié le proxy, la session attend de la même manière à chaque fois. Pour y mettre fin, archivez la session dans claude.ai/code.

955 

791## Prochaines étapes956## Prochaines étapes

792 957 

793* [Personnaliser les sessions](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md) : scripts wrapper, hooks de cycle de vie, runners à la demande, serveurs MCP, et permissions958* [Personnaliser les sessions](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md) : scripts wrapper, hooks de cycle de vie, runners à la demande, serveurs MCP, et permissions

Details

121* **La session ne démarre pas en raison d'une erreur git** : si l'erreur 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.121* **La session ne démarre pas en raison d'une erreur git** : si l'erreur 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.

122 * **Fournir des identifiants HTTPS** : consultez [Configurer git](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#configure-git)122 * **Fournir des identifiants HTTPS** : consultez [Configurer git](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#configure-git)

123 * **Cloner plutôt via SSH** : si l'hôte du runner dispose déjà d'une clé SSH, consultez [Réécrire les URL git pour les réseaux privés](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)123 * **Cloner plutôt via SSH** : si l'hôte du runner dispose déjà d'une clé SSH, consultez [Réécrire les URL git pour les réseaux privés](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)

124 * **Après l'un ou l'autre correctif** : redémarrez le runner et surveillez la session en échec au lieu d'en démarrer une nouvelle. Si elle a échoué plusieurs fois, attendez plusieurs minutes que le runner consigne `Picked up session`.

125 * **Pour utiliser plutôt un autre dépôt** : [archivez](https://code.claude.com/docs/fr/claude-code-on-the-web.md#archive-sessions) ou [supprimez](https://code.claude.com/docs/fr/claude-code-on-the-web.md#delete-sessions) la session en échec, puis redémarrez le runner et démarrez une nouvelle session. Sinon, le runner peut récupérer la session en échec au lieu de la nouvelle.

124 126 

125### Si le runner se termine127### Si le runner se termine

126 128 

Details

83 83 

84| Drapeau | Par défaut | Description |84| Drapeau | Par défaut | Description |

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

86| `--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. |86| `--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. L'orchestrateur ne vérifie la présence de nouvelles demandes de génération qu'une fois que tous les hooks qu'il a lancés sont terminés ; un hook lent retarde donc les hooks suivants de cet orchestrateur. |

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

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

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


116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Combien de temps le runner attend après qu'une session atteigne sa limite `--kill-session-after-min`, pour qu'un tour en cours se termine ou que la libération se termine, avant de terminer la session |116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Combien de temps le runner attend après qu'une session atteigne sa limite `--kill-session-after-min`, pour qu'un tour en cours se termine ou que la libération se termine, avant de terminer la session |

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

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

119| `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. |119| `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. Pour un clone déjà présent dans l'espace de travail, consultez [Réutiliser un checkout préchauffé](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

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

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

122| `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é |122| `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é |


231 interval: 30s231 interval: 30s

232```232```

233 233 

234### Exemples de règles d'alerte

235 

234Ces règles d'alerte d'exemple sont un point de départ ; ajustez les seuils pour la taille de votre flotte :236Ces règles d'alerte d'exemple sont un point de départ ; ajustez les seuils pour la taille de votre flotte :

235 237 

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


252 annotations:254 annotations:

253 summary: "Les runners exécutent des versions mixtes"255 summary: "Les runners exécutent des versions mixtes"

254 - alert: ClaudeRunnerInitErrorsHigh256 - alert: ClaudeRunnerInitErrorsHigh

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

256 for: 5m258 for: 5m

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

258 annotations:260 annotations:

259 summary: "Runner {{ $labels.pod }} : >3 échecs d'initialisation de session en 10m (hook de checkout / git / jeton / crash pré-init)"261 summary: "Des sessions échouent avant l'initialisation (hook de checkout / git / jeton / crash pré-init)"

260 - alert: ClaudeRunnerPollErrors262 - alert: ClaudeRunnerPollErrors

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

262 for: 2m264 for: 2m


264 annotations:266 annotations:

265 summary: "Runner {{ $labels.pod }} : PollWork échouant ({{ $value | humanize }}/s sur 5m)"267 summary: "Runner {{ $labels.pod }} : PollWork échouant ({{ $value | humanize }}/s sur 5m)"

266 - alert: ClaudeRunnerSessionStartHookErrors268 - alert: ClaudeRunnerSessionStartHookErrors

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

268 for: 5m270 for: 5m

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

270 annotations:272 annotations:

271 summary: "Runner {{ $labels.pod }} : >3 échecs de hook SessionStart en 10m"273 summary: "Des hooks SessionStart échouent"

272 274 

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

274 rules:276 rules:


285 annotations:287 annotations:

286 summary: "L'orchestrateur {{ $labels.pod }} n'a pas pollé depuis >90s (la boucle de poll attend l'exécution du hook)"288 summary: "L'orchestrateur {{ $labels.pod }} n'a pas pollé depuis >90s (la boucle de poll attend l'exécution du hook)"

287 - alert: ClaudeOrchestratorCircuitBroken289 - alert: ClaudeOrchestratorCircuitBroken

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

289 for: 1m291 for: 1m

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

291 annotations:293 annotations:


304 summary: "Orchestrateur {{ $labels.pod }} : >3 échecs de hook spawn-runner en 5m"306 summary: "Orchestrateur {{ $labels.pod }} : >3 échecs de hook spawn-runner en 5m"

305```307```

306 308 

309### Alerter sur les runners perdus et les sessions en attente

310 

311Sur une [flotte fixe](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#scale-the-fleet), chargez `ClaudeRunnersBelowFloor`. Avec des [runners à la demande](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners), chargez plutôt `ClaudeOrchestratorSessionsWaiting` et `ClaudeOrchestratorQueueWaitHigh`.

312 

313#### Alerter lorsqu'une flotte fixe perd des runners

314 

315`ClaudeRunnersBelowFloor` se déclenche lorsqu'il reste, pendant 10 minutes, moins de runners enregistrés et scrapés que le plancher :

316 

317```yaml theme={null}

318groups:

319 # Flottes fixes uniquement. Avec des runners à la demande, le nombre suit la demande,

320 # donc ClaudeRunnersBelowFloor se déclencherait chaque fois que la demande est faible.

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

322 rules:

323 - alert: ClaudeRunnersBelowFloor

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

325 for: 10m

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

327 annotations:

328 summary: "Runners enregistrés et scrapés : {{ $value }}, sous le plancher. Vérifiez d'abord les workloads des runners, puis les cibles de scrape si tous sont en cours d'exécution."

329```

330 

331* **Plancher** : définissez le `2` dans `expr` à environ la moitié de votre nombre de replicas, arrondi au supérieur. Avec trois replicas, conservez `2`, et l'alerte se déclenche lorsqu'il reste un runner ou aucun.

332* **Namespace** : remplacez `claude-runners` dans le matcher et dans `labels`, et copiez l'alerte pour chaque namespace supplémentaire. Si vos cibles n'ont pas de label `namespace`, supprimez le matcher et le label, sinon l'alerte lit 0 et se déclenche.

333* **`ClaudeRunnerPollStale` et `ClaudeRunnerPollErrors`** : conservez-les chargées depuis les [exemples de règles d'alerte](#sample-alert-rules), car `ClaudeRunnersBelowFloor` compte toujours un runner qui ne peut pas poller

334 

335#### Alerter lorsque des sessions attendent des runners à la demande

336 

337`ClaudeOrchestratorSessionsWaiting` se déclenche lorsque le nombre de sessions en attente d'un runner reste supérieur à 0 pendant 10 minutes. `ClaudeOrchestratorQueueWaitHigh` se déclenche lorsque plus de 1 % des attentes en queue des 10 dernières minutes ont dépassé 160 secondes, et que cela persiste pendant 5 minutes :

338 

339```yaml theme={null}

340groups:

341 # Runners à la demande uniquement. Aucune modification nécessaire pour le namespace.

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

343 rules:

344 - alert: ClaudeOrchestratorSessionsWaiting

345 expr: |

346 max by (namespace) (

347 claude_code_self_hosted_orchestrator_pool_pending_sessions

348 and on (instance)

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

350 ) > 0

351 for: 10m

352 labels: {severity: warning}

353 annotations:

354 summary: "Sessions en attente d'un runner : {{ $value }}, au-dessus du seuil pendant 10 minutes. Vérifiez claude_code_self_hosted_orchestrator_spawn_hooks_total par résultat, puis les workloads de runner qui ne démarrent pas."

355 - alert: ClaudeOrchestratorQueueWaitHigh

356 expr: |

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

358 rate(claude_code_self_hosted_orchestrator_session_queue_wait_seconds_bucket[10m])

359 )) > 160

360 for: 5m

361 labels: {severity: warning}

362 annotations:

363 summary: "Plus de 1 % des attentes en queue des 10 dernières minutes ont dépassé 160 secondes. Vérifiez si ClaudeOrchestratorDisconnected se déclenche, puis claude_code_self_hosted_orchestrator_spawn_hooks_total par résultat et claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds."

364```

365 

366* **Seuil** : si une session est toujours en attente, relevez le `> 0` dans `ClaudeOrchestratorSessionsWaiting` au-dessus du nombre que vous observez habituellement

367* **`ClaudeOrchestratorDisconnected`** : conservez-la chargée depuis les [exemples de règles d'alerte](#sample-alert-rules), car `ClaudeOrchestratorSessionsWaiting` cesse de se déclencher environ 2 minutes après la déconnexion du dernier orchestrateur du namespace

368 

307### Passer les métriques enfants de session369### Passer les métriques enfants de session

308 370 

309Chaque session s'exécute dans son propre processus enfant avec ses propres métriques OpenTelemetry ; à `--capacity` au-dessus d'un, le runner réécrit comment ces métriques enfants sont exposées. Définir `OTEL_METRICS_EXPORTER=prometheus` sur l'hôte du runner et `CLAUDE_CODE_ENABLE_TELEMETRY=1` dans l'environnement de la session, par exemple à partir de votre [script wrapper](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#wrapper-scripts) ou l'environnement du runner lui-même, que les sessions héritent, réexpose les instruments de compteur et de jauge de chaque enfant sur le propre endpoint `/metrics` du runner, aux côtés des séries du runner. Le runner réécrit l'exporteur de l'enfant pour pousser sur OTLP vers un récepteur loopback uniquement sur le port de santé, étiquette chaque série avec les labels `session_id` et `client_platform`, et évince les séries d'une session quand cette session se termine. Les histogrammes ne passent pas, et une métrique enfant dont le nom entrerait en collision avec le propre préfixe du runner est supprimée.371Chaque session s'exécute dans son propre processus enfant avec ses propres métriques OpenTelemetry ; à `--capacity` au-dessus d'un, le runner réécrit comment ces métriques enfants sont exposées. Définir `OTEL_METRICS_EXPORTER=prometheus` sur l'hôte du runner et `CLAUDE_CODE_ENABLE_TELEMETRY=1` dans l'environnement de la session, par exemple à partir de votre [script wrapper](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#wrapper-scripts) ou l'environnement du runner lui-même, que les sessions héritent, réexpose les instruments de compteur et de jauge de chaque enfant sur le propre endpoint `/metrics` du runner, aux côtés des séries du runner. Le runner réécrit l'exporteur de l'enfant pour pousser sur OTLP vers un récepteur loopback uniquement sur le port de santé, étiquette chaque série avec les labels `session_id` et `client_platform`, et évince les séries d'une session quand cette session se termine. Les histogrammes ne passent pas, et une métrique enfant dont le nom entrerait en collision avec le propre préfixe du runner est supprimée.

Details

324}324}

325```325```

326 326 

327Une entrée d'ID de modèle telle que `"claude-opus-5"` permet également les versions ultérieures qui l'étendent, comme Opus 5.5. Pour bloquer l'une de ces versions, utilisez [`deniedModels`](#deniedmodels). Pour que chaque entrée d'ID de modèle permette uniquement la version qu'elle nomme, utilisez [`availableModelsMatch`](#availablemodelsmatch). Consultez [Restreindre la sélection du modèle](https://code.claude.com/docs/fr/model-config.md#restrict-model-selection).327Une entrée d'ID de modèle telle que `"claude-opus-5"` permet également les versions ultérieures qui l'étendent, comme Opus 5.5. Pour bloquer l'une de ces versions, utilisez [`deniedModels`](#deniedmodels). Pour que chaque entrée d'ID de modèle permette uniquement la version qu'elle nomme, utilisez [`availableModelsMatch`](#availablemodelsmatch). Consultez [Restreindre la sélection du modèle](https://code.claude.com/docs/fr/model-config.md#restrict-model-selection). Pour les ID de fournisseurs tiers, consultez [Épingler les modèles pour les déploiements tiers](https://code.claude.com/docs/fr/model-config.md#pin-models-for-third-party-deployments).

328 328 

329### `availableModelsMatch`329### `availableModelsMatch`

330 330 


333* **Portée** : [`Géré`](#scopes). Claude Code ignore la clé dans les paramètres utilisateur, de projet et locaux et dans `--settings`, avec un avertissement333* **Portée** : [`Géré`](#scopes). Claude Code ignore la clé dans les paramètres utilisateur, de projet et locaux et dans `--settings`, avec un avertissement

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

335 * `"prefix"` : une entrée d'ID de modèle permet sa version et tout ID de modèle qui l'étend avec un autre segment335 * `"prefix"` : une entrée d'ID de modèle permet sa version et tout ID de modèle qui l'étend avec un autre segment

336 * `"exact"` : une entrée d'ID de modèle permet uniquement la version qu'elle nomme, y compris les ID datés de cette version, donc `"claude-opus-5"` permet Opus 5 mais pas `claude-opus-5-5`. Un alias de famille comme `"opus"` permet toujours la famille entière, et les entrées `best`, `opusplan`, et `default` sont ignorées336 * `"exact"` : une entrée d'ID de modèle permet uniquement la version qu'elle nomme, donc `"claude-opus-5"` permet Opus 5 mais pas `claude-opus-5-5`. Une entrée comme `"claude-opus-4-5"` permet également son ID de modèle Anthropic daté `claude-opus-4-5-20251101`. Un alias de famille comme `"opus"` permet toujours la famille entière, et les entrées `best`, `opusplan`, et `default` sont ignorées

337* **Par défaut** : `"prefix"`337* **Par défaut** : `"prefix"`

338 338 

339Cet exemple permet Opus 5 et Sonnet 5 et aucune version ultérieure de l'un ou l'autre :339Cet exemple permet Opus 5 et Sonnet 5 et aucune version ultérieure de l'un ou l'autre :


1371 1371 

1372Claude Code supprime une barre oblique finale d'un chemin de répertoire, donc `~/.aws` et `~/.aws/` correspondent au même répertoire. Avant v2.1.224, Claude Code transmettait la barre oblique finale au sandbox, et Claude pouvait toujours lire ou écrire des chemins sous une entrée `denyRead` ou `denyWrite` écrite avec une.1372Claude Code supprime une barre oblique finale d'un chemin de répertoire, donc `~/.aws` et `~/.aws/` correspondent au même répertoire. Avant v2.1.224, Claude Code transmettait la barre oblique finale au sandbox, et Claude pouvait toujours lire ou écrire des chemins sous une entrée `denyRead` ou `denyWrite` écrite avec une.

1373 1373 

1374Claude Code supprime également un `/**` final, donc `~/build/**` et `~/build` couvrent le même répertoire. Le fait qu'un caractère générique tel que `*` fonctionne dépend de la liste dans laquelle se trouve l'entrée et de la plateforme :1374##### Où les caractères génériques fonctionnent dans les chemins du sandbox

1375 1375 

1376* **`allowWrite` et `denyWrite`** : sur macOS, les caractères génériques fonctionnent. Sur Linux et WSL2, le sandbox monte des chemins concrets, donc Claude Code ignore une entrée qui contient `*`, `?` ou `[` une fois que le `/**` final est supprimé, et cette entrée n'a aucun effet. Claude Code ajoute les chemins de vos règles de permission `Edit` à ces listes, donc la même limite s'applique à elles, et l'onglet **Config** de `/sandbox` avertit des règles de permission `Edit` et `Read` qui contiennent des caractères génériques.1376Les caractères génériques `*`, `?` et `**` fonctionnent dans les quatre listes de chemins `sandbox.filesystem` sous macOS, et à moins d'endroits sous Linux et WSL2 :

1377* **`denyRead` et `allowRead`** : les caractères génériques fonctionnent sur chaque plateforme. Sur Linux et WSL2, Claude Code développe une entrée de lecture aux chemins concrets qu'elle correspond, ce qu'il ne fait pas pour les listes d'écriture.

1378 1377 

1379Les accolades correspondent à des caractères ordinaires dans un nom, donc `~/data/{keys,tokens}` couvre un répertoire littéralement nommé `{keys,tokens}`, et non deux alternatives. Pour couvrir `~/data/keys` et `~/data/tokens`, ajoutez chacun comme une entrée distincte.1378| Liste `sandbox.filesystem` | Ce qui fonctionne sous Linux et WSL2 | Exemple qui ne fonctionne pas sous Linux et WSL2 | Ce qu'il faut écrire à la place |

1379| :- | :- | :- | :- |

1380| `denyRead`, `allowRead` | Un `/**` final fonctionne, donc `~/build/**` couvre le même répertoire que `~/build`. Tout autre caractère générique ne fonctionne qu'après le premier nom de répertoire du [chemin complet](#sandbox-path-prefixes) de l'entrée. | `/**/*.pem` dans `denyRead` ne couvre rien, il ne bloque donc aucune lecture | `/srv/**/*.pem`, avec une entrée pour chaque répertoire de premier niveau |

1381| `allowWrite`, `denyWrite` | Seul un `/**` final fonctionne, donc `~/build/**` couvre le même répertoire que `~/build` | `./src/*` ne couvre qu'un fichier ou répertoire de `src` nommé littéralement `*`, et rien s'il n'en existe pas | `./src`, qui couvre tout ce qui se trouve sous `src`, ou une entrée pour chaque chemin |

1382 

1383Dans `~/keys/*.pem`, le caractère générique se trouve après le premier nom de répertoire, qui est `home` pour un répertoire personnel `/home/alice` :

1384 

1385```text theme={null}

1386~/keys/*.pem the entry

1387/home/alice/keys/*.pem its full path

1388 ^^^^ the first directory name, home

1389```

1390 

1391Sous Linux et WSL2, l'onglet **Config** de `/sandbox` dans une session signale les règles de permission `Edit` contenant un caractère générique autre qu'un `/**` final. Ces caractères génériques ne fonctionnent pas pour les commandes en sandbox. Ajoutez chaque chemin que la règle doit couvrir, ou le répertoire qui les contient, à `allowWrite` pour une règle d'autorisation ou à `denyWrite` pour une règle de refus.

1392 

1393##### Noms de répertoires contenant des crochets, des accolades ou des parenthèses

1394 

1395Pour autoriser ou bloquer un répertoire dont le nom contient des crochets, écrivez le nom tel quel, par exemple `./app/[slug]`. Dans cette entrée, `[slug]` est le nom réel du répertoire, crochets compris :

1396 

1397```text theme={null}

1398app/

1399└── [slug]/

1400 └── page.tsx

1401```

1402 

1403Cette entrée couvre tout ce qui se trouve sous le répertoire, omettez donc le `/**` final. Sous macOS ainsi que sous Linux et WSL2, le répertoire `app/[slug]` doit exister au démarrage de la commande en sandbox.

1404 

1405* **Crochets comme `[slug]`** : dans toutes les listes sous macOS, et dans `denyRead` et `allowRead` sous Linux et WSL2, les crochets de `./app/[slug]` constituent également un motif. L'entrée correspond alors aussi à tout chemin sous `app` nommé par un seul caractère de `slug`, comme `app/s` ou `app/g`. Avec cette entrée dans `allowRead`, ou dans `allowWrite` sous macOS, les commandes en sandbox peuvent également atteindre ces chemins. Renommez ceux qu'elles ne doivent pas atteindre.

1406* **Crochets comme `[user-id]` ou `[post-id]`, où le caractère à gauche du trait d'union se trie après celui de droite** : `./app/[user-id]` ne couvre que le répertoire portant exactement ce nom, dans toutes les listes et sur toutes les plateformes. Avant la v2.1.304, les commandes en sandbox sous Linux et WSL2 ne parvenaient pas à démarrer lorsque `denyRead` ou `allowRead` contenait une telle entrée.

1407* **Accolades et parenthèses** : ce sont des caractères ordinaires, donc `~/data/{keys,tokens}` couvre un seul répertoire nommé `{keys,tokens}`, et non deux alternatives. Pour couvrir `~/data/keys` et `~/data/tokens`, ajoutez chacun comme entrée distincte.

1380 1408 

1381### `sandbox.filesystem.allowWrite`1409### `sandbox.filesystem.allowWrite`

1382 1410 


3470 3498 

3471La correspondance du nom d'hôte est insensible à la casse et traite `hooks.example.com.`, avec le point final qui marque un nom de domaine pleinement qualifié, de la même manière que `hooks.example.com`, ce qui est la façon dont le DNS les traite. La liste d'autorisation s'applique aux hooks de toutes les sources, y compris les paramètres gérés.3499La correspondance du nom d'hôte est insensible à la casse et traite `hooks.example.com.`, avec le point final qui marque un nom de domaine pleinement qualifié, de la même manière que `hooks.example.com`, ce qui est la façon dont le DNS les traite. La liste d'autorisation s'applique aux hooks de toutes les sources, y compris les paramètres gérés.

3472 3500 

3473Dans l'option `managedSettings` de l'Agent SDK, Claude Code ignore cette clé lorsque sa liste contient des entrées ; transmettez donc plutôt la liste dans l'option `settings` du SDK. Consultez [ce que fait chaque valeur dans les paramètres parents](https://code.claude.com/docs/fr/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3501Dans l'option `managedSettings` de l'Agent SDK, Claude Code ignore une liste contenant des entrées ; transmettez-la donc plutôt dans l'[option `settings`](https://code.claude.com/docs/fr/agent-sdk/typescript#options) du SDK. Consultez [ce que fait une liste vide dans les paramètres parents](https://code.claude.com/docs/fr/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3474 3502 

3475### `allowManagedHooksOnly`3503### `allowManagedHooksOnly`

3476 3504 


3520La portée dépend du fichier qui porte la clé :3548La portée dépend du fichier qui porte la clé :

3521 3549 

3522* **Dans les paramètres gérés** : Claude Code désactive tous les hooks configurés, y compris les hooks gérés, et continue d'exécuter les hooks que l'[Agent SDK](https://code.claude.com/docs/fr/agent-sdk/overview.md) enregistre en processus3550* **Dans les paramètres gérés** : Claude Code désactive tous les hooks configurés, y compris les hooks gérés, et continue d'exécuter les hooks que l'[Agent SDK](https://code.claude.com/docs/fr/agent-sdk/overview.md) enregistre en processus

3523* **Dans l'option `managedSettings` de l'Agent SDK** : Claude Code traite la clé comme `allowManagedHooksOnly: true` ; consultez donc [ce qui s'exécute sous `allowManagedHooksOnly`](#what-runs-under-allowmanagedhooksonly) pour savoir quels hooks s'arrêtent. Sur une machine où un administrateur déploie des paramètres gérés, Claude Code ignore cette clé sauf si l'administrateur [autorise un hôte d'intégration à ajouter une politique](https://code.claude.com/docs/fr/managed-settings.md#let-an-embedding-host-add-policy). Nécessite Claude Code v2.1.309 ou ultérieur.3551* **Dans l'option `managedSettings` de l'Agent SDK** : sur une machine où un administrateur déploie des paramètres gérés, Claude Code ignore cette clé sauf si l'administrateur [autorise un hôte d'intégration à ajouter une politique](https://code.claude.com/docs/fr/managed-settings.md#let-an-embedding-host-add-policy). Là où la clé prend effet, les hooks utilisateur, projet, local et plugin s'arrêtent, tout comme ceux de l'option `settings` du SDK. Les hooks gérés d'un administrateur, les hooks des plugins [force-enabled](#enabledplugins) et vos [callbacks de hooks SDK](https://code.claude.com/docs/fr/agent-sdk/hooks.md) continuent de s'exécuter. Nécessite Claude Code v2.1.309 ou ultérieur.

3524* **Dans tout autre fichier de paramètres** : Claude Code désactive les hooks utilisateur, projet, local et plugin ; les hooks gérés, les hooks Agent SDK et les hooks des plugins force-enabled dans les [`enabledPlugins`](#enabledplugins) gérés continuent de s'exécuter3552* **Dans tout autre fichier de paramètres** : Claude Code désactive les hooks utilisateur, projet, local et plugin ; les hooks gérés, les hooks Agent SDK et les hooks des plugins force-enabled dans les [`enabledPlugins`](#enabledplugins) gérés continuent de s'exécuter

3525 3553 

3526La clé arrête également les [mods](https://code.claude.com/docs/fr/plugins/mods/overview.md), qui sont des plugins dont le code enregistre des hooks :3554La clé arrête également les [mods](https://code.claude.com/docs/fr/plugins/mods/overview.md), qui sont des plugins dont le code enregistre des hooks :


3624 3652 

3625La liste d'autorisation s'applique aux hooks de toutes les sources, y compris les paramètres gérés.3653La liste d'autorisation s'applique aux hooks de toutes les sources, y compris les paramètres gérés.

3626 3654 

3627Dans l'option `managedSettings` de l'Agent SDK, Claude Code ignore cette clé lorsque sa liste contient des entrées ; transmettez donc plutôt la liste dans l'option `settings` du SDK. Consultez [ce que fait chaque valeur dans les paramètres parents](https://code.claude.com/docs/fr/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3655Dans l'option `managedSettings` de l'Agent SDK, Claude Code ignore une liste contenant des entrées ; transmettez-la donc plutôt dans l'[option `settings`](https://code.claude.com/docs/fr/agent-sdk/typescript#options) du SDK. Consultez [ce que fait une liste vide dans les paramètres parents](https://code.claude.com/docs/fr/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3628 3656 

3629### `workflowKeywordTriggerEnabled`3657### `workflowKeywordTriggerEnabled`

3630 3658 


3841* **Type** : Boolean3869* **Type** : Boolean

3842 * `true` : Claude Code n'exécute jamais la commande déclarée par la marketplace, n'installe ni ne met à jour les plugins provenant de sources de commande, et arrête de charger ceux déjà installés3870 * `true` : Claude Code n'exécute jamais la commande déclarée par la marketplace, n'installe ni ne met à jour les plugins provenant de sources de commande, et arrête de charger ceux déjà installés

3843 * `false` : Claude Code autorise explicitement les plugins provenant de sources de commande3871 * `false` : Claude Code autorise explicitement les plugins provenant de sources de commande

3844* **Default** : unset, donc Claude Code suit [`allowManagedHooksOnly`](#allowmanagedhooksonly) : une organisation qui restreint l'exécution des hooks aux paramètres gérés obtient également les sources de commande désactivées3872* **Default** : unset, donc Claude Code suit [`allowManagedHooksOnly`](#allowmanagedhooksonly) : une organisation qui restreint l'exécution des hooks aux paramètres gérés obtient également les sources de commande désactivées. Une application qui passe [`disableAllHooks: true`](#disableallhooks) dans l'option `managedSettings` de l'Agent SDK ne désactive pas à elle seule les sources de commande.

3845 3873 

3846```json managed-settings.json theme={null}3874```json managed-settings.json theme={null}

3847{3875{

Details

127 127 

128```bash ~/.tmux.conf theme={null}128```bash ~/.tmux.conf theme={null}

129set -g allow-passthrough on129set -g allow-passthrough on

130set -g focus-events on

130set -s extended-keys on131set -s extended-keys on

131set -as terminal-features 'xterm*:extkeys'132set -as terminal-features 'xterm*:extkeys'

132```133```

133 134 

134La ligne `allow-passthrough` permet aux notifications et aux mises à jour de progression d'atteindre le terminal externe au lieu d'être absorbées par tmux. Les lignes `extended-keys` permettent à tmux de distinguer Shift+Entrée d'une simple Entrée afin que le raccourci de nouvelle ligne fonctionne.135La ligne `allow-passthrough` permet aux notifications et aux mises à jour de progression d'atteindre le terminal externe au lieu d'être absorbées par tmux. Les lignes `extended-keys` permettent à tmux de distinguer Shift+Entrée d'une simple Entrée afin que le raccourci de nouvelle ligne fonctionne.

135 136 

137L'[`Image` d'un mod](https://code.claude.com/docs/fr/plugins/mods/reference#elements) nécessite les lignes `allow-passthrough` et `focus-events`, ainsi que les autres [conditions requises pour dessiner dans tmux](https://code.claude.com/docs/fr/plugins/mods/gallery.md#draw-an-image-inside-tmux). Après avoir ajouté ces lignes, détachez-vous également de tmux, rattachez-vous, puis redémarrez Claude Code.

138 

136## Corriger la suppression d'un mot entier avec Retour arrière sur Windows139## Corriger la suppression d'un mot entier avec Retour arrière sur Windows

137 140 

138Sur Windows, Claude Code lit un Retour arrière qui arrive sous la forme `^H` comme Ctrl+Retour arrière, ce qui [supprime le mot précédent](https://code.claude.com/docs/fr/interactive-mode.md#text-editing), sauf quand `TERM_PROGRAM` est `mintty` ou `TERM` est `cygwin`. Sur macOS et Linux, Claude Code le lit comme un simple Retour arrière.141Sur Windows, Claude Code lit un Retour arrière qui arrive sous la forme `^H` comme Ctrl+Retour arrière, ce qui [supprime le mot précédent](https://code.claude.com/docs/fr/interactive-mode.md#text-editing), sauf quand `TERM_PROGRAM` est `mintty` ou `TERM` est `cygwin`. Sur macOS et Linux, Claude Code le lit comme un simple Retour arrière.

ultrareview.md +2 −2

Details

176La sous-commande se termine avec l'un de ces trois codes :176La sous-commande se termine avec l'un de ces trois codes :

177 177 

178* **0** : la révision s'est terminée, avec ou sans constatations178* **0** : la révision s'est terminée, avec ou sans constatations

179* **1** : la revue n'a pas pu se lancer ou a été arrêtée avant sa fin, la session cloud a généré une erreur, ou le délai d'expiration s'est écoulé. Le code est également 1 lorsque le [dossier n'est pas approuvé](#trust-the-folder-before-the-review-runs), y compris lorsque vous répondez `n` ou appuyez sur Ctrl-C à la question de confiance.179* **1** : la revue n'a pas pu se lancer ou a été arrêtée avant sa fin, la session cloud a généré une erreur, ou le délai d'expiration s'est écoulé. Le code est également 1 lorsque le [dossier n'est pas approuvé](#trust-the-folder-before-the-review-runs), y compris lorsque vous répondez `n`, appuyez sur Entrée ou appuyez sur Ctrl-C à la question de confiance.

180* **130** : vous avez appuyé sur Ctrl-C pendant que la sous-commande lançait la revue, attendait les constatations ou envoyait le commentaire `--post`, plutôt qu'à la question de confiance180* **130** : vous avez appuyé sur Ctrl-C pendant que la sous-commande lançait la revue, attendait les constatations ou envoyait le commentaire `--post`, plutôt qu'à la question de confiance

181 181 

182Si la sous-commande se termine avant l'arrivée des constatations, celles-ci n'atteignent jamais votre terminal. La revue peut toujours être en cours d'exécution dans le cloud. Relancer la sous-commande démarre une nouvelle revue au lieu de reprendre celle-ci, et la nouvelle revue [utilise une exécution gratuite ou est facturée en crédits d'utilisation](#pricing-and-free-runs).182Si la sous-commande se termine avant l'arrivée des constatations, celles-ci n'atteignent jamais votre terminal. La revue peut toujours être en cours d'exécution dans le cloud. Relancer la sous-commande démarre une nouvelle revue au lieu de reprendre celle-ci, et la nouvelle revue [utilise une exécution gratuite ou est facturée en crédits d'utilisation](#pricing-and-free-runs).


198claude ultrareview 1234 --trust-workspace198claude ultrareview 1234 --trust-workspace

199```199```

200 200 

201Pour examiner une pull request non approuvée, exécutez `claude ultrareview <PR number> --trust-workspace` depuis une branche à laquelle vous faites confiance. Contrairement à `y`, le flag n'enregistre rien. La PR est [clonée dans le cloud](#review-a-pull-request), vous n'avez donc pas besoin de sa branche en local.201Pour examiner une pull request non approuvée, exécutez `claude ultrareview <PR number> --trust-workspace` depuis une branche à laquelle vous faites confiance. La PR est [clonée dans le cloud](#review-a-pull-request), vous n'avez donc pas besoin de sa branche en local.

202 202 

203## Comment ultrareview se compare à /code-review203## Comment ultrareview se compare à /code-review

204 204 

vs-code.md +6 −1

Details

1001 1001 

1002### La dictée ou l'onglet Web échoue derrière un proxy d'inspection TLS1002### La dictée ou l'onglet Web échoue derrière un proxy d'inspection TLS

1003 1003 

1004Lorsque la dictée ou l'onglet Web échoue avec une erreur de certificat telle que `unable to get local issuer certificate`, définissez [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/fr/network-config#custom-ca-certificates) dans le bloc `env` de `~/.claude/settings.json`. Définissez-la sur le chemin d'un fichier PEM contenant le certificat de l'autorité de certification racine de votre proxy, que votre équipe informatique peut vous fournir. Ce texte d'erreur figure sur le bouton du microphone ou dans les logs de l'extension :1004Lorsque la dictée ou l'onglet Web échoue avec une erreur de certificat telle que `unable to get local issuer certificate`, définissez [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/fr/network-config#custom-ca-certificates) dans le bloc `env` de `~/.claude/settings.json`. Définissez-la sur le chemin d'un fichier PEM contenant le certificat de l'autorité de certification racine de votre proxy, que votre équipe informatique peut vous fournir. L'échec apparaît sur le bouton du microphone ou dans l'onglet Web, ou dans les logs :

1005 1005 

1006* **Dictée** : le bouton du microphone affiche le texte d'erreur après `Dictation error: WebSocket error:`.1006* **Dictée** : le bouton du microphone affiche le texte d'erreur après `Dictation error: WebSocket error:`.

1007* **Onglet Web** : l'onglet qui liste les [sessions cloud](#resume-cloud-sessions-from-claude-ai) affiche `Remote server is not connected` sans le texte d'erreur. Pour le lire dans les logs :1007* **Onglet Web** : l'onglet qui liste les [sessions cloud](#resume-cloud-sessions-from-claude-ai) affiche `Remote server is not connected` sans le texte d'erreur. Pour le lire dans les logs :

1008 1. Exécutez **Claude Code: Show Logs** depuis la [Palette de commandes](#vs-code-commands-and-shortcuts) pour ouvrir le canal de sortie `Claude VSCode`.1008 1. Exécutez **Claude Code: Show Logs** depuis la [Palette de commandes](#vs-code-commands-and-shortcuts) pour ouvrir le canal de sortie `Claude VSCode`.

1009 2. Cliquez sur **Reconnect** dans l'onglet et attendez qu'il n'affiche plus `Connecting…`.1009 2. Cliquez sur **Reconnect** dans l'onglet et attendez qu'il n'affiche plus `Connecting…`.

1010 3. Recherchez dans le canal `Error fetching remote sessions:` ou `Failed to fetch organization UUID:`, puis lisez le texte d'erreur qui suit ce préfixe sur la ligne correspondante la plus récente.1010 3. Recherchez dans le canal `Error fetching remote sessions:` ou `Failed to fetch organization UUID:`, puis lisez le texte d'erreur qui suit ce préfixe sur la ligne correspondante la plus récente.

1011* **Avertissement dans les logs** : un avertissement mentionnant `an authority that Claude Code does not trust` signale une erreur de certificat. Derrière un proxy d'inspection TLS, définissez `NODE_EXTRA_CA_CERTS` dans `env` dans `~/.claude/settings.json`. Les versions antérieures à la v2.1.309 ne consignent pas cet avertissement.

1011 1012 

1012Ce correctif nécessite la version 2.1.307 ou ultérieure de l'extension ; mettez donc d'abord l'extension à jour. Définissez ensuite `NODE_EXTRA_CA_CERTS` sur le chemin complet du fichier de certificat, écrit sans `~`. Pour un chemin Windows, doublez chaque barre oblique inverse dans `settings.json`, comme dans `C:\\certs\\example-ca.pem`.1013Ce correctif nécessite la version 2.1.307 ou ultérieure de l'extension ; mettez donc d'abord l'extension à jour. Définissez ensuite `NODE_EXTRA_CA_CERTS` sur le chemin complet du fichier de certificat, écrit sans `~`. Pour un chemin Windows, doublez chaque barre oblique inverse dans `settings.json`, comme dans `C:\\certs\\example-ca.pem`.

1013 1014 

1015> [!NOTE]

1016>

1017> Dans une fenêtre connectée à WSL, à un hôte SSH, à un dev container ou à un autre système, enregistrez le fichier de certificat et modifiez `~/.claude/settings.json` sur ce système, et non sur votre ordinateur local.

1018 

1014Cet exemple désigne un fichier de certificat situé au chemin Linux ou macOS `/etc/ssl/certs/example-ca.pem` :1019Cet exemple désigne un fichier de certificat situé au chemin Linux ou macOS `/etc/ssl/certs/example-ca.pem` :

1015 1020 

1016```json ~/.claude/settings.json theme={null}1021```json ~/.claude/settings.json theme={null}