SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +183 −71. 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
Details

165 Appeler un outil personnalisé165 Appeler un outil personnalisé

166</h3>166</h3>

167 167 

168Transmettez le serveur MCP que vous avez créé à `query` via l'option `mcpServers`. La clé dans `mcpServers` devient le segment `{server_name}` dans le nom complètement qualifié de chaque outil : `mcp__{server_name}__{tool_name}`. Listez ce nom dans `allowedTools` afin que l'outil s'exécute sans invite de permission.168Transmettez le serveur MCP que vous avez créé à `query` via l'option `mcpServers`. Le [nom complètement qualifié](/docs/fr/agent-sdk/mcp#tool-naming-convention) de chaque outil est `mcp__{server_name}__{tool_name}`, où `{server_name}` est la clé que vous donnez au serveur dans `mcpServers`. Si la clé contient des caractères tels que `.` ou des espaces, remplacez-les par `_` lorsque vous écrivez `{server_name}`. Listez le nom complètement qualifié dans `allowedTools` afin que l'outil s'exécute sans demande de permission.

169 169 

170Ces extraits réutilisent le `weatherServer` de l'[exemple d'outil météo](#weather-tool-example) pour demander à Claude quelle est la météo dans un endroit spécifique.170Ces extraits réutilisent le `weatherServer` de l'[exemple d'outil météo](#weather-tool-example) pour demander à Claude quelle est la météo dans un endroit spécifique.

171 171 

Details

235 235 

236| Option | Type | Par défaut | Description |236| Option | Type | Par défaut | Description |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | Motif mis en correspondance avec le champ de filtre de l'événement, en suivant les [règles pour les matchers dans les fichiers de paramètres](/docs/fr/hooks#matcher-patterns). Pour les hooks d'outils, c'est le nom de l'outil. Les outils intégrés incluent `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` et d'autres (consultez [Types d'entrée d'outil](/docs/fr/agent-sdk/typescript#tool-input-types) pour la liste complète). Les outils MCP utilisent le motif `mcp__<server>__<action>`, où `<server>` est la clé que vous utilisez dans la configuration `mcpServers`. |238| `matcher` | `string` | `undefined` | Motif mis en correspondance avec le champ de filtre de l'événement, en suivant les [règles pour les matchers dans les fichiers de paramètres](/docs/fr/hooks#matcher-patterns). Pour les hooks d'outils, ce champ est le nom de l'outil. Les outils intégrés incluent `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` et d'autres. Consultez [Types d'entrée d'outil](/docs/fr/agent-sdk/typescript#tool-input-types) pour la liste complète. Les outils MCP utilisent le motif `mcp__<server>__<action>`, où `<server>` est la clé que vous utilisez dans la configuration `mcpServers`, orthographiée comme le décrit la [convention de nommage des outils](/docs/fr/agent-sdk/mcp#tool-naming-convention). |

239| `hooks` | `HookCallback[]` | - | Requis. Tableau de fonctions de rappel à exécuter lorsque le motif correspond |239| `hooks` | `HookCallback[]` | - | Requis. Tableau de fonctions de rappel à exécuter lorsque le motif correspond |

240| `timeout` | `number` | `undefined` | Délai d'expiration en secondes. Lorsqu'il est omis, Claude Code applique le [délai d'expiration par défaut de l'événement](#hook-timeout). Vos rappels du SDK suivent les valeurs par défaut du hook `command` |240| `timeout` | `number` | `undefined` | Délai d'expiration en secondes. Lorsqu'il est omis, Claude Code applique le [délai d'expiration par défaut de l'événement](#hook-timeout). Vos rappels du SDK suivent les valeurs par défaut du hook `command` |

241 241 

agent-sdk/mcp.md +10 −1

Details

196 Convention de nommage des outils196 Convention de nommage des outils

197</h3>197</h3>

198 198 

199Les outils MCP suivent le modèle de nommage `mcp__<server-name>__<tool-name>`. Par exemple, un serveur GitHub nommé `"github"` avec un outil `list_issues` devient `mcp__github__list_issues`.199Les outils MCP sont nommés `mcp__<server-name>__<tool-name>`, où `<server-name>` est le nom sous lequel vous enregistrez le serveur, par exemple sa clé dans `mcpServers`.

200 

201Les caractères du nom du serveur tels que `.` et les espaces sont remplacés par `_`. Ce tableau indique le nom complet d'un outil `list_issues` pour deux clés de serveur :

202 

203| Clé dans `mcpServers` | Nom complet de l'outil |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208Utilisez les noms complets des outils dans `allowedTools` et dans les [règles de permission MCP](/docs/fr/permissions#mcp). Pour un serveur fourni par un [plugin](/docs/fr/agent-sdk/plugins), `<server-name>` prend la [forme propre au plugin](/docs/fr/mcp#plugin-provided-mcp-servers) et commence par `plugin_`.

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 Auto-approbation avec allowedTools211 Auto-approbation avec allowedTools

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 Exécutez d'abord les [hooks](/docs/fr/agent-sdk/hooks). Un hook peut refuser l'appel catégoriquement ou le transmettre. Un hook qui retourne `allow` ne contourne pas les règles de refus et de demande ci-dessous ; celles-ci sont évaluées indépendamment du résultat du hook. Un hook `PreToolUse` allow ne peut pas non plus approuver une suppression `rm` ou `rmdir` ciblant un [chemin critique](/docs/fr/permission-modes#critical-paths).19 Exécutez d'abord les [hooks](/docs/fr/agent-sdk/hooks). Un hook peut refuser l'appel catégoriquement ou le transmettre. Un hook qui retourne `allow` ne contourne pas les règles de refus et de demande ci-dessous ; celles-ci sont évaluées indépendamment du résultat du hook. Un hook `PreToolUse` qui retourne `allow` ne peut pas non plus approuver une suppression `rm` ou `rmdir` ciblant un [chemin critique](/docs/fr/permission-modes#critical-paths). Pour savoir ce que fait ce `allow` en mode plan, consultez [Approbations par hook en mode plan](/docs/fr/permissions#hook-approvals-in-plan-mode).

20 </Step>20 </Step>

21 21 

22 <Step title="Règles de refus">22 <Step title="Règles de refus">


161 161 

162<Tabs>162<Tabs>

163 <Tab title="Au moment de la requête">163 <Tab title="Au moment de la requête">

164 Passez `permission_mode` (Python) ou `permissionMode` (TypeScript) lors de la création d'une requête. Ce mode s'applique pour toute la session sauf s'il est modifié dynamiquement.164 Passez `permission_mode` (Python) ou `permissionMode` (TypeScript) lors de la création d'une requête.

165 165 

166 <CodeGroup>166 <CodeGroup>

167 ```python Python theme={null}167 ```python Python theme={null}


314 314 

315Claude explore la base de code et produit un plan sans modifier vos fichiers source. Les outils en lecture seule s'exécutent comme ils le font en mode de permission `default`.315Claude explore la base de code et produit un plan sans modifier vos fichiers source. Les outils en lecture seule s'exécutent comme ils le font en mode de permission `default`.

316 316 

317Les modifications de fichiers ne sont jamais approuvées automatiquement en mode plan, même lorsqu'une règle d'autorisation correspond. Elles demandent via votre rappel `canUseTool` à la place. Sur Claude Code v2.1.212 ou ultérieur, les commandes shell qui modifient les fichiers, telles que `touch` et `rm`, atteignent votre rappel `canUseTool` de la même manière.317Les modifications de fichiers ne sont jamais approuvées automatiquement en mode plan, même lorsqu'une règle d'autorisation correspond ou qu'un hook `PreToolUse` renvoie `allow`. Elles demandent via votre rappel `canUseTool` à la place. Sur Claude Code v2.1.212 ou ultérieur, les commandes shell qui modifient les fichiers, telles que `touch` et `rm`, atteignent votre rappel `canUseTool` de la même manière.

318 318 

319Si vous définissez `allowDangerouslySkipPermissions: true` aux côtés de `permissionMode: 'plan'`, les modifications de fichiers et les commandes shell qui modifient les fichiers atteignent toujours votre rappel `canUseTool`. L'option vous permet de passer à `bypassPermissions` plus tard avec `setPermissionMode()`.319Si vous définissez `allowDangerouslySkipPermissions: true` aux côtés de `permissionMode: 'plan'`, les modifications de fichiers et les commandes shell qui modifient les fichiers atteignent toujours votre rappel `canUseTool`. L'option vous permet de passer à `bypassPermissions` plus tard avec `setPermissionMode()`.

320 320 


322 322 

323**À utiliser quand :** vous souhaitez que Claude propose des modifications sans les exécuter, par exemple lors d'une révision de code ou lorsque vous devez approuver les modifications avant qu'elles ne soient apportées.323**À utiliser quand :** vous souhaitez que Claude propose des modifications sans les exécuter, par exemple lors d'une révision de code ou lorsque vous devez approuver les modifications avant qu'elles ne soient apportées.

324 324 

325<h4 id="auto-mode-auto">

326 Mode auto (`auto`)

327</h4>

328 

329Un modèle classifieur examine les actions telles que les commandes shell et les requêtes réseau avant leur exécution, et autorise ou bloque chacune de celles qu'il examine. Pour connaître les modèles et les fournisseurs requis par le mode auto ainsi que l'ordre dans lequel il évalue les actions, consultez [Éliminer les demandes de permission avec le mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode).

330 

331Si vous basculez une session en mode auto vers un modèle que le mode auto ne prend pas en charge, à l'aide de [`set_model()`](/docs/fr/agent-sdk/python#claudesdkclient), [`setModel()`](/docs/fr/agent-sdk/typescript#query-object) ou [`applyFlagSettings()`](/docs/fr/agent-sdk/typescript#applyflagsettings), la session passe en mode `default` :

332 

333* **Ce que vous voyez** : un message `system` avec le sous-type `status` et `permissionMode` défini sur `"default"`, que le SDK TypeScript type comme [`SDKStatusMessage`](/docs/fr/agent-sdk/typescript#sdkstatusmessage). À partir de là, les appels qui nécessitent une approbation et ne correspondent à aucune règle d'autorisation atteignent votre rappel `canUseTool`.

334* **Pour revenir au mode auto** : passez à un modèle pris en charge, puis appelez `set_permission_mode("auto")` ou `setPermissionMode("auto")`. Si vous revenez au modèle précédent sans effectuer cet appel, la session reste en mode `default`. Tant que le modèle non pris en charge est actif, l'appel échoue avec `Cannot set permission mode to auto: auto mode unavailable for this model`.

335 

336Le passage au mode `default` après un appel à `set_model()`, `setModel()` ou `applyFlagSettings()` nécessite Claude Code v2.1.299 ou ultérieur.

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 Ressources connexes339 Ressources connexes

327</h2>340</h2>

Details

610| `receive_response()` | Reçoit les messages jusqu'à et incluant un ResultMessage |610| `receive_response()` | Reçoit les messages jusqu'à et incluant un ResultMessage |

611| `interrupt()` | Envoie un signal d'interruption (fonctionne uniquement en mode streaming) |611| `interrupt()` | Envoie un signal d'interruption (fonctionne uniquement en mode streaming) |

612| `set_permission_mode(mode)` | Change le mode de permission pour la session actuelle |612| `set_permission_mode(mode)` | Change le mode de permission pour la session actuelle |

613| `set_model(model)` | Change le modèle pour la session actuelle. Passez `None` pour réinitialiser au [modèle par défaut de Claude Code](/docs/fr/model-config) |613| `set_model(model)` | Change le modèle pour la session actuelle. Passez `None` pour réinitialiser au [modèle par défaut de Claude Code](/docs/fr/model-config). Une session en mode `auto` [passe en mode `default`](/docs/fr/agent-sdk/permissions#auto-mode-auto) si le nouveau modèle ne prend pas en charge le mode auto |

614| `rewind_files(user_message_id)` | Restaure les fichiers à leur état au message utilisateur spécifié. Nécessite `enable_file_checkpointing=True`. Voir [File checkpointing](/docs/fr/agent-sdk/file-checkpointing) |614| `rewind_files(user_message_id)` | Restaure les fichiers à leur état au message utilisateur spécifié. Nécessite `enable_file_checkpointing=True`. Voir [File checkpointing](/docs/fr/agent-sdk/file-checkpointing) |

615| `get_mcp_status()` | Obtient le statut de tous les serveurs MCP configurés. Retourne [`McpStatusResponse`](#mcpstatusresponse) |615| `get_mcp_status()` | Obtient le statut de tous les serveurs MCP configurés. Retourne [`McpStatusResponse`](#mcpstatusresponse) |

616| `get_context_usage()` | Obtient une ventilation de l'utilisation de la fenêtre de contexte par catégorie, compétence et outil. Les mêmes données que `/context` affiche dans une session interactive. Retourne [`ContextUsageResponse`](#contextusageresponse). Pour calculer la ventilation, Claude Code effectue plusieurs demandes d'API de comptage de tokens qui n'apparaissent pas dans le flux de messages ; voir [comment ces demandes sont traitées](#contextusageresponse) |616| `get_context_usage()` | Obtient une ventilation de l'utilisation de la fenêtre de contexte par catégorie, compétence et outil. Les mêmes données que `/context` affiche dans une session interactive. Retourne [`ContextUsageResponse`](#contextusageresponse). Pour calculer la ventilation, Claude Code effectue plusieurs demandes d'API de comptage de tokens qui n'apparaissent pas dans le flux de messages ; voir [comment ces demandes sont traitées](#contextusageresponse) |


3884 Définissez `"failIfUnavailable": True` dans vos paramètres de sandbox pour arrêter à la place. Le SDK transmet `failIfUnavailable` à Claude Code avec les champs déclarés de `SandboxSettings`. `query()` rapporte alors un `ResultMessage` avec `subtype="error_during_execution"` et la raison dans `errors`. Comme il s'agit d'un appel `query()` unique, le SDK lève une exception après avoir produit ce résultat d'erreur, donc enveloppez la boucle dans un bloc try pour continuer au-delà. Voir [Gérer le résultat](/docs/fr/agent-sdk/agent-loop#handle-the-result) pour le contrat d'erreur.3884 Définissez `"failIfUnavailable": True` dans vos paramètres de sandbox pour arrêter à la place. Le SDK transmet `failIfUnavailable` à Claude Code avec les champs déclarés de `SandboxSettings`. `query()` rapporte alors un `ResultMessage` avec `subtype="error_during_execution"` et la raison dans `errors`. Comme il s'agit d'un appel `query()` unique, le SDK lève une exception après avoir produit ce résultat d'erreur, donc enveloppez la boucle dans un bloc try pour continuer au-delà. Voir [Gérer le résultat](/docs/fr/agent-sdk/agent-loop#handle-the-result) pour le contrat d'erreur.

3885</Note>3885</Note>

3886 3886 

3887Pour empêcher les commandes en sandbox d'écrire dans un fichier, indiquez son chemin absolu sous [`denyWrite`](/docs/fr/settings-reference#sandbox-filesystem-denywrite) dans vos paramètres de sandbox, par exemple `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. Le SDK transmet `filesystem` à Claude Code avec les champs déclarés de `SandboxSettings`. Une fois le sandbox démarré, il bloque les écritures vers chaque chemin indiqué. Si vous indiquez `.env` ou `./.env`, les commandes en sandbox peuvent écrire dans le fichier `.env` du répertoire de travail de la session.3887Pour empêcher les commandes en sandbox d'écrire dans un fichier, indiquez son chemin absolu sous [`denyWrite`](/docs/fr/settings-reference#sandbox-filesystem-denywrite) dans vos paramètres de sandbox, par exemple `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. Le SDK transmet `filesystem` à Claude Code avec les champs déclarés de `SandboxSettings`. Une fois le sandbox démarré, il bloque les écritures vers chaque chemin absolu indiqué.

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 Exemple d'utilisation3890 Exemple d'utilisation

Details

736| `interrupt()` | Interrompt la requête. Disponible uniquement en mode d'entrée en streaming. Lorsque la CLI annonce la capacité `interrupt_receipt_v1` dans [`SDKSystemMessage.capabilities`](#sdksystemmessage), se résout avec un [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) listant les messages qui étaient en attente lorsque l'interruption est arrivée. Se résout avec `undefined` sur les CLI antérieures à v2.1.205 |736| `interrupt()` | Interrompt la requête. Disponible uniquement en mode d'entrée en streaming. Lorsque la CLI annonce la capacité `interrupt_receipt_v1` dans [`SDKSystemMessage.capabilities`](#sdksystemmessage), se résout avec un [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) listant les messages qui étaient en attente lorsque l'interruption est arrivée. Se résout avec `undefined` sur les CLI antérieures à v2.1.205 |

737| `rewindFiles(userMessageId, options?)` | Restaure les fichiers dans leur état au moment du message utilisateur spécifié. Passez `{ dryRun: true }` pour prévisualiser les modifications. Nécessite `enableFileCheckpointing: true`. Consultez [Checkpointing de fichiers](/docs/fr/agent-sdk/file-checkpointing) |737| `rewindFiles(userMessageId, options?)` | Restaure les fichiers dans leur état au moment du message utilisateur spécifié. Passez `{ dryRun: true }` pour prévisualiser les modifications. Nécessite `enableFileCheckpointing: true`. Consultez [Checkpointing de fichiers](/docs/fr/agent-sdk/file-checkpointing) |

738| `setPermissionMode()` | Modifie le mode de permission (disponible uniquement en mode d'entrée en streaming) |738| `setPermissionMode()` | Modifie le mode de permission (disponible uniquement en mode d'entrée en streaming) |

739| `setModel()` | Modifie le modèle (disponible uniquement en mode d'entrée en streaming). Passer `undefined` ou la chaîne `"default"` rétablit le [modèle par défaut de Claude Code](/docs/fr/model-config) |739| `setModel()` | Modifie le modèle (disponible uniquement en mode d'entrée en streaming). Passer `undefined` ou la chaîne `"default"` réinitialise vers le [modèle par défaut de Claude Code](/docs/fr/model-config). Une session en mode `auto` [passe en mode `default`](/docs/fr/agent-sdk/permissions#auto-mode-auto) si le nouveau modèle ne prend pas en charge le mode auto |

740| `setMaxThinkingTokens()` | *Obsolète :* Utilisez plutôt l'option `thinking`. Modifie le nombre maximal de tokens de réflexion. Passer `null` rétablit la réflexion à la valeur par défaut de la session : un remplacement en cours de session est effacé, et la réflexion reste désactivée pour les sessions où elle est désactivée |740| `setMaxThinkingTokens()` | *Obsolète :* Utilisez plutôt l'option `thinking`. Modifie le nombre maximal de tokens de réflexion. Passer `null` rétablit la réflexion à la valeur par défaut de la session : un remplacement en cours de session est effacé, et la réflexion reste désactivée pour les sessions où elle est désactivée |

741| `applyFlagSettings(settings)` | Fusionne des paramètres dans la couche de paramètres de flag de la session à l'exécution (disponible uniquement en mode d'entrée en streaming). Consultez [`applyFlagSettings()`](#applyflagsettings) |741| `applyFlagSettings(settings)` | Fusionne des paramètres dans la couche de paramètres de flag de la session à l'exécution (disponible uniquement en mode d'entrée en streaming). Consultez [`applyFlagSettings()`](#applyflagsettings) |

742| `updateSettings(source, settings)` | Écrit une clé autorisée dans le fichier de paramètres locaux du projet ou dans votre fichier de paramètres utilisateur, afin que la valeur persiste pour les sessions ultérieures. Consultez [`updateSettings()`](#updatesettings). Nécessite TypeScript SDK v0.3.257 ou ultérieure, qui inclut Claude Code v2.1.257 |742| `updateSettings(source, settings)` | Écrit une clé autorisée dans le fichier de paramètres locaux du projet ou dans votre fichier de paramètres utilisateur, afin que la valeur persiste pour les sessions ultérieures. Consultez [`updateSettings()`](#updatesettings). Nécessite TypeScript SDK v0.3.257 ou ultérieure, qui inclut Claude Code v2.1.257 |


6370| Property | Type | Default | Description |6370| Property | Type | Default | Description |

6371| :- | :- | :- | :- |6371| :- | :- | :- | :- |

6372| `allowWrite` | `string[]` | `[]` | Modèles de chemin de fichier pour lesquels autoriser l'accès en écriture |6372| `allowWrite` | `string[]` | `[]` | Modèles de chemin de fichier pour lesquels autoriser l'accès en écriture |

6373| `denyWrite` | `string[]` | `[]` | Modèles de chemin de fichier pour lesquels refuser l'accès en écriture. Pour bloquer les écritures sandboxées dans un fichier du répertoire de travail de la session, indiquez son chemin absolu. Si vous indiquez `.env` ou `./.env`, les commandes sandboxées peuvent écrire dans le fichier `.env` du répertoire de travail de la session |6373| `denyWrite` | `string[]` | `[]` | Modèles de chemin de fichier pour lesquels refuser l'accès en écriture. Pour bloquer les écritures sandboxées dans un fichier du répertoire de travail de la session, indiquez son chemin absolu. |

6374| `denyRead` | `string[]` | `[]` | Modèles de chemin de fichier pour lesquels refuser l'accès en lecture |6374| `denyRead` | `string[]` | `[]` | Modèles de chemin de fichier pour lesquels refuser l'accès en lecture |

6375 6375 

6376<h3 id="permissions-fallback-for-unsandboxed-commands">6376<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738Le [mode de permission](/docs/fr/permissions) dépend de la façon dont vous avez démarré la session :738Le [mode de permission](/docs/fr/permissions) dépend de la façon dont vous avez démarré la session :

739 739 

740* **Mise en arrière-plan avec `/bg` ou `←`** : Claude Code conserve le mode de permission dans lequel se trouvait la session, donc une session que vous avez basculée en `acceptEdits` ou `auto` y reste après le détachement740* **Mise en arrière-plan avec `/bg` ou `←`** : Claude Code conserve le mode de permission dans lequel se trouvait la session, donc une session que vous avez basculée en `acceptEdits` ou `auto` y reste après le détachement

741* **Lancée à partir d'une vue agent que vous avez ouverte avec `←`** : la configuration propre à la cible passe en premier, et le mode de permission de la session dont vous venez s'applique quand rien d'autre n'en définit un741* **Lancée à partir d'une vue agent que vous avez ouverte avec `←`** : Claude Code prend le mode de permission de la nouvelle session d'abord dans la configuration du répertoire cible, puis dans la session dont vous venez

742* **Lancée à partir de `claude agents` démarré dans un shell, ou avec `claude --bg`** : la nouvelle session démarre comme le ferait une nouvelle session `claude` dans ce répertoire, sauf si vous l'avez lancée à partir d'une vue agent ouverte avec des [valeurs de lancement par défaut](#dispatch-defaults). [Dans quel mode de permission une session démarre](/docs/fr/permission-modes#which-mode-a-session-starts-in) indique l'ordre742* **Lancée à partir de `claude agents` démarré dans un shell, ou avec `claude --bg`** : la nouvelle session démarre comme le ferait une nouvelle session `claude` dans ce répertoire, sauf si vous l'avez lancée à partir d'une vue agent ouverte avec des [valeurs de lancement par défaut](#dispatch-defaults). [Dans quel mode de permission une session démarre](/docs/fr/permission-modes#which-mode-a-session-starts-in) indique l'ordre

743 743 

744Pour une session que vous lancez à partir d'une vue agent ouverte avec `←`, Claude Code prend le mode de permission de la première de ces sources qui s'applique :744Pour une session que vous lancez à partir d'une vue agent ouverte avec `←`, Claude Code prend le mode de permission de la première de ces sources qui s'applique :


7461. Le [`permissions.defaultMode`](/docs/fr/settings-reference#permissions-defaultmode) du répertoire cible. Deux règles de source s'appliquent :7461. Le [`permissions.defaultMode`](/docs/fr/settings-reference#permissions-defaultmode) du répertoire cible. Deux règles de source s'appliquent :

747 * `auto` et `bypassPermissions` [ne prennent effet qu'à partir des paramètres gérés, d'un fichier `--settings`, ou de `~/.claude/settings.json`](/docs/fr/settings-reference#permissions-defaultmode).747 * `auto` et `bypassPermissions` [ne prennent effet qu'à partir des paramètres gérés, d'un fichier `--settings`, ou de `~/.claude/settings.json`](/docs/fr/settings-reference#permissions-defaultmode).

748 * Claude Code refuse un `defaultMode` provenant du `.claude/settings.json` ou du `.claude/settings.local.json` du projet qui sélectionne un mode plus permissif que celui de la session dont vous venez.748 * Claude Code refuse un `defaultMode` provenant du `.claude/settings.json` ou du `.claude/settings.local.json` du projet qui sélectionne un mode plus permissif que celui de la session dont vous venez.

7492. Le mode de permission de la session dont vous venez7492. Le mode de permission de la session dont vous venez. Si cette session était en mode `bypassPermissions`, la nouvelle session peut démarrer à la place en mode Manual, avec l'avis `Bypass permissions was requested at launch and ignored`. Cela se produit quand votre acceptation de l'avertissement de contournement se trouve uniquement dans `.claude/settings.local.json` ou dans un fichier `--settings`. Continuez en mode Manual, ou [ajoutez cette acceptation à `~/.claude/settings.json`](/docs/fr/permission-modes#bypass-permissions-acceptance).

750 750 

751Quand Claude Code refuse le mode d'une source comme trop permissif, la source suivante de la liste décide. Par exemple, si vous lancez à partir d'une session en mode plan vers un répertoire dont les paramètres versionnés demandent `acceptEdits`, la nouvelle session démarre en mode plan. Si vous déplacez ce `defaultMode` vers `~/.claude/settings.json`, il s'applique quel que soit le mode de permission de la session dont vous venez.751Quand Claude Code refuse le mode d'une source comme trop permissif, la source suivante de la liste décide. Par exemple, si vous lancez à partir d'une session en mode plan vers un répertoire dont les paramètres versionnés demandent `acceptEdits`, la nouvelle session démarre en mode plan. Si vous déplacez ce `defaultMode` vers `~/.claude/settings.json`, il s'applique quel que soit le mode de permission de la session dont vous venez.

752 752 

Details

84| `--continue`, `-c` | Charger la conversation la plus récente dans le répertoire courant, y compris une [session en arrière-plan qui a terminé](/docs/fr/sessions#where-the-session-picker-looks) ; l'ouverture de sessions en arrière-plan terminées nécessite Claude Code v2.1.257 ou ultérieur. Ignore les sessions créées avec `claude -p` ou le SDK Agent, et les sessions dont le premier prompt était `/loop`. `claude -p --continue` inclut les sessions `-p`, SDK et `/loop`. Inclut les sessions qui ont ajouté ce répertoire avec `/add-dir` | `claude --continue` |84| `--continue`, `-c` | Charger la conversation la plus récente dans le répertoire courant, y compris une [session en arrière-plan qui a terminé](/docs/fr/sessions#where-the-session-picker-looks) ; l'ouverture de sessions en arrière-plan terminées nécessite Claude Code v2.1.257 ou ultérieur. Ignore les sessions créées avec `claude -p` ou le SDK Agent, et les sessions dont le premier prompt était `/loop`. `claude -p --continue` inclut les sessions `-p`, SDK et `/loop`. Inclut les sessions qui ont ajouté ce répertoire avec `/add-dir` | `claude --continue` |

85| `--dangerously-load-development-channels` | Activer des [canaux](/docs/fr/channels-reference#test-during-the-research-preview) qui ne figurent pas sur la liste d'autorisation approuvée, pour le développement local. Accepte les entrées `plugin:<name>@<marketplace>` et `server:<name>`. Demande une confirmation, il prend donc effet dans les sessions interactives. Avec `-p`, Claude Code ignore le flag | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | Activer des [canaux](/docs/fr/channels-reference#test-during-the-research-preview) qui ne figurent pas sur la liste d'autorisation approuvée, pour le développement local. Accepte les entrées `plugin:<name>@<marketplace>` et `server:<name>`. Demande une confirmation, il prend donc effet dans les sessions interactives. Avec `-p`, Claude Code ignore le flag | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | Ignorer les invites de permission. Équivalent à `--permission-mode bypassPermissions`. Voir [modes de permission](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) pour ce que cela ignore et n'ignore pas. Pour les sessions démarrées avec `--bg`, le mode [persiste lorsque le superviseur redémarre la session](/docs/fr/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | Ignorer les invites de permission. Équivalent à `--permission-mode bypassPermissions`. Voir [modes de permission](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) pour ce que cela ignore et n'ignore pas. Pour les sessions démarrées avec `--bg`, le mode [persiste lorsque le superviseur redémarre la session](/docs/fr/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | Activer le mode débogage avec filtrage de catégorie optionnel, tel que `--debug='mcp,startup'` ou `--debug='!1p'`. Le filtre se lie uniquement dans la forme `=` ; un filtre séparé par des espaces active le mode débogage sans filtrage | `claude --debug='mcp,startup'` |87| `--debug` | Activer le mode débogage avec filtrage de catégorie optionnel, tel que `--debug='mcp,startup'` ou `--debug='!mcp'`. Le filtre se lie uniquement dans la forme `=` ; un filtre séparé par des espaces active le mode débogage sans filtrage | `claude --debug='mcp,startup'` |

88| `--debug-file <path>` | Écrire les journaux de débogage dans un chemin de fichier spécifique. Active implicitement le mode débogage. Prend la priorité sur `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | Écrire les journaux de débogage dans un chemin de fichier spécifique. Active implicitement le mode débogage. Prend la priorité sur `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | Ouvrir l'[application Claude Desktop](/docs/fr/desktop) sur le répertoire courant et quitter sans démarrer une session dans le terminal. Ajoutez `--continue`, ou `--resume` avec un ID de session, pour [ouvrir cette session dans Desktop](/docs/fr/desktop#coming-from-the-cli) à la place. `--resume` ici prend uniquement un ID de session, pas un nom ou un chemin de transcription. Ne prend aucune invite et aucun autre drapeau sauf `--verbose` et les drapeaux `--debug`, puisque l'application démarre la session elle-même. Disponible sur macOS et Windows x64 lorsque vous êtes connecté avec un abonnement Claude. Nécessite Claude Code v2.1.285 ou ultérieur | `claude --desktop` |89| `--desktop` | Ouvrir l'[application Claude Desktop](/docs/fr/desktop) sur le répertoire courant et quitter sans démarrer une session dans le terminal. Ajoutez `--continue`, ou `--resume` avec un ID de session, pour [ouvrir cette session dans Desktop](/docs/fr/desktop#coming-from-the-cli) à la place. `--resume` ici prend uniquement un ID de session, pas un nom ou un chemin de transcription. Ne prend aucune invite et aucun autre drapeau sauf `--verbose` et les drapeaux `--debug`, puisque l'application démarre la session elle-même. Disponible sur macOS et Windows x64 lorsque vous êtes connecté avec un abonnement Claude. Nécessite Claude Code v2.1.285 ou ultérieur | `claude --desktop` |

90| `--disable-slash-commands` | Désactiver tous les skills et commandes pour cette session | `claude --disable-slash-commands` |90| `--disable-slash-commands` | Désactiver tous les skills et commandes pour cette session | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429Une session qui a été ouverte pendant des heures peut utiliser bien plus de vos limites de plan que votre activité ne le suggère, généralement pour l'une de ces raisons :429Une session qui a été ouverte pendant des heures peut utiliser bien plus de vos limites de plan que votre activité ne le suggère, généralement pour l'une de ces raisons :

430 430 

431* **Contexte long** : Claude Code envoie votre conversation complète avec chaque requête, et chaque fois que Claude utilise des outils, il envoie une autre requête contenant ce lot de résultats d'outils. Avec la [mise en cache des invites](/docs/fr/prompt-caching), Claude Code relit cet historique au [taux de jetons mis en cache](https://platform.claude.com/docs/en/about-claude/pricing), donc une question d'une ligne dans une session ouverte toute la journée consomme quand même l'utilisation pour toute la conversation. Consultez [Gérer le contexte de manière proactive](#manage-context-proactively) pour découvrir des façons de garder votre contexte petit431* **Contexte long** : Claude Code envoie votre conversation complète avec chaque requête, et chaque fois que Claude utilise des outils, il envoie une autre requête contenant ce lot de résultats d'outils. Avec la [mise en cache des invites](/docs/fr/prompt-caching), Claude Code relit cet historique au [taux de jetons mis en cache](https://platform.claude.com/docs/en/about-claude/pricing), donc une question d'une ligne dans une session ouverte toute la journée consomme quand même l'utilisation pour toute la conversation. Consultez [Gérer le contexte de manière proactive](#manage-context-proactively) pour découvrir des façons de garder votre contexte petit

432* **Absences de cache** : votre premier message après une pause plus longue que la [durée de vie du cache](/docs/fr/prompt-caching#cache-lifetime) manque le cache et retraite votre contexte complet. La durée de vie est d'une heure sur un abonnement et tombe à cinq minutes une fois que vous utilisez des [crédits d'utilisation](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) ; sur une clé API ou un fournisseur cloud, c'est cinq minutes par défaut. Pour conserver la durée de vie d'une heure tout en utilisant des crédits d'utilisation, [choisissez vous-même le TTL](/docs/fr/prompt-caching#choose-the-ttl-yourself). Sur les plans Pro et Max, lorsque vous reprenez une grande session après une longue pause, Claude Code [propose de reprendre à partir d'un résumé](/docs/fr/sessions#resume-from-a-summary) afin que les requêtes ultérieures ne portent pas l'historique complet432* **Absences de cache** : votre premier message après une pause plus longue que la [durée de vie du cache](/docs/fr/prompt-caching#cache-lifetime) manque le cache et retraite votre contexte complet. La durée de vie est d'une heure sur un abonnement et tombe à cinq minutes une fois que vous utilisez des [crédits d'utilisation](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) ; sur une clé API ou un fournisseur cloud, c'est cinq minutes par défaut. Pour conserver la durée de vie d'une heure tout en utilisant des crédits d'utilisation, [choisissez vous-même le TTL](/docs/fr/prompt-caching#choose-the-ttl-yourself)

433* **Tâches planifiées** : une [tâche planifiée](/docs/fr/scheduled-tasks) s'exécute selon son intervalle même pendant que la session est inactive, envoyant votre contexte complet à chaque fois433* **Tâches planifiées** : une [tâche planifiée](/docs/fr/scheduled-tasks) s'exécute selon son intervalle même pendant que la session est inactive, envoyant votre contexte complet à chaque fois

434* **Messages entre sessions** : Claude Code livre un [message d'une autre de vos sessions](/docs/fr/cross-session-messaging) comme un nouveau tour lorsque cette session est inactive, envoyant votre contexte complet à chaque fois. Pour retenir les messages entrants au lieu de les livrer, définissez [`crossSessionInbound`](/docs/fr/settings-reference#crosssessioninbound) sur `hold`434* **Messages entre sessions** : Claude Code livre un [message d'une autre de vos sessions](/docs/fr/cross-session-messaging) comme un nouveau tour lorsque cette session est inactive, envoyant votre contexte complet à chaque fois. Pour retenir les messages entrants au lieu de les livrer, définissez [`crossSessionInbound`](/docs/fr/settings-reference#crosssessioninbound) sur `hold`

435* **Vérifications d'objectifs** : tandis que le travail en arrière-plan maintient un [objectif](/docs/fr/goal) actif en attente, Claude Code [demande à Claude de vérifier ce travail](/docs/fr/goal#background-work-defers-evaluation) même lorsque la session est inactive, en commençant un nouveau tour qui envoie votre contexte complet. Claude Code démarre au maximum trois vérifications inactives par objectif entre vos invites. Avant la v2.1.246, les vérifications inactives n'étaient pas limitées. Pour désactiver les vérifications, définissez [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/fr/env-vars) sur `0`. Les vérifications inactives nécessitent Claude Code v2.1.236 ou version ultérieure435* **Vérifications d'objectifs** : tandis que le travail en arrière-plan maintient un [objectif](/docs/fr/goal) actif en attente, Claude Code [demande à Claude de vérifier ce travail](/docs/fr/goal#background-work-defers-evaluation) même lorsque la session est inactive, en commençant un nouveau tour qui envoie votre contexte complet. Claude Code démarre au maximum trois vérifications inactives par objectif entre vos invites. Avant la v2.1.246, les vérifications inactives n'étaient pas limitées. Pour désactiver les vérifications, définissez [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/fr/env-vars) sur `0`. Les vérifications inactives nécessitent Claude Code v2.1.236 ou version ultérieure

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID du projet GCP auquel les requêtes Google Cloud's Agent Platform sont adressées. Voir [Configurer les identifiants GCP](/docs/fr/google-vertex-ai#3-configure-gcp-credentials) |196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID du projet GCP auquel les requêtes Google Cloud's Agent Platform sont adressées. Voir [Configurer les identifiants GCP](/docs/fr/google-vertex-ai#3-configure-gcp-credentials) |

197| `ANTHROPIC_WORKSPACE_ID` | ID d'espace de travail pour la [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Définissez-le lorsque votre règle de fédération couvre plusieurs espaces de travail, afin que l'échange de jetons sache quel espace de travail cibler |197| `ANTHROPIC_WORKSPACE_ID` | ID d'espace de travail pour la [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Définissez-le lorsque votre règle de fédération couvre plusieurs espaces de travail, afin que l'échange de jetons sache quel espace de travail cibler |

198| `API_FORCE_IDLE_TIMEOUT` | Remplace le délai d'inactivité de 5 minutes sur le corps de la réponse, qui interrompt une réponse de modèle en streaming lorsqu'aucun octet n'arrive. Définissez `0` pour désactiver ce délai, par exemple lorsqu'une [passerelle](/docs/fr/llm-gateway) lente ou un modèle local marque des pauses de plus de 5 minutes entre les chunks, ou `1` pour le garder actif pour tous les fournisseurs. Si elle n'est pas définie, le délai est actif sur les fournisseurs autres que l'API Anthropic directe, [Claude Platform on AWS](/docs/fr/claude-platform-on-aws) et Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` défini. Les [watchdogs de flux](/docs/fr/network-config#streaming-idle-watchdogs) fonctionnent indépendamment et interrompent une longue pause silencieuse même si vous définissez `0` ici |198| `API_FORCE_IDLE_TIMEOUT` | Remplace le délai d'inactivité de 5 minutes sur le corps de la réponse, qui interrompt une réponse de modèle en streaming lorsqu'aucun octet n'arrive. Définissez `0` pour désactiver ce délai, par exemple lorsqu'une [passerelle](/docs/fr/llm-gateway) lente ou un modèle local marque des pauses de plus de 5 minutes entre les chunks, ou `1` pour le garder actif pour tous les fournisseurs. Si elle n'est pas définie, le délai est actif sur les fournisseurs autres que l'API Anthropic directe, [Claude Platform on AWS](/docs/fr/claude-platform-on-aws) et Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` défini. Les [watchdogs de flux](/docs/fr/network-config#streaming-idle-watchdogs) fonctionnent indépendamment et interrompent une longue pause silencieuse même si vous définissez `0` ici |

199| `API_TIMEOUT_MS` | Délai d'expiration des requêtes API en millisecondes (par défaut : 600000, soit 10 minutes ; maximum : 2147483647). Augmentez-le lorsque les requêtes expirent sur des réseaux lents ou lors du routage via un proxy. Les valeurs supérieures au maximum font déborder le minuteur sous-jacent et provoquent l'échec immédiat des requêtes |199| `API_TIMEOUT_MS` | Délai d'expiration des requêtes API en millisecondes (par défaut : 600000, soit 10 minutes ; maximum : 2147483647). Une requête en streaming doit recevoir ses en-têtes de réponse dans ce délai. Augmentez-le lorsque les requêtes expirent sur des réseaux lents ou lors du routage via un proxy |

200| `AWS_BEARER_TOKEN_BEDROCK` | Clé API Amazon Bedrock pour l'authentification (voir [Clés API Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |200| `AWS_BEARER_TOKEN_BEDROCK` | Clé API Amazon Bedrock pour l'authentification (voir [Clés API Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

201| `BASH_DEFAULT_TIMEOUT_MS` | Délai d'expiration par défaut d'une commande d'outil Bash ou PowerShell au premier plan, en millisecondes (par défaut : 120000, soit 2 minutes). Une valeur supérieure à la [limite de temps par défaut des commandes en arrière-plan](/docs/fr/tools-reference#time-limit-for-background-commands) remplace cette valeur par défaut dans les sessions sans surveillance. La limite de temps en arrière-plan nécessite Claude Code v2.1.285 ou ultérieur |201| `BASH_DEFAULT_TIMEOUT_MS` | Délai d'expiration par défaut d'une commande d'outil Bash ou PowerShell au premier plan, en millisecondes (par défaut : 120000, soit 2 minutes). Une valeur supérieure à la [limite de temps par défaut des commandes en arrière-plan](/docs/fr/tools-reference#time-limit-for-background-commands) remplace cette valeur par défaut dans les sessions sans surveillance. La limite de temps en arrière-plan nécessite Claude Code v2.1.285 ou ultérieur |

202| `BASH_MAX_OUTPUT_LENGTH` | Nombre maximal de caractères de la sortie bash que Claude Code réinjecte dans le résultat d'une commande (par défaut : 30000 ; maximum : 150000). Si vous définissez le paramètre [`bashOutputMaxChars`](/docs/fr/settings-reference#bashoutputmaxchars), Claude Code ignore cette variable. Voir [Limites de sortie](/docs/fr/tools-reference#output-limits) |202| `BASH_MAX_OUTPUT_LENGTH` | Nombre maximal de caractères de la sortie bash que Claude Code réinjecte dans le résultat d'une commande (par défaut : 30000 ; maximum : 150000). Si vous définissez le paramètre [`bashOutputMaxChars`](/docs/fr/settings-reference#bashoutputmaxchars), Claude Code ignore cette variable. Voir [Limites de sortie](/docs/fr/tools-reference#output-limits) |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [Erreurs de session en arrière-plan](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [Erreurs de session en arrière-plan](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [Erreurs de session en arrière-plan](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [Erreurs de session en arrière-plan](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [Erreurs de session en arrière-plan](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [Erreurs de session en arrière-plan](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [Ignorer toutes les vérifications avec le mode bypassPermissions](/docs/fr/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [Erreurs de session en arrière-plan](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [Erreurs de session en arrière-plan](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [Erreurs de session en arrière-plan](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [Erreurs de session en arrière-plan](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [Erreurs de session en arrière-plan](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [Erreurs de session en arrière-plan](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* Les connexions interrompues. Lorsqu'une connexion s'interrompt au milieu d'une requête avant que Claude n'ait complété une partie de sa réponse, y compris sa réflexion, Claude Code renvoie la requête avec le même backoff et le tour continue, même si du texte avait déjà commencé à être envoyé en streaming. Lorsqu'elle s'interrompt après que Claude a terminé sa réflexion mais avant qu'il n'ait commencé un texte ou un appel d'outil, Claude Code renvoie plutôt la requête jusqu'à deux fois en succession rapide, et termine le tour avec `Connection lost before a response was produced` si la connexion continue à s'interrompre à ce stade.419* Les connexions interrompues. Lorsqu'une connexion s'interrompt au milieu d'une requête avant que Claude n'ait complété une partie de sa réponse, y compris sa réflexion, Claude Code renvoie la requête avec le même backoff et le tour continue, même si du texte avait déjà commencé à être envoyé en streaming. Lorsqu'elle s'interrompt après que Claude a terminé sa réflexion mais avant qu'il n'ait commencé un texte ou un appel d'outil, Claude Code renvoie plutôt la requête jusqu'à deux fois en succession rapide, et termine le tour avec `Connection lost before a response was produced` si la connexion continue à s'interrompre à ce stade.

419* Une connexion que Claude Code détecte comme ayant été interrompue par votre ordinateur qui s'endort au milieu d'une requête. Claude Code la compte comme une connexion interrompue selon les règles ci-dessus ; une fois que l'étiquette de tentative nomme la raison spécifique, elle lit `Connection lost while your computer was asleep`, et si le tour se termine après que Claude a terminé sa réflexion mais avant un texte ou un appel d'outil, le message lit `Your computer went to sleep before a response was produced`.420* Une connexion que Claude Code détecte comme ayant été interrompue par votre ordinateur qui s'endort au milieu d'une requête. Claude Code la compte comme une connexion interrompue selon les règles ci-dessus ; une fois que l'étiquette de tentative nomme la raison spécifique, elle lit `Connection lost while your computer was asleep`, et si le tour se termine après que Claude a terminé sa réflexion mais avant un texte ou un appel d'outil, le message lit `Your computer went to sleep before a response was produced`.

420* Un flux de réponse bloqué, lorsque les en-têtes de réponse sont arrivés mais aucune partie de la réponse de Claude n'est arrivée, ou lorsque Claude a terminé sa réflexion mais n'a pas commencé un texte ou un appel d'outil : Claude Code abandonne la connexion bloquée et renvoie la requête en streaming au maximum une fois. Si la réponse se bloque une deuxième fois après que Claude a terminé sa réflexion mais avant un texte ou un appel d'outil, Claude Code termine le tour avec `The response stalled before a response was produced`.421* Un flux de réponse bloqué, lorsque les en-têtes de réponse sont arrivés mais aucune partie de la réponse de Claude n'est arrivée, ou lorsque Claude a terminé sa réflexion mais n'a pas commencé un texte ou un appel d'outil : Claude Code abandonne la connexion bloquée et renvoie la requête en streaming au maximum une fois. Si la réponse se bloque une deuxième fois après que Claude a terminé sa réflexion mais avant un texte ou un appel d'outil, Claude Code termine le tour avec `The response stalled before a response was produced`.

421* Une requête en streaming à laquelle l'API ne répond jamais avec des en-têtes de réponse, sur une connexion où le [délai de premier octet s'exécute](/docs/fr/network-config#streaming-idle-watchdogs) : Claude Code l'abandonne à la date limite et la renvoie au maximum une fois par requête de modèle, dans le budget de tentatives, puis termine le tour avec [No response from API](#no-response-from-api) si cette tentative reste sans réponse aussi. Sur d'autres connexions, la requête attend `API_TIMEOUT_MS`. Lorsque vous définissez `CLAUDE_CODE_RETRY_WATCHDOG`, le plafond d'une tentative ne s'applique pas.422* Une requête en streaming à laquelle l'API ne répond jamais avec des en-têtes de réponse, sur une connexion où le [délai de premier octet s'exécute](/docs/fr/network-config#streaming-idle-watchdogs) : Claude Code l'abandonne à la date limite et la renvoie au maximum une fois par requête de modèle, dans le budget de tentatives, puis termine le tour avec [No response from API](#no-response-from-api) si cette tentative reste sans réponse aussi. Lorsque vous définissez `CLAUDE_CODE_RETRY_WATCHDOG`, le plafond d'une tentative ne s'applique pas.

422* Une réponse en streaming que le filtre de contenu de sortie de l'API arrête avant que Claude n'ait terminé sa réflexion ou commencé un texte ou un appel d'outil. Claude Code renvoie la requête une fois, dans le budget de tentatives, et affiche [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) si le filtre arrête également la deuxième réponse.423* Une réponse en streaming que le filtre de contenu de sortie de l'API arrête avant que Claude n'ait terminé sa réflexion ou commencé un texte ou un appel d'outil. Claude Code renvoie la requête une fois, dans le budget de tentatives, et affiche [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) si le filtre arrête également la deuxième réponse.

423* Les throttles 429 temporaires, mais pas le `429` de limite de dépenses d'une passerelle, qui n'est pas un throttle ; voir [Spend limit reached](#spend-limit-reached).424* Les throttles 429 temporaires, mais pas le `429` de limite de dépenses d'une passerelle, qui n'est pas un throttle ; voir [Spend limit reached](#spend-limit-reached).

424 * Lorsque vous êtes connecté avec un abonnement claude.ai, cela inclut les throttles 429 qui ne portent pas les en-têtes de quota de votre plan. Avant v2.1.199, Claude Code ne réessayait ces throttles que pour les connexions par clé API et Enterprise.425 * Lorsque vous êtes connecté avec un abonnement claude.ai, cela inclut les throttles 429 qui ne portent pas les en-têtes de quota de votre plan. Avant v2.1.199, Claude Code ne réessayait ces throttles que pour les connexions par clé API et Enterprise.


4552 4553 

4553* Corrigez chaque entrée que l'erreur nomme par rapport aux [outils disponibles pour les sous-agents](/docs/fr/sub-agents#available-tools)4554* Corrigez chaque entrée que l'erreur nomme par rapport aux [outils disponibles pour les sous-agents](/docs/fr/sub-agents#available-tools)

4554* Supprimez les entrées pour les outils que la session n'a pas, comme les outils MCP d'un serveur qui n'est pas connecté4555* Supprimez les entrées pour les outils que la session n'a pas, comme les outils MCP d'un serveur qui n'est pas connecté

4556* Si l'entrée nomme un serveur MCP connecté, comparez l'entrée avec le nom de ce serveur tel que l'écrivent les [noms d'outils](/docs/fr/permissions#mcp) du serveur, comme `reports__v2` dans `mcp__reports__v2__get_totals`. Pour ce serveur, écrivez `mcp__reports__v2__*`, soit `mcp__` suivi du nom complet et de `__*`. Avec la forme plus courte `mcp__reports`, qui nomme un serveur appelé `reports`, le sous-agent n'obtient aucun des outils `reports__v2`

4555* Pour un outil que [les sous-agents en arrière-plan abandonnent](/docs/fr/sub-agents#available-tools), comme `CronCreate`, supprimez l'entrée. Pour conserver l'outil, [désactivez le mode fork](/docs/fr/sub-agents#turn-fork-mode-on-or-off) et demandez à Claude d'exécuter le sous-agent au premier plan4557* Pour un outil que [les sous-agents en arrière-plan abandonnent](/docs/fr/sub-agents#available-tools), comme `CronCreate`, supprimez l'entrée. Pour conserver l'outil, [désactivez le mode fork](/docs/fr/sub-agents#turn-fork-mode-on-or-off) et demandez à Claude d'exécuter le sous-agent au premier plan

4556* Supprimez le champ `tools` au lieu de lister les outils pour donner au sous-agent chaque [outil disponible pour les sous-agents](/docs/fr/sub-agents#available-tools)4558* Supprimez le champ `tools` au lieu de lister les outils pour donner au sous-agent chaque [outil disponible pour les sous-agents](/docs/fr/sub-agents#available-tools)

4557* Pour une liste `tools` qui contient uniquement `Agent`, augmentez la [limite de profondeur](/docs/fr/sub-agents#let-subagents-spawn-their-own-subagents) ou donnez à l'agent au moins un autre outil : Claude Code retient `Agent` à cette limite, donc une liste avec rien d'autre dedans se résout à aucun outil4559* Pour une liste `tools` qui contient uniquement `Agent`, augmentez la [limite de profondeur](/docs/fr/sub-agents#let-subagents-spawn-their-own-subagents) ou donnez à l'agent au moins un autre outil : Claude Code retient `Agent` à cette limite, donc une liste avec rien d'autre dedans se résout à aucun outil

hooks.md +53 −16

Details

476| `async` | non | Si `true`, s'exécute en arrière-plan sans bloquer. Consultez [Exécuter les hooks en arrière-plan](#run-hooks-in-the-background) |476| `async` | non | Si `true`, s'exécute en arrière-plan sans bloquer. Consultez [Exécuter les hooks en arrière-plan](#run-hooks-in-the-background) |

477| `asyncRewake` | non | Si `true`, s'exécute en arrière-plan et réveille Claude au code de sortie 2. Le stderr du hook, ou stdout s'il est vide, est affiché à Claude comme un [rappel système](/docs/fr/glossary#system-reminder) afin qu'il puisse réagir à un échec en arrière-plan de longue durée |477| `asyncRewake` | non | Si `true`, s'exécute en arrière-plan et réveille Claude au code de sortie 2. Le stderr du hook, ou stdout s'il est vide, est affiché à Claude comme un [rappel système](/docs/fr/glossary#system-reminder) afin qu'il puisse réagir à un échec en arrière-plan de longue durée |

478| `shell` | non | Shell à utiliser pour ce hook. Accepte `"bash"` ou `"powershell"`. Par défaut `"bash"`, ou `"powershell"` sur Windows lorsque Git Bash n'est pas installé. Définir `"powershell"` exécute la commande via PowerShell sur Windows. Ne nécessite pas `CLAUDE_CODE_USE_POWERSHELL_TOOL` puisque les hooks lancent PowerShell directement. Ignoré lorsque `args` est défini |478| `shell` | non | Shell à utiliser pour ce hook. Accepte `"bash"` ou `"powershell"`. Par défaut `"bash"`, ou `"powershell"` sur Windows lorsque Git Bash n'est pas installé. Définir `"powershell"` exécute la commande via PowerShell sur Windows. Ne nécessite pas `CLAUDE_CODE_USE_POWERSHELL_TOOL` puisque les hooks lancent PowerShell directement. Ignoré lorsque `args` est défini |

479| `onFailure` | non | Ce qu'il advient de l'action lorsque le hook échoue : `"continue"`, la valeur par défaut, ou `"block"`. Consultez [Bloquer l'action lorsqu'un hook échoue](#block-the-action-when-a-hook-fails). Nécessite Claude Code v2.1.295 ou ultérieur |479| `onFailure` | non | Indique si l'action qui a déclenché le hook se poursuit lorsque le hook échoue : `"continue"` ou `"block"`. Consultez [Bloquer l'action lorsqu'un hook échoue](#block-the-action-when-a-hook-fails) pour `"block"` et pour le cas où le champ n'est pas défini. Nécessite Claude Code v2.1.295 ou ultérieur |

480 480 

481<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

482 482 


829 829 

830* **Succès** : votre hook quitte avec 0. Claude Code applique tous les champs de [sortie JSON](#json-output) que votre hook a imprimés, et l'action se poursuit sauf si ces champs la bloquent ou la refusent. [Hooks qui démarrent un processus en arrière-plan](#hooks-that-start-a-background-process) couvre l'exception.830* **Succès** : votre hook quitte avec 0. Claude Code applique tous les champs de [sortie JSON](#json-output) que votre hook a imprimés, et l'action se poursuit sauf si ces champs la bloquent ou la refusent. [Hooks qui démarrent un processus en arrière-plan](#hooks-that-start-a-background-process) couvre l'exception.

831* **Erreur bloquante** : votre hook quitte avec 2. Sur [les événements qui peuvent bloquer](#exit-code-2-behavior-per-event), Claude Code arrête l'action.831* **Erreur bloquante** : votre hook quitte avec 2. Sur [les événements qui peuvent bloquer](#exit-code-2-behavior-per-event), Claude Code arrête l'action.

832* **Erreur non-bloquante** : votre hook quitte avec tout autre code, ou échoue d'une autre manière, par exemple en ne démarrant pas ou en imprimant du JSON invalide. L'action se poursuit, et sur des événements tels que `PreToolUse`, vous voyez un avis `<hook name> hook error` dans la transcription. Si vous souhaitez qu'un hook en échec bloque l'action, définissez [`onFailure: "block"`](#block-the-action-when-a-hook-fails).832* **Erreur non-bloquante** : votre hook quitte avec tout autre code, ou échoue d'une autre manière, par exemple en ne démarrant pas ou en imprimant du JSON invalide. L'action se poursuit, sauf pour les hooks [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails), par exemple un hook avec `onFailure` défini sur `"block"`. Sur des événements tels que `PreToolUse`, vous voyez un avis `<hook name> hook error` dans la transcription.

833 833 

834Ce que votre hook imprime sur stdout peut changer le résultat. Par exemple, si un hook `PreToolUse` quitte avec 1 mais imprime du JSON qui passe la validation, l'exécution est un succès et les champs JSON décident de ce qui se passe. Pour trouver le résultat de votre hook sur un événement tel que `PreToolUse`, faites correspondre ce qu'il a imprimé sur stdout dans la première colonne avec son code de sortie en haut :834Ce que votre hook imprime sur stdout peut changer le résultat. Par exemple, lorsqu'un hook `PreToolUse` quitte avec 1 mais imprime du JSON qui passe la validation, ce JSON peut quand même décider de ce qui se passe. Pour trouver le résultat de votre hook sur un événement tel que `PreToolUse`, faites correspondre ce qu'il a imprimé sur stdout dans la première colonne avec son code de sortie en haut :

835 835 

836| Stdout | Exit 0 | Exit 2 | Tout autre code de sortie |836| Stdout | Exit 0 | Exit 2 | Tout autre code de sortie |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| Objet JSON qui passe la [validation du schéma](#json-output) | Succès. Les champs s'appliquent | Erreur bloquante. Claude Code lit toujours les champs, mais ils ne peuvent pas remplacer le blocage | Succès. Claude Code ignore le code de sortie, et les champs seuls décident. Avec [`onFailure: "block"`](#block-the-action-when-a-hook-fails), cela compte comme un échec |838| Objet JSON qui passe la [validation du schéma](#json-output) | Succès. Les champs s'appliquent | Erreur bloquante. Claude Code lit toujours les champs, mais ils ne peuvent pas remplacer le blocage | Succès. Claude Code ignore le code de sortie, et les champs seuls décident. Pour les hooks [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails), l'exécution compte plutôt comme un échec |

839| JSON qui [ne peut pas être analysé](#exit-code-0) ou échoue la validation du schéma | Erreur non-bloquante. L'avis porte le message d'analyse ou de validation | Erreur bloquante. Votre stderr est la raison | Erreur non-bloquante. L'avis porte le message d'analyse ou de validation |839| JSON qui [ne peut pas être analysé](#exit-code-0) ou échoue la validation du schéma | Erreur non-bloquante. L'avis porte le message d'analyse ou de validation | Erreur bloquante. Votre stderr est la raison | Erreur non-bloquante. L'avis porte le message d'analyse ou de validation |

840| [Texte brut](#exit-code-0), ou rien | Succès | Erreur bloquante. Votre stderr est la raison | Erreur non-bloquante. L'avis porte la première ligne de votre stderr |840| [Texte brut](#exit-code-0), ou rien | Succès | Erreur bloquante. Votre stderr est la raison | Erreur non-bloquante. L'avis porte la première ligne de votre stderr |

841 841 


864* **Deux lignes ou plus qui s'analysent chacune comme JSON seules, la première commençant par `{` et la dernière se terminant par `}`** : texte brut lorsqu'aucune ligne n'est un objet de sortie JSON qui définit un champ, et échec d'analyse lorsque l'une d'elles l'est.864* **Deux lignes ou plus qui s'analysent chacune comme JSON seules, la première commençant par `{` et la dernière se terminant par `}`** : texte brut lorsqu'aucune ligne n'est un objet de sortie JSON qui définit un champ, et échec d'analyse lorsque l'une d'elles l'est.

865* **Tout autre contenu qui commence par `{` et se termine par `}` mais n'est pas du JSON valide** : un échec d'analyse.865* **Tout autre contenu qui commence par `{` et se termine par `}` mais n'est pas du JSON valide** : un échec d'analyse.

866 866 

867Lorsque Claude Code essaie d'analyser votre stdout comme JSON et ne peut pas, ou que l'objet analysé échoue la [validation du schéma](#json-output), l'exécution est une [erreur non-bloquante](#exit-code-output). L'avis `<hook name> hook error` porte le message d'analyse ou de validation. Sur les événements qui ajoutent stdout en texte brut comme contexte, Claude Code n'ajoute pas le stdout qu'il n'a pas pu analyser.867Sauf si le hook est l'un de ceux [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails), un échec d'analyse ou un objet analysé qui échoue la [validation du schéma](#json-output) est une [erreur non-bloquante](#exit-code-output). L'avis `<hook name> hook error` porte le message d'analyse ou de validation. Sur les événements qui ajoutent stdout en texte brut comme contexte, Claude Code n'ajoute pas le stdout qu'il n'a pas pu analyser.

868 868 

869Claude ne voit jamais le stderr d'un hook qui quitte avec 0. Pour le lire vous-même sur des événements tels que `PreToolUse`, activez [la journalisation de débogage](#debug-hooks). Pour afficher un avertissement à Claude à partir d'un hook `PostToolUse` ou `PostToolUseFailure`, quittez 2 à la place afin que [Claude voie stderr](#exit-code-2-behavior-per-event) même si l'outil s'est déjà exécuté.869Claude ne voit jamais le stderr d'un hook qui quitte avec 0. Pour le lire vous-même sur des événements tels que `PreToolUse`, activez [la journalisation de débogage](#debug-hooks). Pour afficher un avertissement à Claude à partir d'un hook `PostToolUse` ou `PostToolUseFailure`, quittez 2 à la place afin que [Claude voie stderr](#exit-code-2-behavior-per-event) même si l'outil s'est déjà exécuté.

870 870 


907 Autres codes de sortie907 Autres codes de sortie

908</h4>908</h4>

909 909 

910Lorsque votre hook quitte avec un code autre que 0 ou 2 et imprime du texte brut ou rien sur stdout, l'exécution est une [erreur non-bloquante](#exit-code-output). Vous voyez un avis `<hook name> hook error` dans la transcription avec `Failed with non-blocking status code:` et la première ligne du stderr de votre hook. Par exemple, lorsqu'un hook `PreToolUse` sur `Bash` imprime `something broke` sur stderr et quitte avec 1, l'avis `PreToolUse:Bash hook error` porte cette ligne :910Sauf si le hook est l'un de ceux [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails), un code de sortie autre que 0 ou 2 avec du texte brut ou rien sur stdout est une [erreur non-bloquante](#exit-code-output). Si l'action se poursuit, vous voyez un avis `<hook name> hook error` dans la transcription avec `Failed with non-blocking status code:` et la première ligne du stderr de votre hook.

911 

912Par exemple, lorsqu'un hook `PreToolUse` sur `Bash` imprime `something broke` sur stderr et quitte avec 1, l'avis `PreToolUse:Bash hook error` porte cette ligne :

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916Pour capturer le stderr complet plutôt que sa première ligne, activez [la journalisation de débogage](#debug-hooks).918Pour capturer le stderr complet plutôt que sa première ligne, activez [la journalisation de débogage](#debug-hooks).

917 919 

918Un hook qui ne peut pas démarrer est également une erreur non-bloquante. Sous forme shell, lorsque le chemin du script n'existe pas ou n'est pas exécutable, le shell quitte avec un code comme 127 et l'avis porte le message de l'interpréteur, par exemple `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Lorsque vous configurez un hook de politique, surveillez cet avis à sa première exécution, car un chemin mal orthographié dans `settings.json` signifie que le hook ne s'exécute jamais. Pour bloquer l'action à la place, définissez [`onFailure: "block"`](#block-the-action-when-a-hook-fails).920Sauf si le hook est l'un de ceux [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails), un hook qui ne peut pas démarrer est également une erreur non-bloquante. Sous forme shell, lorsque le chemin du script n'existe pas ou n'est pas exécutable, le shell quitte avec un code comme 127 et l'avis porte le message de l'interpréteur. Par exemple, lorsque le chemin du script n'existe pas, l'avis porte une ligne comme celle-ci :

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926Lorsque vous configurez un hook de politique, surveillez cet avis à sa première exécution, car un chemin mal orthographié dans `settings.json` signifie que le hook ne s'exécute jamais. Pour bloquer l'action lorsque le hook ne peut pas démarrer, définissez [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

919 927 

920<Warning>928<Warning>

921 Sans JSON valide sur stdout, Claude Code traite exit code 1 comme une erreur non-bloquante, même si 1 est le code d'échec Unix conventionnel. Si votre hook est destiné à appliquer une politique, utilisez `exit 2`.929 Exit code 1 sans sortie JSON valide est une erreur non-bloquante sauf si le hook est l'un de ceux [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails), même si 1 est le code d'échec Unix conventionnel. Si votre hook est destiné à appliquer une politique, utilisez `exit 2`.

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

930Sur [`PreModelSwitch`](#premodelswitch), un hook annulé à son délai d'expiration bloque le changement de modèle. Sur `PreToolUse`, les deux familles de hooks diffèrent :938Sur [`PreModelSwitch`](#premodelswitch), un hook annulé à son délai d'expiration bloque le changement de modèle. Sur `PreToolUse`, les deux familles de hooks diffèrent :

931 939 

932* Un hook `command`, `http` ou `mcp_tool` expiré ne bloque pas l'appel d'outil. L'appel continue via le [flux de permission](/docs/fr/permissions) normal, donc ne comptez pas sur un hook bloqué pour agir comme un contrôle. Pour bloquer l'appel lorsqu'un hook `command` ou `http` expire, définissez [`onFailure: "block"`](#block-the-action-when-a-hook-fails).940* Un hook `command`, `http` ou `mcp_tool` expiré ne bloque pas l'appel d'outil, sauf pour les hooks [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails). L'appel continue via le [flux de permission](/docs/fr/permissions) normal, donc ne comptez pas sur un hook bloqué pour agir comme un contrôle. Pour bloquer l'appel lorsqu'un hook `command` ou `http` expire, définissez [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

933* Un hook de rappel [Agent SDK](/docs/fr/agent-sdk/hooks) qui dépasse son délai d'expiration [bloque l'appel d'outil](#pretooluse).941* Un hook de rappel [Agent SDK](/docs/fr/agent-sdk/hooks) qui dépasse son délai d'expiration [bloque l'appel d'outil](#pretooluse).

934 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 Bloquer l'action lorsqu'un hook échoue967 Bloquer l'action lorsqu'un hook échoue

960</h4>968</h4>

961 969 

962Sur la plupart des événements, lorsqu'un hook échoue ou expire, Claude Code exécute quand même l'action, de sorte qu'un hook de politique avec un chemin erroné ou un script qui plante laisse tout passer. Pour bloquer l'action à la place, définissez `"onFailure": "block"` sur un hook `command` ou `http`. La valeur par défaut est `"continue"`. Nécessite Claude Code v2.1.295 ou ultérieur.970Sur la plupart des événements, lorsqu'un hook échoue ou expire, Claude Code exécute quand même l'action. Un hook de politique avec un chemin erroné ou un script qui plante laisse alors tout passer. Pour bloquer l'action à la place, définissez `"onFailure": "block"` sur un hook `command` ou `http`. Nécessite Claude Code v2.1.295 ou ultérieur.

971 

972<Note>

973 Sur Windows sans Git Bash, un hook de commande `PreToolUse` ou `PermissionRequest` sous forme shell qui échoue sans `onFailure` défini peut au contraire [bloquer l'appel d'outil](#failed-hooks-on-windows-without-git-bash).

974</Note>

963 975 

964Ce hook `PreToolUse` dans `.claude/settings.json` exécute un script de projet avant chaque commande Bash, et bloque la commande si le script échoue :976Ce hook `PreToolUse` dans `.claude/settings.json` exécute un script de projet avant chaque commande Bash, et bloque la commande si le script échoue :

965 977 


1007* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` et `TeammateIdle`** : le code de sortie 2 sur ces événements renvoie Claude au travail, et Claude ne peut pas réparer un hook qui ne s'exécute pas1019* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` et `TeammateIdle`** : le code de sortie 2 sur ces événements renvoie Claude au travail, et Claude ne peut pas réparer un hook qui ne s'exécute pas

1008* **Hooks de commande en arrière-plan** : les hooks de commande qui définissent [`async` ou `asyncRewake`](#run-hooks-in-the-background)1020* **Hooks de commande en arrière-plan** : les hooks de commande qui définissent [`async` ou `asyncRewake`](#run-hooks-in-the-background)

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Échecs de hooks sur Windows sans Git Bash

1024</h4>

1025 

1026Si l'erreur d'un appel d'outil bloqué inclut ce texte, un hook de commande `PreToolUse` ou `PermissionRequest` a échoué ou expiré et a bloqué l'appel :

1027 

1028```text theme={null}

1029blocking 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.

1030```

1031 

1032Un hook sous forme shell sans `shell` défini s'exécute dans PowerShell lorsque Git Bash n'est pas installé, et un script écrit pour Bash peut ne pas s'y exécuter tel quel. Choisissez la correction qui correspond à votre hook :

1033 

1034* **Le hook est écrit pour Bash** : installez [Git for Windows](https://git-scm.com/downloads/win), ou définissez [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/fr/env-vars) si Git Bash est installé à un endroit où Claude Code ne le trouve pas, puis démarrez une nouvelle session

1035* **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](#exec-form-and-shell-form), et ajoutez [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). 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

1036* **Le hook est écrit pour PowerShell** : ajoutez `"shell": "powershell"` et [`"onFailure": "block"`](#block-the-action-when-a-hook-fails) au hook. Sans `"onFailure": "block"`, l'appel peut se poursuivre lorsque le hook échoue encore ou expire. Pour savoir pourquoi le hook a échoué, consultez le [journal de débogage](#debug-hooks)

1037* **L'action doit se poursuivre lorsque le hook échoue** : ajoutez `"onFailure": "continue"` au hook

1038 

1039Pour 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.

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 Comportement du code de sortie 2 par événement1042 Comportement du code de sortie 2 par événement

1012</h4>1043</h4>


1060* **2xx avec un corps vide** : succès, équivalent à exit code 0 sans sortie1091* **2xx avec un corps vide** : succès, équivalent à exit code 0 sans sortie

1061* **2xx avec un corps d'objet JSON** : analysé en utilisant le même schéma [sortie JSON](#json-output) que les hooks de commande. Un corps qui échoue la validation du schéma est une erreur non-bloquante1092* **2xx avec un corps d'objet JSON** : analysé en utilisant le même schéma [sortie JSON](#json-output) que les hooks de commande. Un corps qui échoue la validation du schéma est une erreur non-bloquante

1062* **2xx avec n'importe quel autre corps, comme du texte brut** : erreur non-bloquante, gérée de la même manière qu'un statut non-2xx. Claude Code n'ajoute pas le texte au contexte de Claude1093* **2xx avec n'importe quel autre corps, comme du texte brut** : erreur non-bloquante, gérée de la même manière qu'un statut non-2xx. Claude Code n'ajoute pas le texte au contexte de Claude

1063* **Statut non-2xx** : erreur non-bloquante, l'exécution continue1094* **Statut non-2xx** : erreur non-bloquante

1064* **Défaillance de connexion** : erreur non-bloquante, l'exécution continue1095* **Défaillance de connexion** : erreur non-bloquante

1065* **Délai d'expiration** : le hook est annulé, comme décrit sous [Délais d'expiration](#timeouts)1096* **Délai d'expiration** : le hook est annulé, comme décrit sous [Délais d'expiration](#timeouts)

1066 1097 

1067Les hooks HTTP ne peuvent pas signaler une erreur bloquante uniquement via le code de statut : un statut non-2xx ou une connexion échouée est une [erreur non-bloquante](#exit-code-output). Pour bloquer un appel d'outil ou refuser une permission, retournez une réponse 2xx avec un corps JSON contenant les champs de décision appropriés. Pour bloquer l'action lorsque la requête échoue ou retourne un statut non-2xx, définissez [`onFailure: "block"`](#block-the-action-when-a-hook-fails).1098Après une [erreur non-bloquante](#exit-code-output), l'action se poursuit sauf si le hook est l'un de ceux [dont l'échec bloque l'action](#block-the-action-when-a-hook-fails). Pour bloquer un appel d'outil ou refuser une permission, retournez une réponse 2xx avec un corps JSON contenant les [champs de décision](#decision-control) appropriés. Pour bloquer l'action lorsque la requête échoue ou retourne un statut non-2xx, définissez [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 Sortie JSON1101 Sortie JSON


1573}1604}

1574```1605```

1575 1606 

1607Lorsque le prompt est un [skill](/docs/fr/skills) ou une commande personnalisée que vous avez saisi, comme `/deploy staging`, le hook reçoit cette ligne telle que vous l'avez saisie, et non le contenu développé du skill. Si le hook bloque le prompt, la commande ne s'exécute pas, et les commandes shell que le skill [injecte avec `` !`<command>` ``](/docs/fr/skills#inject-dynamic-context) ne s'exécutent donc pas non plus. Pour effectuer la correspondance sur le nom ou les arguments de la commande, utilisez plutôt [UserPromptExpansion](#userpromptexpansion).

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 Contrôle de décision d'UserPromptSubmit1610 Contrôle de décision d'UserPromptSubmit

1578</h4>1611</h4>


2076 2109 

2077| Champ | Description |2110| Champ | Description |

2078| :- | :- |2111| :- | :- |

2079| `permissionDecision` | `"allow"` ignore la demande de permission, sauf pour les [actions qu'aucun mode n'approuve automatiquement](/docs/fr/permission-modes#actions-no-mode-auto-approves), pour les [lectures depuis des chemins réseau](/docs/fr/permissions#network-paths), et pour `AskUserQuestion` et `ExitPlanMode`, qui nécessitent d'y [associer `updatedInput`](#allow-with-updatedinput). `"deny"` empêche l'appel d'outil. `"ask"` demande confirmation à l'utilisateur. `"defer"` sort proprement afin que l'outil puisse être repris ultérieurement. Les [règles de refus et de demande](/docs/fr/permissions#manage-permissions) sont toujours évaluées, quoi que renvoie le hook |2112| `permissionDecision` | `"allow"` ignore la demande de permission, sauf pour les [actions qu'aucun mode n'approuve automatiquement](/docs/fr/permission-modes#actions-no-mode-auto-approves) et les [lectures depuis des chemins réseau](/docs/fr/permissions#network-paths). `AskUserQuestion` et `ExitPlanMode` nécessitent [`updatedInput` associé à `"allow"`](#allow-with-updatedinput). Pour le mode plan, consultez [Approbations par hook en mode plan](/docs/fr/permissions#hook-approvals-in-plan-mode). `"deny"` empêche l'appel d'outil. `"ask"` demande à l'utilisateur de confirmer. `"defer"` quitte proprement afin que l'outil puisse être repris plus tard. Les [règles de refus et de demande](/docs/fr/permissions#manage-permissions) sont toujours évaluées, quelle que soit la valeur renvoyée par le hook |

2080| `permissionDecisionReason` | Pour `"ask"`, affiché à l'utilisateur dans la demande de permission. Lorsque Claude Code [refuse l'appel](/docs/fr/headless#turn-off-permission-prompts-in-unattended-runs) lors d'une exécution `-p` où personne ne peut répondre à cette demande, Claude lit plutôt la raison dans le résultat de l'outil. Pour `"deny"`, affiché à Claude. Pour `"allow"` et `"defer"`, écrit uniquement dans le [log de débogage](#debug-hooks) |2113| `permissionDecisionReason` | Pour `"ask"`, affiché à l'utilisateur dans la demande de permission. Lorsque Claude Code [refuse l'appel](/docs/fr/headless#turn-off-permission-prompts-in-unattended-runs) lors d'une exécution `-p` où personne ne peut répondre à cette demande, Claude lit plutôt la raison dans le résultat de l'outil. Pour `"deny"`, affiché à Claude. Pour `"allow"` et `"defer"`, écrit uniquement dans le [log de débogage](#debug-hooks) |

2081| `updatedInput` | Modifie les paramètres d'entrée de l'outil avant l'exécution. Remplace l'intégralité de l'objet d'entrée : incluez donc les champs inchangés en plus des champs modifiés. Claude Code évalue les règles de permission et l'[éligibilité au passage automatique en arrière-plan](/docs/fr/tools-reference#foreground-commands-that-move-to-the-background) d'une commande Bash par rapport à l'entrée renvoyée par votre hook, et non à celle envoyée par Claude. Combinez-le avec `"allow"` pour approuver automatiquement, ou avec `"ask"` pour montrer l'entrée modifiée à l'utilisateur. Ignoré pour `"defer"` |2114| `updatedInput` | Modifie les paramètres d'entrée de l'outil avant l'exécution. Remplace l'intégralité de l'objet d'entrée : incluez donc les champs inchangés en plus des champs modifiés. Claude Code évalue les règles de permission et l'[éligibilité au passage automatique en arrière-plan](/docs/fr/tools-reference#foreground-commands-that-move-to-the-background) d'une commande Bash par rapport à l'entrée renvoyée par votre hook, et non à celle envoyée par Claude. Combinez-le avec `"allow"` pour approuver automatiquement, ou avec `"ask"` pour montrer l'entrée modifiée à l'utilisateur. Ignoré pour `"defer"` |

2082| `additionalContext` | Chaîne ajoutée au contexte de Claude en plus du résultat de l'outil. Ignorée lorsque `permissionDecision` vaut `"defer"`. Consultez [Ajouter du contexte pour Claude](#add-context-for-claude) |2115| `additionalContext` | Chaîne ajoutée au contexte de Claude en plus du résultat de l'outil. Ignorée lorsque `permissionDecision` vaut `"defer"`. Consultez [Ajouter du contexte pour Claude](#add-context-for-claude) |


3718 3751 

3719Claude Code affiche à l'utilisateur tout `systemMessage` renvoyé par votre hook, quelle que soit la décision ; un hook de rapport de coût peut donc renvoyer `{"systemMessage": "..."}` et se terminer avec le code 0.3752Claude Code affiche à l'utilisateur tout `systemMessage` renvoyé par votre hook, quelle que soit la décision ; un hook de rapport de coût peut donc renvoyer `{"systemMessage": "..."}` et se terminer avec le code 0.

3720 3753 

3721Un hook PreModelSwitch qui ne répond pas avant son délai d'expiration bloque le changement. Pour l'effet d'un délai d'expiration sur les autres événements, consultez [Délais d'expiration](#timeouts). Le délai d'expiration par défaut pour cet événement est de 30 secondes. `PreModelSwitch` n'exécute que les hooks `command`, `http` et `mcp_tool` ; les valeurs par défaut de `prompt` et `agent` ne s'appliquent donc pas.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3755 Délais d'expiration et autres codes de sortie de PreModelSwitch

3756</h4>

3757 

3758Un hook PreModelSwitch qui ne répond pas avant son délai d'expiration bloque le changement. Le délai d'expiration par défaut pour cet événement est de 30 secondes.

3722 3759 

3723Un hook qui se termine avec un code autre que 0 ou 2 et n'affiche aucune décision JSON constitue une erreur non bloquante, comme décrit dans [Autres codes de sortie](#other-exit-codes).3760Pour savoir ce que produit un code de sortie autre que 0 ou 2, consultez [Autres codes de sortie](#other-exit-codes).

3724 3761 

3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">

3726 PostModelSwitch3763 PostModelSwitch

hooks-guide.md +17 −4

Details

633 * Pour un hook `PreToolUse`, cela n'approuve pas l'appel d'outil : le [flux de permission](/docs/fr/permissions) normal s'applique toujours.633 * Pour un hook `PreToolUse`, cela n'approuve pas l'appel d'outil : le [flux de permission](/docs/fr/permissions) normal s'applique toujours.

634 * Pour les hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` et `PostModelSwitch`, Claude Code ajoute stdout qu'il [traite comme du texte brut](/docs/fr/hooks#exit-code-0) au contexte de Claude.634 * Pour les hooks `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart` et `PostModelSwitch`, Claude Code ajoute stdout qu'il [traite comme du texte brut](/docs/fr/hooks#exit-code-0) au contexte de Claude.

635* **Exit 2** : Claude Code bloque l'action. Écrivez une raison sur stderr. Où elle aboutit dépend de l'événement : certains événements la transmettent à Claude comme retour afin qu'il puisse s'ajuster, d'autres la montrent à l'utilisateur, et quelques-uns, comme `ConfigChange` et `Elicitation`, ne font surface à aucun message. Certains événements ne peuvent pas être bloqués : pour `SessionStart` et autres, exit 2 affiche stderr à l'utilisateur et l'exécution continue. Consultez [comportement du code de sortie 2 par événement](/docs/fr/hooks#exit-code-2-behavior-per-event) pour la liste complète.635* **Exit 2** : Claude Code bloque l'action. Écrivez une raison sur stderr. Où elle aboutit dépend de l'événement : certains événements la transmettent à Claude comme retour afin qu'il puisse s'ajuster, d'autres la montrent à l'utilisateur, et quelques-uns, comme `ConfigChange` et `Elicitation`, ne font surface à aucun message. Certains événements ne peuvent pas être bloqués : pour `SessionStart` et autres, exit 2 affiche stderr à l'utilisateur et l'exécution continue. Consultez [comportement du code de sortie 2 par événement](/docs/fr/hooks#exit-code-2-behavior-per-event) pour la liste complète.

636* **Tout autre code de sortie** : pour la plupart des événements, le résultat dépend de ce que votre hook a imprimé sur stdout :636* **Tout autre code de sortie** : pour la plupart des événements, l'action se poursuit comme une [erreur non bloquante](/docs/fr/hooks#exit-code-output), sauf si le hook fait partie de ceux [dont l'échec bloque l'action](/docs/fr/hooks#block-the-action-when-a-hook-fails) ou si sa sortie JSON passe la validation :

637 * Un objet analysé qui passe la validation du schéma : Claude Code ignore le code de sortie, le JSON seul décide du résultat, et le hook n'est pas signalé comme une erreur. Les exceptions par événement, comme `WorktreeCreate` échouant sur tout code de sortie non nul, sont listées dans la section [Sortie du code de sortie](/docs/fr/hooks#exit-code-output) de la référence.637 * Un objet analysé qui passe la validation du schéma : Claude Code ignore le code de sortie, le JSON seul décide du résultat, et le hook n'est pas signalé comme une erreur. Les exceptions par événement, comme `WorktreeCreate` échouant sur tout code de sortie non nul, sont listées dans la section [Sortie du code de sortie](/docs/fr/hooks#exit-code-output) de la référence.

638 * Un objet analysé qui échoue la validation du schéma, ou stdout que Claude Code [essaie d'analyser comme JSON](/docs/fr/hooks#exit-code-0) mais qui n'est pas du JSON valide : une erreur non bloquante ; l'avis porte le message de validation ou d'analyse.638 * Un objet analysé qui échoue la validation du schéma, ou stdout que Claude Code [essaie d'analyser comme JSON](/docs/fr/hooks#exit-code-0) mais qui n'est pas du JSON valide : une erreur non bloquante ; l'avis porte le message de validation ou d'analyse.

639 * Stdout que Claude Code [traite comme du texte brut](/docs/fr/hooks#exit-code-0), ou stdout vide : l'action se poursuit comme une erreur non bloquante. La transcription affiche un avis `<hook name> hook error`, puis la première ligne de stderr préfixée par `Failed with non-blocking status code:`. Pour capturer le stderr complet, activez [le journal de débogage](/docs/fr/hooks#debug-hooks) avec `claude --debug` ou en exécutant `/debug` en milieu de session.639 * Stdout que Claude Code [traite comme du texte brut](/docs/fr/hooks#exit-code-0), ou stdout vide : l'action se poursuit comme une erreur non bloquante. La transcription affiche un avis `<hook name> hook error`, puis la première ligne de stderr préfixée par `Failed with non-blocking status code:`. Pour capturer le stderr complet, activez [le journal de débogage](/docs/fr/hooks#debug-hooks) avec `claude --debug` ou en exécutant `/debug` en milieu de session.


664 664 

665Sur `PreToolUse`, Claude Code gère chaque valeur `permissionDecision` comme suit :665Sur `PreToolUse`, Claude Code gère chaque valeur `permissionDecision` comme suit :

666 666 

667* `"allow"` : ignorer la demande de permission interactive. Les règles de refus et d'ask, y compris les listes de refus gérées par l'entreprise, s'appliquent toujours, tout comme les demandes pour les lectures depuis des [chemins réseau](/docs/fr/permissions#network-paths), pour les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool) et pour les outils de connecteur [que votre organisation a définis sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools) dans les sessions où ce paramètre atteint Claude Code667* `"allow"` : ignorer la demande de permission interactive. Les règles de refus et d'ask, y compris les listes de refus gérées par l'entreprise, s'appliquent toujours, tout comme les demandes pour :

668 

669 * Les lectures depuis des [chemins réseau](/docs/fr/permissions#network-paths)

670 * Les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool)

671 * Les outils de connecteur [que votre organisation a définis sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools) dans les sessions où ce paramètre atteint Claude Code

672 

673 Pour ce que fait `"allow"` en mode plan, consultez [Approbations des hooks en mode plan](/docs/fr/permissions#hook-approvals-in-plan-mode).

668* `"deny"` : annuler l'appel d'outil et envoyer la raison à Claude674* `"deny"` : annuler l'appel d'outil et envoyer la raison à Claude

669* `"ask"` : afficher l'invite de permission à l'utilisateur comme d'habitude675* `"ask"` : afficher l'invite de permission à l'utilisateur comme d'habitude

670 676 


1015 1021 

1016Les hooks `PreToolUse` se déclenchent avant toute vérification du mode de permission, dans tous les [modes de permission](/docs/fr/permission-modes), y compris `dontAsk`. Un hook qui retourne `permissionDecision: "deny"` bloque l'outil même en mode `bypassPermissions` ou avec `--dangerously-skip-permissions`. Cela vous permet d'appliquer une politique que les utilisateurs ne peuvent pas contourner en changeant leur mode de permission.1022Les hooks `PreToolUse` se déclenchent avant toute vérification du mode de permission, dans tous les [modes de permission](/docs/fr/permission-modes), y compris `dontAsk`. Un hook qui retourne `permissionDecision: "deny"` bloque l'outil même en mode `bypassPermissions` ou avec `--dangerously-skip-permissions`. Cela vous permet d'appliquer une politique que les utilisateurs ne peuvent pas contourner en changeant leur mode de permission.

1017 1023 

1018L'inverse n'est pas vrai : un hook retournant `"allow"` ne contourne pas les règles de refus des paramètres, et il ne peut pas supprimer la demande de permission pour les lectures depuis des [chemins réseau](/docs/fr/permissions#network-paths), pour les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool) ou pour les outils de connecteur [que votre organisation a défini sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools) dans les sessions où ce paramètre atteint Claude Code. Les hooks dans les fichiers de paramètres et dans le `hooks/hooks.json` d'un plugin peuvent renforcer les restrictions mais pas les assouplir au-delà de ce que les règles de permission permettent.1024L'inverse n'est pas vrai : les hooks dans les fichiers de paramètres et dans le `hooks/hooks.json` d'un plugin peuvent renforcer les restrictions mais pas les assouplir au-delà de ce que les règles de permission permettent. Un hook retournant `"allow"` ne contourne pas les règles de refus des paramètres, et il ne peut pas supprimer la demande de permission pour :

1025 

1026* Les lectures depuis des [chemins réseau](/docs/fr/permissions#network-paths)

1027* Les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool)

1028* Les outils de connecteur [que votre organisation a définis sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools) dans les sessions où ce paramètre atteint Claude Code

1029 

1030En [mode plan](/docs/fr/permissions#hook-approvals-in-plan-mode), si votre hook `PreToolUse` retourne `"allow"` pour une modification de fichier, vous obtenez la même demande de permission, le même blocage ou la même approbation que la modification obtiendrait sans hook. Pour lever cette limite sur les approbations des hooks, [approuvez le plan](/docs/fr/permission-modes#review-and-approve-a-plan) ou passez à un autre mode de permission.

1019 1031 

1020Un [mod](/docs/fr/plugins/mods/overview) que vous installez et qui gère `tool.check` peut approuver un appel que votre hook `PreToolUse` a bloqué, sauf si le hook se trouve dans les paramètres gérés. [Étendre les permissions avec les hooks](/docs/fr/permissions#extend-permissions-with-hooks) énumère les règles qui prévalent sur un mod.1032Un [mod](/docs/fr/plugins/mods/overview) que vous installez et qui gère `tool.check` peut approuver un appel que votre hook `PreToolUse` a bloqué, sauf si le hook se trouve dans les paramètres gérés. En mode plan, le mod peut approuver un tel appel lorsqu'il est en lecture seule, mais pas une modification de fichier ni un autre appel qui n'est pas en lecture seule. [Étendre les permissions avec les hooks](/docs/fr/permissions#extend-permissions-with-hooks) énumère les règles qui prévalent sur un mod.

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 Hook ne se déclenche pas1035 Hook ne se déclenche pas


1042 ```1054 ```

1043* Si vous voyez « command not found », utilisez des chemins absolus ou `${CLAUDE_PROJECT_DIR}` pour référencer les scripts. Pour éviter complètement les guillemets du shell, ajoutez `"args": []` pour basculer vers la [forme exec](/docs/fr/hooks#exec-form-and-shell-form), qui génère le script directement sans shell1055* Si vous voyez « command not found », utilisez des chemins absolus ou `${CLAUDE_PROJECT_DIR}` pour référencer les scripts. Pour éviter complètement les guillemets du shell, ajoutez `"args": []` pour basculer vers la [forme exec](/docs/fr/hooks#exec-form-and-shell-form), qui génère le script directement sans shell

1044* Si vous voyez « jq: command not found », installez `jq` ou utilisez Python/Node.js pour l'analyse JSON1056* Si vous voyez « jq: command not found », installez `jq` ou utilisez Python/Node.js pour l'analyse JSON

1057* Si le message inclut `blocking because Git Bash wasn't found`, vous êtes sous Windows, Claude Code n'a pas trouvé Git Bash, et le hook en échec ou ayant expiré a bloqué l'appel d'outil. Consultez [Hooks en échec sous Windows sans Git Bash](/docs/fr/hooks#failed-hooks-on-windows-without-git-bash) pour les correctifs

1045* Si l'avis affiche un message de validation JSON, la sortie de votre hook a été analysée en JSON mais a échoué la validation du schéma. S'il affiche un message d'analyse JSON, la sortie ressemblait à un objet JSON mais n'était pas du JSON valide. Les deux se produisent même à la sortie 0.1058* Si l'avis affiche un message de validation JSON, la sortie de votre hook a été analysée en JSON mais a échoué la validation du schéma. S'il affiche un message d'analyse JSON, la sortie ressemblait à un objet JSON mais n'était pas du JSON valide. Les deux se produisent même à la sortie 0.

1046 1059 

1047 Pour corriger un échec d'analyse, construisez la charge utile avec un encodeur JSON tel que `jq` au lieu de la concaténation de chaînes, afin que les guillemets et les barres obliques inverses à l'intérieur des valeurs soient échappés. La section [Exit code output](/docs/fr/hooks#exit-code-output) de la référence couvre les combinaisons de code de sortie et JSON1060 Pour corriger un échec d'analyse, construisez la charge utile avec un encodeur JSON tel que `jq` au lieu de la concaténation de chaînes, afin que les guillemets et les barres obliques inverses à l'intérieur des valeurs soient échappés. La section [Exit code output](/docs/fr/hooks#exit-code-output) de la référence couvre les combinaisons de code de sortie et JSON

Details

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

1092* `from_mode` : mode de permission précédent, par exemple `"default"`, `"plan"`, `"acceptEdits"`, `"auto"` ou `"bypassPermissions"`1092* `from_mode` : mode de permission précédent, par exemple `"default"`, `"plan"`, `"acceptEdits"`, `"auto"` ou `"bypassPermissions"`

1093* `to_mode` : nouveau mode de permission1093* `to_mode` : nouveau mode de permission

1094* `trigger` : cause du changement. L'une des valeurs `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` ou `"auto_opt_in"`. Absent lorsque la transition provient du SDK ou du bridge1094* `trigger` : ce qui a provoqué le changement. L'une des valeurs `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"` ou `"auto_opt_in"`. Absent pour certains changements, par exemple lorsque le SDK définit le mode de permission via [`setPermissionMode()`](/docs/fr/agent-sdk/typescript#query-object)

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 Événement d'authentification1097 Événement d'authentification

Details

203 Chiens de garde d'inactivité du streaming203 Chiens de garde d'inactivité du streaming

204</h2>204</h2>

205 205 

206Claude Code exécute quatre minuteurs indépendants qui interrompent une réponse de modèle en streaming lorsqu'elle devient silencieuse, de sorte qu'une connexion morte échoue et réessaie au lieu de rester bloquée. La limite du premier octet couvre l'attente des en-têtes de réponse, avant l'arrivée d'une partie de la réponse. Chacun des trois autres surveille une réponse active pour un signal différent.206Claude Code exécute quatre minuteurs indépendants qui interrompent une réponse de modèle en streaming lorsqu'elle devient silencieuse, de sorte qu'une connexion morte échoue et réessaie au lieu de rester bloquée. Une requête qui ne reçoit aucun en-tête de réponse se termine de l'une des deux façons suivantes :

207 

208* **Là où la limite du premier octet s'exécute** : la première tentative se termine à cette limite. Pour la modifier, définissez `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`. Pour l'attente de la nouvelle tentative, voir [Aucune réponse de l'API](/docs/fr/errors#no-response-from-api).

209* **Sur les autres connexions** : la requête se termine après 5 à 6 minutes, lorsque le délai d'inactivité du corps se déclenche, sauf si vous avez désactivé ce délai. Pour la terminer plus tôt, réduisez `API_TIMEOUT_MS`.

207 210 

208| Minuteur | Interrompt quand | S'exécute sur | Délai d'expiration par défaut |211| Minuteur | Interrompt quand | S'exécute sur | Délai d'expiration par défaut |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

210| Limite du premier octet | Aucun en-tête de réponse n'arrive après que Claude Code envoie la demande | API Anthropic directe et [Claude Platform on AWS](/docs/fr/claude-platform-on-aws), y compris via un proxy HTTPS, mais pas quand `ANTHROPIC_BASE_URL` ou `ANTHROPIC_AWS_BASE_URL` les acheminent via une [passerelle](/docs/fr/gateways). Opt-in sur Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` ; ne s'exécute pas sur Google Cloud's Agent Platform ou Microsoft Foundry | 180 secondes sur l'API Anthropic directe, 300 secondes ailleurs, plus une seconde par 32 Ko de corps de demande |213| Limite du premier octet | Aucun en-tête de réponse n'arrive après que Claude Code envoie la requête | API Anthropic directe et [Claude Platform on AWS](/docs/fr/claude-platform-on-aws), y compris via un proxy HTTPS, mais pas quand `ANTHROPIC_BASE_URL` ou `ANTHROPIC_AWS_BASE_URL` les acheminent via une [passerelle](/docs/fr/gateways). Opt-in sur Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` ; ne s'exécute pas sur Google Cloud's Agent Platform ou Microsoft Foundry, ni dans une session de [passerelle Claude apps](/docs/fr/claude-apps-gateway) | 180 secondes sur l'API Anthropic directe, 300 secondes ailleurs, plus une seconde par 32 Ko de corps de requête |

211| Chien de garde au niveau des événements | Aucun événement de réponse ne s'analyse. Sur les connexions où le chien de garde au niveau des octets s'exécute, les octets arrivants, y compris les pings de maintien de connexion, réinitialisent également ce chien de garde, pendant environ cinq minutes sans événement analysé | Tous les fournisseurs | 300 secondes |214| Chien de garde au niveau des événements | Aucun événement de réponse ne s'analyse. Sur les connexions où le chien de garde au niveau des octets s'exécute, les octets arrivants, y compris les pings de maintien de connexion, réinitialisent également ce chien de garde, pendant environ cinq minutes sans événement analysé | Tous les fournisseurs | 300 secondes |

212| Chien de garde au niveau des octets | Aucun octet n'arrive sur le fil, y compris les pings de maintien de connexion SSE | API Anthropic directe, [Claude Platform on AWS](/docs/fr/claude-platform-on-aws), et connexions via une [passerelle](/docs/fr/gateways), y compris un `ANTHROPIC_BASE_URL` personnalisé. Opt-in sur les réponses Amazon Bedrock `vnd.amazon.eventstream` avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` ; ne s'exécute pas sur Google Cloud's Agent Platform ou Microsoft Foundry | 180 secondes sur l'API Anthropic directe. 300 secondes sur Claude Platform on AWS, sur Amazon Bedrock, dans une session de [passerelle Claude apps](/docs/fr/claude-apps-gateway), et via un `ANTHROPIC_BASE_URL` personnalisé |215| Chien de garde au niveau des octets | Aucun octet n'arrive sur le fil, y compris les pings de maintien de connexion SSE | API Anthropic directe, [Claude Platform on AWS](/docs/fr/claude-platform-on-aws), et connexions via une [passerelle](/docs/fr/gateways), y compris un `ANTHROPIC_BASE_URL` personnalisé. Opt-in sur les réponses Amazon Bedrock `vnd.amazon.eventstream` avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` ; ne s'exécute pas sur Google Cloud's Agent Platform ou Microsoft Foundry | 180 secondes sur l'API Anthropic directe. 300 secondes sur Claude Platform on AWS, sur Amazon Bedrock, dans une session de [passerelle Claude apps](/docs/fr/claude-apps-gateway), et via un `ANTHROPIC_BASE_URL` personnalisé |

213| Délai d'inactivité du corps | Aucun octet n'arrive pendant 5 minutes | Fournisseurs autres que l'API Anthropic directe, Claude Platform on AWS, et Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` défini, sauf si [`API_FORCE_IDLE_TIMEOUT`](/docs/fr/env-vars) change cela | 5 minutes |216| Délai d'inactivité du corps | Aucun octet n'arrive pendant 5 minutes, en comptant l'attente des en-têtes de réponse | Fournisseurs autres que l'API Anthropic directe, Claude Platform on AWS, et Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` défini, sauf si [`API_FORCE_IDLE_TIMEOUT`](/docs/fr/env-vars) change cela | 5 minutes |

214 217 

215Si vous définissez `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, le chien de garde au niveau des octets remplace le délai d'inactivité du corps sur Bedrock plutôt que de s'exécuter à côté de celui-ci. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` gouverne alors également la durée pendant laquelle un flux Bedrock peut rester silencieux avant que Claude Code ne traite la connexion comme morte, dans les limites énumérées ci-dessous. Les octets arrivants ne réinitialisent toujours pas le chien de garde au niveau des événements sur Bedrock. Avec la journalisation de débogage activée, chaque flux Bedrock enregistre alors un message de débogage qui commence par `wire-heartbeat: _chunkTimes absent`.218Si vous définissez `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, le chien de garde au niveau des octets remplace le délai d'inactivité du corps sur Bedrock plutôt que de s'exécuter à côté de celui-ci. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` gouverne alors également la durée pendant laquelle un flux Bedrock peut rester silencieux avant que Claude Code ne traite la connexion comme morte, dans les limites énumérées ci-dessous. Les octets arrivants ne réinitialisent toujours pas le chien de garde au niveau des événements sur Bedrock. Avec la journalisation de débogage activée, chaque flux Bedrock enregistre alors un message de débogage qui commence par `wire-heartbeat: _chunkTimes absent`.

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` définit le délai d'expiration des deux chiens de garde. Claude Code augmente les valeurs inférieures à 5 minutes à 5 minutes, et plafonne la valeur à 30 minutes pour le chien de garde au niveau des octets.223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` définit le délai d'expiration des deux chiens de garde. Claude Code augmente les valeurs inférieures à 5 minutes à 5 minutes, et plafonne la valeur à 30 minutes pour le chien de garde au niveau des octets.

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` définit le délai d'expiration du chien de garde au niveau des octets sans modifier celui du chien de garde au niveau des événements, limité entre 10 secondes et 30 minutes, et prend précédence sur `CLAUDE_STREAM_IDLE_TIMEOUT_MS` pour ce chien de garde.224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` définit le délai d'expiration du chien de garde au niveau des octets sans modifier celui du chien de garde au niveau des événements, limité entre 10 secondes et 30 minutes, et prend précédence sur `CLAUDE_STREAM_IDLE_TIMEOUT_MS` pour ce chien de garde.

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` définit la limite du premier octet directement. Laissez-la non définie et Claude Code utilise le délai d'expiration du chien de garde au niveau des octets, de sorte que `CLAUDE_STREAM_IDLE_TIMEOUT_MS` et `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` modifient également la limite. Pour les limites, l'allocation de téléchargement, le plafond `API_TIMEOUT_MS`, et la durée d'attente de la nouvelle tentative après un abandon sans réponse, voir [Aucune réponse de l'API](/docs/fr/errors#no-response-from-api).225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` définit la limite du premier octet directement. Laissez-la non définie et Claude Code utilise le délai d'expiration du chien de garde au niveau des octets, de sorte que `CLAUDE_STREAM_IDLE_TIMEOUT_MS` et `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` modifient également la limite. Pour les limites, l'allocation de téléchargement, le plafond `API_TIMEOUT_MS`, et la durée d'attente de la nouvelle tentative après un abandon sans réponse, voir [Aucune réponse de l'API](/docs/fr/errors#no-response-from-api).

226* `API_TIMEOUT_MS` limite l'attente des en-têtes de réponse. Là où la limite du premier octet ne s'exécute pas, comme dans une session de passerelle Claude apps, définissez-la en dessous de `300000`, soit 5 minutes, pour réessayer plus tôt une requête restée sans réponse. Gardez-la au-dessus de la plus longue attente d'en-têtes, et de la plus longue [requête sans streaming](/docs/fr/errors#streaming-response-ended-before-any-complete-data-was-received), que vous prévoyez : une requête qui nécessite plus de temps expire à nouveau à chaque nouvelle tentative.

223* `API_FORCE_IDLE_TIMEOUT` défini à `0` désactive le délai d'inactivité du corps, et défini à `1` l'active pour tous les fournisseurs. Les chiens de garde s'exécutent indépendamment de celui-ci, donc pour permettre à un flux de s'interrompre plus longtemps que leurs seuils, augmentez-les ou désactivez-les également.227* `API_FORCE_IDLE_TIMEOUT` défini à `0` désactive le délai d'inactivité du corps, et défini à `1` l'active pour tous les fournisseurs. Les chiens de garde s'exécutent indépendamment de celui-ci, donc pour permettre à un flux de s'interrompre plus longtemps que leurs seuils, augmentez-les ou désactivez-les également.

224 228 

225Quand un chien de garde interrompt un flux bloqué, Claude Code traite l'interruption comme une défaillance en milieu de flux, et ce que vous voyez dépend de la distance parcourue par la réponse. Claude Code réessaie la demande ou termine le tour avec une erreur, conserve la sortie complétée et affiche un [avis de réponse incomplète](/docs/fr/errors#the-response-above-may-be-incomplete), ou termine le tour normalement. [Les nouvelles tentatives automatiques](/docs/fr/errors#automatic-retries) indiquent où chaque résultat s'applique.229Quand un chien de garde interrompt un flux bloqué, Claude Code traite l'interruption comme une défaillance en milieu de flux, et ce que vous voyez dépend de la distance parcourue par la réponse. Claude Code réessaie la demande ou termine le tour avec une erreur, conserve la sortie complétée et affiche un [avis de réponse incomplète](/docs/fr/errors#the-response-above-may-be-incomplete), ou termine le tour normalement. [Les nouvelles tentatives automatiques](/docs/fr/errors#automatic-retries) indiquent où chaque résultat s'applique.

Details

627 627 

628Claude Code refuse `bypassPermissions` dans une session que vous démarrez avec [`--restricted`](/docs/fr/cli-reference#cli-flags). `--restricted` nécessite Claude Code v2.1.248 ou ultérieur.628Claude Code refuse `bypassPermissions` dans une session que vous démarrez avec [`--restricted`](/docs/fr/cli-reference#cli-flags). `--restricted` nécessite Claude Code v2.1.248 ou ultérieur.

629 629 

630La première fois que vous démarrez une session interactive avec ce mode activé, Claude Code affiche un dialogue d'avertissement vous demandant d'accepter la responsabilité des actions prises sans vérifications de permission :630<span id="bypass-permissions-acceptance" />La première fois que vous démarrez une session interactive avec ce mode activé, Claude Code affiche un dialogue d'avertissement vous demandant d'accepter la responsabilité des actions prises sans vérifications de permission :

631 631 

632* **Si vous acceptez** : Claude Code définit `skipDangerousModePermissionPrompt` sur `true` dans `~/.claude/settings.json`, de sorte que les sessions ultérieures ignorent le dialogue. Pour voir le dialogue à nouveau, supprimez la clé de ce fichier ou définissez-la sur `false`. La [référence `skipDangerousModePermissionPrompt`](/docs/fr/settings-reference#skipdangerousmodepermissionprompt) énumère les autres fichiers de paramètres où vous ou votre organisation pouvez le définir.632* **Si vous acceptez** : Claude Code définit `skipDangerousModePermissionPrompt` sur `true` dans `~/.claude/settings.json`, de sorte que les sessions ultérieures ignorent le dialogue. Pour voir le dialogue à nouveau, supprimez la clé de ce fichier ou définissez-la sur `false`. La [référence `skipDangerousModePermissionPrompt`](/docs/fr/settings-reference#skipdangerousmodepermissionprompt) énumère les autres fichiers de paramètres où vous ou votre organisation pouvez le définir.

633* **Si vous refusez** : Claude Code quitte.633* **Si vous refusez** : Claude Code quitte.


635En [mode non interactif](/docs/fr/headless), aucun dialogue n'est affiché. Une [session en arrière-plan](/docs/fr/agent-view) respecte votre acceptation lorsqu'elle est enregistrée dans les paramètres utilisateur ou les paramètres gérés :635En [mode non interactif](/docs/fr/headless), aucun dialogue n'est affiché. Une [session en arrière-plan](/docs/fr/agent-view) respecte votre acceptation lorsqu'elle est enregistrée dans les paramètres utilisateur ou les paramètres gérés :

636 636 

637* Sans acceptation enregistrée, `claude --bg --permission-mode bypassPermissions` est refusé jusqu'à ce que vous acceptiez le dialogue dans une session interactive.637* Sans acceptation enregistrée, `claude --bg --permission-mode bypassPermissions` est refusé jusqu'à ce que vous acceptiez le dialogue dans une session interactive.

638* Avec `skipDangerousModePermissionPrompt` défini uniquement dans `.claude/settings.local.json`, la session en arrière-plan démarre en ignorant la demande de contournement et épingle l'avis `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Pour que le contournement soit pris en compte, ajoutez cette clé à `~/.claude/settings.json`, puis démarrez une nouvelle session en arrière-plan.638* Avec `skipDangerousModePermissionPrompt` défini uniquement dans `.claude/settings.local.json`, la session en arrière-plan démarre en ignorant la demande de contournement et épingle l'avis `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Ajoutez cette clé à `~/.claude/settings.json`, puis démarrez une nouvelle session en arrière-plan. La session qui affiche l'avis continue de s'exécuter :

639 * Lorsque `--allow-dangerously-skip-permissions` est ignoré, `bypassPermissions` est exclu de son cycle `Shift+Tab`.

640 * Lorsque `--permission-mode bypassPermissions` ou `--dangerously-skip-permissions` est ignoré, la session démarre plutôt en mode Manual.

639 641 

640Sur Linux et macOS, Claude Code refuse de démarrer dans ce mode lors de l'exécution en tant que root ou sous `sudo` :642Sur Linux et macOS, Claude Code refuse de démarrer en mode `bypassPermissions` lors de l'exécution en tant que root ou sous `sudo` :

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * Les fichiers markdown du répertoire de [mémoire automatique](/docs/fr/memory#storage-location) du projet, tel que `~/.claude/projects/<project>/memory/`, dans une session démarrée sans `--restricted`694 * Les fichiers markdown du répertoire de [mémoire automatique](/docs/fr/memory#storage-location) du projet, tel que `~/.claude/projects/<project>/memory/`, dans une session démarrée sans `--restricted`

693 * Les fichiers markdown d'un répertoire de [mémoire de sous-agent](/docs/fr/sub-agents#enable-persistent-memory), tel que `.claude/agent-memory/`, dans une session démarrée sans `--restricted`695 * Les fichiers markdown d'un répertoire de [mémoire de sous-agent](/docs/fr/sub-agents#enable-persistent-memory), tel que `.claude/agent-memory/`, dans une session démarrée sans `--restricted`

694* Un répertoire que vous avez chargé avec [`--plugin-dir`](/docs/fr/plugins/mods/create#change-a-mod-with-claude), car Claude Code recharge et exécute le code d'un mod à partir de celui-ci quand un fichier change696* Un répertoire que vous avez chargé avec [`--plugin-dir`](/docs/fr/plugins/mods/create#change-a-mod-with-claude), car Claude Code recharge et exécute le code d'un mod à partir de celui-ci quand un fichier change

697* `~/.claude/dev-mods/`, ou `dev-mods/` dans le répertoire vers lequel pointe [`CLAUDE_CONFIG_DIR`](/docs/fr/env-vars), où Claude enregistre les [mods qu'il écrit pour vous](/docs/fr/plugins/mods/create#ask-claude-for-a-mod)

695 698 

696Fichiers protégés :699Fichiers protégés :

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598Les règles MCP utilisent le nom du serveur tel que configuré dans Claude Code, éventuellement suivi du nom d'un outil de ce serveur.598Pour faire correspondre tous les outils d'un serveur MCP, écrivez `mcp__<server>__*`. Pour faire correspondre un seul outil, écrivez son nom complet, `mcp__<server>__<tool>`.

599 599 

600* `mcp__puppeteer` correspond à tout outil fourni par le serveur `puppeteer`600* `mcp__puppeteer` correspond à tout outil fourni par le serveur `puppeteer`

601* `mcp__puppeteer__*` utilise la syntaxe des caractères génériques et correspond également à tous les outils du serveur `puppeteer`601* `mcp__puppeteer__*` utilise la syntaxe des caractères génériques et correspond également à tous les outils du serveur `puppeteer`

602* `mcp__puppeteer__puppeteer_navigate` correspond à l'outil `puppeteer_navigate` fourni par le serveur `puppeteer`602* `mcp__puppeteer__puppeteer_navigate` correspond à l'outil `puppeteer_navigate` fourni par le serveur `puppeteer`

603 603 

604Pour `<server>`, écrivez le nom du serveur tel qu'il apparaît dans les noms d'outils de ce serveur. Les exemples suivants montrent la règle à écrire pour un nom comportant des caractères spéciaux, pour un serveur provenant d'un plugin et pour un nom qui contient `__` ou se termine par `_` :

605 

606* **Noms comportant des caractères comme `.` ou des espaces** : ces caractères deviennent `_` ; pour un serveur que vous avez configuré sous le nom `my.server`, écrivez donc `mcp__my_server__*`

607* **Serveurs fournis par un plugin** : `<server>` prend la [forme propre au plugin](/docs/fr/mcp#plugin-provided-mcp-servers) ; pour le serveur `database-tools` d'un plugin nommé `my-plugin`, écrivez donc `mcp__plugin_my-plugin_database-tools__*`

608* **Un `<server>` qui contient `__` ou se termine par `_`** : écrivez la forme avec caractère générique, `mcp__<server>__*`, avec le nom complet. Pour un serveur nommé `reports__v2`, écrivez `mcp__reports__v2__*`. La forme nue `mcp__reports__v2` et la forme plus courte `mcp__reports` ne correspondent pas à ses outils en tant que règles allow, car Claude Code les interprète toutes deux comme des règles pour un serveur nommé `reports`

609 

604Si votre organisation a défini un outil de [connecteur claude.ai](/docs/fr/mcp#organization-controls-on-connector-tools) sur `ask` et que ce paramètre parvient à Claude Code dans votre session, les règles allow pour cet outil ne prennent pas effet : Claude Code demande une permission à chaque appel, même dans les modes `auto` et `bypassPermissions`. En mode `dontAsk`, qui ne demande jamais de permission, Claude Code refuse plutôt l'appel. Les outils des connecteurs que Claude Code récupère lui-même apparaissent sous la forme `mcp__claude_ai_<server>__<tool>`.610Si votre organisation a défini un outil de [connecteur claude.ai](/docs/fr/mcp#organization-controls-on-connector-tools) sur `ask` et que ce paramètre parvient à Claude Code dans votre session, les règles allow pour cet outil ne prennent pas effet : Claude Code demande une permission à chaque appel, même dans les modes `auto` et `bypassPermissions`. En mode `dontAsk`, qui ne demande jamais de permission, Claude Code refuse plutôt l'appel. Les outils des connecteurs que Claude Code récupère lui-même apparaissent sous la forme `mcp__claude_ai_<server>__<tool>`.

605 611 

606Dans une session [Cowork](https://claude.com/docs/cowork/overview) de l'application Claude Desktop, Claude exécute les commandes shell via l'outil `mcp__workspace__bash` de Cowork plutôt que via l'outil intégré `Bash`, et Cowork fournit de même `mcp__workspace__web_fetch` pour les récupérations web. Claude Code applique aussi à ces outils Cowork les règles deny qui désignent l'outil `Bash` ou `WebFetch` dans son ensemble, de sorte qu'une règle deny `Bash` gérée empêche Claude d'exécuter des commandes shell dans Cowork. Lorsque Claude Code bloque un tel appel, le message indique l'outil Cowork : `Permission to use mcp__workspace__bash has been denied.` Les règles allow ne sont pas reportées : Claude Code n'applique jamais une règle allow `Bash` à `mcp__workspace__bash`.612Dans une session [Cowork](https://claude.com/docs/cowork/overview) de l'application Claude Desktop, Claude exécute les commandes shell via l'outil `mcp__workspace__bash` de Cowork plutôt que via l'outil intégré `Bash`, et Cowork fournit de même `mcp__workspace__web_fetch` pour les récupérations web. Claude Code applique aussi à ces outils Cowork les règles deny qui désignent l'outil `Bash` ou `WebFetch` dans son ensemble, de sorte qu'une règle deny `Bash` gérée empêche Claude d'exécuter des commandes shell dans Cowork. Lorsque Claude Code bloque un tel appel, le message indique l'outil Cowork : `Permission to use mcp__workspace__bash has been denied.` Les règles allow ne sont pas reportées : Claude Code n'applique jamais une règle allow `Bash` à `mcp__workspace__bash`.


649 655 

650Les [hooks Claude Code](/docs/fr/hooks-guide) vous permettent d'enregistrer des commandes shell personnalisées qui évaluent les autorisations à l'exécution. Lorsque Claude Code effectue un appel d'outil, les hooks PreToolUse s'exécutent avant l'invite d'autorisation, pour tous les outils sauf [`EndConversation`](/docs/fr/tools-reference#endconversation-tool-behavior). La sortie du hook peut refuser l'appel d'outil, forcer une invite ou ignorer l'invite pour laisser l'appel se poursuivre.656Les [hooks Claude Code](/docs/fr/hooks-guide) vous permettent d'enregistrer des commandes shell personnalisées qui évaluent les autorisations à l'exécution. Lorsque Claude Code effectue un appel d'outil, les hooks PreToolUse s'exécutent avant l'invite d'autorisation, pour tous les outils sauf [`EndConversation`](/docs/fr/tools-reference#endconversation-tool-behavior). La sortie du hook peut refuser l'appel d'outil, forcer une invite ou ignorer l'invite pour laisser l'appel se poursuivre.

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 Priorité entre les règles, les hooks et les mods

660</h3>

661 

652Les décisions du hook PreToolUse ne contournent pas les règles d'autorisation. Claude Code évalue les règles de refus et de demande indépendamment de ce qu'un hook PreToolUse retourne : une règle de refus correspondante bloque l'appel, et une règle de demande correspondante demande toujours même lorsque le hook a retourné `"allow"` ou `"ask"`. Cela préserve la précédence de refus en premier décrite dans [Gérer les autorisations](#manage-permissions), y compris les règles de refus définies dans les paramètres gérés.662Les décisions du hook PreToolUse ne contournent pas les règles d'autorisation. Claude Code évalue les règles de refus et de demande indépendamment de ce qu'un hook PreToolUse retourne : une règle de refus correspondante bloque l'appel, et une règle de demande correspondante demande toujours même lorsque le hook a retourné `"allow"` ou `"ask"`. Cela préserve la précédence de refus en premier décrite dans [Gérer les autorisations](#manage-permissions), y compris les règles de refus définies dans les paramètres gérés.

653 663 

654Cette priorité couvre les hooks dans les fichiers de paramètres et dans le fichier `hooks/hooks.json` d'un plugin. Un [mod](/docs/fr/plugins/mods/overview) que vous installez et qui gère `tool.check` répond après que les règles et les hooks `PreToolUse` ont décidé, et sa réponse peut remplacer la leur :664Cette priorité couvre les hooks dans les fichiers de paramètres et dans le fichier `hooks/hooks.json` d'un plugin. Un [mod](/docs/fr/plugins/mods/overview) que vous installez et qui gère `tool.check` répond après que les règles et les hooks `PreToolUse` ont décidé. En dehors du [mode plan](#hook-approvals-in-plan-mode), ou pour un appel en lecture seule, sa réponse peut remplacer la leur :

655 665 

656* **Règles de demande** : le mod peut approuver un appel pour lequel une règle de demande demanderait une invite666* **Règles de demande** : le mod peut approuver un appel pour lequel une règle de demande demanderait une invite

657* **Un blocage d'un hook `PreToolUse`** : le mod peut approuver l'appel, sauf si le hook se trouve dans les paramètres gérés667* **Un blocage d'un hook `PreToolUse`** : le mod peut approuver l'appel, sauf si le hook se trouve dans les paramètres gérés


664 674 

665Un hook de blocage prend également la priorité sur les règles d'autorisation. Un hook qui se termine avec le code 2 arrête l'appel d'outil avant que les règles d'autorisation ne soient évaluées, donc le blocage s'applique même lorsqu'une règle d'autorisation permettrait autrement l'appel. Pour exécuter toutes les commandes Bash sans invites sauf pour quelques-unes que vous voulez bloquer, ajoutez `"Bash"` à votre liste d'autorisation et enregistrez un hook PreToolUse qui rejette ces commandes spécifiques. Consultez [Bloquer les éditions des fichiers protégés](/docs/fr/hooks-guide#block-edits-to-protected-files) pour un script de hook que vous pouvez adapter.675Un hook de blocage prend également la priorité sur les règles d'autorisation. Un hook qui se termine avec le code 2 arrête l'appel d'outil avant que les règles d'autorisation ne soient évaluées, donc le blocage s'applique même lorsqu'une règle d'autorisation permettrait autrement l'appel. Pour exécuter toutes les commandes Bash sans invites sauf pour quelques-unes que vous voulez bloquer, ajoutez `"Bash"` à votre liste d'autorisation et enregistrez un hook PreToolUse qui rejette ces commandes spécifiques. Consultez [Bloquer les éditions des fichiers protégés](/docs/fr/hooks-guide#block-edits-to-protected-files) pour un script de hook que vous pouvez adapter.

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 Approbations des hooks en mode plan

679</h3>

680 

681En [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode), à l'exception de `ExitPlanMode`, le `"allow"` de votre hook `PreToolUse` n'a aucun effet sur une modification de fichier ou sur un autre appel qui n'est pas en lecture seule. Vous obtenez la même demande, le même blocage ou la même approbation que l'appel obtiendrait sans hook, et Claude Code applique toujours tout `updatedInput` que le hook retourne. Si le hook répond à [`ExitPlanMode`](/docs/fr/hooks#allow-with-updatedinput) avec `"allow"` et `updatedInput`, cet outil s'exécute toujours sans demande.

682 

683En mode plan, un mod qui gère `tool.check` ne peut pas non plus approuver une modification de fichier ou un autre appel qui n'est pas en lecture seule, bien qu'il puisse toujours bloquer un tel appel. Pour lever cette limite sur les approbations des hooks et des mods, [approuvez le plan](/docs/fr/permission-modes#review-and-approve-a-plan) ou passez à un autre mode de permission.

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 Répertoires de travail686 Répertoires de travail

669</h2>687</h2>

Details

30 Demandez le mod avec vos propres mots, par exemple `make a mod that shows the current git branch above the prompt`. Claude écrit le mod dans un répertoire qui lui est propre dans le dossier des mods de la session, qui est `~/.claude/dev-mods/` suivi de l'ID de la session. Le chemin complet d'un mod ressemble à `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.30 Demandez le mod avec vos propres mots, par exemple `make a mod that shows the current git branch above the prompt`. Claude écrit le mod dans un répertoire qui lui est propre dans le dossier des mods de la session, qui est `~/.claude/dev-mods/` suivi de l'ID de la session. Le chemin complet d'un mod ressemble à `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 31 

32 <Note>32 <Note>

33 Dans les [modes de permission](/docs/fr/permission-modes#protected-paths) `default` et `acceptEdits`, Claude Code demande avant que Claude crée chacun des fichiers du mod, car `~/.claude` est un chemin protégé. Approuvez chaque fichier au fur et à mesure.33 Dans les [modes de permission](/docs/fr/permission-modes) `default` et `acceptEdits`, Claude Code demande avant que Claude crée chacun des fichiers du mod, car le dossier des mods est un [chemin protégé](/docs/fr/permission-modes#protected-paths). Approuvez chaque fichier au fur et à mesure.

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219Sur `main`, le hook renvoie `deny`, même lorsqu'une règle autorise `git push`. Sur une autre branche, et pour les autres commandes, l'appel obtient la décision qu'il obtiendrait sans le mod.219Le hook refuse `git push` sur `main` et laisse passer tous les autres appels :

220 

221* **Sur `main`** : le hook renvoie `deny`, même lorsqu'une règle autorise `git push`

222* **Sur une autre branche, et pour les autres commandes** : l'appel obtient la décision qu'il obtiendrait sans le mod

220 223 

221Le hook se base sur le texte de la commande ; considérez-le donc comme un garde-fou pour Claude. Pour bloquer les push vers `main` pour tout le monde, protégez la branche sur votre hébergeur Git.224Le hook se base sur le texte de la commande ; considérez-le donc comme un garde-fou pour Claude. Pour bloquer les push vers `main` pour tout le monde, protégez la branche sur votre hébergeur Git.

222 225 

223Un hook peut renvoyer `allow`, `ask` ou `deny` ; il peut donc aussi approuver un appel qu'un hook `PreToolUse` situé en dehors des paramètres gérés a bloqué. [Étendre les permissions avec des hooks](/docs/fr/permissions#extend-permissions-with-hooks) indique quelles décisions prévalent sur un mod.226Un hook peut renvoyer `allow`, `ask` ou `deny` ; il peut donc aussi approuver un appel qu'un hook `PreToolUse` situé en dehors des paramètres gérés a bloqué. En [mode plan](/docs/fr/permissions#hook-approvals-in-plan-mode), pour un appel qui n'est pas en lecture seule, comme une modification de fichier, votre hook peut durcir la décision que renvoie `next(e)`, mais pas l'assouplir. [Étendre les permissions avec des hooks](/docs/fr/permissions#extend-permissions-with-hooks) indique quelles décisions prévalent sur un mod.

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 Réécrire un prompt ou y ajouter du contenu229 Réécrire un prompt ou y ajouter du contenu


337* **Hooks `PreToolUse` des paramètres gérés** : s'exécutent avant le hook `tool.call` du premier mod, et un blocage de l'un d'eux est définitif, donc aucun mod ne voit l'appel.340* **Hooks `PreToolUse` des paramètres gérés** : s'exécutent avant le hook `tool.call` du premier mod, et un blocage de l'un d'eux est définitif, donc aucun mod ne voit l'appel.

338* **Hooks `PreToolUse` de chaque autre fichier de paramètres et des `hooks/hooks.json` des plugins** : s'exécutent après que le dernier mod appelle `next`, comme partie du comportement propre de Claude Code. Un mod qui répond à `tool.call` sans appeler `next` les empêche de s'exécuter, et un mod qui appelle `next` voit leur décision dans le résultat qu'il retourne.341* **Hooks `PreToolUse` de chaque autre fichier de paramètres et des `hooks/hooks.json` des plugins** : s'exécutent après que le dernier mod appelle `next`, comme partie du comportement propre de Claude Code. Un mod qui répond à `tool.call` sans appeler `next` les empêche de s'exécuter, et un mod qui appelle `next` voit leur décision dans le résultat qu'il retourne.

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) se déclenche une fois que ces hooks et les règles de permission ont décidé, de sorte qu'un hook sur cet événement peut approuver un appel qu'un hook du deuxième groupe a bloqué.343Un hook [`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) peut approuver un appel qu'un hook `PreToolUse` situé hors des paramètres gérés a bloqué, car `tool.check` se déclenche une fois que ces hooks et les règles de permission ont décidé. En mode plan, un hook `tool.check` peut approuver un tel appel lorsqu'il est en lecture seule, mais pas une modification de fichier ni un autre appel qui n'est pas en lecture seule.

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 Gérer un hook qui échoue346 Gérer un hook qui échoue

Details

205 205 

206Pour produire le résumé, Claude Code envoie une requête séparée avec le même prompt système, les mêmes outils et le même historique que votre conversation, plus une instruction de résumé ajoutée comme dernier message utilisateur. Tant que le cache est chaud, cette requête lit votre préfixe à partir du cache, donc un `/compact` en cours de session coûte une fraction de ce que la taille du contexte suggère et passe la plupart de son temps à générer le résumé.206Pour produire le résumé, Claude Code envoie une requête séparée avec le même prompt système, les mêmes outils et le même historique que votre conversation, plus une instruction de résumé ajoutée comme dernier message utilisateur. Tant que le cache est chaud, cette requête lit votre préfixe à partir du cache, donc un `/compact` en cours de session coûte une fraction de ce que la taille du contexte suggère et passe la plupart de son temps à générer le résumé.

207 207 

208Après une pause plus longue que la [durée de vie du cache](#cache-lifetime), il n'y a pas de cache à lire, donc la requête de résumé retraite l'historique complet en tant qu'entrée non mise en cache. C'est pourquoi `/compact` coûte le plus lorsque vous [reprenez une ancienne session](/docs/fr/sessions#resume-from-a-summary). Dans les deux cas, chaud et froid, le tour après compaction reconstruit le cache de conversation pour seulement le résumé beaucoup plus court, donc ce tour n'est pas la partie lente.208Après une pause plus longue que la [durée de vie du cache](#cache-lifetime), il n'y a pas de cache à lire, donc la requête de résumé retraite l'historique complet en tant qu'entrée non mise en cache. C'est pourquoi `/compact` coûte le plus lorsque vous [reprenez une ancienne session](/docs/fr/sessions#resume-a-session). Dans les deux cas, chaud et froid, le tour après compaction reconstruit le cache de conversation pour seulement le résumé beaucoup plus court, donc ce tour n'est pas la partie lente.

209 209 

210<Tip>210<Tip>

211 La compaction joue en votre faveur lorsque le contexte que vous rejetez est du contenu dont vous n'avez plus besoin. Pour choisir quand son surcoût se produit, exécutez `/compact` à une pause naturelle dans votre travail, par exemple entre les tâches, au lieu d'attendre que la compaction automatique se déclenche en cours de tâche. Si vous avez suivi un chemin que vous voulez abandonner entièrement, utilisez plutôt [`/rewind`](#rewinding-the-conversation) pour revenir à un tour antérieur. Le rembobinage tronque jusqu'à un préfixe qui est déjà mis en cache, plutôt que d'en construire un nouveau comme le fait la compaction.211 La compaction joue en votre faveur lorsque le contexte que vous rejetez est du contenu dont vous n'avez plus besoin. Pour choisir quand son surcoût se produit, exécutez `/compact` à une pause naturelle dans votre travail, par exemple entre les tâches, au lieu d'attendre que la compaction automatique se déclenche en cours de tâche. Si vous avez suivi un chemin que vous voulez abandonner entièrement, utilisez plutôt [`/rewind`](#rewinding-the-conversation) pour revenir à un tour antérieur. Le rembobinage tronque jusqu'à un préfixe qui est déjà mis en cache, plutôt que d'en construire un nouveau comme le fait la compaction.


310 310 

311Les préfixes en cache expirent après une période d'inactivité. Chaque requête qui atteint le cache réinitialise le minuteur, de sorte que le cache reste actif tant que vous continuez à travailler. Après un écart assez long, la requête suivante recalcule l'entrée complète et rétablit le cache, ce qui est pourquoi le premier tour après s'être éloigné peut être notablement plus lent.311Les préfixes en cache expirent après une période d'inactivité. Chaque requête qui atteint le cache réinitialise le minuteur, de sorte que le cache reste actif tant que vous continuez à travailler. Après un écart assez long, la requête suivante recalcule l'entrée complète et rétablit le cache, ce qui est pourquoi le premier tour après s'être éloigné peut être notablement plus lent.

312 312 

313Sur un plan Pro ou Max, lorsque vous reprenez une grande session après une longue pause, Claude Code [propose de reprendre à partir d'un résumé](/docs/fr/sessions#resume-from-a-summary) afin que les requêtes ultérieures ne portent pas l'historique complet.

314 

315Le time to live (TTL) contrôle la durée de l'écart que le cache survit. L'API en offre deux : un TTL de cinq minutes, et un [TTL d'une heure](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) qui garde le cache actif pendant les pauses plus longues mais [facture les écritures de cache à un taux plus élevé](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). Le TTL plus long aide quand vous laissez une session inactive et y revenez, car vous évitez le retraitement qu'un préfixe expiré coûte. Cela coûte plus cher lors de courtes rafales de travail qui ne restent jamais inactives au-delà de cinq minutes, où le taux d'écriture plus élevé s'applique et la durée de vie du cache plus longue reste inutilisée.313Le time to live (TTL) contrôle la durée de l'écart que le cache survit. L'API en offre deux : un TTL de cinq minutes, et un [TTL d'une heure](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) qui garde le cache actif pendant les pauses plus longues mais [facture les écritures de cache à un taux plus élevé](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). Le TTL plus long aide quand vous laissez une session inactive et y revenez, car vous évitez le retraitement qu'un préfixe expiré coûte. Cela coûte plus cher lors de courtes rafales de travail qui ne restent jamais inactives au-delà de cinq minutes, où le taux d'écriture plus élevé s'applique et la durée de vie du cache plus longue reste inutilisée.

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`** : si vous avez démarré Claude Code avec [`--settings`](/docs/fr/settings#change-a-setting-for-one-session), vérifiez si le fichier ou le JSON que vous avez transmis définit l'une de ces clés. Si c'est le cas, modifiez la valeur à cet endroit, ou redémarrez Claude Code sans ces clés.1080* **`Command line arguments`** : si vous avez démarré Claude Code avec [`--settings`](/docs/fr/settings#change-a-setting-for-one-session), vérifiez si le fichier ou le JSON que vous avez transmis définit l'une de ces clés. Si c'est le cas, modifiez la valeur à cet endroit, ou redémarrez Claude Code sans ces clés.

1081* **`Enterprise managed settings`** : les paramètres gérés de votre organisation sont chargés. S'ils définissent l'une de ces clés, vous ne pouvez pas modifier cette clé depuis `/sandbox` ni depuis aucun fichier de paramètres que vous contrôlez : adressez-vous donc à votre administrateur.1081* **`Enterprise managed settings`** : les paramètres gérés de votre organisation sont chargés. S'ils définissent l'une de ces clés, vous ne pouvez pas modifier cette clé depuis `/sandbox` ni depuis aucun fichier de paramètres que vous contrôlez : adressez-vous donc à votre administrateur.

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox` prints `Sandbox settings not changed`

1085</h3>

1086 

1087Cette ligne signifie que `/sandbox` n'a pas pu enregistrer le choix que vous avez fait dans son panneau dans le fichier `.claude/settings.local.json` de votre projet :

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093Si la raison indiquée entre parenthèses est `EACCES`, `EPERM` ou `EROFS`, démarrez Claude Code dans un dossier de projet dans lequel vous pouvez écrire, puis exécutez à nouveau `/sandbox` dans cette session.

1094 

1095Si la raison commence par `Invalid JSON syntax in settings file`, corrigez le JSON dans le fichier `.claude/settings.local.json` de votre projet, puis exécutez à nouveau `/sandbox`.

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 Limitations1098 Limitations

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* L'exécution n'est pas démarrée via les [canaux](/docs/fr/channels)102* L'exécution n'est pas démarrée via les [canaux](/docs/fr/channels)

103* Aucune [règle de refus](/docs/fr/permissions#manage-permissions) ne supprime l'outil `ExitPlanMode`103* Aucune [règle de refus](/docs/fr/permissions#manage-permissions) ne supprime l'outil `ExitPlanMode`

104 104 

105<h3 id="resume-from-a-summary">

106 Reprendre à partir d'un résumé

107</h3>

108 

109Sur un plan Pro ou Max, lorsque vous reprenez une session qui a été inactive pendant plus d'une heure environ et dépasse 100 000 tokens, Claude Code restaure la conversation puis ouvre une boîte de dialogue avant que vous n'envoyiez votre premier message. Le [cache de prompt](/docs/fr/prompt-caching#cache-lifetime) de la session a expiré à ce moment-là, donc la prochaine requête traite l'historique complet une fois, quelle que soit l'option de la boîte de dialogue que vous choisissez.

110 

111La boîte de dialogue offre trois façons de continuer la session :

112 

113* **Reprendre à partir du résumé** : exécute [`/compact`](/docs/fr/context-window#what-survives-compaction) immédiatement. Les requêtes ultérieures portent le résumé au lieu de l'historique complet.

114* **Reprendre la session complète telle quelle** : charge la conversation inchangée.

115* **Ne me le demandez plus** : reprend la session complète et arrête d'afficher la boîte de dialogue sur toutes les reprises futures.

116 

117Reprendre tel quel conserve tous les détails de la conversation disponibles, à un coût par requête qui s'adapte à la taille de la conversation. Reprendre à partir du résumé coûte moins cher à chaque requête ultérieure car il porte le résumé au lieu de l'historique complet, mais tout ce que le résumé omet n'est plus dans le contexte de Claude. Voir [pourquoi l'utilisation augmente dans une longue session](/docs/fr/costs#why-usage-climbs-in-a-long-session) pour savoir d'où provient ce coût par requête.

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 Où le sélecteur de sessions cherche106 Où le sélecteur de sessions cherche

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | Oui | Identifiant unique d'au plus 256 caractères, tel que `code-reviewer` ou `reviewer-v2`. Les [hooks](/docs/fr/hooks#subagentstart) reçoivent cette valeur comme `agent_type`. Le nom du fichier n'a pas besoin de correspondre. Les noms ne peuvent pas contenir `:`, qui est réservé aux [identifiants limités au plugin](/docs/fr/plugins/overview) tels que `my-plugin:reviewer` |316| `name` | Oui | Identifiant unique d'au plus 256 caractères, tel que `code-reviewer` ou `reviewer-v2`. Les [hooks](/docs/fr/hooks#subagentstart) reçoivent cette valeur comme `agent_type`. Le nom du fichier n'a pas besoin de correspondre. Les noms ne peuvent pas contenir `:`, qui est réservé aux [identifiants limités au plugin](/docs/fr/plugins/overview) tels que `my-plugin:reviewer` |

317| `description` | Oui | Quand Claude doit déléguer à ce sous-agent |317| `description` | Oui | Quand Claude doit déléguer à ce sous-agent |

318| `tools` | Non | [Outils](#available-tools) que le sous-agent peut utiliser, sous forme de chaîne séparée par des virgules telle que `Read, Grep, Bash` ou une liste YAML. Hérite de tous les outils disponibles pour les sous-agents s'il est omis. Si aucune entrée de la liste ne se résout en un outil, le sous-agent échoue généralement au [lancement](/docs/fr/errors#agent-would-be-spawned-with-zero-tools) avec une erreur nommant les entrées. Pour précharger les Skills dans le contexte, utilisez le champ `skills` plutôt que de lister `Skill` ici |318| `tools` | Non | [Outils](#available-tools) que le sous-agent peut utiliser, sous forme de chaîne séparée par des virgules telle que `Read, Grep, Bash` ou une liste YAML. Hérite de tous les outils disponibles pour les sous-agents s'il est omis. Si aucune entrée de la liste ne se résout en un outil, le sous-agent échoue généralement au [lancement](/docs/fr/errors#agent-would-be-spawned-with-zero-tools) avec une erreur nommant les entrées. Pour précharger les Skills dans le contexte, utilisez le champ `skills` plutôt que de lister `Skill` ici |

319| `disallowedTools` | Non | Outils à refuser, supprimés de la liste héritée ou spécifiée. Même format que `tools`. Une entrée avec un spécificateur, tel que `Bash(git push *)`, supprime toujours l'[outil entier](#available-tools) |319| `disallowedTools` | Non | Outils à refuser, supprimés de la liste héritée ou spécifiée. Même format que `tools`. Une entrée avec un spécificateur, tel que `Bash(git push *)`, supprime toujours l'[outil entier](#restrict-which-tools-a-subagent-can-use) |

320| `model` | Non | [Modèle](#choose-a-model) à utiliser : `sonnet`, `opus`, `haiku`, `fable`, un ID de modèle complet tel que `claude-opus-5-5`, ou `inherit`. Lorsque vous l'omettez, Claude Code choisit le modèle dans l'[ordre du modèle de sous-agent](#choose-a-model) |320| `model` | Non | [Modèle](#choose-a-model) à utiliser : `sonnet`, `opus`, `haiku`, `fable`, un ID de modèle complet tel que `claude-opus-5-5`, ou `inherit`. Lorsque vous l'omettez, Claude Code choisit le modèle dans l'[ordre du modèle de sous-agent](#choose-a-model) |

321| `permissionMode` | Non | [Mode de permission](#permission-modes) : `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, ou `manual` comme alias pour `default`. Ignoré pour les [sous-agents de plugin](#choose-the-subagent-scope) |321| `permissionMode` | Non | [Mode de permission](#permission-modes) : `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, ou `manual` comme alias pour `default`. Ignoré pour les [sous-agents de plugin](#choose-the-subagent-scope) |

322| `maxTurns` | Non | Nombre maximum de tours d'agent avant que le sous-agent s'arrête. Lorsque le sous-agent atteint la limite, Claude Code retourne sa sortie marquée comme partielle, et Claude peut la [reprendre](#resume-subagents) pour continuer. Le marquage partiel nécessite Claude Code v2.1.246 ou ultérieur |322| `maxTurns` | Non | Nombre maximum de tours d'agent avant que le sous-agent s'arrête. Lorsque le sous-agent atteint la limite, Claude Code retourne sa sortie marquée comme partielle, et Claude peut la [reprendre](#resume-subagents) pour continuer. Le marquage partiel nécessite Claude Code v2.1.246 ou ultérieur |


475 475 

476Dans une [session sans les outils Task](/docs/fr/tools-reference#task-tool-availability), Claude Code ne fournit pas les outils de tâche aux sous-agents non plus, même lorsque le sous-agent exécute un modèle différent. Un coéquipier en processus suit votre session de la même manière, tandis qu'un coéquipier dans son propre [volet divisé](/docs/fr/agent-teams#choose-a-display-mode) s'exécute en tant que processus Claude Code séparé, donc son propre modèle décide.476Dans une [session sans les outils Task](/docs/fr/tools-reference#task-tool-availability), Claude Code ne fournit pas les outils de tâche aux sous-agents non plus, même lorsque le sous-agent exécute un modèle différent. Un coéquipier en processus suit votre session de la même manière, tandis qu'un coéquipier dans son propre [volet divisé](/docs/fr/agent-teams#choose-a-display-mode) s'exécute en tant que processus Claude Code séparé, donc son propre modèle décide.

477 477 

478Pour restreindre les outils, utilisez le champ `tools` comme liste d'autorisation ou le champ `disallowedTools` comme liste de refus. Cet exemple utilise `tools` pour autoriser uniquement Read, Grep, Glob et Bash. Le sous-agent ne peut pas modifier les fichiers, écrire des fichiers ou utiliser des outils MCP :478<h4 id="restrict-which-tools-a-subagent-can-use">

479 Restreindre les outils qu'un sous-agent peut utiliser

480</h4>

481 

482Pour restreindre les outils, utilisez le champ `tools` comme liste d'autorisation ou le champ `disallowedTools` comme liste de refus. Si les deux sont définis, `disallowedTools` est appliqué en premier, puis `tools` est résolu par rapport au pool restant. Un outil listé dans les deux est supprimé.

483 

484Cet exemple utilise `tools` pour autoriser uniquement Read, Grep, Glob et Bash. Le sous-agent ne peut pas modifier les fichiers, écrire des fichiers ou utiliser des outils MCP :

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498Si les deux sont définis, `disallowedTools` est appliqué en premier, puis `tools` est résolu par rapport au pool restant. Un outil listé dans les deux est supprimé.

499 

500Lorsque rien dans la liste `tools` ne se résout en un outil, par exemple parce que chaque entrée est mal orthographiée ou nomme un outil qui n'est pas disponible pour les sous-agents, Claude Code refuse généralement de lancer le sous-agent et l'outil Agent retourne une erreur nommant les entrées non résolues ; consultez [Agent would be spawned with zero tools](/docs/fr/errors#agent-would-be-spawned-with-zero-tools) pour le message et comment corriger chaque entrée. Avant la v2.1.208, ce sous-agent se lançait sans outils et pouvait retourner un résultat vide ou confus.504Lorsque rien dans la liste `tools` ne se résout en un outil, par exemple parce que chaque entrée est mal orthographiée ou nomme un outil qui n'est pas disponible pour les sous-agents, Claude Code refuse généralement de lancer le sous-agent et l'outil Agent retourne une erreur nommant les entrées non résolues ; consultez [Agent would be spawned with zero tools](/docs/fr/errors#agent-would-be-spawned-with-zero-tools) pour le message et comment corriger chaque entrée. Avant la v2.1.208, ce sous-agent se lançait sans outils et pouvait retourner un résultat vide ou confus.

501 505 

502Les deux champs acceptent des modèles au niveau du serveur MCP en plus des noms d'outils exacts : `mcp__<server>` ou `mcp__<server>__*` accorde ou supprime tous les outils du serveur nommé. Dans `disallowedTools`, `mcp__*` supprime également tous les outils MCP de n'importe quel serveur. Cet exemple supprime tous les outils du serveur MCP `github` tout en conservant les outils d'autres serveurs et les outils intégrés dans son pool :506Les champs `tools` et `disallowedTools` acceptent également des entrées pour un serveur MCP entier :

507 

508| Objectif | Champ | Exemple d'entrée |

509| :- | :- | :- |

510| Donner au sous-agent tous les outils d'un serveur | `tools` | `mcp__github__*` |

511| Exclure les outils d'un serveur | `disallowedTools` | `mcp__github` ou `mcp__github__*` |

512| Exclure tous les outils MCP de n'importe quel serveur | `disallowedTools` | `mcp__*` |

513 

514Cet exemple supprime tous les outils du serveur MCP `github` tout en conservant les outils d'autres serveurs et les outils intégrés dans le pool du sous-agent :

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---