SpyBara
Go Premium

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

55 files changed +726 −231. 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

324 * L'appel était unique, donc aucun résultat antérieur n'existe.324 * L'appel était unique, donc aucun résultat antérieur n'existe.

325 * Le plantage s'est produit au premier tour.325 * Le plantage s'est produit au premier tour.

326 * Le tour avant le plantage était le `/clear` lui-même, donc son résultat couvre uniquement la réinitialisation.326 * Le tour avant le plantage était le `/clear` lui-même, donc son résultat couvre uniquement la réinitialisation.

3272. Additionnez plutôt le `usage` sur les messages d'assistant, en comptant chaque réponse API une fois, comme l'exemple [Track per-step usage](#track-per-step-usage) le fait. En mode unique, additionnez-les tous ; en mode d'entrée en continu, additionnez ceux qui sont arrivés après le dernier résultat. Cela vous donne les jetons d'entrée et de cache de la boucle principale. L'utilisation des sous-agents n'est pas récupérable de cette façon, pas plus que les jetons de sortie ou le coût en USD, car [le `output_tokens` par étape est un placeholder](#read-output-tokens-from-the-result-message).3272. Additionnez plutôt le `usage` sur les messages d'assistant, en comptant chaque réponse API une fois, comme le fait l'exemple [Suivre l'utilisation par étape](#track-per-step-usage). En mode unique, additionnez-les tous ; en mode d'entrée en continu, additionnez ceux qui sont arrivés après le dernier résultat. Cela vous donne les jetons d'entrée et de cache de la boucle principale. L'utilisation des sous-agents n'est pas récupérable de cette façon, pas plus que les jetons de sortie ou le coût en USD, car [le `output_tokens` par étape est un placeholder](#read-output-tokens-from-the-result-message).

328 328 

329### Suivre les jetons en cache329### Suivre les jetons en cache

330 330 

Details

771 771 

772Lorsqu'un rappel dépasse son délai d'expiration, Claude Code l'annule et rejette sa sortie, et la session continue plutôt que de se bloquer. Ce qui se passe ensuite dépend de l'événement :772Lorsqu'un rappel dépasse son délai d'expiration, Claude Code l'annule et rejette sa sortie, et la session continue plutôt que de se bloquer. Ce qui se passe ensuite dépend de l'événement :

773 773 

774* `PreToolUse` : Claude Code bloque l'appel d'outil. À sa place, Claude reçoit un résultat d'outil indiquant que le hook n'a pas répondu avant son délai d'expiration, et le tour continue. Avant la v2.1.210, Claude Code signalait le délai d'expiration à Claude comme un refus utilisateur, ce qui faisait arrêter les sessions sans surveillance et attendre une entrée.774* `PreToolUse` : Claude Code bloque l'appel d'outil. Si tous les autres hooks n'ont rien retourné ou seulement une décision `allow`, le résultat de l'outil indique à Claude que le hook n'a pas répondu avant son délai d'expiration, et le tour continue. Si un autre de vos hooks a déjà refusé l'appel, son refus parvient toujours à Claude : le résultat de l'outil inclut la raison de ce hook, et le texte du délai d'expiration peut la suivre.

775 

776 Avant la v2.1.210, Claude Code signalait le délai d'expiration à Claude comme un refus utilisateur, ce qui faisait arrêter les sessions sans surveillance et attendre une entrée.

775* `PostToolUse` et `PostToolUseFailure` : Claude Code conserve le résultat de l'outil et le tour continue.777* `PostToolUse` et `PostToolUseFailure` : Claude Code conserve le résultat de l'outil et le tour continue.

776* `UserPromptSubmit` et [`UserPromptExpansion`](https://code.claude.com/docs/fr/hooks#userpromptexpansion) : Claude Code bloque le prompt avec un message nommant le hook et le délai d'expiration, et la session continue. Avant la v2.1.208, Claude Code terminait la requête avec `error_during_execution` lorsqu'un rappel sur ces événements expirait.778* `UserPromptSubmit` et [`UserPromptExpansion`](https://code.claude.com/docs/fr/hooks#userpromptexpansion) : Claude Code bloque le prompt avec un message nommant le hook et le délai d'expiration, et la session continue. Avant la v2.1.208, Claude Code terminait la requête avec `error_during_execution` lorsqu'un rappel sur ces événements expirait.

777* `Stop` et `SubagentStop` : le rappel expiré compte comme ne retournant aucune décision. L'agent ou le sous-agent s'arrête comme si ce rappel l'avait autorisé, et une décision de vos autres hooks sur l'événement s'applique toujours. Avant Claude Code v2.1.273, un rappel `Stop` ou `SubagentStop` expiré comptait comme une exécution de hook échouée, et Claude Code rejetait les décisions de vos autres hooks sur l'événement.779* `Stop` et `SubagentStop` : le rappel expiré compte comme ne retournant aucune décision. L'agent ou le sous-agent s'arrête comme si ce rappel l'avait autorisé, et une décision de vos autres hooks sur l'événement s'applique toujours. Avant Claude Code v2.1.273, un rappel `Stop` ou `SubagentStop` expiré comptait comme une exécution de hook échouée, et Claude Code rejetait les décisions de vos autres hooks sur l'événement.

Details

309| `options.dir` | `string` | `undefined` | Répertoire de projet pour trouver la session. Lorsqu'il est omis, recherche dans tous les projets |309| `options.dir` | `string` | `undefined` | Répertoire de projet pour trouver la session. Lorsqu'il est omis, recherche dans tous les projets |

310| `options.limit` | `number` | `undefined` | Nombre maximum de messages à retourner |310| `options.limit` | `number` | `undefined` | Nombre maximum de messages à retourner |

311| `options.offset` | `number` | `undefined` | Nombre de messages à ignorer à partir du début |311| `options.offset` | `number` | `undefined` | Nombre de messages à ignorer à partir du début |

312| `options.includeSystemMessages` | `boolean` | `false` | Quand `true`, retourne également les messages système, tels que les limites de compactage, en plus des messages utilisateur et assistant |

312 313 

313#### Type de retour : `SessionMessage`314#### Type de retour : `SessionMessage`

314 315 

315| Propriété | Type | Description |316| Propriété | Type | Description |

316| :- | :- | :- |317| :- | :- | :- |

317| `type` | `"user" \| "assistant"` | Rôle du message |318| `type` | `"user" \| "assistant" \| "system"` | Rôle du message. `"system"` n'apparaît que lorsque `options.includeSystemMessages` vaut `true` |

318| `uuid` | `string` | Identifiant de message unique |319| `uuid` | `string` | Identifiant de message unique |

319| `session_id` | `string` | Session à laquelle ce message appartient |320| `session_id` | `string` | Session à laquelle ce message appartient |

320| `message` | `unknown` | Charge utile de message brute de la transcription |321| `message` | `unknown` | Charge utile de message brute de la transcription |


632 }): Promise<SDKControlReloadPluginsResponse>;633 }): Promise<SDKControlReloadPluginsResponse>;

633 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;634 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;

634 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;635 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;

636 seedReadState(path: string, mtime: number): Promise<void>;

635 accountInfo(): Promise<AccountInfo>;637 accountInfo(): Promise<AccountInfo>;

636 reconnectMcpServer(serverName: string): Promise<void>;638 reconnectMcpServer(serverName: string): Promise<void>;

637 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;639 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;

638 setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;640 setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;

641 setMcpPermissionModeOverride(

642 serverName: string,

643 mode: 'default' | 'auto' | null

644 ): Promise<{ warning?: string }>;

639 readMcpResource(serverName: string, uri: string): Promise<SDKControlMcpReadResourceResponse>;645 readMcpResource(serverName: string, uri: string): Promise<SDKControlMcpReadResourceResponse>;

640 streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;646 streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;

641 stopTask(taskId: string): Promise<void>;647 stopTask(taskId: string): Promise<void>;

648 backgroundTasks(toolUseId?: string): Promise<boolean>;

642 close(): void;649 close(): void;

643}650}

644```651```


665| `reloadPlugins(options?)` | Recharge les plugins depuis le disque, afin que les plugins que vous installez ou modifiez en cours de session parviennent à la session en cours. Se résout avec un [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) listant les commandes, les sous-agents, les plugins et l'état des serveurs MCP de la session. Nécessite Agent SDK v0.2.85 ou ultérieure. L'[option `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) nécessite Agent SDK v0.3.268 ou ultérieure |672| `reloadPlugins(options?)` | Recharge les plugins depuis le disque, afin que les plugins que vous installez ou modifiez en cours de session parviennent à la session en cours. Se résout avec un [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) listant les commandes, les sous-agents, les plugins et l'état des serveurs MCP de la session. Nécessite Agent SDK v0.2.85 ou ultérieure. L'[option `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) nécessite Agent SDK v0.3.268 ou ultérieure |

666| `reloadSkills()` | Recharge les skills depuis le disque, afin que les skills que vous ajoutez ou modifiez en cours de session deviennent disponibles pour la session en cours. Se résout avec un [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) listant les skills disponibles après le rechargement. Nécessite Agent SDK v0.3.163 ou ultérieure |673| `reloadSkills()` | Recharge les skills depuis le disque, afin que les skills que vous ajoutez ou modifiez en cours de session deviennent disponibles pour la session en cours. Se résout avec un [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) listant les skills disponibles après le rechargement. Nécessite Agent SDK v0.3.163 ou ultérieure |

667| `reloadOutputStyles()` | Relit les [styles de sortie](https://code.claude.com/docs/fr/output-styles.md) depuis le disque, afin qu'un fichier de style que vous ajoutez ou modifiez en cours de session devienne disponible pour la session en cours. Se résout avec un [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) listant les noms de styles disponibles après le rechargement. Nécessite Agent SDK v0.3.261 ou ultérieure |674| `reloadOutputStyles()` | Relit les [styles de sortie](https://code.claude.com/docs/fr/output-styles.md) depuis le disque, afin qu'un fichier de style que vous ajoutez ou modifiez en cours de session devienne disponible pour la session en cours. Se résout avec un [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) listant les noms de styles disponibles après le rechargement. Nécessite Agent SDK v0.3.261 ou ultérieure |

675| `seedReadState(path, mtime)` | Marque un fichier comme déjà lu afin qu'une modification ultérieure via Edit n'échoue pas avec `File has not been read yet`. Consultez [`seedReadState()`](#seedreadstate). Nécessite TypeScript SDK v0.2.83 ou ultérieur |

668| `accountInfo()` | Renvoie les informations du compte |676| `accountInfo()` | Renvoie les informations du compte |

669| `reconnectMcpServer(serverName)` | Reconnecte un serveur MCP par son nom. Si le nom correspond également à une entrée d'un fichier de paramètres tel que `.mcp.json` ou `~/.claude.json`, Claude Code reconnecte le serveur que vous avez configuré via [`mcpServers`](#options) ou `setMcpServers()`, et non l'entrée du fichier de paramètres. Cet ordre de résolution nécessite Claude Code v2.1.257 ou ultérieure |677| `reconnectMcpServer(serverName)` | Reconnecte un serveur MCP par son nom. Si le nom correspond également à une entrée d'un fichier de paramètres tel que `.mcp.json` ou `~/.claude.json`, Claude Code reconnecte le serveur que vous avez configuré via [`mcpServers`](#options) ou `setMcpServers()`, et non l'entrée du fichier de paramètres. Cet ordre de résolution nécessite Claude Code v2.1.257 ou ultérieure |

670| `toggleMcpServer(serverName, enabled)` | Active ou désactive un serveur MCP par son nom, avec la même résolution de nom que `reconnectMcpServer()`. Désactiver un serveur le déconnecte et retire ses outils. Consultez [`toggleMcpServer()`](#togglemcpserver) pour connaître la version de Claude Code requise pour chaque type de serveur |678| `toggleMcpServer(serverName, enabled)` | Active ou désactive un serveur MCP par son nom, avec la même résolution de nom que `reconnectMcpServer()`. Désactiver un serveur le déconnecte et retire ses outils. Consultez [`toggleMcpServer()`](#togglemcpserver) pour connaître la version de Claude Code requise pour chaque type de serveur |

671| `setMcpServers(servers)` | Remplace les serveurs MCP gérés par cette méthode : les serveurs ajoutés par son intermédiaire et les [serveurs SDK in-process](#createsdkmcpserver). Se résout avec un [`McpSetServersResult`](#mcpsetserversresult) indiquant quels serveurs ont été ajoutés et retirés, ainsi que les éventuelles erreurs ; cette section indique quels autres serveurs restent connectés |679| `setMcpServers(servers)` | Remplace les serveurs MCP gérés par cette méthode : les serveurs ajoutés par son intermédiaire et les [serveurs SDK in-process](#createsdkmcpserver). Se résout avec un [`McpSetServersResult`](#mcpsetserversresult) indiquant quels serveurs ont été ajoutés et retirés, ainsi que les éventuelles erreurs ; cette section indique quels autres serveurs restent connectés |

680| `setMcpPermissionModeOverride(serverName, mode)` | Remplace le mode de permission des outils d'un serveur MCP par un mode plus strict que celui de la session, ou efface ce remplacement avec `null`. Disponible uniquement en mode d'entrée en streaming. Consultez [`setMcpPermissionModeOverride()`](#setmcppermissionmodeoverride). Nécessite TypeScript SDK v0.3.187 ou ultérieur |

672| `readMcpResource(serverName, uri)` | *Alpha.* Lit une ressource MCP Apps `ui://` depuis un serveur MCP connecté afin que votre application puisse afficher le widget d'un outil. Se résout avec un [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Nécessite TypeScript Agent SDK v0.3.280 ou ultérieure |681| `readMcpResource(serverName, uri)` | *Alpha.* Lit une ressource MCP Apps `ui://` depuis un serveur MCP connecté afin que votre application puisse afficher le widget d'un outil. Se résout avec un [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Nécessite TypeScript Agent SDK v0.3.280 ou ultérieure |

673| `streamInput(stream)` | Envoie des messages d'entrée en flux à la requête pour les conversations multi-tours |682| `streamInput(stream)` | Envoie des messages d'entrée en flux à la requête pour les conversations multi-tours |

674| `stopTask(taskId)` | Arrête une tâche en arrière-plan en cours d'exécution par son ID |683| `stopTask(taskId)` | Arrête une tâche en arrière-plan en cours d'exécution par son ID |

684| `backgroundTasks(toolUseId?)` | Place en arrière-plan les commandes Bash et les sous-agents en cours d'exécution que le tour attend, comme lorsque vous appuyez sur Ctrl+B dans le terminal interactif. Consultez [`backgroundTasks()`](#backgroundtasks). Nécessite TypeScript SDK v0.2.139 ou ultérieur |

675| `close()` | Ferme la requête et termine le processus sous-jacent. Met fin de force à la requête et libère toutes les ressources |685| `close()` | Ferme la requête et termine le processus sous-jacent. Met fin de force à la requête et libère toutes les ressources |

676 686 

687#### `setMcpPermissionModeOverride()`

688 

689Remplace le mode de permission des outils d'un serveur MCP par un mode plus strict que celui de la session, ou efface ce remplacement avec `null`. Utilisez-la lorsqu'une session s'exécute dans un mode qui ignore les demandes par action, mais que les outils d'un serveur doivent tout de même être examinés. Nécessite TypeScript SDK v0.3.187 ou ultérieur.

690 

691Passez l'une de ces trois valeurs comme `mode` :

692 

693* `'default'` : Claude Code évalue les appels d'outils de ce serveur comme le fait le [mode manuel](https://code.claude.com/docs/fr/permission-modes.md#available-modes).

694* `'auto'` : Claude Code fait passer les appels d'outils de ce serveur par le classifieur du [mode auto](https://code.claude.com/docs/fr/permission-modes.md#eliminate-prompts-with-auto-mode). Claude Code rejette cette valeur lorsque le classifieur n'est pas disponible pour la session.

695* `null` : efface le remplacement.

696 

697Le remplacement ne prend effet que lorsque la session se trouve dans un mode qui ignore les demandes par action : `bypassPermissions` ou `auto`. Dans tout autre mode de session, Claude Code ignore le remplacement, de sorte qu'il ne peut jamais élargir ce que la session autorise.

698 

699La promesse se résout avec `{ warning }` lorsqu'aucun serveur portant ce nom n'est encore connu. Claude Code enregistre tout de même le remplacement et l'applique dès qu'un serveur portant exactement ce nom se connecte ; l'avertissement sert donc à détecter une faute de frappe, et non à signaler un échec.

700 

701Disponible uniquement en mode d'entrée en streaming, avec la même contrainte que `setModel()` et `setPermissionMode()`.

702 

703#### `seedReadState()`

704 

705Marque un fichier comme déjà lu afin qu'une modification ultérieure via Edit n'échoue pas avec `File has not been read yet`. Utilisez-la lorsque votre application a retiré du contexte de la conversation un résultat `Read` antérieur et que Claude va ensuite modifier ce fichier. Nécessite TypeScript SDK v0.2.83 ou ultérieur.

706 

707Passez `mtime` comme l'heure de modification du fichier au moment de cette lecture antérieure, en millisecondes entières depuis l'epoch, par exemple `Math.floor(stat.mtimeMs)`. Si le fichier sur le disque a été modifié après cette date, Claude Code n'applique pas le marquage.

708 

709La promesse se résout que le fichier ait été marqué ou non ; une promesse résolue ne vous indique donc pas ce qui s'est passé.

710 

711#### `backgroundTasks()`

712 

713Place en arrière-plan les commandes Bash et les sous-agents en cours d'exécution que le tour attend, comme lorsque vous appuyez sur Ctrl+B dans le terminal interactif. Passez le `toolUseId` d'un appel d'outil pour ne placer en arrière-plan que la commande Bash ou le sous-agent lancé par cet appel, ou omettez-le pour placer en arrière-plan toutes les tâches au premier plan. Nécessite TypeScript SDK v0.2.139 ou ultérieur.

714 

715Chaque appel d'outil placé en arrière-plan revient immédiatement à Claude avec un résultat indiquant qu'il s'exécute en arrière-plan, le tour se poursuit, et Claude Code émet un [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) lorsque la tâche se termine.

716 

717Dans une session où les tâches en arrière-plan sont activées, la promesse se résout en un booléen :

718 

719* **`true`** : une tâche a été placée en arrière-plan, ou vous avez omis `toolUseId`.

720* **`false`** : le `toolUseId` que vous avez passé ne correspond à aucune tâche au premier plan.

721 

722Si les tâches en arrière-plan sont désactivées pour la session, par exemple avec [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/fr/env-vars), la promesse est rejetée et rien n'est placé en arrière-plan.

723 

677#### `applyFlagSettings()`724#### `applyFlagSettings()`

678 725 

679Modifie les [paramètres](https://code.claude.com/docs/fr/settings.md) d'une session en cours sans redémarrer la requête. Utilisez-la lorsqu'un paramètre dépourvu de setter dédié doit changer en cours de session, par exemple pour resserrer `permissions` après que l'agent a lu une entrée non fiable. `setModel()` et `setPermissionMode()` sont des setters dédiés pour ces deux clés ; `applyFlagSettings()` est la forme générale qui accepte n'importe quel sous-ensemble des clés de paramètres, et passer `model` ici se comporte de la même manière que `setModel()`.726Modifie les [paramètres](https://code.claude.com/docs/fr/settings.md) d'une session en cours sans redémarrer la requête. Utilisez-la lorsqu'un paramètre dépourvu de setter dédié doit changer en cours de session, par exemple pour resserrer `permissions` après que l'agent a lu une entrée non fiable. `setModel()` et `setPermissionMode()` sont des setters dédiés pour ces deux clés ; `applyFlagSettings()` est la forme générale qui accepte n'importe quel sous-ensemble des clés de paramètres, et passer `model` ici se comporte de la même manière que `setModel()`.


1472 | SDKPermissionDeniedMessage1519 | SDKPermissionDeniedMessage

1473 | SDKPromptSuggestionMessage1520 | SDKPromptSuggestionMessage

1474 | SDKAPIRetryMessage1521 | SDKAPIRetryMessage

1522 | SDKControlRequestProgressMessage

1523 | SDKModelRefusalFallbackMessage

1524 | SDKModelRefusalNoFallbackMessage

1475 | SDKMirrorErrorMessage1525 | SDKMirrorErrorMessage

1476 | SDKInformationalMessage1526 | SDKInformationalMessage

1477 | SDKConversationResetMessage;1527 | SDKConversationResetMessage;

1478```1528```

1479 1529 

1530Trois messages de cette union signalent la progression des requêtes de contrôle et les refus du modèle. Chacun a `type: "system"`, distinguez-les donc par le `subtype` indiqué pour chacun :

1531 

1532* `SDKControlRequestProgressMessage`, `subtype: "control_request_progress"` : signale la progression d'une requête de contrôle de longue durée envoyée par votre client. `request_id` associe le message à cette requête, et `status` vaut `"started"` ou `"api_retry"`. Nécessite l'Agent SDK v0.3.203 ou ultérieure.

1533* `SDKModelRefusalFallbackMessage`, `subtype: "model_refusal_fallback"` : émis lorsque le modèle termine le flux par un refus et que le tour est réessayé sur un modèle de secours. Contient `original_model` et `fallback_model`. Nécessite l'Agent SDK v0.3.170 ou ultérieure.

1534* `SDKModelRefusalNoFallbackMessage`, `subtype: "model_refusal_no_fallback"` : émis lorsque le modèle termine le flux par un refus et qu'aucune nouvelle tentative n'a lieu, par exemple parce qu'aucun modèle de secours n'est configuré. Contient `original_model`. Nécessite l'Agent SDK v0.3.193 ou ultérieure.

1535 

1480### `SDKAssistantMessage`1536### `SDKAssistantMessage`

1481 1537 

1482Message de réponse de l'assistant.1538Message de réponse de l'assistant.


1636 stop_reason: string | null;1692 stop_reason: string | null;

1637 ttft_ms?: number;1693 ttft_ms?: number;

1638 ttft_stream_ms?: number;1694 ttft_stream_ms?: number;

1695 time_to_request_ms?: number;

1639 user_message_uuid?: string;1696 user_message_uuid?: string;

1640 user_message_uuids?: string[];1697 user_message_uuids?: string[];

1641 resume_reason?: string;1698 resume_reason?: string;


1701* `api_error_status` : le code de statut HTTP de l'erreur API qui a terminé la conversation. Absent ou `null` quand le tour s'est terminé sans erreur API.1758* `api_error_status` : le code de statut HTTP de l'erreur API qui a terminé la conversation. Absent ou `null` quand le tour s'est terminé sans erreur API.

1702* `ttft_ms` : temps jusqu'au premier token en millisecondes, mesuré quand le premier message d'assistant complet arrive. Présent sur le bras de succès uniquement.1759* `ttft_ms` : temps jusqu'au premier token en millisecondes, mesuré quand le premier message d'assistant complet arrive. Présent sur le bras de succès uniquement.

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

1761* `time_to_request_ms` : délai en millisecondes entre le début du tour et l'envoi de la requête d'API par Claude Code. Présent uniquement dans la branche de succès. Nécessite Claude Code v2.1.162 ou ultérieure.

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

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

1706* `resume_reason` : la raison pour laquelle ce tour poursuit un tour qu'un redémarrage a interrompu. Présent dans les deux branches. Consultez [`resume_reason`](#resume_reason).1764* `resume_reason` : la raison pour laquelle ce tour poursuit un tour qu'un redémarrage a interrompu. Présent dans les deux branches. Consultez [`resume_reason`](#resume_reason).


1772* Tours qui ne répondent à aucun message de votre part, ou répondent à un message que vous avez envoyé sans `uuid`1830* Tours qui ne répondent à aucun message de votre part, ou répondent à un message que vous avez envoyé sans `uuid`

1773* Résultats qui ne répondent à aucun message que vous avez envoyé, comme le résultat mis à zéro après un crash du processus worker1831* Résultats qui ne répondent à aucun message que vous avez envoyé, comme le résultat mis à zéro après un crash du processus worker

1774 1832 

1833Lorsqu'un hook [`UserPromptSubmit`](https://code.claude.com/docs/fr/hooks#userpromptsubmit) bloque un message qui démarre son propre tour, ou l'arrête avec `continue: false`, vous obtenez tout de même un résultat pour ce message. Il s'agit d'un résultat de succès avec `is_error: false` et `num_turns: 0`, son `result` est le [message de blocage](https://code.claude.com/docs/fr/hooks.md#what-a-blocked-prompt-leaves-behind) ou le [message d'arrêt](https://code.claude.com/docs/fr/hooks.md#json-output), et il renvoie l'`uuid` du message selon les mêmes règles que tout autre résultat. Le résultat n'a pas de `terminal_reason`, et rien d'autre que le texte de `result` n'indique qu'un hook a mis fin au tour. Un message qu'un hook bloque pendant qu'un autre tour est en cours peut ne recevoir aucun résultat : consultez [`user_message_uuids`](#user_message_uuids).

1834 

1775#### `user_message_uuids`1835#### `user_message_uuids`

1776 1836 

1777Les `uuid`s de chaque message que vous avez envoyé auquel Claude Code a répondu dans ce tour. Quand vous envoyez plusieurs messages rapprochés, Claude Code peut les fusionner en un seul tour, et `user_message_uuid` nomme alors uniquement le dernier d'entre eux. Pour faire correspondre la réponse à l'un des messages fusionnés, cherchez l'`uuid` de ce message n'importe où dans cette liste. Nécessite Agent SDK v0.3.259 ou ultérieur.1837Les `uuid`s de chaque message que vous avez envoyé auquel Claude Code a répondu dans ce tour. Quand vous envoyez plusieurs messages rapprochés, Claude Code peut les fusionner en un seul tour, et `user_message_uuid` nomme alors uniquement le dernier d'entre eux. Pour faire correspondre la réponse à l'un des messages fusionnés, cherchez l'`uuid` de ce message n'importe où dans cette liste. Nécessite Agent SDK v0.3.259 ou ultérieur.

1778 1838 

1779Claude Code définit la liste avec `user_message_uuid` sur chaque cadre de réponse qui porte ce champ et sur le résultat. Pour l'ensemble complet des cadres du tour qui renvoient l'`uuid` du message auquel il est répondu, et la version que chacun nécessite, voir [`user_message_uuid`](#user_message_uuid). La liste contient toujours `user_message_uuid` et contient au maximum 64 entrées.1839Claude Code définit la liste avec `user_message_uuid` sur chaque cadre de réponse qui porte ce champ et sur le résultat. Pour l'ensemble complet des cadres du tour qui renvoient l'`uuid` du message auquel il est répondu, et la version que chacun nécessite, voir [`user_message_uuid`](#user_message_uuid). La liste contient toujours `user_message_uuid` et contient au maximum 64 entrées.

1780 1840 

1781Quand Claude Code prend en compte un message régulier que vous avez envoyé pendant qu'un tour s'exécutait, il ajoute l'`uuid` de ce message à la liste du résultat.1841Lorsque Claude Code récupère un message ordinaire que vous avez envoyé pendant un tour en cours, il ajoute l'`uuid` de ce message à la liste du résultat. Lorsqu'un hook [`UserPromptSubmit`](https://code.claude.com/docs/fr/hooks#userpromptsubmit) bloque le message au moment de sa récupération, Claude Code le supprime plutôt : le message n'atteint jamais Claude et n'est pas conservé pour un tour ultérieur. Vous n'obtenez aucun résultat pour lui, et son `uuid` n'apparaît dans la liste d'aucun résultat. Si un hook peut bloquer des messages, définissez un délai d'expiration pour l'attente d'un résultat listant un message que vous avez envoyé pendant un tour en cours.

1842 

1843Cela vaut lorsque la sortie du hook se limite à un blocage. Si la sortie définit `continue: false`, même à côté de `decision: "block"`, ou si le hook est un hook de prompt qui répond [`ok: false`](https://code.claude.com/docs/fr/hooks#response-schema) sans `continueOnBlock: true`, Claude Code arrête le message au lieu de le supprimer. Le message attend son propre tour, vous obtenez un résultat pour lui, et son texte reste dans la conversation, de sorte que Claude le voit au tour suivant.

1782 1844 

1783Quand une première réponse ou un résultat porte `user_message_uuid` sans la liste, il provient d'une version antérieure de Claude Code, donc revenez au champ unique.1845Quand une première réponse ou un résultat porte `user_message_uuid` sans la liste, il provient d'une version antérieure de Claude Code, donc revenez au champ unique.

1784 1846 

channels.md +1 −1

Details

271 271 

272Le message arrive dans votre session Claude Code. Le terminal l'affiche comme une ligne de canal entrant comme `← fakechat · web: what's in my working directory?`, tandis que le modèle le reçoit comme un événement `<channel source="plugin:fakechat:fakechat">`, en utilisant le nom de serveur délimité du plugin. Claude le lit, fait le travail et appelle l'outil `reply` de fakechat. Si Claude Code demande une permission pour la première réponse, approuvez-la. La réponse s'affiche dans l'interface de chat.272Le message arrive dans votre session Claude Code. Le terminal l'affiche comme une ligne de canal entrant comme `← fakechat · web: what's in my working directory?`, tandis que le modèle le reçoit comme un événement `<channel source="plugin:fakechat:fakechat">`, en utilisant le nom de serveur délimité du plugin. Claude le lit, fait le travail et appelle l'outil `reply` de fakechat. Si Claude Code demande une permission pour la première réponse, approuvez-la. La réponse s'affiche dans l'interface de chat.

273 273 

274Si Claude rencontre une invite de permission alors que vous êtes loin du terminal, la session s'interrompt jusqu'à ce que vous répondiez. Les serveurs de canaux qui déclarent la [capacité de relais de permission](https://code.claude.com/docs/fr/channels-reference.md#relay-permission-prompts) peuvent vous transférer ces invites pour que vous puissiez approuver ou refuser à distance. Pour une utilisation sans surveillance, [`--dangerously-skip-permissions`](https://code.claude.com/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) contourne la plupart des invites, mais utilisez-le uniquement dans les environnements auxquels vous faites confiance. Même dans ce cas, les [actions no mode auto-approves](https://code.claude.com/docs/fr/permission-modes.md#actions-no-mode-auto-approves) s'appliquent toujours.274Si Claude rencontre une invite de permission alors que vous êtes loin du terminal, la session s'interrompt jusqu'à ce que vous répondiez. Les serveurs de canaux qui déclarent la [capacité de relais de permission](https://code.claude.com/docs/fr/channels-reference.md#relay-permission-prompts) peuvent vous transférer ces invites pour que vous puissiez approuver ou refuser à distance. Pour une utilisation sans surveillance, [`--dangerously-skip-permissions`](https://code.claude.com/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) contourne la plupart des invites, mais utilisez-le uniquement dans les environnements auxquels vous faites confiance. Même dans ce cas, les [actions qu'aucun mode n'approuve automatiquement](https://code.claude.com/docs/fr/permission-modes.md#actions-no-mode-auto-approves) s'appliquent toujours.

275 275 

276Lorsque vous exécutez des canaux en mode non interactif avec `-p`, les outils qui nécessitent une entrée de terminal, tels que les questions à choix multiples et l'approbation du mode plan, sont désactivés pour que la session ne s'arrête jamais en attente d'entrée.276Lorsque vous exécutez des canaux en mode non interactif avec `-p`, les outils qui nécessitent une entrée de terminal, tels que les questions à choix multiples et l'approbation du mode plan, sont désactivés pour que la session ne s'arrête jamais en attente d'entrée.

277 277 

channels-reference.md +101 −100

Details

433 433 

434Les canaux [Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram) et [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) contrôlent sur une liste d'approbation d'expéditeur de la même manière. Ils amorçent la liste par [appairage](https://code.claude.com/docs/fr/channels.md#security). Consultez l'une ou l'autre implémentation pour le flux d'appairage complet. Le canal [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage) adopte une approche différente : il détecte les propres adresses de l'utilisateur à partir de la base de données Messages au démarrage et les laisse passer automatiquement, avec d'autres expéditeurs ajoutés par poignée.434Les canaux [Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram) et [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) contrôlent sur une liste d'approbation d'expéditeur de la même manière. Ils amorçent la liste par [appairage](https://code.claude.com/docs/fr/channels.md#security). Consultez l'une ou l'autre implémentation pour le flux d'appairage complet. Le canal [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage) adopte une approche différente : il détecte les propres adresses de l'utilisateur à partir de la base de données Messages au démarrage et les laisse passer automatiquement, avec d'autres expéditeurs ajoutés par poignée.

435 435 

436## Relayer les invites de permission436## Relayer les demandes de permission

437 437 

438Quand Claude appelle un outil qui a besoin d'approbation, la boîte de dialogue du terminal local s'ouvre et la session attend. Un canal bidirectionnel peut opter pour recevoir la même invite en parallèle et la relayer vers vous sur un autre appareil. Les deux restent actifs : vous pouvez répondre dans le terminal ou sur votre téléphone, et Claude Code applique la réponse qui arrive en premier et ferme l'autre.438Lorsque Claude appelle un outil qui nécessite une approbation, la boîte de dialogue du terminal local s'ouvre et la session attend. Un canal bidirectionnel peut choisir de recevoir la même demande en parallèle et de vous la relayer sur un autre appareil. Les deux restent actives : vous pouvez répondre dans le terminal ou sur votre téléphone, et Claude Code applique la première réponse reçue et ferme l'autre.

439 439 

440Le relais couvre les approbations d'utilisation d'outils comme `Bash`, `Write` et `Edit`. La confiance du projet et les boîtes de dialogue de consentement du serveur MCP ne relaient pas ; celles-ci n'apparaissent que dans le terminal local.440Le relais couvre les approbations d'utilisation d'outils comme `Bash`, `Write` et `Edit`. Les boîtes de dialogue de confiance accordée au projet et de consentement aux serveurs MCP ne sont pas relayées ; elles n'apparaissent que dans le terminal local.

441 441 

442Claude Code v2.1.234 et versions ultérieures envoient les demandes de permission uniquement aux serveurs qu'il a enregistrés en tant que canaux pour la session, donc le relais se situe derrière les mêmes [contrôles de consentement de session et d'organisation](https://code.claude.com/docs/fr/channels.md#security) que la livraison des messages. Le relais nécessite également que vous optiez pour le serveur avec `--channels` ou le drapeau de développement, et nécessite que le serveur déclare la capacité de permission.442Claude Code v2.1.234 et versions ultérieures n'envoient les demandes de permission qu'aux serveurs enregistrés comme canaux pour la session, de sorte que le relais est soumis aux mêmes [contrôles d'activation par session et d'organisation](https://code.claude.com/docs/fr/channels.md#security) que la distribution des messages. Le relais exige également que vous activiez le serveur avec `--channels` ou le flag de développement, et que le serveur déclare la capacité de permission.

443 443 

444### Comment fonctionne le relais444### Fonctionnement du relais

445 445 

446Quand une invite de permission s'ouvre, la boucle de relais a quatre étapes :446Lorsqu'une demande de permission s'ouvre, la boucle de relais comporte quatre étapes :

447 447 

4481. Claude Code génère un court ID de demande et notifie votre serveur4481. Claude Code génère un court ID de requête et notifie votre serveur

4492. Votre serveur transmet l'invite et l'ID à votre application de chat4492. Votre serveur transmet la demande et l'ID à votre application de chat

4503. L'utilisateur distant répond par oui ou non et cet ID4503. L'utilisateur distant répond par oui ou par non avec cet ID

4514. Votre gestionnaire entrant analyse la réponse en un verdict, et Claude Code l'applique uniquement si l'ID correspond à une demande ouverte4514. Votre gestionnaire entrant analyse la réponse pour en tirer un verdict, et Claude Code ne l'applique que si l'ID correspond à une requête ouverte

452 452 

453La boîte de dialogue du terminal local reste ouverte pendant tout cela. Si quelqu'un au terminal répond avant l'arrivée du verdict distant, cette réponse est appliquée à la place et la demande distante en attente est supprimée.453La boîte de dialogue du terminal local reste ouverte pendant tout ce processus. Si quelqu'un au terminal répond avant l'arrivée du verdict distant, c'est cette réponse qui est appliquée et la requête distante en attente est abandonnée.

454 454 

455![Diagramme de séquence : Claude Code envoie une notification permission\_request au serveur de canal, le serveur formate et envoie l'invite à l'application de chat, l'humain répond avec un verdict, et le serveur analyse cette réponse en une notification de permission vers Claude Code](https://mintcdn.com/claude-code/9FG0ZKj9uKYiHmbi/images/channel-permission-relay.svg?fit=max\&auto=format\&n=9FG0ZKj9uKYiHmbi\&q=85\&s=97d57f128f0da55f105ab1e3a7e10240)455![Diagramme de séquence : Claude Code envoie une notification permission\_request au serveur de canal, le serveur met en forme la demande et l'envoie à l'application de chat, l'humain répond avec un verdict, et le serveur analyse cette réponse pour la transformer en notification permission renvoyée à Claude Code](https://mintcdn.com/claude-code/9FG0ZKj9uKYiHmbi/images/channel-permission-relay.svg?fit=max\&auto=format\&n=9FG0ZKj9uKYiHmbi\&q=85\&s=97d57f128f0da55f105ab1e3a7e10240)

456 456 

457### Champs de demande de permission457### Champs de la demande de permission

458 458 

459La notification sortante de Claude Code est `notifications/claude/channel/permission_request`. Comme la [notification de canal](#notification-format), le transport est MCP standard mais la méthode et le schéma sont des extensions Claude Code. L'objet `params` a quatre champs de chaîne que votre serveur formate dans l'invite sortante :459La notification sortante de Claude Code est `notifications/claude/channel/permission_request`. Comme pour la [notification de canal](#notification-format), le transport est du MCP standard, mais la méthode et le schéma sont des extensions de Claude Code. L'objet `params` comporte quatre champs de type chaîne que votre serveur met en forme dans la demande sortante :

460 460 

461| Champ | Description |461| Champ | Description |

462| - | - |462| - | - |

463| `request_id` | Cinq lettres minuscules tirées de `a`-`z` sans `l`, donc cela ne se lit jamais comme un `1` ou un `I` quand tapé sur un téléphone. Incluez-le dans votre invite sortante afin qu'il puisse être répété dans la réponse. Claude Code n'accepte un verdict que s'il porte un ID qu'il a émis. La boîte de dialogue du terminal local n'affiche pas cet ID, donc votre gestionnaire sortant est le seul moyen de l'apprendre. |463| `request_id` | Cinq lettres minuscules tirées de `a`-`z` sans `l`, afin qu'il ne soit jamais confondu avec un `1` ou un `I` lorsqu'il est saisi sur un téléphone. Incluez-le dans votre demande sortante pour qu'il puisse être renvoyé dans la réponse. Claude Code n'accepte qu'un verdict portant un ID qu'il a émis. La boîte de dialogue du terminal local n'affiche pas cet ID ; votre gestionnaire sortant est donc le seul moyen de le connaître. |

464| `tool_name` | Nom de l'outil que Claude veut utiliser, par exemple `Bash` ou `Write`. |464| `tool_name` | Nom de l'outil que Claude souhaite utiliser, par exemple `Bash` ou `Write`. |

465| `description` | Résumé lisible par l'homme de ce que cet appel d'outil spécifique fait, jamais la commande elle-même. Pour un appel Bash c'est la description de Claude de la commande ; quand le modèle ne donne aucune description, le champ est la constante `Run shell command` et ne porte aucun détail de commande. Rendez `input_preview` quand vous avez de la place. |465| `description` | Résumé lisible de ce que fait cet appel d'outil spécifique, jamais la commande elle-même. Pour un appel Bash, il s'agit de la description de la commande par Claude ; lorsque le modèle ne fournit aucune description, le champ contient la constante `Run shell command` et ne comporte aucun détail sur la commande. Affichez `input_preview` lorsque vous avez de la place. |

466| `input_preview` | Les arguments de l'outil sous forme de texte en forme JSON, tronqués par champ de niveau supérieur. Pour Bash c'est la commande ; pour Write, le chemin du fichier et le contenu. Omettez-le de votre invite si vous n'avez de la place que pour un message d'une ligne. Votre serveur décide ce qu'il faut afficher. |466| `input_preview` | Les arguments de l'outil sous forme de texte d'affichage au format JSON, indexé par champ de premier niveau. Pour Bash, il s'agit de la commande ; pour Write, du chemin du fichier et du contenu. Omettez-le de votre demande si vous n'avez de place que pour un message d'une ligne. C'est votre serveur qui décide de ce qu'il affiche. |

467 467 

468Les clients sur Claude Code v2.1.211 ou versions ultérieures assainissent `description` et `input_preview` avant de les relayer. Attendez-vous à trois changements dans le texte que vous recevez :468Les clients sous Claude Code v2.1.211 ou version ultérieure assainissent `description` et `input_preview` avant de les relayer. Attendez-vous à trois modifications dans le texte que vous recevez :

469 469 

470* Claude Code neutralise les caractères de remplacement de direction, les caractères invisibles, et les guillemets et crochets qui ressemblent à des lookalikes.470* Claude Code neutralise les caractères de forçage de direction, les caractères invisibles et les caractères ressemblant à des guillemets et à des chevrons.

471* Claude Code replie chaque suite d'espaces en un seul espace.471* Claude Code réduit chaque suite d'espaces à un seul espace.

472* Claude Code relaye le texte en entier jusqu'à 3 500 points de code. Pour une valeur plus longue, vous recevez son début et sa fin autour d'un marqueur `⋯ N code points elided ⋯` compté. La fin d'une longue commande atteint toujours l'approbateur.472* Claude Code relaie le texte en entier jusqu'à 3 500 points de code. Pour une valeur plus longue, vous recevez son début et sa fin autour d'un marqueur comptabilisé `⋯ N code points elided ⋯`. La fin d'une commande longue parvient donc toujours à la personne qui approuve.

473 473 

474Pour `input_preview`, Claude Code applique la limite de 3 500 à chaque champ de niveau supérieur des arguments séparément et conserve les guillemets structurels du JSON. Les clients antérieurs à v2.1.211 relaient `description` brut et coupent `input_preview` à 200 unités UTF-16 avec des points de suspension à la fin.474Pour `input_preview`, Claude Code applique la limite de 3 500 à chaque champ de premier niveau des arguments séparément et conserve les guillemets structurels propres au JSON. Les clients antérieurs à v2.1.211 relaient `description` tel quel et coupent `input_preview` à 200 unités UTF-16 avec des points de suspension à la fin.

475 475 

476Les clients sur Claude Code v2.1.234 ou versions ultérieures relaient le marqueur `(value unserializable)` à la place d'une valeur de champ `input_preview` qu'ils ne peuvent pas sérialiser en toute sécurité, comme une structure circulaire ou un tableau extrêmement grand. Vous recevez toujours la clé du champ, et les autres champs de l'aperçu sont inchangés.476Les clients sous Claude Code v2.1.234 ou version ultérieure relaient le marqueur `(value unserializable)` à la place d'une valeur de champ d'`input_preview` qu'ils ne peuvent pas sérialiser en toute sécurité, comme une structure circulaire ou un tableau extrêmement volumineux. Vous recevez toujours la clé du champ, et les autres champs de l'aperçu restent inchangés.

477 477 

478Les clients sur Claude Code v2.1.234 ou versions ultérieures masquent également les identifiants dans `description` et `input_preview`. Vous recevez `[REDACTED]` à la place d'un jeton d'identifiant de fournisseur reconnaissable, comme une clé API ou un jeton d'accès personnel. Attendez-vous à trois effets du masquage quand vous rendez les champs :478Les clients sous Claude Code v2.1.234 ou version ultérieure masquent également les identifiants dans `description` et `input_preview`. Vous recevez `[REDACTED]` à la place d'un jeton d'identification de fournisseur reconnaissable, comme une clé API ou un jeton d'accès personnel. Attendez-vous à trois effets du masquage lorsque vous affichez les champs :

479 479 

480* Claude Code masque les noms de clés à l'intérieur de `input_preview` ainsi que leurs valeurs. Un nom de clé que vous affichez peut ne pas correspondre au nom de clé dans l'entrée.480* Claude Code masque les noms de clés dans `input_preview` ainsi que leurs valeurs. Un nom de clé que vous affichez peut ne pas correspondre au nom de clé dans l'entrée.

481* Claude Code ne masque jamais une plage qui contient la syntaxe du shell, les caractères de chemin ou les caractères d'URL. Un masque ne peut pas cacher la commande, le chemin du fichier ou la destination en cours d'approbation.481* Claude Code ne masque jamais un segment contenant une syntaxe shell, des caractères de chemin ou des caractères d'URL. Un masque ne peut pas dissimuler la commande, le chemin de fichier ou la destination en cours d'approbation.

482* Claude Code ne masque pas un secret qui manque d'un préfixe reconnaissable, ou un secret qui s'étend sur plusieurs espaces, comme un bloc de clé privée. Les deux atteignent votre serveur sans masque.482* Claude Code ne masque pas un secret dépourvu de préfixe reconnaissable, ni un secret qui s'étend sur des espaces, comme un bloc de clé privée. Tous deux parviennent à votre serveur sans masquage.

483 483 

484Le masquage ne change pas qui reçoit les champs. Tout ce qui reste sans masque va uniquement aux serveurs pour lesquels vous avez opté avec `--channels` ou le drapeau de développement. Traitez les deux champs comme non fiables sauf si vous contrôlez la flotte de clients.484Le masquage ne change pas qui reçoit les champs. Tout ce qui reste non masqué n'est envoyé qu'aux serveurs que vous avez activés avec `--channels` ou le flag de développement. Considérez les deux champs comme non fiables, sauf si vous contrôlez le parc de clients.

485 485 

486Le verdict que votre serveur renvoie est `notifications/claude/channel/permission` avec deux champs : `request_id` répétant l'ID ci-dessus, et `behavior` défini sur `'allow'` ou `'deny'`. Allow laisse l'appel d'outil procéder ; deny le rejette. Aucun verdict n'affecte les appels futurs.486Le verdict que votre serveur renvoie est `notifications/claude/channel/permission` avec deux champs : `request_id`, qui reprend l'ID ci-dessus, et `behavior`, défini sur `'allow'` ou `'deny'`. Allow laisse l'appel d'outil se poursuivre ; deny le rejette. Aucun des deux verdicts n'affecte les appels futurs.

487 487 

488### Ajouter le relais à une passerelle de chat488### Ajouter le relais à un pont de chat

489 489 

490Ajouter le relais de permission à un canal bidirectionnel prend trois composants :490L'ajout du relais des permissions à un canal bidirectionnel nécessite trois composants :

491 491 

4921. Une entrée `claude/channel/permission: {}` sous les capacités `experimental` dans votre constructeur `Server` afin que Claude Code sache transmettre les invites4921. Une entrée `claude/channel/permission: {}` sous les capacités `experimental` dans votre constructeur `Server`, afin que Claude Code sache qu'il doit transmettre les demandes

4932. Un gestionnaire de notification pour `notifications/claude/channel/permission_request` qui formate l'invite et l'envoie via votre API de plateforme4932. Un gestionnaire de notification pour `notifications/claude/channel/permission_request` qui met en forme la demande et l'envoie via l'API de votre plateforme

4943. Une vérification dans votre gestionnaire de message entrant qui reconnaît `yes <id>` ou `no <id>` et émet une notification de verdict `notifications/claude/channel/permission` au lieu de transmettre le texte à Claude4943. Une vérification dans votre gestionnaire de messages entrants qui reconnaît `yes <id>` ou `no <id>` et émet un verdict `notifications/claude/channel/permission` au lieu de transmettre le texte à Claude

495 495 

496Déclarez uniquement la capacité si votre canal [authentifie l'expéditeur](#gate-inbound-messages), car quiconque peut répondre via votre canal peut approuver ou refuser l'utilisation d'outils dans votre session.496Ne déclarez la capacité que si votre canal [authentifie l'expéditeur](#gate-inbound-messages), car toute personne pouvant répondre via votre canal peut approuver ou refuser l'utilisation d'outils dans votre session.

497 497 

498Pour ajouter ceux-ci à une passerelle de chat bidirectionnelle comme celle assemblée dans [Exposer un outil de réponse](#expose-a-reply-tool) :498Pour les ajouter à un pont de chat bidirectionnel comme celui assemblé dans [Exposer un outil de réponse](#expose-a-reply-tool) :

499 499 

500**1. Déclarer la capacité de permission**500**1. Déclarer la capacité de permission**

501 501 


505capabilities: {505capabilities: {

506 experimental: {506 experimental: {

507 'claude/channel': {},507 'claude/channel': {},

508 'claude/channel/permission': {}, // opter pour le relais de permission508 'claude/channel/permission': {}, // opt in to permission relay

509 },509 },

510 tools: {},510 tools: {},

511},511},

512```512```

513 513 

514**2. Gérer la demande entrante**514**2. Gérer la requête entrante**

515 515 

516Enregistrez un gestionnaire de notification entre votre constructeur `Server` et `mcp.connect()`. Claude Code l'appelle avec les [quatre champs de demande](#permission-request-fields) quand une boîte de dialogue de permission s'ouvre. Votre gestionnaire formate l'invite pour votre plateforme et inclut des instructions pour répondre avec l'ID :516Enregistrez un gestionnaire de notification entre votre constructeur `Server` et `mcp.connect()`. Claude Code l'appelle avec les [quatre champs de la requête](#permission-request-fields) lorsqu'une boîte de dialogue de permission s'ouvre. Votre gestionnaire met en forme la demande pour votre plateforme et inclut des instructions pour répondre avec l'ID :

517 517 

518```ts theme={null}518```ts theme={null}

519import { z } from 'zod'519import { z } from 'zod'

520 520 

521// setNotificationHandler route par z.literal sur le champ method,521// setNotificationHandler routes by z.literal on the method field,

522// donc ce schéma est à la fois le validateur et la clé de dispatch522// so this schema is both the validator and the dispatch key

523const PermissionRequestSchema = z.object({523const PermissionRequestSchema = z.object({

524 method: z.literal('notifications/claude/channel/permission_request'),524 method: z.literal('notifications/claude/channel/permission_request'),

525 params: z.object({525 params: z.object({

526 request_id: z.string(), // cinq lettres minuscules, inclure verbatim dans votre invite526 request_id: z.string(), // five lowercase letters, include verbatim in your prompt

527 tool_name: z.string(), // par ex. "Bash", "Write"527 tool_name: z.string(), // e.g. "Bash", "Write"

528 description: z.string(), // résumé de cet appel. Traiter comme non fiable.528 description: z.string(), // summary of this call. Treat as untrusted.

529 input_preview: z.string(), // arguments d'outil en JSON. Traiter comme non fiable.529 input_preview: z.string(), // tool args as JSON-shaped text. Treat as untrusted.

530 }),530 }),

531})531})

532 532 

533mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {533mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {

534 // send() est votre sortie : POST à votre plateforme de chat, ou pour les tests locaux534 // send() is your outbound: POST to your chat platform, or for local

535 // la diffusion SSE montrée dans l'exemple complet ci-dessous.535 // testing the SSE broadcast shown in the full example below.

536 send(536 send(

537 `Claude wants to run ${params.tool_name}: ${params.description}\n` +537 `Claude wants to run ${params.tool_name}: ${params.description}\n` +

538 // input_preview porte les arguments réels ; rendez-le quand vous538 // input_preview carries the actual arguments; render it when you

539 // avez de la place : pour Bash la description seule peut être juste539 // have room: for Bash the description alone may be just

540 // "Run shell command" sans aucun détail de commande540 // "Run shell command" with zero command detail

541 `${params.input_preview}\n\n` +541 `${params.input_preview}\n\n` +

542 // l'ID dans l'instruction est ce que votre gestionnaire entrant analyse à l'étape 3542 // the ID in the instruction is what your inbound handler parses in Step 3

543 `Reply "yes ${params.request_id}" or "no ${params.request_id}"`,543 `Reply "yes ${params.request_id}" or "no ${params.request_id}"`,

544 )544 )

545})545})


547 547 

548**3. Intercepter le verdict dans votre gestionnaire entrant**548**3. Intercepter le verdict dans votre gestionnaire entrant**

549 549 

550Votre gestionnaire entrant est la boucle ou le rappel qui reçoit les messages de votre plateforme : le même endroit où vous [contrôlez sur l'expéditeur](#gate-inbound-messages) et émettez `notifications/claude/channel` pour transmettre le chat à Claude. Ajoutez une vérification avant l'appel de transmission de chat qui reconnaît le format du verdict et émet la notification de permission à la place.550Votre gestionnaire entrant est la boucle ou le callback qui reçoit les messages de votre plateforme : le même endroit où vous [filtrez selon l'expéditeur](#gate-inbound-messages) et émettez `notifications/claude/channel` pour transmettre le chat à Claude. Ajoutez, avant l'appel de transmission du chat, une vérification qui reconnaît le format du verdict et émet la notification de permission à la place.

551 551 

552La regex correspond au format d'ID que Claude Code génère : cinq lettres, jamais `l`. Le drapeau `/i` tolère la correction automatique du téléphone en mettant en majuscules la réponse ; mettez en minuscules l'ID capturé avant de le renvoyer.552L'expression régulière correspond au format d'ID généré par Claude Code : cinq lettres, jamais `l`. Le flag `/i` tolère la mise en majuscule de la réponse par la correction automatique du téléphone ; convertissez l'ID capturé en minuscules avant de le renvoyer.

553 553 

554```ts theme={null}554```ts theme={null}

555// correspond à "y abcde", "yes abcde", "n abcde", "no abcde"555// matches "y abcde", "yes abcde", "n abcde", "no abcde"

556// [a-km-z] est l'alphabet d'ID que Claude Code utilise (minuscules, ignore 'l')556// [a-km-z] is the ID alphabet Claude Code uses (lowercase, skips 'l')

557// /i tolère la correction automatique du téléphone ; mettez en minuscules la capture avant d'envoyer557// /i tolerates phone autocorrect; lowercase the capture before sending

558const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i558const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

559 559 

560async function onInbound(message: PlatformMessage) {560async function onInbound(message: PlatformMessage) {

561 if (!allowed.has(message.from.id)) return // contrôler sur l'expéditeur d'abord561 if (!allowed.has(message.from.id)) return // gate on sender first

562 562 

563 const m = PERMISSION_REPLY_RE.exec(message.text)563 const m = PERMISSION_REPLY_RE.exec(message.text)

564 if (m) {564 if (m) {

565 // m[1] est le mot du verdict, m[2] est l'ID de demande565 // m[1] is the verdict word, m[2] is the request ID

566 // émettre la notification du verdict vers Claude Code au lieu du chat566 // emit the verdict notification back to Claude Code instead of chat

567 await mcp.notification({567 await mcp.notification({

568 method: 'notifications/claude/channel/permission',568 method: 'notifications/claude/channel/permission',

569 params: {569 params: {

570 request_id: m[2].toLowerCase(), // normaliser en cas de majuscules de correction automatique570 request_id: m[2].toLowerCase(), // normalize in case of autocorrect caps

571 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',571 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',

572 },572 },

573 })573 })

574 return // géré comme verdict, ne pas aussi transmettre comme chat574 return // handled as verdict, don't also forward as chat

575 }575 }

576 576 

577 // ne correspondait pas au format du verdict : passer au chemin de chat normal577 // didn't match verdict format: fall through to the normal chat path

578 await mcp.notification({578 await mcp.notification({

579 method: 'notifications/claude/channel',579 method: 'notifications/claude/channel',

580 params: { content: message.text, meta: { chat_id: String(message.chat.id) } },580 params: { content: message.text, meta: { chat_id: String(message.chat.id) } },


582}582}

583```583```

584 584 

585Une réponse distante qui ne correspond pas exactement au format attendu échoue de l'une de deux façons, et dans les deux cas la boîte de dialogue du terminal local reste ouverte :585Si une réponse distante n'a aucun effet et que la boîte de dialogue du terminal local reste ouverte, vérifiez les causes suivantes :

586 586 

587* **Format différent** : la regex de votre gestionnaire entrant ne correspond pas, donc du texte comme `approve it` ou `yes` sans ID tombe comme un message normal à Claude.587* **Le format est incorrect** : l'expression régulière de votre gestionnaire entrant ne correspond pas, de sorte qu'un texte comme `approve it` ou `yes` sans ID est transmis à Claude comme un message normal.

588* **Format correct, ID incorrect** : votre serveur émet un verdict, mais Claude Code ne trouve aucune demande ouverte avec cet ID et le supprime silencieusement.588* **L'ID est incorrect** : votre serveur émet un verdict, mais Claude Code ne trouve aucune requête ouverte avec cet ID et l'abandonne silencieusement.

589* **L'ID a été utilisé par une demande précédente** : votre serveur émet un verdict avec l'ID de la requête, mais une demande précédente de la session avait le même ID. Dès qu'un ID se répète, Claude Code abandonne tout verdict de canal qui le porte, afin qu'une réponse destinée à une demande ne puisse pas approuver l'autre. Un ID étant composé de cinq lettres aléatoires, une répétition est rare. Répondez plutôt au terminal.

589 590 

590### Exemple complet591### Exemple complet

591 592 

592Le `webhook.ts` assemblé ci-dessous combine les trois extensions de cette page : l'outil de réponse, le contrôle de l'expéditeur et le relais de permission. Si vous commencez ici, vous aurez également besoin de la [configuration du projet et de l'entrée `.mcp.json`](#example-build-a-webhook-receiver) de la procédure pas à pas initiale.593Le fichier `webhook.ts` assemblé ci-dessous combine les trois extensions de cette page : l'outil de réponse, le filtrage des expéditeurs et le relais des permissions. Si vous commencez ici, vous aurez également besoin de la [configuration du projet et de l'entrée `.mcp.json`](#example-build-a-webhook-receiver) du guide initial.

593 594 

594Pour rendre les deux directions testables à partir de curl, l'écouteur HTTP sert deux chemins :595Pour que les deux directions puissent être testées avec curl, l'écouteur HTTP sert deux chemins :

595 596 

596* **`GET /events`** : maintient un flux SSE ouvert et envoie chaque message sortant en tant que ligne `data:`, donc `curl -N` peut regarder les réponses et les invites de permission de Claude arriver en direct.597* **`GET /events`** : maintient un flux SSE ouvert et envoie chaque message sortant sous forme de ligne `data:`, afin que `curl -N` puisse observer en direct l'arrivée des réponses de Claude et des demandes de permission.

597* **`POST /`** : le côté entrant, le même gestionnaire qu'avant, maintenant avec la vérification du format du verdict insérée avant la branche de transmission de chat.598* **`POST /`** : le côté entrant, le même gestionnaire que précédemment, avec désormais la vérification du format de verdict insérée avant la branche de transmission du chat.

598 599 

599```ts title="webhook.ts complet avec relais de permission" expandable theme={null}600```ts title="Full webhook.ts with permission relay" expandable theme={null}

600#!/usr/bin/env bun601#!/usr/bin/env bun

601import { Server } from '@modelcontextprotocol/sdk/server/index.js'602import { Server } from '@modelcontextprotocol/sdk/server/index.js'

602import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'603import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

603import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'604import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

604import { z } from 'zod'605import { z } from 'zod'

605 606 

606// --- Sortant : écrire à n'importe quel écouteur curl -N sur /events ---607// --- Outbound: write to any curl -N listeners on /events ---

607// Un vrai pont enverrait un POST à votre plateforme de chat à la place.608// A real bridge would POST to your chat platform instead.

608const listeners = new Set<(chunk: string) => void>()609const listeners = new Set<(chunk: string) => void>()

609function send(text: string) {610function send(text: string) {

610 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'611 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'

611 for (const emit of listeners) emit(chunk)612 for (const emit of listeners) emit(chunk)

612}613}

613 614 

614// Liste d'approbation de l'expéditeur. Pour la procédure pas à pas locale nous faisons confiance à la valeur d'en-tête X-Sender unique615// Sender allowlist. For the local walkthrough we trust the single X-Sender

615// "dev" ; un vrai pont vérifierait l'ID utilisateur de la plateforme.616// header value "dev"; a real bridge would check the platform's user ID.

616const allowed = new Set(['dev'])617const allowed = new Set(['dev'])

617 618 

618const mcp = new Server(619const mcp = new Server(


621 capabilities: {622 capabilities: {

622 experimental: {623 experimental: {

623 'claude/channel': {},624 'claude/channel': {},

624 'claude/channel/permission': {}, // opter pour le relais de permission625 'claude/channel/permission': {}, // opt in to permission relay

625 },626 },

626 tools: {},627 tools: {},

627 },628 },

628 instructions:629 instructions:

629 'Les messages arrivent sous la forme <channel source="webhook" chat_id="...">. ' +630 'Messages arrive as <channel source="webhook" chat_id="...">. ' +

630 'Répondez avec l\'outil de réponse, en passant le chat_id de la balise.',631 'Reply with the reply tool, passing the chat_id from the tag.',

631 },632 },

632)633)

633 634 

634// --- outil de réponse : Claude appelle ceci pour envoyer un message en retour ---635// --- reply tool: Claude calls this to send a message back ---

635mcp.setRequestHandler(ListToolsRequestSchema, async () => ({636mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

636 tools: [{637 tools: [{

637 name: 'reply',638 name: 'reply',

638 description: 'Envoyer un message en retour sur ce canal',639 description: 'Send a message back over this channel',

639 inputSchema: {640 inputSchema: {

640 type: 'object',641 type: 'object',

641 properties: {642 properties: {

642 chat_id: { type: 'string', description: 'La conversation dans laquelle répondre' },643 chat_id: { type: 'string', description: 'The conversation to reply in' },

643 text: { type: 'string', description: 'Le message à envoyer' },644 text: { type: 'string', description: 'The message to send' },

644 },645 },

645 required: ['chat_id', 'text'],646 required: ['chat_id', 'text'],

646 },647 },


656 throw new Error(`unknown tool: ${req.params.name}`)657 throw new Error(`unknown tool: ${req.params.name}`)

657})658})

658 659 

659// --- relais de permission : Claude Code (pas Claude) appelle ceci quand une boîte de dialogue s'ouvre660// --- permission relay: Claude Code (not Claude) calls this when a dialog opens

660const PermissionRequestSchema = z.object({661const PermissionRequestSchema = z.object({

661 method: z.literal('notifications/claude/channel/permission_request'),662 method: z.literal('notifications/claude/channel/permission_request'),

662 params: z.object({663 params: z.object({


677 678 

678await mcp.connect(new StdioServerTransport())679await mcp.connect(new StdioServerTransport())

679 680 

680// --- HTTP sur :8788 : GET /events diffuse la sortie, POST route l'entrée ---681// --- HTTP on :8788: GET /events streams outbound, POST routes inbound ---

681const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i682const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

682let nextId = 1683let nextId = 1

683 684 

684Bun.serve({685Bun.serve({

685 port: 8788,686 port: 8788,

686 hostname: '127.0.0.1',687 hostname: '127.0.0.1',

687 idleTimeout: 0, // ne pas fermer les flux SSE inactifs688 idleTimeout: 0, // don't close idle SSE streams

688 async fetch(req) {689 async fetch(req) {

689 const url = new URL(req.url)690 const url = new URL(req.url)

690 691 

691 // GET /events : flux SSE afin que curl -N puisse regarder les réponses et les invites en direct692 // GET /events: SSE stream so curl -N can watch replies and prompts live

692 if (req.method === 'GET' && url.pathname === '/events') {693 if (req.method === 'GET' && url.pathname === '/events') {

693 const stream = new ReadableStream({694 const stream = new ReadableStream({

694 start(ctrl) {695 start(ctrl) {

695 ctrl.enqueue(': connected\n\n') // afin que curl affiche quelque chose immédiatement696 ctrl.enqueue(': connected\n\n') // so curl shows something immediately

696 const emit = (chunk: string) => ctrl.enqueue(chunk)697 const emit = (chunk: string) => ctrl.enqueue(chunk)

697 listeners.add(emit)698 listeners.add(emit)

698 req.signal.addEventListener('abort', () => listeners.delete(emit))699 req.signal.addEventListener('abort', () => listeners.delete(emit))


703 })704 })

704 }705 }

705 706 

706 // tout le reste est entrant : contrôler sur l'expéditeur d'abord707 // everything else is inbound: gate on sender first

707 const body = await req.text()708 const body = await req.text()

708 const sender = req.headers.get('X-Sender') ?? ''709 const sender = req.headers.get('X-Sender') ?? ''

709 if (!allowed.has(sender)) return new Response('forbidden', { status: 403 })710 if (!allowed.has(sender)) return new Response('forbidden', { status: 403 })

710 711 

711 // vérifier le format du verdict avant de traiter comme chat712 // check for verdict format before treating as chat

712 const m = PERMISSION_REPLY_RE.exec(body)713 const m = PERMISSION_REPLY_RE.exec(body)

713 if (m) {714 if (m) {

714 await mcp.notification({715 await mcp.notification({


721 return new Response('verdict recorded')722 return new Response('verdict recorded')

722 }723 }

723 724 

724 // chat normal : transmettre à Claude en tant qu'événement de canal725 // normal chat: forward to Claude as a channel event

725 const chat_id = String(nextId++)726 const chat_id = String(nextId++)

726 await mcp.notification({727 await mcp.notification({

727 method: 'notifications/claude/channel',728 method: 'notifications/claude/channel',


732})733})

733```734```

734 735 

735Testez le chemin du verdict dans trois terminaux. Le premier est votre session Claude Code, démarrée avec le [drapeau de développement](#test-during-the-research-preview) afin qu'elle lance `webhook.ts` :736Testez le chemin du verdict dans trois terminaux. Le premier est votre session Claude Code, démarrée avec le [flag de développement](#test-during-the-research-preview) afin qu'elle lance `webhook.ts` :

736 737 

737```bash theme={null}738```bash theme={null}

738claude --dangerously-load-development-channels server:webhook739claude --dangerously-load-development-channels server:webhook

739```740```

740 741 

741Cette procédure pas à pas teste la boîte de dialogue de permission elle-même, donc une fois la session ouverte, appuyez sur `Shift+Tab` jusqu'à ce que la barre d'état affiche `⏸ manual mode on`. En mode auto le classificateur déciderait l'appel `reply` à votre place, et aucune boîte de dialogue ne s'ouvrirait pour que le côté distant réponde.742Ce guide teste la boîte de dialogue de permission elle-même ; une fois la session ouverte, appuyez donc sur `Shift+Tab` jusqu'à ce que la barre d'état affiche `⏸ manual mode on`. En mode auto, le classifieur déciderait de l'appel `reply` à votre place, et aucune boîte de dialogue ne s'ouvrirait pour que le côté distant y réponde.

742 743 

743Dans le second, diffusez le côté sortant afin que vous puissiez voir les réponses de Claude et toutes les invites de permission au fur et à mesure qu'elles se déclenchent :744Dans le deuxième, diffusez le côté sortant afin de voir les réponses de Claude et les éventuelles demandes de permission au moment où elles se déclenchent :

744 745 

745```bash theme={null}746```bash theme={null}

746curl -N localhost:8788/events747curl -N localhost:8788/events

747```748```

748 749 

749Dans le troisième, envoyez un message qui fera que Claude essaiera d'exécuter une commande :750Dans le troisième, envoyez un message qui amènera Claude à essayer d'exécuter une commande :

750 751 

751```bash theme={null}752```bash theme={null}

752curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788753curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788

753```754```

754 755 

755L'énumération de fichiers est en lecture seule, donc Claude l'exécute sans approbation. La boîte de dialogue de permission s'ouvre quand Claude appelle l'outil `reply` pour envoyer sa réponse en retour. La boîte de dialogue locale s'ouvre dans votre terminal Claude Code, et un moment plus tard l'invite pour `mcp__webhook__reply` apparaît dans le flux `/events`, y compris l'ID à cinq lettres. Approuvez-le du côté distant :756Lister des fichiers est une opération en lecture seule, donc Claude l'exécute sans approbation. La boîte de dialogue de permission s'ouvre lorsque Claude appelle l'outil `reply` pour renvoyer sa réponse. La boîte de dialogue locale s'ouvre dans votre terminal Claude Code et, un instant plus tard, la demande pour `mcp__webhook__reply` apparaît dans le flux `/events`, avec l'ID à cinq lettres. Approuvez-la depuis le côté distant :

756 757 

757```bash theme={null}758```bash theme={null}

758curl -d "yes <id>" -H "X-Sender: dev" localhost:8788759curl -d "yes <id>" -H "X-Sender: dev" localhost:8788

759```760```

760 761 

761La boîte de dialogue locale se ferme, l'outil `reply` s'exécute, et la réponse de Claude atterrit dans le flux.762La boîte de dialogue locale se ferme, l'outil `reply` s'exécute et la réponse de Claude apparaît dans le flux.

762 763 

763Les trois pièces spécifiques au canal dans ce fichier :764Les trois éléments propres aux canaux dans ce fichier :

764 765 

765* **Capacités** dans le constructeur `Server` : `claude/channel` enregistre l'écouteur de notification, `claude/channel/permission` opte pour le relais de permission, `tools` laisse Claude découvrir l'outil de réponse.766* **Capacités** dans le constructeur `Server` : `claude/channel` enregistre l'écouteur de notifications, `claude/channel/permission` active le relais des permissions, `tools` permet à Claude de découvrir l'outil de réponse.

766* **Chemins sortants** : le gestionnaire de l'outil `reply` est ce que Claude appelle pour les réponses conversationnelles ; le gestionnaire de notification `PermissionRequestSchema` est ce que Claude Code appelle quand une boîte de dialogue de permission s'ouvre. Les deux appellent `send()` pour diffuser sur `/events`, mais ils sont déclenchés par différentes parties du système.767* **Chemins sortants** : le gestionnaire de l'outil `reply` est ce que Claude appelle pour les réponses conversationnelles ; le gestionnaire de notification `PermissionRequestSchema` est ce que Claude Code appelle lorsqu'une boîte de dialogue de permission s'ouvre. Tous deux appellent `send()` pour diffuser via `/events`, mais ils sont déclenchés par des parties différentes du système.

767* **Gestionnaire HTTP** : `GET /events` maintient un flux SSE ouvert afin que curl puisse regarder la sortie en direct ; `POST` est entrant, contrôlé sur l'en-tête `X-Sender`. Un corps `yes <id>` ou `no <id>` va à Claude Code en tant que notification de verdict et n'atteint jamais Claude ; tout le reste est transmis à Claude en tant qu'événement de canal.768* **Gestionnaire HTTP** : `GET /events` maintient un flux SSE ouvert afin que curl puisse observer le sortant en direct ; `POST` est le côté entrant, filtré selon l'en-tête `X-Sender`. Un corps `yes <id>` ou `no <id>` est envoyé à Claude Code sous forme de notification de verdict et n'atteint jamais Claude ; tout le reste est transmis à Claude sous forme d'événement de canal.

768 769 

769## Empaqueter en tant que plugin770## Empaqueter en tant que plugin

770 771 

Details

90 90 

91### Les messages envoyés en cours de tour ne sont pas checkpointés91### Les messages envoyés en cours de tour ne sont pas checkpointés

92 92 

93Dans le menu de rembobinage, un message que vous [avez saisi pendant que Claude travaillait encore](https://code.claude.com/docs/fr/interactive-mode.md#queue-messages-while-claude-works) peut être marqué **No code restore**. Claude a lu ce message avant la fin de son tour. [Les checkpoints sont créés pour les prompts qui démarrent un tour](#how-checkpoints-work), ce message n'a donc pas de checkpoint propre. Les modifications que Claude a apportées après l'avoir lu sont rattachées au prompt qui a démarré le tour.93Dans le menu de rembobinage, un message que vous [avez saisi pendant que Claude travaillait encore](https://code.claude.com/docs/fr/interactive-mode.md#queue-messages-while-claude-works) peut être marqué **No code restore**. Le message marqué n'a pas de [checkpoint](#how-checkpoints-work) propre.

94 94 

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

96 96 

97### Les chemins symlinked et hard-linked ne sont pas restaurés97### Les chemins symlinked et hard-linked ne sont pas restaurés

98 98 

Details

98 98 

99Les avertissements et le pourcentage proviennent des en-têtes `anthropic-ratelimit-unified-*`, que la passerelle ajoute à chaque réponse `/v1/messages` réussie pour un développeur qui a une limite. Les en-têtes décrivent toujours la limite propre du développeur : la passerelle supprime les en-têtes de limite de débit du fournisseur amont, qui décrivent votre quota partagé, et ne les transmet jamais.99Les avertissements et le pourcentage proviennent des en-têtes `anthropic-ratelimit-unified-*`, que la passerelle ajoute à chaque réponse `/v1/messages` réussie pour un développeur qui a une limite. Les en-têtes décrivent toujours la limite propre du développeur : la passerelle supprime les en-têtes de limite de débit du fournisseur amont, qui décrivent votre quota partagé, et ne les transmet jamais.

100 100 

101Les dépenses que voit un développeur correspondent à la propre [estimation](#how-requests-are-priced) de la passerelle, le même chiffre avec lequel elle applique la limite, et non à un montant issu de la facture de votre fournisseur. Claude Code lit les montants en dollars via une requête distincte à la passerelle. Si vous définissez `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` sur les machines des développeurs, comme le suggère [Posture de conformité](https://code.claude.com/docs/fr/claude-apps-gateway-deploy.md#compliance-posture), Claude Code ignore cette requête. Avec cette variable définie, ou avec un serveur de passerelle antérieur à v2.1.284, la barre et la barre de statut restent limitées au pourcentage.101Les dépenses que voit un développeur correspondent à la propre [estimation](#how-requests-are-priced) de la passerelle, le même chiffre avec lequel elle applique la limite. Il ne s'agit pas d'un montant issu de la facture de votre fournisseur. Claude Code lit les montants en dollars via une requête distincte à la passerelle, qu'il envoie même si vous définissez `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` sur les machines des développeurs. Avant v2.1.295, Claude Code ignorait cette requête lorsque la variable était définie, et `/usage` ainsi que la barre de statut affichaient le pourcentage et la date de réinitialisation, sans montants en dollars.

102 102 

103## Référence de l'API Admin103## Référence de l'API Admin

104 104 

Details

18 18 

19* **Navigateur** : [claude.ai/code](https://claude.ai/code), également appelé Claude Code sur le web19* **Navigateur** : [claude.ai/code](https://claude.ai/code), également appelé Claude Code sur le web

20* **Mobile** : l'onglet **Code** dans l'[application Claude](https://code.claude.com/docs/fr/mobile.md)20* **Mobile** : l'onglet **Code** dans l'[application Claude](https://code.claude.com/docs/fr/mobile.md)

21* **Application de bureau** : sélectionnez **Cloud** au lieu de **Local** lorsque vous [démarrez une session](https://code.claude.com/docs/fr/desktop.md#run-long-running-tasks-in-the-cloud)21* **Application de bureau** : sélectionnez un environnement sous **Cloud** dans le sélecteur d'environnement lorsque vous [démarrez une session](https://code.claude.com/docs/fr/desktop.md#run-long-running-tasks-in-the-cloud)

22* **Terminal** : [`claude --cloud`](#from-terminal-to-cloud)22* **Terminal** : [`claude --cloud`](#from-terminal-to-cloud)

23* **Tâches planifiées cloud** : les [exécutions planifiées et déclenchées](https://code.claude.com/docs/fr/routines.md) s'exécutent chacune en tant que session cloud23* **Tâches planifiées cloud** : les [exécutions planifiées et déclenchées](https://code.claude.com/docs/fr/routines.md) s'exécutent chacune en tant que session cloud

24 24 


247 247 

248### Examiner les modifications248### Examiner les modifications

249 249 

250Chaque session affiche un indicateur de diff avec les lignes ajoutées et supprimées, comme `+42 -18`. Sélectionnez-le pour ouvrir la vue diff, laisser des commentaires en ligne sur des lignes spécifiques et les envoyer à Claude avec votre prochain message.250Une fois que Claude a poussé ses modifications vers une branche, la carte **Modifications** dans le panneau à côté du chat affiche les lignes ajoutées et supprimées, comme `+42 -18`. Cliquez sur le nombre de lignes de la carte **Modifications** pour ouvrir la vue diff.

251 251 

252La vue diff compare les modifications de la session par rapport à sa branche de base par défaut. Pour comparer avec n'importe quelle autre branche du dépôt, sélectionnez **Comparer avec** et choisissez-en une.252* Vous pouvez également cliquer sur **Modifications** dans la barre de titre de la session, ou dans le menu **⋮** de cette barre.

253* Pour afficher le panneau lorsqu'il est masqué, cliquez sur l'icône **Afficher le rail de session** dans la barre de titre de la session, ou dans le menu **⋮** de cette barre.

254 

255Dans la vue diff, vous pouvez commenter des lignes et comparer avec une autre branche :

256 

257* **Commenter** : laissez des commentaires en ligne sur des lignes spécifiques, puis envoyez-les à Claude avec votre prochain message

258* **Comparer** : la vue diff compare les modifications de la session par rapport à sa branche de base par défaut. Pour comparer avec n'importe quelle autre branche du dépôt, sélectionnez **Comparer avec** et choisissez-en une

253 259 

254Claude Code calcule ces diffs à partir du contenu brut des blobs git, de sorte que les pilotes diff et les filtres `textconv` configurés dans le dépôt ne s'appliquent pas.260Claude Code calcule ces diffs à partir du contenu brut des blobs git, de sorte que les pilotes diff et les filtres `textconv` configurés dans le dépôt ne s'appliquent pas.

255 261 


313 319 

314### Archiver les sessions320### Archiver les sessions

315 321 

316Vous pouvez archiver les sessions pour garder votre liste de sessions organisée. Les sessions archivées sont masquées de la liste de sessions par défaut mais peuvent être visualisées en filtrant les sessions archivées.322Archivez une session pour la retirer de la liste des sessions de la barre latérale. Pour archiver une session, survolez-la dans la barre latérale, ouvrez son menu **⋯** et sélectionnez **Archiver**.

317 323 

318Pour archiver une session, survolez la session dans la barre latérale et sélectionnez l'icône d'archive.324#### Retrouver une session archivée

325 

326Pour voir vos sessions archivées, accédez à [claude.ai/code/sessions](https://claude.ai/code/sessions) et ouvrez l'onglet **Archivées**. Pour remettre une session dans la liste des sessions de la barre latérale, survolez-la dans cet onglet, ouvrez son menu **⋮** et sélectionnez **Désarchiver**.

319 327 

320### Supprimer les sessions328### Supprimer les sessions

321 329 

322La suppression d'une session supprime définitivement la session et ses données. Cette action ne peut pas être annulée. Vous pouvez supprimer une session de deux façons :330La suppression d'une session supprime définitivement la session et ses données. Cette action ne peut pas être annulée. Supprimez une session à partir de la barre latérale, du menu de session, ou de l'onglet **Archivées** si vous l'avez déjà archivée :

323 331 

324* **À partir de la barre latérale** : filtrez les sessions archivées, puis survolez la session que vous souhaitez supprimer et sélectionnez l'icône de suppression332* **À partir de la barre latérale** : survolez la session, ouvrez son menu **⋯** et sélectionnez **Supprimer**

325* **À partir du menu de session** : ouvrez une session, sélectionnez la liste déroulante à côté du titre de la session, et sélectionnez **Supprimer**333* **À partir du menu de session** : ouvrez une session, sélectionnez la liste déroulante à côté du titre de la session, et sélectionnez **Supprimer**

334* **À partir de l'onglet Archivées** : survolez la session dans l'[onglet **Archivées**](#find-an-archived-session), ouvrez son menu **⋮** et sélectionnez **Supprimer**

326 335 

327Vous serez invité à confirmer avant la suppression d'une session.336Vous serez invité à confirmer avant la suppression d'une session.

328 337 


336 345 

337Il existe plusieurs façons d'activer auto-fix selon d'où provient la PR et quel appareil vous utilisez :346Il existe plusieurs façons d'activer auto-fix selon d'où provient la PR et quel appareil vous utilisez :

338 347 

339* **PR créées dans une session cloud** : ouvrez la session sur claude.ai/code, ouvrez la barre d'état CI et sélectionnez **Auto-fix**348* **PR créées dans une session cloud** : ouvrez la session sur claude.ai/code et trouvez la pull request dans la [carte **Changes**](#review-changes). Ouvrez le menu **⋮** à côté du titre de la pull request et activez **Auto-fix**

340* **À partir de votre terminal** : exécutez [`/autofix-pr`](https://code.claude.com/docs/fr/commands) sur la branche de la PR. Claude Code détecte la PR ouverte avec `gh`, génère une session cloud et active auto-fix en une seule étape349* **À partir de votre terminal** : exécutez [`/autofix-pr`](https://code.claude.com/docs/fr/commands) sur la branche de la PR. Claude Code détecte la PR ouverte avec `gh`, génère une session cloud et active auto-fix en une seule étape

341* **À partir de l'application mobile** : dites à Claude de corriger automatiquement la PR, par exemple « regardez cette PR et corrigez les défaillances CI ou les commentaires d'examen »350* **À partir de l'application mobile** : dites à Claude de corriger automatiquement la PR, par exemple « regardez cette PR et corrigez les défaillances CI ou les commentaires d'examen »

342* **N'importe quelle PR existante** : collez l'URL de la PR dans une session et dites à Claude de la corriger automatiquement351* **N'importe quelle PR existante** : collez l'URL de la PR dans une session et dites à Claude de la corriger automatiquement

343 352 

344Auto-fix est un bouton bascule par PR. Pour arrêter la surveillance, ouvrez la barre d'état CI dans la session sur claude.ai/code et désactivez le bouton bascule **Auto-fix**, ou dites à Claude d'arrêter de surveiller la PR.353Pour arrêter la surveillance, désactivez **Auto-fix** dans le menu **⋮** de la pull request, dans la [carte **Changes**](#review-changes) de la session, ou dites à Claude d'arrêter de surveiller la PR.

345 354 

346### Comment Claude répond à l'activité PR355### Comment Claude répond à l'activité PR

347 356 


381* Réessayez après une minute, car la capacité est mise en service à la demande390* Réessayez après une minute, car la capacité est mise en service à la demande

382* Confirmez que votre connexion GitHub peut atteindre le référentiel en suivant [Aucun référentiel n'apparaît après la connexion à GitHub](https://code.claude.com/docs/fr/web-quickstart.md#no-repositories-appear-after-connecting-github)391* Confirmez que votre connexion GitHub peut atteindre le référentiel en suivant [Aucun référentiel n'apparaît après la connexion à GitHub](https://code.claude.com/docs/fr/web-quickstart.md#no-repositories-appear-after-connecting-github)

383 392 

393### Your new session couldn't start

394 

395Votre prompt est revenu dans la zone à partir de laquelle vous l'avez envoyé.

396 

397* **Connexion perdue** : vérifiez votre connexion internet ainsi que tout VPN ou proxy que vous utilisez, puis renvoyez votre prompt

398* **Erreur serveur** : patientez un instant, puis renvoyez votre prompt. Si la notification réapparaît, consultez [status.claude.com](https://status.claude.com)

399 

400### Can't rewind to this message

401 

402**Rewind to here** échoue avec cette erreur sur tout message autre que le plus récent lorsque votre session s'exécute sur un [runner auto-hébergé](https://code.claude.com/docs/fr/self-hosted-environments) avec une version de Claude Code antérieure à la v2.1.246. Demandez à la personne qui gère les runners de votre organisation de [les mettre à niveau](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#pin-the-version).

403 

384### Impossible d'obtenir l'UUID de l'organisation404### Impossible d'obtenir l'UUID de l'organisation

385 405 

386`claude --cloud` et `claude --teleport` nécessitent une connexion avec un compte claude.ai. Si vous vous authentifiez avec une clé API, ou si vos détails de compte stockés sont obsolètes, vous voyez l'un des messages suivants :406`claude --cloud` et `claude --teleport` nécessitent une connexion avec un compte claude.ai. Si vous vous authentifiez avec une clé API, ou si vos détails de compte stockés sont obsolètes, vous voyez l'un des messages suivants :

Details

111 111 

112Le projet est maintenant listé sous **Projects** dans la barre latérale, et sa conversation est ouverte. [Votre premier lot](#your-first-batch) couvre ce qu'il faut configurer avant de lui envoyer du travail.112Le projet est maintenant listé sous **Projects** dans la barre latérale, et sa conversation est ouverte. [Votre premier lot](#your-first-batch) couvre ce qu'il faut configurer avant de lui envoyer du travail.

113 113 

114### Démarrer à partir d'une session cloud existante114### Démarrer à partir d'une session existante

115 115 

116Si une session cloud que vous avez démarrée vous-même effectue un travail qui a sa place dans un projet, ouvrez son menu dans la barre latérale et choisissez **Move to project**, puis faites votre choix dans le sous-menu :116Si une session cloud que vous avez démarrée vous-même effectue un travail qui a sa place dans un projet, ouvrez son menu dans la barre latérale et choisissez **Move to project**, puis faites votre choix dans le sous-menu :

117 117 


120 120 

121Une bannière **Set up project** peut également apparaître au-dessus de la boîte de message d'une session cloud. Si vous l'utilisez à la place de **Continue as new project**, le résultat est le même, sauf que le tour en cours de la session s'arrête une fois que le projet s'ouvre.121Une bannière **Set up project** peut également apparaître au-dessus de la boîte de message d'une session cloud. Si vous l'utilisez à la place de **Continue as new project**, le résultat est le même, sauf que le tour en cours de la session s'arrête une fois que le projet s'ouvre.

122 122 

123Une session locale n'a pas ces options. Pour continuer son travail dans un projet, décrivez le travail dans la conversation du projet, ou poussez sa branche, ajoutez ce référentiel au projet et nommez la branche dans la tâche.123Une session sur votre propre machine obtient le même menu de barre latérale sur claude.ai/code une fois que vous la connectez via [Remote Control](https://code.claude.com/docs/fr/remote-control.md#start-a-remote-control-session). Depuis un projet, Claude ne peut pas lire la transcription d'une session qui s'est connectée alors que [**Require trusted devices**](https://code.claude.com/docs/fr/remote-control.md#trusted-devices) était activé pour votre compte. Si ce paramètre est désactivé :

124 

1251. Si la session n'est pas encore connectée, exécutez `/remote-control` dans celle-ci. Si elle s'est connectée alors que ce paramètre était activé, déconnectez-la et reconnectez-la d'abord.

1262. Dans un navigateur, trouvez la ligne de la session dans la barre latérale sur [claude.ai/code](https://claude.ai/code), ouvrez son menu et faites votre choix dans le même sous-menu.

127 

128Si **Require trusted devices** est activé, ou si vous n'utilisez pas Remote Control, décrivez vous-même le travail dans la conversation du projet. Ou poussez la branche de la session, ajoutez son dépôt au projet et indiquez à Claude le nom de la branche.

124 129 

125### Configurer l'accès GitHub130### Configurer l'accès GitHub

126 131 


425* **Sessions cloud** : chaque thread est une [session cloud](https://code.claude.com/docs/fr/claude-code-on-the-web.md) sauf si vous demandez à Claude de l'exécuter sur votre machine. De toute façon, Claude la démarre et la suit au lieu de vous. Vous pouvez également intégrer à un projet le travail d'une session cloud que vous avez démarrée vous-même : choisissez [**Move to project**](#start-from-an-existing-cloud-session) dans le menu de la barre latérale de cette session.430* **Sessions cloud** : chaque thread est une [session cloud](https://code.claude.com/docs/fr/claude-code-on-the-web.md) sauf si vous demandez à Claude de l'exécuter sur votre machine. De toute façon, Claude la démarre et la suit au lieu de vous. Vous pouvez également intégrer à un projet le travail d'une session cloud que vous avez démarrée vous-même : choisissez [**Move to project**](#start-from-an-existing-cloud-session) dans le menu de la barre latérale de cette session.

426* **Tâches planifiées** : quand vous demandez du travail planifié dans un projet, Claude crée une [tâche planifiée cloud](https://code.claude.com/docs/fr/routines.md) qui s'exécute en tant que threads dans ce projet et apparaît sur son onglet **Scheduled tasks**. Les tâches planifiées que vous créez en dehors d'un projet continuent à fonctionner seules.431* **Tâches planifiées** : quand vous demandez du travail planifié dans un projet, Claude crée une [tâche planifiée cloud](https://code.claude.com/docs/fr/routines.md) qui s'exécute en tant que threads dans ce projet et apparaît sur son onglet **Scheduled tasks**. Les tâches planifiées que vous créez en dehors d'un projet continuent à fonctionner seules.

427* **Remote Control** : [Remote Control](https://code.claude.com/docs/fr/remote-control.md) connecte claude.ai à une session Claude Code s'exécutant sur votre machine. Quand vous demandez à Claude dans un projet d'exécuter un thread sur votre ordinateur, le projet [utilise Remote Control pour le faire](#run-a-thread-on-your-own-computer).432* **Remote Control** : [Remote Control](https://code.claude.com/docs/fr/remote-control.md) connecte claude.ai à une session Claude Code s'exécutant sur votre machine. Quand vous demandez à Claude dans un projet d'exécuter un thread sur votre ordinateur, le projet [utilise Remote Control pour le faire](#run-a-thread-on-your-own-computer).

428* **Sessions locales et agent view** : une session que vous démarrez vous-même dans votre terminal, IDE ou l'environnement local de l'application de bureau ne peut pas être ajoutée à un projet. [Agent view](https://code.claude.com/docs/fr/agent-view.md) est un écran pour suivre plusieurs sessions locales côte à côte, et vous démarrez toujours chacune et lui donnez sa tâche vous-même.433* **Sessions locales et agent view** : une session que vous démarrez vous-même dans votre terminal, IDE ou l'environnement local de l'application de bureau reste en dehors de vos projets, mais vous pouvez [intégrer son travail à l'un d'eux](#start-from-an-existing-cloud-session). [Agent view](https://code.claude.com/docs/fr/agent-view.md) est un écran pour suivre plusieurs sessions locales côte à côte, et vous démarrez toujours chacune et lui donnez sa tâche vous-même.

429* **Worktrees** : un [worktree](https://code.claude.com/docs/fr/worktrees.md) donne à chaque session locale sa propre copie de travail d'un dépôt. Les threads cloud n'en ont pas besoin : chacun clone ses dépôts dans son propre sandbox cloud et travaille sur sa propre branche.434* **Worktrees** : un [worktree](https://code.claude.com/docs/fr/worktrees.md) donne à chaque session locale sa propre copie de travail d'un dépôt. Les threads cloud n'en ont pas besoin : chacun clone ses dépôts dans son propre sandbox cloud et travaille sur sa propre branche.

430* **Équipes d'agents** : une [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md) est une session qui démarre des sessions de coéquipiers pour une seule tâche, sur votre machine ou à l'intérieur d'une session cloud, et se termine avec cette tâche.435* **Équipes d'agents** : une [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md) est une session qui démarre des sessions de coéquipiers pour une seule tâche, sur votre machine ou à l'intérieur d'une session cloud, et se termine avec cette tâche.

431* **Subagents** : un [subagent](https://code.claude.com/docs/fr/sub-agents.md) s'exécute à l'intérieur d'une session, effectue une tâche secondaire dans sa propre fenêtre de contexte, et retourne un résumé à cette session. Les threads d'un projet sont des sessions complètes que Claude démarre et qui rendent compte à la conversation du projet, et un thread peut toujours utiliser des subagents pour ses propres tâches secondaires.436* **Subagents** : un [subagent](https://code.claude.com/docs/fr/sub-agents.md) s'exécute à l'intérieur d'une session, effectue une tâche secondaire dans sa propre fenêtre de contexte, et retourne un résumé à cette session. Les threads d'un projet sont des sessions complètes que Claude démarre et qui rendent compte à la conversation du projet, et un thread peut toujours utiliser des subagents pour ses propres tâches secondaires.


437 442 

438* Les projets sont disponibles à claude.ai/code, dans l'application de bureau et dans l'application mobile Claude, pas dans le CLI du terminal, l'extension VS Code ou le plugin JetBrains, et pas via Amazon Bedrock, la plateforme d'agents de Google Cloud ou Microsoft Foundry.443* Les projets sont disponibles à claude.ai/code, dans l'application de bureau et dans l'application mobile Claude, pas dans le CLI du terminal, l'extension VS Code ou le plugin JetBrains, et pas via Amazon Bedrock, la plateforme d'agents de Google Cloud ou Microsoft Foundry.

439* Les threads du projet sont des [sessions cloud](https://code.claude.com/docs/fr/claude-code-on-the-web.md), ou des sessions sur votre propre machine via [Remote Control](https://code.claude.com/docs/fr/remote-control.md), avec Anthropic comme fournisseur de modèle dans les deux cas. [Sécurité](https://code.claude.com/docs/fr/security.md) et [Utilisation des données](https://code.claude.com/docs/fr/data-usage.md) couvrent comment les sessions cloud sont isolées et ce qui est conservé, et [Connexion et sécurité](https://code.claude.com/docs/fr/remote-control.md#connection-and-security) couvre comment un thread sur votre machine se connecte et ce qui est stocké.444* Les threads du projet sont des [sessions cloud](https://code.claude.com/docs/fr/claude-code-on-the-web.md), ou des sessions sur votre propre machine via [Remote Control](https://code.claude.com/docs/fr/remote-control.md), avec Anthropic comme fournisseur de modèle dans les deux cas. [Sécurité](https://code.claude.com/docs/fr/security.md) et [Utilisation des données](https://code.claude.com/docs/fr/data-usage.md) couvrent comment les sessions cloud sont isolées et ce qui est conservé, et [Connexion et sécurité](https://code.claude.com/docs/fr/remote-control.md#connection-and-security) couvre comment un thread sur votre machine se connecte et ce qui est stocké.

440* Vous ne pouvez pas ajouter une session que vous avez démarrée vous-même sur votre machine à un projet. Un projet atteint votre machine uniquement en [exécutant un thread là-bas via Remote Control](#run-a-thread-on-your-own-computer), et cette section énumère ce dont il a besoin.445* Vous ne pouvez pas ajouter une session que vous avez démarrée vous-même sur votre machine à un projet, mais vous pouvez [intégrer son travail dans un projet](#start-from-an-existing-cloud-session). Un projet atteint votre machine en [exécutant un thread là-bas via Remote Control](#run-a-thread-on-your-own-computer), et cette section énumère ce dont il a besoin.

441* Le sandbox d'un thread cloud se met en pause entre les tours et reprend quand le thread continue. Si le sandbox ne peut pas être repris, le thread continue à partir d'un clone frais, donc les modifications non validées peuvent être perdues. Sur les tâches longues, demandez à Claude de valider et de pousser le travail en cours.446* Le sandbox d'un thread cloud se met en pause entre les tours et reprend quand le thread continue. Si le sandbox ne peut pas être repris, le thread continue à partir d'un clone frais, donc les modifications non validées peuvent être perdues. Sur les tâches longues, demandez à Claude de valider et de pousser le travail en cours.

442* Un projet appartient à un utilisateur. Vous ne pouvez pas partager un projet ou ses threads avec un autre utilisateur, et les transcriptions de threads n'ont pas l'option de partage que les autres sessions cloud ont. Il n'y a pas de contrôles au niveau de l'organisation pour les projets pendant la bêta.447* Un projet appartient à un utilisateur. Vous ne pouvez pas partager un projet ou ses threads avec un autre utilisateur, et les transcriptions de threads n'ont pas l'option de partage que les autres sessions cloud ont. Il n'y a pas de contrôles au niveau de l'organisation pour les projets pendant la bêta.

443* Un thread appartient au seul projet qui l'a démarré. Vous ne pouvez pas déplacer ou copier un thread vers un autre projet, ou le déplacer pour qu'il soit seul. [**Move to project**](#start-from-an-existing-cloud-session) va seulement dans l'autre sens : il apporte le travail d'une session cloud dans un projet. Vous ne pouvez pas fusionner deux projets en un.448* Un thread appartient au seul projet qui l'a démarré. Vous ne pouvez pas déplacer ou copier un thread vers un autre projet, ou le déplacer pour qu'il soit seul. [**Move to project**](#start-from-an-existing-cloud-session) va seulement dans l'autre sens : il apporte le travail d'une session cloud dans un projet. Vous ne pouvez pas fusionner deux projets en un.

code-review.md +1 −1

Details

67 67 

68* **Résultats** : des commentaires en ligne sur les lignes concernées, avec un résumé dans le corps de la revue68* **Résultats** : des commentaires en ligne sur les lignes concernées, avec un résumé dans le corps de la revue

69* **Une exécution de vérification** : nommée **Claude Code Review**, avec les résultats listés dans ses [détails](https://code.claude.com/docs/fr/code-review-pull-requests.md#check-run-output). L'exécution de vérification ne se conclut jamais par un échec.69* **Une exécution de vérification** : nommée **Claude Code Review**, avec les résultats listés dans ses [détails](https://code.claude.com/docs/fr/code-review-pull-requests.md#check-run-output). L'exécution de vérification ne se conclut jamais par un échec.

70* **Lorsqu'elle ne trouve rien** : le titre de l'exécution de vérification indique **Code review found no issues**, et Claude publie la même courte note sur la pull request70* **Une note à la place des résultats** : publiée lorsque le titre de l'exécution de vérification indique **Code review found no issues**

71 71 

72Code Review choisit les modèles Claude sur lesquels s'exécutent les revues, et ses paramètres d'administration ne proposent pas de choix de modèle. Pour rendre les revues plus ou moins approfondies, modifiez le [niveau de revue](#review-levels).72Code Review choisit les modèles Claude sur lesquels s'exécutent les revues, et ses paramètres d'administration ne proposent pas de choix de modèle. Pour rendre les revues plus ou moins approfondies, modifiez le [niveau de revue](#review-levels).

73 73 

Details

152 152 

153### Ce que couvre une revue ultérieure153### Ce que couvre une revue ultérieure

154 154 

155Une revue ultérieure qui démarre d'elle-même, par exemple après un push, se concentre sur ce qui a changé depuis la dernière revue et publie moins de nits et de résultats préexistants. Son résumé comptabilise ce qu'elle a omis, dans une ligne se terminant par « found and not posted » ou « outside the scope of this re-review and not posted. »155Une revue ultérieure qui démarre d'elle-même, par exemple après un push, se concentre sur ce qui a changé depuis la dernière revue et publie moins de [nits et de résultats préexistants](#severity-levels). Pour savoir si elle a omis des résultats pour cette raison, cherchez dans le corps de la revue une phrase qui les comptabilise :

156 

157* **Résultats sur du code qui n'a pas changé depuis la dernière revue** : la phrase se termine par « outside the scope of this re-review and not posted »

158* **Nits et résultats préexistants** : la phrase se termine par « found and not posted »

156 159 

157Pour obtenir une revue qui n'omet aucun de ces résultats, publiez [`@claude review`](#comment-commands). Elle couvre à nouveau l'ensemble de la pull request.160Pour obtenir une revue qui n'omet aucun de ces résultats, publiez [`@claude review`](#comment-commands). Elle couvre à nouveau l'ensemble de la pull request.

158 161 

Details

15| Titre du check run | Signification | Que faire |15| Titre du check run | Signification | Que faire |

16| :- | :- | :- |16| :- | :- | :- |

17| **Code review queued...** ou **Code review in progress...** | La revue n'est pas terminée | Attendre que le titre change |17| **Code review queued...** ou **Code review in progress...** | La revue n'est pas terminée | Attendre que le titre change |

18| **Code review found no issues** | La revue est terminée et n'a rien trouvé à signaler | Rien |18| **Code review found no issues** | La revue est terminée et n'a publié aucun résultat | S'il ne s'agit pas de la première revue de la pull request, recherchez dans le corps de la revue le nombre de [résultats que la revue a laissés de côté](https://code.claude.com/docs/fr/code-review-pull-requests.md#what-a-later-review-covers). Sinon, rien |

19| Un titre indiquant que des problèmes ont été trouvés | La revue s'est terminée avec des résultats | Si vous ne les voyez pas sur le diff, consultez [Trouver les problèmes qui n'apparaissent pas sous forme de commentaires en ligne](#find-issues-that-aren’t-showing-as-inline-comments) |19| Un titre indiquant que des problèmes ont été trouvés | La revue s'est terminée avec des résultats | Si vous ne les voyez pas sur le diff, consultez [Trouver les problèmes qui n'apparaissent pas sous forme de commentaires en ligne](#find-issues-that-aren’t-showing-as-inline-comments) |

20| **Code review skipped — no new changes** | Une revue automatique ne s'est pas exécutée sur votre dernier push | Pour obtenir quand même une revue, commentez `@claude review` |20| **Code review skipped — no new changes** | Une revue automatique ne s'est pas exécutée sur votre dernier push | Pour obtenir quand même une revue, commentez `@claude review` |

21| **Code review not repeated — earlier findings still open** | Une revue automatique ne s'est pas exécutée sur votre dernier push, et des résultats Important de la revue précédente sont toujours ouverts | Poussez un correctif ou, pour obtenir quand même une revue, commentez `@claude review`. Consultez [Quand un push conserve le résultat précédent](https://code.claude.com/docs/fr/code-review-pull-requests.md#when-a-push-keeps-the-earlier-result) |21| **Code review not repeated — earlier findings still open** | Une revue automatique ne s'est pas exécutée sur votre dernier push, et des résultats Important de la revue précédente sont toujours ouverts | Poussez un correctif ou, pour obtenir quand même une revue, commentez `@claude review`. Consultez [Quand un push conserve le résultat précédent](https://code.claude.com/docs/fr/code-review-pull-requests.md#when-a-push-keeps-the-earlier-result) |

desktop.md +48 −17

Details

223 223 

224#### Masquer ou afficher le panneau des détails de la session224#### Masquer ou afficher le panneau des détails de la session

225 225 

226Pour masquer ou afficher le panneau, cliquez sur **Masquer le rail de session** ou **Afficher le rail de session** dans la barre de titre de la session, ou dans le menu **⋮** de la barre lorsque la fenêtre est étroite. Si vous ne voyez toujours pas le panneau, [vérifiez quelle disposition de l'onglet Code vous avez](#check-which-layout-you-have).226Pour masquer ou afficher le panneau, cliquez sur **Masquer le rail de session** ou **Afficher le rail de session** dans la barre de titre de la session, ou dans le menu **⋮** de la barre. Si vous ne voyez toujours pas le panneau, [vérifiez quelle disposition de l'onglet Code vous avez](#check-which-layout-you-have).

227 227 

228### Exécuter les commandes dans le terminal228### Exécuter les commandes dans le terminal

229 229 


984 984 

985* **Système** : un processeur x86\_64 ou arm64. La machine doit également satisfaire la [configuration système requise](https://code.claude.com/docs/fr/setup.md#system-requirements) de Claude Code. Sur Linux, Claude Code nécessite glibc 2.17 ou une version ultérieure, ou musl. Pour savoir laquelle la machine possède, exécutez `ldd --version` sur celle-ci. Sur une distribution basée sur musl comme Alpine Linux, installez également les [paquets dont Claude Code a besoin](https://code.claude.com/docs/fr/setup.md#alpine-linux-and-musl-based-distributions).985* **Système** : un processeur x86\_64 ou arm64. La machine doit également satisfaire la [configuration système requise](https://code.claude.com/docs/fr/setup.md#system-requirements) de Claude Code. Sur Linux, Claude Code nécessite glibc 2.17 ou une version ultérieure, ou musl. Pour savoir laquelle la machine possède, exécutez `ldd --version` sur celle-ci. Sur une distribution basée sur musl comme Alpine Linux, installez également les [paquets dont Claude Code a besoin](https://code.claude.com/docs/fr/setup.md#alpine-linux-and-musl-based-distributions).

986* **SFTP** : le serveur SSH doit proposer le sous-système SFTP, qu'une ligne `Subsystem sftp` dans son `sshd_config` active. Pour vérifier, connectez-vous au même hôte et au même port avec `sftp` dans un terminal sur votre ordinateur. Un serveur fonctionnel affiche l'invite `sftp>`.986* **SFTP** : le serveur SSH doit proposer le sous-système SFTP, qu'une ligne `Subsystem sftp` dans son `sshd_config` active. Pour vérifier, connectez-vous au même hôte et au même port avec `sftp` dans un terminal sur votre ordinateur. Un serveur fonctionnel affiche l'invite `sftp>`.

987* **Sessions par connexion** : Desktop sur macOS et Linux ouvre plusieurs sessions sur une même connexion SSH. Si le `sshd_config` du serveur définit `MaxSessions 1`, augmentez cette valeur, par exemple à la valeur par défaut d'OpenSSH, 10.987* **`MaxSessions 1` sur le serveur** : pour vous connecter à un serveur dont le `sshd_config` définit `MaxSessions 1`, effectuez l'une de ces actions :

988 * **Votre ordinateur fonctionne sous macOS ou Linux** : mettez à jour vers Claude Desktop v3.1623.0 ou version ultérieure

989 * **Votre ordinateur fonctionne sous Windows** : assurez-vous que Desktop [se connecte via le client OpenSSH](#use-your-ssh-configuration), car le client SSH intégré de Desktop ne peut pas se connecter à ce serveur

990 * **Vous pouvez modifier le serveur** : augmentez `MaxSessions`, par exemple jusqu'à la valeur par défaut d'OpenSSH, 10

991* **Connexions avec `MaxSessions 1`** : utilisez une méthode de connexion qui fonctionne sans invite, comme une clé détenue par votre agent SSH. Desktop se connecte au moins deux fois chaque fois qu'il se connecte ou se reconnecte. Prévoyez au moins une connexion supplémentaire pour chaque onglet de [terminal](#run-commands-in-the-terminal), et pour chaque session Desktop dans laquelle vous exécutez des commandes commençant par `!`. N'en prévoyez aucune pour les commandes exécutées par Claude.

992* **Codes à usage unique avec `MaxSessions 1`** : si chaque connexion vous sollicite, comme avec des codes à usage unique, les commandes `!` échouent. Exécutez plutôt ces commandes dans un onglet de terminal, qui affiche l'invite dans son propre volet.

988* **Dossier d'installation** : Desktop installe un programme auxiliaire et Claude Code sous `~/.claude/remote/` dans votre répertoire personnel. Il les exécute depuis cet emplacement, donc ce dossier ne peut pas se trouver sur un système de fichiers monté en `noexec`. Prévoyez environ 1 Go d'espace disque dans le répertoire personnel de chaque utilisateur qui se connecte. Pour savoir ce que contient ce dossier, voir [Fichiers et processus sur la machine distante](#files-and-processes-on-the-remote-machine).993* **Dossier d'installation** : Desktop installe un programme auxiliaire et Claude Code sous `~/.claude/remote/` dans votre répertoire personnel. Il les exécute depuis cet emplacement, donc ce dossier ne peut pas se trouver sur un système de fichiers monté en `noexec`. Prévoyez environ 1 Go d'espace disque dans le répertoire personnel de chaque utilisateur qui se connecte. Pour savoir ce que contient ce dossier, voir [Fichiers et processus sur la machine distante](#files-and-processes-on-the-remote-machine).

989* **Shell** : le shell défini pour votre compte sur la machine distante doit exécuter les commandes envoyées via SSH, comme le font Bash, Zsh et `sh`994* **Shell** : le shell défini pour votre compte sur la machine distante doit exécuter les commandes envoyées via SSH, comme le font Bash, Zsh et `sh`

990* **Réseau** : Claude Code s'exécute sur la machine distante et effectue ses requêtes réseau depuis celle-ci ; la machine a donc besoin de l'[accès réseau requis par Claude Code](https://code.claude.com/docs/fr/network-config.md#network-access-requirements). Si la machine ne peut pas télécharger Claude Code, Desktop le télécharge sur votre ordinateur et le transfère. Les autres requêtes de Claude Code partent toujours de la machine distante. Sur une machine distante Linux, si ces requêtes nécessitent un proxy, [définissez-le pour les sessions SSH](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions).995* **Réseau** : Claude Code s'exécute sur la machine distante et effectue ses requêtes réseau depuis celle-ci ; la machine a donc besoin de l'[accès réseau requis par Claude Code](https://code.claude.com/docs/fr/network-config.md#network-access-requirements). Si la machine ne peut pas télécharger Claude Code, Desktop le télécharge sur votre ordinateur et le transfère. Les autres requêtes de Claude Code partent toujours de la machine distante. Sur une machine distante Linux, si ces requêtes nécessitent un proxy, [définissez-le pour les sessions SSH](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions).


993 998 

994Si une machine distante Linux accède à internet via un proxy ou a besoin d'un certificat CA, ajoutez les [variables de proxy et de CA](https://code.claude.com/docs/fr/network-config.md) sous `env` dans `~/.claude/settings.json` sur cette machine. Ajoutez-les même si vous les exportez déjà dans `~/.profile`, `~/.bash_profile`, `~/.zprofile` ou `~/.zshrc` sur cette machine.999Si une machine distante Linux accède à internet via un proxy ou a besoin d'un certificat CA, ajoutez les [variables de proxy et de CA](https://code.claude.com/docs/fr/network-config.md) sous `env` dans `~/.claude/settings.json` sur cette machine. Ajoutez-les même si vous les exportez déjà dans `~/.profile`, `~/.bash_profile`, `~/.zprofile` ou `~/.zshrc` sur cette machine.

995 1000 

996Une session SSH ne les récupère pas depuis ces fichiers, même lorsque `claude` dans un terminal sur cette machine le fait. La session peut alors se bloquer, ou afficher **The connection from … to the API failed** ou **Authentication failed**, et se reconnecter n'y change rien.1001Dans une session SSH, Claude Code ne reçoit pas les variables de ces fichiers, même lorsque `claude` les reçoit dans un terminal sur cette machine. La session peut alors se bloquer, ou afficher **The connection from … to the API failed** ou **Authentication failed**, et se reconnecter n'y change rien.

997 1002 

998**1. Ajouter les variables**1003**1. Ajouter les variables**

999 1004 


1028 1033 

1029Redémarrez la machine distante, ou quittez Desktop et mettez fin aux processus du programme auxiliaire, comme dans les deux premières étapes pour [supprimer le programme auxiliaire](#files-and-processes-on-the-remote-machine). Faites-le lorsqu'aucune tâche n'est en cours, car l'une ou l'autre méthode interrompt le travail de Claude.1034Redémarrez la machine distante, ou quittez Desktop et mettez fin aux processus du programme auxiliaire, comme dans les deux premières étapes pour [supprimer le programme auxiliaire](#files-and-processes-on-the-remote-machine). Faites-le lorsqu'aucune tâche n'est en cours, car l'une ou l'autre méthode interrompt le travail de Claude.

1030 1035 

1031#### Utiliser votre configuration SSH sur macOS et Linux1036#### Utiliser votre configuration SSH

1032 1037 

1033Sur macOS et Linux, Desktop se connecte en exécutant le client OpenSSH sur votre ordinateur ; il utilise donc votre `~/.ssh/config`. La connexion via le client OpenSSH nécessite Claude Desktop v1.37937.0 ou une version ultérieure. Saisissez un nom `Host` de ce fichier dans le champ **Hôte SSH** pour utiliser les paramètres de son entrée, comme `HostName`, `User`, `IdentityFile`, `CertificateFile`, `ProxyJump` et `ProxyCommand`.1038Vous pouvez utiliser votre configuration SSH sous macOS, Linux et Windows lorsque Desktop se connecte via le client OpenSSH de votre ordinateur :

1039 

1040* **macOS et Linux** : Desktop se connecte en exécutant le client OpenSSH de votre ordinateur ; il utilise donc votre `~/.ssh/config`. La connexion via le client OpenSSH nécessite Claude Desktop v1.37937.0 ou version ultérieure.

1041* **Windows** : lorsque Desktop se connecte via le client OpenSSH, il utilise votre `%USERPROFILE%\.ssh\config`. Si vous utilisez un compte Claude plutôt qu'un fournisseur tiers, la connexion via le client OpenSSH nécessite tous ces éléments :

1042 

1043 * Claude Desktop v2.2553.0 ou version ultérieure. Pour connaître votre version, consultez [Vérifier votre version](#check-your-version).

1044 * OpenSSH 9.4 de Microsoft ou version ultérieure

1045 * Desktop installé à l'aide des boutons de téléchargement en haut de cette page, car Desktop installé depuis le Microsoft Store ne se connecte pas via le client OpenSSH

1046 

1047 Si vous ne pouvez pas satisfaire ces exigences, ou si vous utilisez un fournisseur tiers, consultez [Se connecter sous Windows sans le client OpenSSH](#connect-on-windows-without-the-openssh-client).

1048 

1049Avec le client OpenSSH, saisissez un nom `Host` issu de votre fichier de configuration dans le champ **SSH host**. Desktop utilise alors les paramètres de cette entrée `Host`, comme `HostName`, `User`, `IdentityFile`, `CertificateFile`, `ProxyJump` et `ProxyCommand`.

1034 1050 

1035Avant d'ajouter la connexion, vérifiez le client et l'entrée dans un terminal sur votre ordinateur :1051Avant d'ajouter la connexion, vérifiez le client et l'entrée dans un terminal sur votre ordinateur :

1036 1052 

1037* **Version du client** : exécutez `ssh -V`. Le client doit être OpenSSH 7.6 ou une version ultérieure.1053* **Version du client sous macOS et Linux** : exécutez `ssh -V`. Le client doit être OpenSSH 7.6 ou version ultérieure.

1038* **Entrée** : exécutez `ssh` avec le nom `Host`, comme `ssh devbox`. Si cela échoue, corrigez d'abord l'entrée.1054* **Version du client sous Windows** : Desktop essaie d'abord le `ssh` de votre `PATH` ; exécutez donc `ssh -V`. Le client est valide si la sortie affiche `OpenSSH_for_Windows_` et une version 9.4 ou ultérieure. S'il n'est pas valide, vérifiez les deux dossiers que Desktop essaie ensuite : exécutez `.\ssh.exe -V` dans `C:\Windows\System32\OpenSSH`, puis dans `C:\Program Files\OpenSSH`.

1055* **Aucun client valide sous Windows** : ajoutez la fonctionnalité facultative **OpenSSH Client** dans Windows et installez les mises à jour Windows en attente, ou installez la [version plus récente de Microsoft](https://learn.microsoft.com/en-us/troubleshoot/windows-server/system-management-components/upgrade-in-box-openssh-to-latest-openssh-release). Quittez et rouvrez ensuite Desktop. Pour savoir si Desktop a trouvé un client OpenSSH utilisable, recherchez dans [`ssh.log`](#get-desktops-logs-for-an-ssh-problem) `Windows OpenSSH client:` suivi d'une version, ou `no usable Windows OpenSSH client`.

1056* **Entrée** : sous Windows, utilisez le client qui a passé la vérification de version. Exécutez `ssh` avec le nom `Host`, par exemple `ssh devbox`. Si cela échoue, corrigez d'abord l'entrée.

1039 1057 

1040Vous pouvez laisser les champs **Port SSH** et **Clé SSH (facultatif)** vides. Si vous en renseignez un, Desktop l'utilise avec l'entrée :1058Vous pouvez laisser les champs **Port SSH** et **Clé SSH (facultatif)** vides. Si vous en renseignez un, Desktop l'utilise avec l'entrée :

1041 1059 

1042* **Port SSH** : une valeur ici remplace le `Port` de l'entrée1060* **Port SSH** : une valeur ici remplace le `Port` de l'entrée

1043* **Clé SSH (facultatif)** : Desktop propose le fichier de clé que vous choisissez en plus de l'`IdentityFile` de l'entrée et des clés de votre agent SSH1061* **SSH key (optional)** : avec le client OpenSSH, Desktop propose le fichier de clé que vous choisissez en plus de l'`IdentityFile` de l'entrée et des clés de votre agent SSH. Sous Windows, choisissez une clé au format OpenSSH, car `ssh` ne lit pas un fichier PuTTY `.ppk`.

1062 

1063##### Se connecter sous Windows sans le client OpenSSH

1064 

1065Sous Windows, vous vous connectez via le client SSH intégré de Desktop si votre ordinateur ne satisfait pas [les exigences du client OpenSSH](#use-your-ssh-configuration). Avec un fournisseur tiers, vous vous connectez par défaut via le client intégré, et votre administrateur peut modifier ce comportement. Pour ce paramètre, consultez [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions).

1066 

1067Avec le client intégré, vous pouvez toujours saisir un nom `Host` issu de votre configuration SSH dans le champ **SSH host** si votre `PATH` contient une commande `ssh`, avec ces limites :

1068 

1069* **Paramètres de l'entrée** : Desktop prend en compte `HostName`, `User`, `Port` et `IdentityFile`. Il prend également en compte `ProxyCommand` si un shell `sh` figure dans votre `PATH`.

1070* **SSH key (optional)** : laissez ce champ vide pour conserver l'`IdentityFile` de l'entrée, car un fichier de clé que vous choisissez ici remplace l'`IdentityFile`

1071* **`CertificateFile` et `ProxyJump`** : Desktop ignore `CertificateFile`, et la connexion échoue si l'entrée définit `ProxyJump`. Pour utiliser l'un ou l'autre de ces paramètres, [connectez-vous via le client OpenSSH](#use-your-ssh-configuration).

1044 1072 

1045##### Atteindre une machine derrière un hôte de rebond1073##### Atteindre une machine derrière un hôte de rebond

1046 1074 


1095 1123 

1096##### Utiliser des variables de votre shell dans un `ProxyCommand`1124##### Utiliser des variables de votre shell dans un `ProxyCommand`

1097 1125 

1098Pour utiliser une variable d'environnement qui vous est propre dans une commande `ProxyCommand` ou `Match exec`, exportez-la dans un fichier de démarrage du shell, comme `~/.zshrc`, puis quittez et rouvrez Desktop. Au démarrage, Desktop lit ce que votre shell de connexion exporte, et conserve ces valeurs jusqu'à ce que vous le quittiez.1126Sous macOS et Linux, pour utiliser l'une de vos propres variables d'environnement dans une commande `ProxyCommand` ou `Match exec`, exportez-la dans un fichier de démarrage du shell, comme `~/.zshrc`. Quittez et rouvrez ensuite Desktop. Au démarrage, Desktop lit ce qu'exporte votre shell de connexion et conserve ces valeurs jusqu'à ce que vous quittiez l'application.

1099 1127 

1100Cela nécessite Claude Desktop v2.37337.0 ou une version ultérieure et une commande `env` qui accepte `-0`, ce que vous pouvez vérifier en exécutant `env -0` dans un terminal sur votre ordinateur.1128Cela nécessite Claude Desktop v2.37337.0 ou une version ultérieure et une commande `env` qui accepte `-0`, ce que vous pouvez vérifier en exécutant `env -0` dans un terminal sur votre ordinateur.

1101 1129 


1103>1131>

1104> Si votre shell définit des identifiants AWS temporaires, [fournissez un profil à l'AWS CLI](#use-aws-credentials-in-a-proxycommand) au lieu d'exporter des variables `AWS_*`.1132> Si votre shell définit des identifiants AWS temporaires, [fournissez un profil à l'AWS CLI](#use-aws-credentials-in-a-proxycommand) au lieu d'exporter des variables `AWS_*`.

1105 1133 

1106##### Utiliser des identifiants AWS dans un `ProxyCommand`1134##### Utiliser des identifiants AWS dans un `ProxyCommand` sous macOS et Linux

1107 1135 

1108Si vous définissez des identifiants AWS temporaires dans un fichier de démarrage du shell, un `ProxyCommand` qui exécute l'AWS CLI peut se connecter dans un terminal et échouer dans Desktop. Lorsque votre shell exporte `AWS_SESSION_TOKEN`, `AWS_SECURITY_TOKEN` ou `AWS_CREDENTIAL_EXPIRATION`, `ssh` et votre `ProxyCommand` dans Desktop ne récupèrent ni les identifiants AWS du shell, ni `AWS_REGION`, ni `AWS_PROFILE`.1136Si vous définissez des identifiants AWS temporaires dans un fichier de démarrage du shell, un `ProxyCommand` qui exécute l'AWS CLI peut se connecter dans un terminal et échouer dans Desktop. Lorsque votre shell exporte `AWS_SESSION_TOKEN`, `AWS_SECURITY_TOKEN` ou `AWS_CREDENTIAL_EXPIRATION`, `ssh` et votre `ProxyCommand` dans Desktop ne récupèrent ni les identifiants AWS du shell, ni `AWS_REGION`, ni `AWS_PROFILE`.

1109 1137 


1242 1270 

1243##### Préparer une tâche longue1271##### Préparer une tâche longue

1244 1272 

1245* **Mettez à jour d'abord** : mettez à jour Desktop avant de démarrer une tâche longue. Sur macOS et Windows, Desktop peut redémarrer de lui-même pour installer une mise à jour qu'il a téléchargée. Ce redémarrage attend pendant que Claude travaille sur une tâche SSH. Sur macOS avec un compte Claude, par défaut, le redémarrage peut quand même avoir lieu une fois que la mise à jour a attendu 72 heures.1273* **Mettre à jour d'abord** : mettez à jour Desktop avant de démarrer une tâche longue. Sous macOS et Windows, Desktop peut redémarrer de lui-même pour installer une mise à jour qu'il a téléchargée. Ce redémarrage attend tant que Claude travaille sur une tâche SSH. Par défaut, une fois que la mise à jour a attendu 72 heures, le redémarrage peut avoir lieu pendant la tâche si Desktop peut [rejoindre la tâche ensuite](#reopen-a-session-after-you-quit-desktop).

1246* **Ne quittez pas l'application sur Windows, ni avant la v2.42304.0 avec un fournisseur tiers** : dans ces cas, quitter l'application vous fait perdre la tâche en cours, alors laissez Desktop ouvert pendant la tâche. Dans tous les autres cas, consultez [ce que vous récupérez](#reopen-a-session-after-you-quit-desktop) avant de quitter.1274* **Vérifier avant de quitter** : vous ne récupérez pas toujours la tâche en cours après une fermeture ou un redémarrage, par exemple après certaines mises à jour de Desktop. Pour connaître les cas concernés, consultez [Rouvrir une session après avoir quitté Desktop](#reopen-a-session-after-you-quit-desktop).

1275* **Sur une version antérieure, laisser Desktop ouvert** : sous Windows avec Claude Desktop antérieur à la v3.1623.0, vous ne récupérez pas la tâche en cours après la fermeture ou le redémarrage de Desktop. Il en va de même avec un fournisseur tiers sous macOS ou Linux avant la v2.42304.0. Dans les deux cas, laissez Desktop ouvert pendant la tâche. Pour connaître votre version, consultez [Vérifier votre version](#check-your-version).

1247* **Réduisez les demandes** : choisissez un mode de permission, des règles ou des hooks qui [font que la tâche vous attend moins souvent](#handle-requests-that-arrive-while-you-are-away)1276* **Réduisez les demandes** : choisissez un mode de permission, des règles ou des hooks qui [font que la tâche vous attend moins souvent](#handle-requests-that-arrive-while-you-are-away)

1248* **Vérifiez l'hôte de rebond** : si votre hôte de rebond demande une authentification, par exemple une notification push sur un téléphone, passez à une méthode de connexion qui fonctionne sans invite. Sinon, Desktop peut envoyer une nouvelle notification push à chaque tentative de reconnexion.1277* **Vérifiez l'hôte de rebond** : si votre hôte de rebond demande une authentification, par exemple une notification push sur un téléphone, passez à une méthode de connexion qui fonctionne sans invite. Sinon, Desktop peut envoyer une nouvelle notification push à chaque tentative de reconnexion.

1249* **Testez la machine distante** : démarrez une tâche courte, quittez Desktop pendant que la tâche s'exécute encore, et rouvrez la session bien après le moment où la tâche devrait être terminée. Si la tâche n'est pas terminée et que la session n'affiche aucune erreur d'authentification, vérifiez sur la machine distante [ce qui peut mettre fin à une tâche](#limits-while-desktop-is-disconnected).1278* **Testez la machine distante** : démarrez une tâche courte, quittez Desktop pendant que la tâche s'exécute encore, et rouvrez la session bien après le moment où la tâche devrait être terminée. Si la tâche n'est pas terminée et que la session n'affiche aucune erreur d'authentification, vérifiez sur la machine distante [ce qui peut mettre fin à une tâche](#limits-while-desktop-is-disconnected).


1320 1349 

1321Après avoir quitté Desktop, la tâche continue de s'exécuter sur la machine distante, mais elle s'arrête lorsque la session s'ouvre à nouveau, sauf si Desktop peut rejoindre son processus. Pendant que Desktop est fermé, la tâche s'exécute jusqu'à ce qu'elle se termine, ait besoin de vous ou atteigne l'une des [limites](#limits-while-desktop-is-disconnected).1350Après avoir quitté Desktop, la tâche continue de s'exécuter sur la machine distante, mais elle s'arrête lorsque la session s'ouvre à nouveau, sauf si Desktop peut rejoindre son processus. Pendant que Desktop est fermé, la tâche s'exécute jusqu'à ce qu'elle se termine, ait besoin de vous ou atteigne l'une des [limites](#limits-while-desktop-is-disconnected).

1322 1351 

1323* **Desktop sur Windows** : vous ne récupérez pas la tâche en cours, car Desktop ne rejoint jamais le processus après avoir été quitté. Ne redémarrez Desktop que lorsque vous pensez que la tâche est terminée, car la session peut s'ouvrir au démarrage de Desktop.1352* **Desktop sous Windows, tâche démarrée dans une version antérieure à la v3.1623.0** : vous ne récupérez pas la tâche, même si Desktop a été mis à jour depuis. Ne redémarrez Desktop que lorsque vous pensez que la tâche est terminée, car la session peut s'ouvrir au démarrage de Desktop, et la tâche s'arrête à l'ouverture de la session. Si vous ne savez pas dans quelle version vous avez démarré la tâche, attendez également qu'elle soit censée être terminée.

1324* **Fournisseur tiers, tâche démarrée dans une version antérieure** : si vous avez démarré la tâche dans une version de Desktop antérieure à la v2.42304.0, vous ne la récupérez pas non plus sur macOS ou Linux. Ne redémarrez Desktop que lorsque vous pensez que la tâche est terminée.1353* **Fournisseur tiers sous macOS ou Linux, tâche démarrée dans une version antérieure à la v2.42304.0** : vous ne récupérez pas la tâche. Ne redémarrez Desktop que lorsque vous pensez que la tâche est terminée.

1325* **Toute autre tâche, avec Desktop sur macOS ou Linux** : démarrez Desktop et ouvrez la session, et la tâche se poursuit si Desktop rejoint le processus. Il ne peut pas toujours le rejoindre, par exemple après certaines mises à jour de Desktop, donc [mettez à jour avant une tâche longue](#prepare-a-long-task).1354* **Toute autre tâche** : démarrez Desktop et ouvrez la session ; la tâche se poursuit si Desktop la rejoint. Il ne peut pas toujours la rejoindre, par exemple après certaines mises à jour de Desktop ; [mettez donc à jour avant une tâche longue](#prepare-a-long-task).

1326 1355 

1327Lorsque Desktop ne peut pas rejoindre le processus, vous perdez également toute approbation ou question qui vous attendait. Si la tâche ne se poursuit pas d'elle-même, envoyez un message, et Claude continue à partir de l'historique enregistré de la conversation.1356Lorsque la tâche s'arrête, la session peut afficher `Restarting Claude Code on <host>…` pendant que Desktop démarre un nouveau processus. Vous perdez également toute approbation ou question qui vous attendait. Si Claude ne continue pas de lui-même, envoyez un message, et Claude reprend à partir de l'historique enregistré de la conversation.

1328 1357 

1329Pour les déploiements tiers, voir [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions).1358Pour les déploiements tiers, voir [SSH remote sessions in Claude Desktop on 3P](https://claude.com/docs/third-party/claude-desktop/ssh-remote-sessions).

1330 1359 


1411 1440 

1412Pour savoir qui s'est connecté à une machine distante, lisez le log du serveur SSH sur cette machine, où une connexion depuis Desktop ressemble à une connexion depuis un terminal. Avec Desktop sur macOS ou Linux, attendez-vous à une entrée chaque fois que Desktop se connecte, et non à une entrée par session.1441Pour savoir qui s'est connecté à une machine distante, lisez le log du serveur SSH sur cette machine, où une connexion depuis Desktop ressemble à une connexion depuis un terminal. Avec Desktop sur macOS ou Linux, attendez-vous à une entrée chaque fois que Desktop se connecte, et non à une entrée par session.

1413 1442 

1443Si le serveur définit `MaxSessions 1`, attendez-vous à au moins deux entrées à chaque connexion ou reconnexion de Desktop. Attendez-vous à au moins une de plus pour chaque onglet de terminal, et pour chaque session Desktop dans laquelle vous exécutez des commandes commençant par `!`.

1444 

1414Vous ne trouverez pas les connexions SSH de Desktop dans les [métriques et événements](https://code.claude.com/docs/fr/monitoring-usage.md#available-metrics-and-events) de Claude Code. Pour savoir à partir de ceux-ci sur quelle machine distante une session SSH s'est exécutée, consultez [Attribuer la télémétrie aux sessions SSH de Desktop](https://code.claude.com/docs/fr/monitoring-usage.md#attribute-telemetry-to-desktop-ssh-sessions). Pour l'historique que Desktop conserve lui-même de ses connexions, consultez [Obtenir les logs de Desktop pour un problème SSH](#get-desktops-logs-for-an-ssh-problem).1445Vous ne trouverez pas les connexions SSH de Desktop dans les [métriques et événements](https://code.claude.com/docs/fr/monitoring-usage.md#available-metrics-and-events) de Claude Code. Pour savoir à partir de ceux-ci sur quelle machine distante une session SSH s'est exécutée, consultez [Attribuer la télémétrie aux sessions SSH de Desktop](https://code.claude.com/docs/fr/monitoring-usage.md#attribute-telemetry-to-desktop-ssh-sessions). Pour l'historique que Desktop conserve lui-même de ses connexions, consultez [Obtenir les logs de Desktop pour un problème SSH](#get-desktops-logs-for-an-ssh-problem).

1415 1446 

1416#### Connexions qui se ferment avant l'authentification1447#### Connexions qui se ferment avant l'authentification


2112| - | - | - |2143| - | - | - |

2113| `<host>'s SSH server has SFTP turned off` | `[SFTP_UNAVAILABLE]` | Activez SFTP dans le `sshd_config` du serveur, comme décrit dans les [exigences de la machine distante](#remote-machine-requirements-for-ssh-sessions) |2144| `<host>'s SSH server has SFTP turned off` | `[SFTP_UNAVAILABLE]` | Activez SFTP dans le `sshd_config` du serveur, comme décrit dans les [exigences de la machine distante](#remote-machine-requirements-for-ssh-sessions) |

2114| `SFTP doesn't start on <host>` | `[SFTP_NOT_STARTED]` | Connectez-vous au même hôte avec `sftp` dans un terminal de votre ordinateur pour voir ce qui l'empêche de démarrer, puis vérifiez les paramètres et les fichiers indiqués dans le message de Desktop |2145| `SFTP doesn't start on <host>` | `[SFTP_NOT_STARTED]` | Connectez-vous au même hôte avec `sftp` dans un terminal de votre ordinateur pour voir ce qui l'empêche de démarrer, puis vérifiez les paramètres et les fichiers indiqués dans le message de Desktop |

2115| `<host> allows too few SSH sessions per connection` | `[SESSION_LIMIT]` | Augmentez `MaxSessions` dans le `sshd_config` du serveur, par exemple jusqu'à la valeur par défaut d'OpenSSH, soit 10 |2146| `<host> allows too few SSH sessions per connection` | `[SESSION_LIMIT]` | Mettez à jour vers Claude Desktop v3.1623.0 ou une version ultérieure, ou augmentez `MaxSessions` dans le `sshd_config` du serveur, par exemple jusqu'à la valeur par défaut d'OpenSSH, soit 10 |

2116| `<host> is out of disk space` | `[ENOSPC]` ou `[EDQUOT]` | Libérez de l'espace ou du quota sur la machine distante, dans votre répertoire personnel ou dans `/tmp` |2147| `<host> is out of disk space` | `[ENOSPC]` ou `[EDQUOT]` | Libérez de l'espace ou du quota sur la machine distante, dans votre répertoire personnel ou dans `/tmp` |

2117| `Free up disk space on this computer` | `[ENOSPC]` ou `[EDQUOT]`, dans un message qui commence par `Couldn't prepare the deploy locally` | Libérez de l'espace sur votre ordinateur |2148| `Free up disk space on this computer` | `[ENOSPC]` ou `[EDQUOT]`, dans un message qui commence par `Couldn't prepare the deploy locally` | Libérez de l'espace sur votre ordinateur |

2118| `Claude Code won't start on <host>` | `[CLI_UNRESPONSIVE]` | Patientez une minute, puis réessayez. Si l'échec persiste, exécutez sur la machine distante la commande indiquée dans le message pour vérifier si Claude Code y répond. |2149| `Claude Code won't start on <host>` | `[CLI_UNRESPONSIVE]` | Patientez une minute, puis réessayez. Si l'échec persiste, exécutez sur la machine distante la commande indiquée dans le message pour vérifier si Claude Code y répond. |

Details

71 71 

72Ignorez la carte **Trigger** pour l'instant et développez **Advanced settings** en dessous. Dans l'onglet **General**, activez **Only on this computer**. Lorsque cette option est activée, la tâche s'exécute sur votre machine dans un dossier local.72Ignorez la carte **Trigger** pour l'instant et développez **Advanced settings** en dessous. Dans l'onglet **General**, activez **Only on this computer**. Lorsque cette option est activée, la tâche s'exécute sur votre machine dans un dossier local.

73 73 

74Si l'interrupteur n'est pas disponible, supprimez le dépôt ou le déclencheur d'événement GitHub ou d'API, car ceux-ci font de la tâche une [tâche planifiée dans le cloud](https://code.claude.com/docs/fr/routines.md).74Si l'interrupteur n'est pas disponible, retirez le dépôt ou le déclencheur d'événement GitHub ou d'API, car ceux-ci font de la tâche une [tâche planifiée dans le cloud](https://code.claude.com/docs/fr/routines.md).

75 75 

76**6. Choisir le dossier local**76**6. Choisir le dossier local**

77 77 

errors.md +2 −0

Details

327| `Cannot read this as an image: <path> is a pipe or a device` | [Erreurs d'outil](#file-is-too-large-to-read-as-an-image) |327| `Cannot read this as an image: <path> is a pipe or a device` | [Erreurs d'outil](#file-is-too-large-to-read-as-an-image) |

328| `subagent_type is required: the general-purpose agent is not available in this session` | [Erreurs d'outil](#subagent-type-is-required) |328| `subagent_type is required: the general-purpose agent is not available in this session` | [Erreurs d'outil](#subagent-type-is-required) |

329| `Error: this write left the memory index at MEMORY.md at ..., over its ... read limit` | [Erreurs d'outil](#memory-index-is-over-its-read-limit) |329| `Error: this write left the memory index at MEMORY.md at ..., over its ... read limit` | [Erreurs d'outil](#memory-index-is-over-its-read-limit) |

330| `Sandbox is required but failed to initialize: <reason>` | [Dépannage du sandboxing](https://code.claude.com/docs/fr/sandboxing.md#commands-refused-with-sandbox-is-required) |

331| `Sandbox is required (sandbox.failIfUnavailable) and stopped being available in this session: <reason>` | [Dépannage du sandboxing](https://code.claude.com/docs/fr/sandboxing.md#commands-refused-with-sandbox-is-required) |

330| `pkill: refusing to run` | [Erreurs d'outil](#pkill-pattern-matches-the-claude-code-process) |332| `pkill: refusing to run` | [Erreurs d'outil](#pkill-pattern-matches-the-claude-code-process) |

331| `Failed to write to <name>'s inbox — nothing was sent` | [Erreurs d'outil](#failed-to-write-to-a-teammate-inbox) |333| `Failed to write to <name>'s inbox — nothing was sent` | [Erreurs d'outil](#failed-to-write-to-a-teammate-inbox) |

332| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [Erreurs d'outil](#failed-to-write-to-a-teammate-inbox) |334| `Failed to write the plan approval request to the lead's inbox — plan not submitted` | [Erreurs d'outil](#failed-to-write-to-a-teammate-inbox) |

fast-mode.md +2 −2

Details

80 80 

81La tarification du mode rapide est forfaitaire sur toute la fenêtre de contexte de 1 M de jetons. Pour le taux Opus standard à comparer, consultez la [référence de tarification Claude](https://platform.claude.com/docs/en/about-claude/pricing).81La tarification du mode rapide est forfaitaire sur toute la fenêtre de contexte de 1 M de jetons. Pour le taux Opus standard à comparer, consultez la [référence de tarification Claude](https://platform.claude.com/docs/en/about-claude/pricing).

82 82 

83La première fois que vous activez le mode rapide dans une conversation, vous payez le prix complet du token d'entrée non mis en cache du mode rapide pour tout le contexte de la conversation. Plus vous êtes avancé dans une conversation, plus cela coûte cher, donc activer le mode rapide dès le départ est moins cher. Le coût s'applique une fois par conversation, donc désactiver le mode rapide et le réactiver plus tard ne le répète pas. Pour le mécanisme, consultez [comment le mode rapide interagit avec le cache de prompt](https://code.claude.com/docs/fr/prompt-caching.md#turning-on-fast-mode).83La première fois que vous activez le mode rapide dans une conversation, vous payez le prix complet du token d'entrée non mis en cache du mode rapide pour tout le contexte de la conversation. Plus vous êtes avancé dans une conversation, plus cela coûte cher, donc le coût est le plus faible lorsque vous activez le mode rapide dès le départ. Le mode rapide et la vitesse standard conservent des [caches séparés](https://code.claude.com/docs/fr/prompt-caching.md#turning-on-fast-mode), donc chaque changement ultérieur relit une partie ou la totalité de la conversation sans cache.

84 84 

85### Voir où apparaît la dépense du mode rapide85### Voir où apparaît la dépense du mode rapide

86 86 


167 167 

168Derrière une passerelle, vérifiez les configurations suivantes, dans lesquelles Claude Code n'envoie pas la vérification de disponibilité et n'a aucune vérification réussie antérieure en cache :168Derrière une passerelle, vérifiez les configurations suivantes, dans lesquelles Claude Code n'envoie pas la vérification de disponibilité et n'a aucune vérification réussie antérieure en cache :

169 169 

170* Vous pointez `ANTHROPIC_BASE_URL` vers votre passerelle et définissez [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential) sur une clé émise par la passerelle qui n'est pas au format d'une clé API Anthropic. Claude Code ne transmet pas une telle clé à `api.anthropic.com`.170* Vous pointez `ANTHROPIC_BASE_URL` vers votre passerelle et définissez [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/fr/llm-gateway-connect#set-the-base-url-and-credential) sur une clé émise par la passerelle qui n'est pas au format d'une clé API Anthropic.

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

172 172 

173Pour restaurer le mode rapide dans l'une ou l'autre configuration, définissez `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`.173Pour restaurer le mode rapide dans l'une ou l'autre configuration, définissez `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`.

Details

262 262 

263**Coût du contexte :** Faible jusqu'à utilisation. Les skills utilisateur uniquement ont un coût zéro jusqu'à invocation.263**Coût du contexte :** Faible jusqu'à utilisation. Les skills utilisateur uniquement ont un coût zéro jusqu'à invocation.

264 264 

265**Dans les subagents :** Les skills fonctionnent différemment dans les subagents. Au lieu du chargement à la demande, les skills listées dans le champ `skills` du subagent sont entièrement préchargées dans son contexte au lancement. Les subagents peuvent toujours découvrir et invoquer les skills de projet, utilisateur et plugin non listées via l'outil Skill.265**Dans les sous-agents :** Le contenu complet des skills listés dans le champ `skills` d'un sous-agent [se charge dans son contexte au lancement](https://code.claude.com/docs/fr/sub-agents.md#preload-skills-into-subagents), plutôt qu'à la demande. Les sous-agents peuvent toujours découvrir et invoquer les skills de projet, utilisateur et plugin non listés via l'outil Skill.

266 266 

267> [!TIP]267> [!TIP]

268>268>

glossary.md +2 −2

Details

120 120 

121### Compaction121### Compaction

122 122 

123Résumé automatique de votre conversation lorsque la [context window](#context-window) approche de sa limite. Les résultats des outils plus anciens sont d'abord effacés, puis la conversation est résumée. Project-root CLAUDE.md et auto memory survivent à la compaction et se rechargent à partir du disque ; les instructions données uniquement dans la conversation peuvent être perdues. Exécutez `/compact` pour déclencher manuellement, éventuellement avec un focus comme `/compact focus on the API changes`.123Résumé automatique de votre conversation lorsque la [fenêtre de contexte](#context-window) approche de sa limite. Le CLAUDE.md à la racine du projet et la mémoire automatique survivent à la compaction, mais les instructions données uniquement dans la conversation peuvent être perdues. Exécutez `/compact` pour la déclencher manuellement, éventuellement avec un axe précis comme `/compact focus on the API changes`.

124 124 

125En savoir plus : [What survives compaction](https://code.claude.com/docs/fr/context-window.md#what-survives-compaction) · [When context fills up](https://code.claude.com/docs/fr/how-claude-code-works.md#when-context-fills-up)125En savoir plus : [Ce qui survit à la compaction](https://code.claude.com/docs/fr/context-window.md#what-survives-compaction) · [Lorsque le contexte se remplit](https://code.claude.com/docs/fr/how-claude-code-works.md#when-context-fills-up) · [Quand Claude Code compacte une conversation laissée inactive](https://code.claude.com/docs/fr/settings-reference.md#idlecompaction)

126 126 

127### Connector127### Connector

128 128 

hooks.md +15 −5

Details

1426 1426 

1427Les hooks Setup ne peuvent pas bloquer ; l'exécution se poursuit quel que soit le code de sortie. Quel que soit le code de sortie, Claude Code ignore les [champs de sortie JSON](#json-output) d'un hook Setup, tels que `systemMessage`, `continue` et `hookSpecificOutput.additionalContext`. Avec `-p`, la sortie stdout, la sortie stderr et le code de sortie d'un hook Setup n'apparaissent dans la sortie de l'exécution que sous forme d'[événements `hook_response`](https://code.claude.com/docs/fr/headless#read-session-metadata) lorsque vous lancez avec `--output-format stream-json --verbose`.1427Les hooks Setup ne peuvent pas bloquer ; l'exécution se poursuit quel que soit le code de sortie. Quel que soit le code de sortie, Claude Code ignore les [champs de sortie JSON](#json-output) d'un hook Setup, tels que `systemMessage`, `continue` et `hookSpecificOutput.additionalContext`. Avec `-p`, la sortie stdout, la sortie stderr et le code de sortie d'un hook Setup n'apparaissent dans la sortie de l'exécution que sous forme d'[événements `hook_response`](https://code.claude.com/docs/fr/headless#read-session-metadata) lorsque vous lancez avec `--output-format stream-json --verbose`.

1428 1428 

1429Les hooks Setup ont accès à `CLAUDE_ENV_FILE`. Les variables écrites dans ce fichier persistent dans les commandes Bash suivantes de la session, comme pour les [hooks SessionStart](#persist-environment-variables). Seuls les hooks `type: "command"` s'exécutent sur `Setup`. Un hook `type: "mcp_tool"` sur `Setup` est toujours ignoré, comme décrit dans [Champs des hooks d'outil MCP](#mcp-tool-hook-fields).1429Les hooks Setup ont accès à `CLAUDE_ENV_FILE`. Si votre hook écrit des variables dans ce fichier, elles sont conservées pour les commandes Bash suivantes de la session, comme pour les [hooks SessionStart](#persist-environment-variables). Seuls les hooks `type: "command"` s'exécutent sur `Setup`. Un hook `type: "mcp_tool"` sur `Setup` est toujours ignoré, comme décrit dans [Champs des hooks d'outil MCP](#mcp-tool-hook-fields).

1430 1430 

1431### InstructionsLoaded1431### InstructionsLoaded

1432 1432 


1483 1483 

1484Un [hook de callback de l'Agent SDK](https://code.claude.com/docs/fr/agent-sdk/hooks.md) sur `UserPromptSubmit` qui atteint son délai d'expiration bloque le prompt avec un message indiquant le nom du hook et le délai d'expiration, car un callback à cet endroit peut faire office de contrôle de politique qui ne doit pas laisser passer en cas d'échec. La session continue.1484Un [hook de callback de l'Agent SDK](https://code.claude.com/docs/fr/agent-sdk/hooks.md) sur `UserPromptSubmit` qui atteint son délai d'expiration bloque le prompt avec un message indiquant le nom du hook et le délai d'expiration, car un callback à cet endroit peut faire office de contrôle de politique qui ne doit pas laisser passer en cas d'échec. La session continue.

1485 1485 

1486#### `Esc` pendant la vérification d'un prompt

1487 

1488Si vous appuyez sur `Esc` ou interrompez la session pendant que des hooks vérifient encore un prompt, la vérification s'arrête et le prompt ne parvient pas à Claude. Le texte que vous avez tapé dans le terminal revient dans le champ de saisie du prompt, et les hooks le vérifient à nouveau lorsque vous le renvoyez.

1489 

1490Un hook peut bloquer le prompt au moment même où vous interrompez. Le prompt reste alors bloqué : vous voyez le [message de blocage](#what-a-blocked-prompt-leaves-behind) de ce hook, et le texte ne revient pas dans le champ de saisie.

1491 

1486#### Entrée d'UserPromptSubmit1492#### Entrée d'UserPromptSubmit

1487 1493 

1488En plus des [champs d'entrée communs](#common-input-fields), les hooks UserPromptSubmit reçoivent le champ `prompt` contenant le texte soumis. Le contenu collé qui a été réduit en un espace réservé `[Pasted text #N]` arrive développé à sa place. Dans les sessions où Claude Code [signale le texte collé à Claude](https://code.claude.com/docs/fr/terminal-config.md#how-claude-treats-pasted-text), ce contenu développé se trouve entre une ligne `<pasted_content id="…">` et une ligne `</pasted_content id="…">` : tenez donc compte de ces lignes si votre hook analyse le prompt.1494En plus des [champs d'entrée communs](#common-input-fields), les hooks UserPromptSubmit reçoivent le champ `prompt` contenant le texte soumis. Le contenu collé qui a été réduit en un espace réservé `[Pasted text #N]` arrive développé à sa place. Dans les sessions où Claude Code [signale le texte collé à Claude](https://code.claude.com/docs/fr/terminal-config.md#how-claude-treats-pasted-text), ce contenu développé se trouve entre une ligne `<pasted_content id="…">` et une ligne `</pasted_content id="…">` : tenez donc compte de ces lignes si votre hook analyse le prompt.


1741 1747 

1742Utilisez le [contrôle de décision de PreToolUse](#pretooluse-decision-control) pour autoriser, refuser, demander confirmation ou différer l'appel d'outil.1748Utilisez le [contrôle de décision de PreToolUse](#pretooluse-decision-control) pour autoriser, refuser, demander confirmation ou différer l'appel d'outil.

1743 1749 

1744Un [hook de rappel de l'Agent SDK](https://code.claude.com/docs/fr/agent-sdk/hooks.md) sur `PreToolUse` qui dépasse son délai d'expiration bloque l'appel d'outil, et Claude reçoit un résultat d'erreur indiquant le délai d'expiration.1750Un [hook de callback de l'Agent SDK](https://code.claude.com/docs/fr/agent-sdk/hooks.md#hook-timeout) sur `PreToolUse` qui dépasse son délai d'expiration bloque l'appel d'outil.

1745 1751 

1746#### Entrée de PreToolUse1752#### Entrée de PreToolUse

1747 1753 


2970 2976 

2971S'exécute lorsqu'une commande shell dans la conversation principale change le répertoire de travail, par exemple lorsque Claude exécute une commande `cd`. Utilisez-le pour réagir aux changements de répertoire : recharger les variables d'environnement, activer des chaînes d'outils propres au projet ou exécuter automatiquement des scripts de configuration. S'associe à [FileChanged](#filechanged) pour des outils comme [direnv](https://direnv.net/) qui gèrent l'environnement par répertoire.2977S'exécute lorsqu'une commande shell dans la conversation principale change le répertoire de travail, par exemple lorsque Claude exécute une commande `cd`. Utilisez-le pour réagir aux changements de répertoire : recharger les variables d'environnement, activer des chaînes d'outils propres au projet ou exécuter automatiquement des scripts de configuration. S'associe à [FileChanged](#filechanged) pour des outils comme [direnv](https://direnv.net/) qui gèrent l'environnement par répertoire.

2972 2978 

2973Les hooks CwdChanged ont accès à [`CLAUDE_ENV_FILE`](#persist-environment-variables). Les variables écrites dans ce fichier persistent dans les commandes Bash suivantes jusqu'au prochain événement CwdChanged, lorsque Claude Code les efface.2979Les hooks CwdChanged ont accès à [`CLAUDE_ENV_FILE`](#persist-environment-variables). Si votre hook écrit des variables dans ce fichier, elles persistent dans les commandes Bash suivantes jusqu'au prochain événement CwdChanged, où Claude Code les efface.

2974 2980 

2975CwdChanged ne prend pas en charge les matchers et se déclenche à chaque occurrence.2981CwdChanged ne prend pas en charge les matchers et se déclenche à chaque occurrence.

2976 2982 


3135* Claude Code isole une [session en arrière-plan](https://code.claude.com/docs/fr/agent-view.md#how-file-edits-are-isolated) dans son propre worktree3141* Claude Code isole une [session en arrière-plan](https://code.claude.com/docs/fr/agent-view.md#how-file-edits-are-isolated) dans son propre worktree

3136* [`claude remote-control`](https://code.claude.com/docs/fr/remote-control#start-a-remote-control-session) en mode `worktree` démarre une session dans son propre worktree3142* [`claude remote-control`](https://code.claude.com/docs/fr/remote-control#start-a-remote-control-session) en mode `worktree` démarre une session dans son propre worktree

3137 3143 

3138Lorsque Claude exécute `git worktree add` via l'outil Bash au lieu d'appeler `EnterWorktree`, votre hook WorktreeCreate ne s'exécute pas. Pour inspecter ou bloquer cette commande, ajoutez un hook [`PreToolUse`](#pretooluse) avec le matcher `Bash`.3144Un hook WorktreeCreate ne s'exécute pas pour un worktree que Claude ajoute via Bash, et le hook d'un plugin ne s'exécute pas pour celui créé lorsque vous lancez avec `--worktree` et [`--tmux`](https://code.claude.com/docs/fr/cli-reference#cli-flags) :

3145 

3146* **`git worktree add` via Bash** : pour inspecter ou bloquer cette commande, ajoutez un hook [`PreToolUse`](#pretooluse) avec le matcher `Bash`.

3147* **`--worktree` avec `--tmux`** : Claude Code crée le worktree avant de charger les plugins, de sorte qu'un hook WorktreeCreate provenant d'un plugin ne s'exécute pas. Pour que votre hook s'exécute avec les deux flags, définissez-le plutôt dans un [fichier de paramètres](#configuration). Avant la v2.1.300, le hook WorktreeCreate d'un plugin ne s'exécutait pas non plus avec `--worktree` seul.

3139 3148 

3140Par défaut, Claude Code crée la copie de travail isolée avec `git worktree`. Configurer un hook WorktreeCreate remplace ce comportement git par défaut, ce qui vous permet d'utiliser un autre système de gestion de versions comme SVN, Perforce ou Mercurial.3149Par défaut, Claude Code crée la copie de travail isolée avec `git worktree`. Configurer un hook WorktreeCreate remplace ce comportement git par défaut, ce qui vous permet d'utiliser un autre système de gestion de versions comme SVN, Perforce ou Mercurial.

3141 3150 


4077 4086 

4078Lorsqu'un hook asynchrone se déclenche, Claude Code démarre le processus du hook et continue immédiatement sans attendre qu'il se termine. Le hook reçoit la même entrée JSON via stdin qu'un hook synchrone.4087Lorsqu'un hook asynchrone se déclenche, Claude Code démarre le processus du hook et continue immédiatement sans attendre qu'il se termine. Le hook reçoit la même entrée JSON via stdin qu'un hook synchrone.

4079 4088 

4080Après la sortie du processus en arrière-plan, Claude Code livre les champs `additionalContext` et `systemMessage` de la réponse JSON du hook à Claude au tour de conversation suivant. Contrairement au `systemMessage` d'un hook synchrone, aucun de ces champs ne vous est montré.4089Après la sortie du processus en arrière-plan, Claude Code livre les champs `additionalContext` et `systemMessage` de la réponse JSON du hook à Claude au tour de conversation suivant, sauf pour la [sortie `SessionStart` répétée](#limitations). Contrairement au `systemMessage` d'un hook synchrone, aucun de ces champs ne vous est montré.

4081 4090 

4082Affichez la réponse JSON seule sur stdout ou sur une ligne à part :4091Affichez la réponse JSON seule sur stdout ou sur une ligne à part :

4083 4092 


4145 4154 

4146* La sortie du hook est livrée au tour de conversation suivant. Si la session est inactive, la réponse attend jusqu'à la prochaine interaction utilisateur. Exception : un hook `asyncRewake` qui quitte avec le code 2 réveille Claude immédiatement même lorsque la session est inactive.4155* La sortie du hook est livrée au tour de conversation suivant. Si la session est inactive, la réponse attend jusqu'à la prochaine interaction utilisateur. Exception : un hook `asyncRewake` qui quitte avec le code 2 réveille Claude immédiatement même lorsque la session est inactive.

4147* Chaque exécution crée un processus en arrière-plan séparé.4156* Chaque exécution crée un processus en arrière-plan séparé.

4157* Un hook `SessionStart` asynchrone s'exécute chaque fois que l'événement se déclenche. Claude Code ignore la sortie du hook lorsque le texte de `additionalContext` et `systemMessage` correspond à ce que Claude a reçu en dernier de ce hook, sauf si un hook `SessionStart` synchrone a ajouté un autre texte depuis. Claude Code livre le texte lorsqu'il change, et à nouveau la prochaine fois que le hook s'exécute après une compaction ou `/clear`. Avant la v2.1.295, Claude Code ajoutait à nouveau le même texte à la conversation à chaque reprise.

4148 4158 

4149## Considérations de sécurité4159## Considérations de sécurité

4150 4160 

hooks-guide.md +1 −1

Details

954* Les hooks `PostToolUse` ne peuvent pas annuler les actions puisque l'outil a déjà été exécuté.954* Les hooks `PostToolUse` ne peuvent pas annuler les actions puisque l'outil a déjà été exécuté.

955* Les hooks [`PermissionRequest`](https://code.claude.com/docs/fr/hooks#permissionrequest) se déclenchent lorsque Claude Code est sur le point de vous demander une permission, ou lorsqu'il refuserait sinon automatiquement un appel qui ne peut pas afficher de demande de permission. En [mode non interactif](https://code.claude.com/docs/fr/headless.md) avec le flag `-p`, ils s'exécutent toujours en dehors du [mode `dontAsk`](https://code.claude.com/docs/fr/permission-modes#allow-only-pre-approved-tools-with-dontask-mode), et un appel qu'aucun hook ne tranche et auquel rien d'autre ne peut répondre est refusé.955* Les hooks [`PermissionRequest`](https://code.claude.com/docs/fr/hooks#permissionrequest) se déclenchent lorsque Claude Code est sur le point de vous demander une permission, ou lorsqu'il refuserait sinon automatiquement un appel qui ne peut pas afficher de demande de permission. En [mode non interactif](https://code.claude.com/docs/fr/headless.md) avec le flag `-p`, ils s'exécutent toujours en dehors du [mode `dontAsk`](https://code.claude.com/docs/fr/permission-modes#allow-only-pre-approved-tools-with-dontask-mode), et un appel qu'aucun hook ne tranche et auquel rien d'autre ne peut répondre est refusé.

956* Les hooks `Stop` se déclenchent chaque fois que Claude termine sa réponse, pas seulement à la fin de la tâche. Ils ne se déclenchent pas sur les interruptions de l'utilisateur. Les erreurs API déclenchent [StopFailure](https://code.claude.com/docs/fr/hooks.md#stopfailure) à la place.956* Les hooks `Stop` se déclenchent chaque fois que Claude termine sa réponse, pas seulement à la fin de la tâche. Ils ne se déclenchent pas sur les interruptions de l'utilisateur. Les erreurs API déclenchent [StopFailure](https://code.claude.com/docs/fr/hooks.md#stopfailure) à la place.

957* Lorsque plusieurs hooks `PreToolUse` retournent [`updatedInput`](https://code.claude.com/docs/fr/hooks#pretooluse) pour réécrire les arguments d'un outil, le dernier à terminer gagne. Puisque les hooks s'exécutent en parallèle, l'ordre est non-déterministe. Évitez d'avoir plus d'un hook modifier l'entrée du même outil.957* Lorsque plusieurs hooks `PreToolUse` retournent [`updatedInput`](https://code.claude.com/docs/fr/hooks#pretooluse) pour réécrire l'entrée d'un outil, Claude Code ne fusionne pas les réécritures et ne garantit pas avec laquelle l'outil s'exécute. Évitez d'avoir plus d'un hook qui réécrit l'entrée du même outil.

958 958 

959### Hooks et modes de permission959### Hooks et modes de permission

960 960 

Details

131 131 

132#### Lorsque le contexte se remplit132#### Lorsque le contexte se remplit

133 133 

134Claude Code gère le contexte automatiquement à mesure que vous approchez de la limite. Il efface d'abord les sorties d'outils plus anciennes, puis résume la conversation si nécessaire. Vos demandes et les extraits de code clés sont préservés ; les instructions détaillées du début de la conversation peuvent être perdues. Mettez les règles persistantes dans CLAUDE.md plutôt que de compter sur l'historique de conversation.134Claude Code gère le contexte automatiquement à mesure que vous approchez de la limite. Il compacte la conversation en un résumé. Le résumé conserve vos demandes et les extraits de code clés, mais les instructions détaillées du début de la conversation peuvent être perdues. Mettez les règles persistantes dans CLAUDE.md plutôt que de compter sur l'historique de conversation.

135 135 

136Pour contrôler ce qui est préservé pendant la compaction, ajoutez une section « Compact Instructions » à CLAUDE.md ou exécutez `/compact` avec un focus (comme `/compact focus on the API changes`).136Pour contrôler ce qui est préservé pendant la compaction, ajoutez une section « Compact Instructions » à CLAUDE.md ou exécutez `/compact` avec un focus (comme `/compact focus on the API changes`).

137 137 

Details

659 659 

660Pour réassigner les touches qui font défiler la liste des fichiers ou modifient la comparaison, consultez [Actions du panneau de diff](https://code.claude.com/docs/fr/keybindings.md#diff-panel-actions).660Pour réassigner les touches qui font défiler la liste des fichiers ou modifient la comparaison, consultez [Actions du panneau de diff](https://code.claude.com/docs/fr/keybindings.md#diff-panel-actions).

661 661 

662Pendant une fusion, un rebase, un cherry-pick ou un revert inachevé, le panneau continue d'afficher les modifications qu'il a lues en dernier à partir de git, afin de ne pas se remplir des modifications entrantes de l'opération. Il se met à jour lors de sa première actualisation après la fin de l'opération, par exemple lorsque Claude modifie ensuite un fichier.

663 

662### Boîte de dialogue de diff664### Boîte de dialogue de diff

663 665 

664La boîte de dialogue de diff s'ouvre sous la forme d'un bloc encadré au-dessus du prompt et répertorie vos fichiers modifiés avec leurs nombres de lignes ajoutées et supprimées. Elle les compare à `HEAD`, ou à ce que vous avez choisi en dernier [dans le panneau de diff](#diff-panel) pour ce dépôt.666La boîte de dialogue de diff s'ouvre sous la forme d'un bloc encadré au-dessus du prompt et répertorie vos fichiers modifiés avec leurs nombres de lignes ajoutées et supprimées. Elle les compare à `HEAD`, ou à ce que vous avez choisi en dernier [dans le panneau de diff](#diff-panel) pour ce dépôt.

keybindings.md +4 −4

Details

678 678 

679## Interaction du mode Vim679## Interaction du mode Vim

680 680 

681Lorsque le mode vim est activé via `/config` → Mode Éditeur, les liaisons de touches et le mode vim fonctionnent indépendamment :681Lorsque vous activez le mode vim avec le paramètre Mode Éditeur dans `/config`, les raccourcis clavier et le mode vim fonctionnent indépendamment :

682 682 

683* **Mode Vim** gère l'entrée au niveau de la saisie de texte (mouvement du curseur, modes, motions)683* **Mode Vim** gère l'entrée au niveau de la saisie de texte : mouvement du curseur, modes et motions

684* **Liaisons de touches** gèrent les actions au niveau du composant (basculer les tâches, soumettre, etc.)684* **Raccourcis clavier** gèrent les actions au niveau du composant, comme basculer les tâches ou soumettre un message

685* La touche Échappement en mode vim bascule INSERT en mode NORMAL ; elle ne déclenche pas `chat:cancel`685* La touche Échap en mode vim fait passer du mode INSERT au mode NORMAL ; elle ne déclenche pas `chat:cancel`

686* La plupart des raccourcis Ctrl+touche passent par le mode vim au système de liaison de touches686* La plupart des raccourcis Ctrl+touche passent par le mode vim au système de liaison de touches

687* Les touches Vim ne sont pas remappables via le fichier de liaisons de touches. Pour mapper une séquence en mode INSERT à deux touches comme `jj` à Échappement, utilisez le paramètre [`vimInsertModeRemaps`](https://code.claude.com/docs/fr/interactive-mode#remap-insert-mode-key-sequences)687* Les touches Vim ne sont pas remappables via le fichier de liaisons de touches. Pour mapper une séquence en mode INSERT à deux touches comme `jj` à Échappement, utilisez le paramètre [`vimInsertModeRemaps`](https://code.claude.com/docs/fr/interactive-mode#remap-insert-mode-key-sequences)

688* En mode NORMAL vim, `?` affiche le menu d'aide (comportement vim)688* En mode NORMAL vim, `?` affiche le menu d'aide (comportement vim)

Details

306 306 

307## Ajouter des skills par répertoire307## Ajouter des skills par répertoire

308 308 

309N'importe quel sous-répertoire peut définir des [skills](https://code.claude.com/docs/fr/skills.md) limités à sa propre pile. Un skill se charge à la demande lorsque Claude détermine qu'il est pertinent, donc les outils spécifiques à l'API ne consomment pas de contexte pendant le travail frontend.309N'importe quel sous-répertoire peut définir des [skills](https://code.claude.com/docs/fr/skills.md) limités à sa propre pile. Un skill se charge à la demande lorsque Claude détermine qu'il est pertinent.

310 310 

311Les skills vivent sous `.claude/skills/` à l'intérieur du répertoire. Validez-les aux côtés du code de cette zone afin que quiconque clone le référentiel les obtienne. Dans un monorepo, cela peut être un ensemble de skills par package. Dans un grand dépôt à arborescence unique, c'est un ensemble par sous-système tel que `src/db/.claude/skills/`.311Les skills vivent sous `.claude/skills/` à l'intérieur du répertoire. Validez-les aux côtés du code de cette zone afin que quiconque clone le référentiel les obtienne. Dans un monorepo, cela peut être un ensemble de skills par package. Dans un grand dépôt à arborescence unique, c'est un ensemble par sous-système tel que `src/db/.claude/skills/`.

312 312 


347- Simulez les services externes dans `src/__tests__/mocks/`347- Simulez les services externes dans `src/__tests__/mocks/`

348```348```

349 349 

350Un sous-répertoire différent contient différents skills de la même manière : `packages/web/.claude/skills/component-patterns/` décrit les conventions de composants du frontend au lieu des tests. Lorsque Claude travaille sur un fichier dans `packages/api/`, il charge le skill api-testing. Lorsqu'il travaille dans `packages/web/`, il charge component-patterns à la place. Les skills d'aucun répertoire ne se chargent pendant les tâches de l'autre.350Un sous-répertoire différent contient différents skills de la même manière : `packages/web/.claude/skills/component-patterns/` décrit les conventions de composants du frontend au lieu des tests. Lorsque Claude travaille sur un fichier dans `packages/api/`, il charge le skill api-testing. Lorsqu'il travaille dans `packages/web/`, il charge component-patterns.

351 351 

352Vous pouvez également limiter un skill par modèle de fichier au lieu de par placement. Le [champ frontmatter `paths`](https://code.claude.com/docs/fr/skills#frontmatter-reference) prend des modèles glob, et Claude charge le skill automatiquement uniquement lorsqu'il travaille avec des fichiers correspondants. Utilisez ceci pour un skill qui vit dans le `.claude/skills/` de la racine du dépôt mais s'applique uniquement à certains fichiers, comme un skill de migration de base de données limité à `**/migrations/**`.352Vous pouvez également limiter un skill par modèle de fichier au lieu de par placement. Le [champ frontmatter `paths`](https://code.claude.com/docs/fr/skills#frontmatter-reference) prend des modèles glob, et Claude charge le skill automatiquement uniquement lorsqu'il travaille avec des fichiers correspondants. Utilisez ceci pour un skill qui vit dans le `.claude/skills/` de la racine du dépôt mais s'applique uniquement à certains fichiers, comme un skill de migration de base de données limité à `**/migrations/**`.

353 353 

Details

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

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

522| `/fast` signale `Fast mode unavailable due to network connectivity issues` tandis que les requêtes d'inférence fonctionnent | La vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) va directement à `api.anthropic.com` et ne suit pas `ANTHROPIC_BASE_URL`, de sorte que le blocage de l'accès direct sortant fait échouer la vérification | Ajoutez `api.anthropic.com` à la liste d'autorisation si l'accès sortant est bloqué, ou définissez une variable de saut. Voir [utiliser le mode rapide derrière les proxys et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` signale `Fast mode unavailable due to network connectivity issues` tandis que les requêtes d'inférence fonctionnent | La vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) va directement à `api.anthropic.com` et ne suit pas `ANTHROPIC_BASE_URL`, de sorte que le blocage de l'accès direct sortant fait échouer la vérification | Ajoutez `api.anthropic.com` à la liste d'autorisation si l'accès sortant est bloqué, ou définissez une variable de saut. Voir [utiliser le mode rapide derrière les proxys et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/fast` signale `Fast mode is currently unavailable` dans une session qui s'authentifie avec une clé émise par la passerelle dans `ANTHROPIC_API_KEY` | Tant que `ANTHROPIC_BASE_URL` pointe vers votre passerelle, Claude Code ne transmet pas à `api.anthropic.com` une clé qui n'a pas le format d'une clé API Anthropic. La vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) n'est alors pas envoyée et, sans vérification réussie antérieure en cache, Claude Code considère le mode rapide comme indisponible | Définissez `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` ; voir [utiliser le mode rapide derrière les proxys et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |523| `/fast` signale `Fast mode is currently unavailable` dans une session qui s'authentifie avec une clé émise par la passerelle dans `ANTHROPIC_API_KEY` | Tant que `ANTHROPIC_BASE_URL` pointe vers votre passerelle et que la clé n'a pas le format d'une clé API Anthropic, Claude Code n'envoie pas la vérification de disponibilité du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md). Sans vérification réussie antérieure en cache, il considère le mode rapide comme indisponible | Définissez `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` ; voir [utiliser le mode rapide derrière les proxys et les passerelles LLM](https://code.claude.com/docs/fr/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

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

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

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

Details

148| :- | :- |148| :- | :- |

149| `x-claude-code-request-class` | Quel type de requête c'est : `main` pour un tour de la conversation principale, `subagent` pour un tour d'un [sous-agent](https://code.claude.com/docs/fr/sub-agents.md), `workflow` pour un agent s'exécutant dans un workflow, `compaction` pour la requête de résumé qui compacte une conversation, ou `auxiliary` pour les requêtes latérales telles que les titres de session, les classificateurs et les résumés. Envoyé sur chaque requête |149| `x-claude-code-request-class` | Quel type de requête c'est : `main` pour un tour de la conversation principale, `subagent` pour un tour d'un [sous-agent](https://code.claude.com/docs/fr/sub-agents.md), `workflow` pour un agent s'exécutant dans un workflow, `compaction` pour la requête de résumé qui compacte une conversation, ou `auxiliary` pour les requêtes latérales telles que les titres de session, les classificateurs et les résumés. Envoyé sur chaque requête |

150| `x-claude-code-agent-type` | Le type de sous-agent qui a émis la requête : un nom de type d'agent intégré tel que `Explore`, `Plan` ou `general-purpose`, ou `custom` pour un agent défini par l'utilisateur, `teammate` pour un membre d'une [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md) s'exécutant dans le processus du leader, ou `fork` pour un [fork](https://code.claude.com/docs/fr/sub-agents.md#fork-the-current-conversation). Présent uniquement sur les propres tours d'un sous-agent ; la compaction ou les requêtes latérales d'un sous-agent conservent l'ID d'agent mais ne portent aucun type. Un nom d'agent choisi par l'utilisateur n'est jamais envoyé |150| `x-claude-code-agent-type` | Le type de sous-agent qui a émis la requête : un nom de type d'agent intégré tel que `Explore`, `Plan` ou `general-purpose`, ou `custom` pour un agent défini par l'utilisateur, `teammate` pour un membre d'une [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md) s'exécutant dans le processus du leader, ou `fork` pour un [fork](https://code.claude.com/docs/fr/sub-agents.md#fork-the-current-conversation). Présent uniquement sur les propres tours d'un sous-agent ; la compaction ou les requêtes latérales d'un sous-agent conservent l'ID d'agent mais ne portent aucun type. Un nom d'agent choisi par l'utilisateur n'est jamais envoyé |

151| `x-claude-code-compaction` | Présent sur la requête qui résume la conversation lors d'une [compaction](https://code.claude.com/docs/fr/prompt-caching.md#compacting-the-conversation). La valeur indique ce qui l'a déclenchée : `auto` lorsque la fenêtre de contexte approchait de la capacité, `manual` pour `/compact`, ou `reactive` lorsque l'API a rejeté une requête comme trop longue. La valeur est également `auto` pour la [compaction en période d'inactivité](https://code.claude.com/docs/fr/settings-reference.md#idlecompaction). Absent sur chaque autre requête |151| `x-claude-code-compaction` | Présent sur la requête qui résume la conversation lors d'une [compaction](https://code.claude.com/docs/fr/prompt-caching.md#compacting-the-conversation). La valeur indique ce qui l'a déclenchée : `auto` lorsque la fenêtre de contexte approchait de la capacité, `manual` pour `/compact`, ou `reactive` lorsque l'API a rejeté une requête comme trop longue. La valeur est également `auto` pour la [compaction en période d'inactivité](https://code.claude.com/docs/fr/settings-reference.md#idlecompaction) dans une session de terminal interactive. Absent sur chaque autre requête, y compris celle qui rédige un résumé en arrière-plan avant une compaction |

152| `x-claude-code-context-compacted` | Présent une fois, sur la première requête de conversation principale après une compaction, avec les mêmes valeurs que `x-claude-code-compaction`. Le préfixe de conversation avant cette requête n'est plus utilisé, donc un cache basé sur celui-ci peut être supprimé |152| `x-claude-code-context-compacted` | Présent une fois, sur la première requête de conversation principale après une compaction, avec les mêmes valeurs que `x-claude-code-compaction`. Le préfixe de conversation avant cette requête n'est plus utilisé, donc un cache basé sur celui-ci peut être supprimé |

153| `x-claude-code-prev-tool-durations` | Temps d'exécution mesuré des appels d'outils dont cette requête porte les résultats, comme `<name>=<ms>;<name>=<ms>`, par exemple `Bash=742;Read=9`. Envoyé sur la requête suivante de la même conversation après un lot d'appels d'outils, depuis la session principale ou un sous-agent |153| `x-claude-code-prev-tool-durations` | Temps d'exécution mesuré des appels d'outils dont cette requête porte les résultats, comme `<name>=<ms>;<name>=<ms>`, par exemple `Bash=742;Read=9`. Envoyé sur la requête suivante de la même conversation après un lot d'appels d'outils, depuis la session principale ou un sous-agent |

154| `x-claude-code-prompt-id` | UUID aléatoire qui identifie l'invite utilisateur qu'une requête sert. Les requêtes servant une invite partagent la valeur, y compris les tours des sous-agents que l'invite a démarrés. Les requêtes non attribuées à une invite l'omettent. Utilisez-le pour regrouper les requêtes d'une session par invite. Nécessite Claude Code v2.1.283 ou ultérieur |154| `x-claude-code-prompt-id` | UUID aléatoire qui identifie l'invite utilisateur qu'une requête sert. Les requêtes servant une invite partagent la valeur, y compris les tours des sous-agents que l'invite a démarrés. Les requêtes non attribuées à une invite l'omettent. Utilisez-le pour regrouper les requêtes d'une session par invite. Nécessite Claude Code v2.1.283 ou ultérieur |


238* Lorsque l'amont rejette uniquement le marqueur `cache_control` sur un message système en milieu de conversation, Claude Code conserve les messages système et réessaie une fois avec le marqueur déplacé. Le marqueur est placé sur la dernière entrée de `messages` qui n'est pas un message système, dans cette nouvelle tentative et dans les requêtes ultérieures jusqu'à ce que Claude Code se termine238* Lorsque l'amont rejette uniquement le marqueur `cache_control` sur un message système en milieu de conversation, Claude Code conserve les messages système et réessaie une fois avec le marqueur déplacé. Le marqueur est placé sur la dernière entrée de `messages` qui n'est pas un message système, dans cette nouvelle tentative et dans les requêtes ultérieures jusqu'à ce que Claude Code se termine

239* Lorsque l'amont rejette une [signature de pensée](https://platform.claude.com/docs/en/build-with-claude/extended-thinking), y compris avec un `400` dont le message dit que le bloc est `bound to a different conversation`, Claude Code supprime les blocs de pensée antérieurs de la requête, réessaie, et les garde hors de chaque requête ultérieure. Les nouvelles réponses incluent toujours la pensée239* Lorsque l'amont rejette une [signature de pensée](https://platform.claude.com/docs/en/build-with-claude/extended-thinking), y compris avec un `400` dont le message dit que le bloc est `bound to a different conversation`, Claude Code supprime les blocs de pensée antérieurs de la requête, réessaie, et les garde hors de chaque requête ultérieure. Les nouvelles réponses incluent toujours la pensée

240* Lorsque la passerelle ou son amont rejette l'entrée de l'[outil conseiller](https://code.claude.com/docs/fr/advisor.md) dans `tools` comme un type d'outil non reconnu, Claude Code réessaie la requête une fois sans cette entrée et sa valeur `anthropic-beta`. Les requêtes ultérieures à cette URL de base laissent le conseiller de côté jusqu'à ce que Claude Code se termine, et `/advisor` n'est pas disponible pour le développeur pendant ce temps. Claude Code reconnaît ce rejet par une réponse `400` ou `422` dont le message nomme le type d'outil après `Input tag`, comme `Input tag 'advisor_20260301'`. Avant v2.1.280, Claude Code ne réessayait pas ce rejet240* Lorsque la passerelle ou son amont rejette l'entrée de l'[outil conseiller](https://code.claude.com/docs/fr/advisor.md) dans `tools` comme un type d'outil non reconnu, Claude Code réessaie la requête une fois sans cette entrée et sa valeur `anthropic-beta`. Les requêtes ultérieures à cette URL de base laissent le conseiller de côté jusqu'à ce que Claude Code se termine, et `/advisor` n'est pas disponible pour le développeur pendant ce temps. Claude Code reconnaît ce rejet par une réponse `400` ou `422` dont le message nomme le type d'outil après `Input tag`, comme `Input tag 'advisor_20260301'`. Avant v2.1.280, Claude Code ne réessayait pas ce rejet

241* Lorsque l'amont rejette `output_config.effort`, Claude Code réessaie la requête sans l'effort et le laisse de côté dans les requêtes ultérieures à ce modèle jusqu'à ce que Claude Code se termine. Claude Code reconnaît ce rejet par un `400` dont le message nomme `output_config.effort` avec `Extra inputs are not permitted`, ou indique que le modèle ne prend pas en charge le paramètre d'effort241* Lorsque l'amont rejette `output_config.effort` ou sa valeur `anthropic-beta`, Claude Code réessaie et n'ajoute ni l'un ni l'autre aux requêtes pour ce modèle jusqu'à ce que Claude Code se termine. Votre passerelle ne nécessite aucune modification si elle transmet l'erreur `400` de l'amont sans la modifier et que le message :

242 * Nomme `output_config.effort` avec `Extra inputs are not permitted`

243 * Indique que le modèle ne prend pas en charge le paramètre d'effort

244 * Commence par `Unexpected value(s)` et liste `effort-2025-11-24` pour l'en-tête `anthropic-beta`. Nécessite v2.1.310 ou ultérieur. Les développeurs dont [`ANTHROPIC_BETAS`](https://code.claude.com/docs/fr/env-vars) liste cette valeur continuent de l'envoyer et de recevoir l'erreur `400`, donc demandez-leur de supprimer cette entrée

242* Lorsque l'amont rejette le champ `context_management` ou sa valeur `anthropic-beta`, la passerelle voit la requête une nouvelle fois sans eux. Si la passerelle les voit de nouveau dans une requête ultérieure et que l'amont les rejette encore, la même nouvelle tentative suit. Claude Code reconnaît ce rejet par son message, par exemple un message contenant `context_management: Extra inputs are not permitted`. Avant v2.1.304, Claude Code ne réessayait pas ce rejet245* Lorsque l'amont rejette le champ `context_management` ou sa valeur `anthropic-beta`, la passerelle voit la requête une nouvelle fois sans eux. Si la passerelle les voit de nouveau dans une requête ultérieure et que l'amont les rejette encore, la même nouvelle tentative suit. Claude Code reconnaît ce rejet par son message, par exemple un message contenant `context_management: Extra inputs are not permitted`. Avant v2.1.304, Claude Code ne réessayait pas ce rejet

243* Lorsque l'amont rejette un champ d'outil bêta autre que `defer_loading`, tel que `strict`, l'erreur `400` atteint le développeur. Avant cela, la passerelle peut voir la requête de nouveau [sans les champs de recherche d'outils](#retry-without-tool-search). Pour arrêter l'envoi de tels champs, demandez aux développeurs de définir [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities)246* Lorsque l'amont rejette un champ d'outil bêta autre que `defer_loading`, tel que `strict`, l'erreur `400` atteint le développeur. Avant cela, la passerelle peut voir la requête de nouveau [sans les champs de recherche d'outils](#retry-without-tool-search). Pour arrêter l'envoi de tels champs, demandez aux développeurs de définir [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](#disable-pre-release-capabilities)

244 247 

Details

470Si le nom n'arrive pas, vérifiez l'une de ces causes :470Si le nom n'arrive pas, vérifiez l'une de ces causes :

471 471 

472* **Vous l'avez défini sur l'ordinateur qui exécute Desktop** : Desktop ne transmet pas à la session SSH une valeur que vous y définissez472* **Vous l'avez défini sur l'ordinateur qui exécute Desktop** : Desktop ne transmet pas à la session SSH une valeur que vous y définissez

473* **Vous l'avez exporté dans un fichier de connexion** : seuls les shells de connexion lisent un fichier tel que `/etc/profile`. Une valeur que vous y définissez avec `export` atteint Claude Code lorsque vous le démarrez depuis un shell de connexion. Elle n'atteint pas une session SSH Desktop, car Desktop ne démarre pas Claude Code via un shell de connexion.473* **Vous l'avez exporté dans `/etc/profile` ou un autre fichier que seuls les shells de connexion lisent** : le nom arrive lorsque vous exécutez `claude` depuis un shell de connexion, mais pas dans une session SSH Desktop. Desktop ne démarre pas Claude Code via un shell de connexion. Définissez plutôt la variable sous `env` dans le [fichier de paramètres gérés](https://code.claude.com/docs/fr/desktop.md#managed-settings) sur la machine distante.

474* **Une valeur contient un espace** : Claude Code ne copie alors aucune des clés sur les événements ou les points de données et ne signale aucune erreur. [Retirez l'espace de la valeur](#multi-team-organization-support).474* **Une valeur contient un espace** : Claude Code ne copie alors aucune des clés sur les événements ou les points de données et ne signale aucune erreur. [Retirez l'espace de la valeur](#multi-team-organization-support).

475* **Autre chose définit déjà la variable** : dans une session que l'application de bureau démarre, une variable déjà définie dans l'environnement de lancement [a priorité sur les fichiers de paramètres](https://code.claude.com/docs/fr/settings-reference.md#how-env-values-interact-with-your-shell). Le [journal de débogage](https://code.claude.com/docs/fr/debug-your-config.md) nomme chaque variable ignorée. Lorsqu'un déploiement Desktop tiers [indique un endpoint OTLP](#how-managed-settings-lock-the-otlp-destination) dans l'environnement qu'il fournit, cet environnement contient le propre `OTEL_RESOURCE_ATTRIBUTES` de Desktop.475* **Autre chose définit déjà la variable** : dans une session que l'application de bureau démarre, une variable déjà définie dans l'environnement de lancement [a priorité sur les fichiers de paramètres](https://code.claude.com/docs/fr/settings-reference.md#how-env-values-interact-with-your-shell). Le [journal de débogage](https://code.claude.com/docs/fr/debug-your-config.md) nomme chaque variable ignorée. Lorsqu'un déploiement Desktop tiers [indique un endpoint OTLP](#how-managed-settings-lock-the-otlp-destination) dans l'environnement qu'il fournit, cet environnement contient le propre `OTEL_RESOURCE_ATTRIBUTES` de Desktop.

476 476 


1403* `pre_tokens` : nombre approximatif de tokens avant la compaction1403* `pre_tokens` : nombre approximatif de tokens avant la compaction

1404* `post_tokens` : nombre approximatif de tokens après la compaction1404* `post_tokens` : nombre approximatif de tokens après la compaction

1405* `error` : message d'erreur lorsque la compaction a échoué1405* `error` : message d'erreur lorsque la compaction a échoué

1406* `precompute_reuse` : Défini uniquement lorsque `trigger` vaut `"manual"` ou pour une [compaction en période d'inactivité](https://code.claude.com/docs/fr/settings-reference.md#idlecompaction), qui rapporte `trigger` comme `"auto"`. La compaction automatique peut préparer un résumé en arrière-plan avant que la fenêtre de contexte ne soit pleine, et cet attribut indique si la compaction a réutilisé ce résumé préparé. `"hit"` signifie qu'il a été réutilisé ; `"miss_custom_instructions"`, `"miss_hook"` et `"miss_not_ready"` indiquent la raison pour laquelle un nouveau résumé a été calculé à la place1406* `precompute_reuse` : défini uniquement lorsque `trigger` vaut `"manual"`, ou lorsque `trigger` vaut `"auto"` pour une [compaction en période d'inactivité](https://code.claude.com/docs/fr/settings-reference.md#idlecompaction) dans une session interactive de terminal. La compaction automatique peut préparer un résumé en arrière-plan avant que la fenêtre de contexte ne soit pleine, et cet attribut indique si la compaction a réutilisé ce résumé préparé. `"hit"` signifie qu'il a été réutilisé ; `"miss_custom_instructions"`, `"miss_hook"` et `"miss_not_ready"` indiquent la raison pour laquelle un nouveau résumé a été calculé à la place

1407 1407 

1408#### Événement de sous-agent terminé1408#### Événement de sous-agent terminé

1409 1409 

Details

244 244 

245Un mode que vous choisissez dans le sélecteur de mode est mémorisé par dossier et prend précédence sur `defaultMode` pour ce dossier. Plan est l'exception : le choisir s'applique à la session actuelle uniquement.245Un mode que vous choisissez dans le sélecteur de mode est mémorisé par dossier et prend précédence sur `defaultMode` pour ce dossier. Plan est l'exception : le choisir s'applique à la session actuelle uniquement.

246 246 

247Pour où `defaultMode` va dans un fichier de paramètres, voir l'exemple sous [Démarrer dans un mode de permission différent](#start-in-a-different-mode).247Pour savoir où placer `defaultMode` dans un fichier de paramètres, voir l'exemple sous [Démarrer dans un mode de permission différent](#start-in-a-different-mode).

248 248 

249**Web and mobile**249**Web and mobile**

250 250 

251Sur [claude.ai/code](https://claude.ai/code), utilisez la liste déroulante de mode à côté de la zone de saisie. Dans l'application mobile, appuyez sur le bouton **+** dans la zone de saisie, puis sur **Permission**. Les sessions cloud et les sessions Remote Control proposent des modes de permission différents :251Sur [claude.ai/code](https://claude.ai/code), utilisez la liste déroulante de mode dans la rangée sous la zone de saisie. Dans l'application mobile, appuyez sur le bouton **+** dans la zone de saisie, puis sur **Permission**. Les sessions cloud et les sessions Remote Control proposent des modes de permission différents :

252 252 

253* **[Sessions cloud](https://code.claude.com/docs/fr/claude-code-on-the-web.md)** : Accept edits, Plan et Auto. Accept edits correspond au mode `default` : les sessions cloud pré-approuvent les modifications de fichiers quel que soit le mode, donc la liste déroulante affiche Accept edits au lieu de Manual. Les sessions cloud honorent toujours `defaultMode: "acceptEdits"` à partir des paramètres. Le mode Auto n'apparaît que quand votre organisation le permet et que le modèle sélectionné le supporte. Bypass permissions n'est pas disponible.253* **[Sessions cloud](https://code.claude.com/docs/fr/claude-code-on-the-web.md)** : Accept edits, Plan et Auto. Accept edits correspond au mode `default` : les sessions cloud pré-approuvent les modifications de fichiers quel que soit le mode, donc la liste déroulante affiche Accept edits au lieu de Manual. Les sessions cloud honorent toujours `defaultMode: "acceptEdits"` à partir des paramètres. Le mode Auto n'apparaît que quand votre organisation le permet et que le modèle sélectionné le supporte. Bypass permissions n'est pas disponible.

254* **[Sessions Remote Control](https://code.claude.com/docs/fr/remote-control.md)** sur votre machine locale : Manual, Accept edits, Plan et Auto pour une session que vous avez démarrée vous-même, et vous ne pouvez pas sélectionner Bypass permissions à partir de l'application. Pour utiliser Auto, la session doit satisfaire les [conditions de disponibilité](#eliminate-prompts-with-auto-mode) du mode auto. Pour un fil de projet s'exécutant sur votre ordinateur, voir [Exécuter un fil sur votre propre ordinateur](https://code.claude.com/docs/fr/claude-projects.md#run-a-thread-on-your-own-computer).254* **[Sessions Remote Control](https://code.claude.com/docs/fr/remote-control.md)** sur votre machine locale : Manual, Accept edits, Plan et Auto pour une session que vous avez démarrée vous-même, et vous ne pouvez pas sélectionner Bypass permissions à partir de l'application. Pour utiliser Auto, la session doit satisfaire les [conditions de disponibilité](#eliminate-prompts-with-auto-mode) du mode auto. Pour un fil de projet s'exécutant sur votre ordinateur, voir [Exécuter un fil sur votre propre ordinateur](https://code.claude.com/docs/fr/claude-projects.md#run-a-thread-on-your-own-computer).

Details

584 584 

585La commande d'un moniteur est limitée dans où elle démarre et ce qu'elle peut référencer :585La commande d'un moniteur est limitée dans où elle démarre et ce qu'elle peut référencer :

586 586 

587* **Sessions interactives seulement** : les moniteurs du plugin démarrent dans une session interactive et jamais en mode non interactif avec le flag `-p`. Ils ne démarrent pas non plus dans les sessions où le fournisseur d'API ou les paramètres de télémétrie rendent l'[outil Monitor](https://code.claude.com/docs/fr/tools-reference.md#monitor-tool) indisponible587* **Sessions interactives** : les moniteurs du plugin ne démarrent pas en mode non interactif avec le flag `-p`

588* **Version minimale** : sur Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform ou Microsoft Foundry, ou lorsque `DISABLE_TELEMETRY` ou `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` est défini, les moniteurs nécessitent Claude Code v2.1.310 ou ultérieur. Cette exigence s'applique lorsque la [récupération des feature flags](https://code.claude.com/docs/fr/env-vars.md#features-that-need-feature-flag-fetching) est désactivée

588* **Pas de configuration utilisateur** : `command` obtient les [variables de chemin](#path-variables-and-persistent-data) et `${ENV_VAR}` de l'environnement, mais jamais `${user_config.*}`. Un moniteur qui en référence un ne démarre pas, et les processus de moniteur ne reçoivent pas non plus `CLAUDE_PLUGIN_OPTION_<KEY>`589* **Pas de configuration utilisateur** : `command` obtient les [variables de chemin](#path-variables-and-persistent-data) et `${ENV_VAR}` de l'environnement, mais jamais `${user_config.*}`. Un moniteur qui en référence un ne démarre pas, et les processus de moniteur ne reçoivent pas non plus `CLAUDE_PLUGIN_OPTION_<KEY>`

589* **Désactivation en cours de session** : si vous désactivez un plugin en cours de session, Claude Code n'arrête pas les moniteurs qui s'exécutent déjà. Ils s'arrêtent quand la session se termine590* **Désactivation en cours de session** : si vous désactivez un plugin en cours de session, Claude Code n'arrête pas les moniteurs qui s'exécutent déjà. Ils s'arrêtent quand la session se termine

590 591 


647 648 

648Dans le chemin du répertoire de données, `<id>` est l'identifiant du plugin avec chaque caractère autre que les lettres, les chiffres, `_`, et `-` remplacé par `-`, donc `my-plugin@my-marketplace` devient `my-plugin-my-marketplace`.649Dans le chemin du répertoire de données, `<id>` est l'identifiant du plugin avec chaque caractère autre que les lettres, les chiffres, `_`, et `-` remplacé par `-`, donc `my-plugin@my-marketplace` devient `my-plugin-my-marketplace`.

649 650 

650Sur Windows, les chemins substitués utilisent des barres obliques avant pour qu'un shell ne lise pas les barres obliques arrière comme des échappements.651Sur Windows, la plupart des chemins substitués utilisent des barres obliques avant, comme dans `C:/Users/you/...`. Ils conservent leurs barres obliques arrière natives dans un [hook en forme exec](https://code.claude.com/docs/fr/hooks.md#exec-form-and-shell-form) et dans un hook qui s'exécute via PowerShell, qui est le shell par défaut sur Windows lorsque Git Bash n'est pas installé.

651 652 

652### Installer les dépendances dans le répertoire de données653### Installer les dépendances dans le répertoire de données

653 654 

Details

148 148 

149Lorsque les deux noms diffèrent et que quelqu'un installe par le nom du manifeste, Claude Code signale `Plugin "<manifest-name>" not found in marketplace "<marketplace>"`. Gardez les deux noms identiques. Pour plus d'informations sur la façon dont Claude Code utilise les deux noms, voir [Référence de chargement des plugins](https://code.claude.com/docs/fr/plugins/loading.md#find-where-a-plugin-came-from).149Lorsque les deux noms diffèrent et que quelqu'un installe par le nom du manifeste, Claude Code signale `Plugin "<manifest-name>" not found in marketplace "<marketplace>"`. Gardez les deux noms identiques. Pour plus d'informations sur la façon dont Claude Code utilise les deux noms, voir [Référence de chargement des plugins](https://code.claude.com/docs/fr/plugins/loading.md#find-where-a-plugin-came-from).

150 150 

151### Exclure les sous-modules inutilisés du clone

152 

153Lorsque quelqu'un ajoute votre marketplace, Claude Code clone le dépôt et ne récupère que les sous-modules git qui contiennent des fichiers de plugins. Nécessite Claude Code v2.1.295 ou version ultérieure.

154 

155Vous décidez quels sous-modules Claude Code récupère selon l'endroit où vous placez chaque plugin :

156 

157* **Un plugin dans un sous-répertoire** : Claude Code récupère les sous-modules situés dans le répertoire du plugin ainsi qu'un sous-module qui le contient. Placez un sous-module dont votre plugin a besoin dans le répertoire du plugin, et gardez à l'extérieur ceux dont il n'a pas besoin

158* **Un plugin à la racine de la marketplace** : Claude Code récupère tous les sous-modules du dépôt dès que l'un des fichiers du plugin fait référence à un chemin situé dans l'un d'entre eux. Si votre dépôt contient un sous-module volumineux que seul votre build utilise, déplacez le plugin dans un sous-répertoire

159 

160Si un plugin situé à la racine exécute un fichier provenant d'un sous-module, écrivez le chemin complet du fichier dans la configuration du hook ou du serveur du plugin, par exemple `${CLAUDE_PLUGIN_ROOT}/vendor/tool/run.sh`. Claude Code lit ces chemins pour déterminer si le plugin a besoin des sous-modules. Il ne peut pas voir un chemin qu'un script construit pendant son exécution.

161 

162Pour la règle complète, voir [Sous-modules Git dans le dépôt de la marketplace](https://code.claude.com/docs/fr/plugins/marketplace-reference.md#git-submodules-in-the-marketplace-repository).

163 

151## Choisir une source de plugin164## Choisir une source de plugin

152 165 

153Chaque entrée de plugin dans `marketplace.json` a une `source` qui indique à Claude Code où récupérer ce plugin. Choisissez la source en fonction de l'endroit où les fichiers du plugin sont stockés. Le tableau répertorie les sources que la plupart des propriétaires de marketplace utilisent.166Chaque entrée de plugin dans `marketplace.json` a une `source` qui indique à Claude Code où récupérer ce plugin. Choisissez la source en fonction de l'endroit où les fichiers du plugin sont stockés. Le tableau répertorie les sources que la plupart des propriétaires de marketplace utilisent.

Details

111Dites aux utilisateurs ce que chaque protocole a besoin sur leur machine :111Dites aux utilisateurs ce que chaque protocole a besoin sur leur machine :

112 112 

113* **SSH** : la clé doit fonctionner sans invite de phrase secrète, par exemple parce qu'elle est chargée dans `ssh-agent`. L'hôte doit déjà être dans `known_hosts`.113* **SSH** : la clé doit fonctionner sans invite de phrase secrète, par exemple parce qu'elle est chargée dans `ssh-agent`. L'hôte doit déjà être dans `known_hosts`.

114* **HTTPS** : Claude Code laisse l'assistant d'identifiants git de l'utilisateur activé mais lui interdit de demander. Un identifiant que l'assistant stocke déjà fonctionne ; un qu'il devrait demander échoue. Sur GitHub, `gh auth login` suivi de `gh auth setup-git` en stocke un.114* **HTTPS** : Claude Code laisse l'assistant d'identifiants git de l'utilisateur activé mais lui interdit de demander, et n'exécute pas les programmes askpass tels que celui défini dans `GIT_ASKPASS`. Des identifiants que l'assistant stocke déjà fonctionnent ; des identifiants qu'il devrait demander échouent. Sur GitHub, `gh auth login` suivi de `gh auth setup-git` les stocke.

115 115 

116Pour un hôte GitHub Enterprise Server, les utilisateurs ont besoin d'accès git à cet hôte depuis leur machine. Voir [Plugin marketplaces on GHES](https://code.claude.com/docs/fr/github-enterprise-server.md#plugin-marketplaces-on-ghes) pour ce que chaque surface Claude Code a besoin d'atteindre une marketplace hébergée sur GHES.116Pour un hôte GitHub Enterprise Server, les utilisateurs ont besoin d'accès git à cet hôte depuis leur machine. Voir [Plugin marketplaces on GHES](https://code.claude.com/docs/fr/github-enterprise-server.md#plugin-marketplaces-on-ghes) pour ce que chaque surface Claude Code a besoin d'atteindre une marketplace hébergée sur GHES.

117 117 

Details

238 238 

239Une marketplace privée est celle dans un référentiel auquel vous avez besoin d'identifiants pour cloner, sur GitHub ou n'importe quel autre hôte git. Vous l'ajoutez avec la même commande `/plugin marketplace add` ou `claude plugin marketplace add` qu'une marketplace publique. Claude Code la clone avec les identifiants git déjà sur votre machine et ne demande jamais, donc chaque façon de se connecter a une exigence :239Une marketplace privée est celle dans un référentiel auquel vous avez besoin d'identifiants pour cloner, sur GitHub ou n'importe quel autre hôte git. Vous l'ajoutez avec la même commande `/plugin marketplace add` ou `claude plugin marketplace add` qu'une marketplace publique. Claude Code la clone avec les identifiants git déjà sur votre machine et ne demande jamais, donc chaque façon de se connecter a une exigence :

240 240 

241* **HTTPS** : vos assistants d'identifiants git s'appliquent, donc l'accès que vous avez configuré avec `gh auth login`, le Keychain macOS ou `git-credential-store` fonctionne. Les invites interactives sont supprimées, donc un hôte auquel vous ne vous êtes jamais authentifié échoue au lieu de demander un mot de passe.241* **HTTPS** : vos assistants d'identifiants git s'appliquent, donc l'accès que vous avez configuré avec `gh auth login`, le Keychain macOS ou `git-credential-store` fonctionne. Les invites de git et les programmes askpass sont désactivés, y compris celui défini dans `GIT_ASKPASS`, de sorte que le clonage échoue au lieu de demander lorsque git devrait demander des identifiants.

242* **SSH** : l'hôte doit déjà être dans votre fichier `known_hosts` et la clé doit fonctionner sans invite de phrase secrète. Si votre configuration git nomme un programme SSH dans `GIT_SSH_COMMAND`, `GIT_SSH`, ou la `core.sshCommand` de votre configuration git, Claude Code exécute ce programme.242* **SSH** : l'hôte doit déjà être dans votre fichier `known_hosts` et la clé doit fonctionner sans invite de phrase secrète. Si votre configuration git nomme un programme SSH dans `GIT_SSH_COMMAND`, `GIT_SSH`, ou la `core.sshCommand` de votre configuration git, Claude Code exécute ce programme.

243* **Raccourci GitHub `owner/repo`** : Claude Code vérifie si votre clé SSH s'authentifie à `github.com`, puis clone sur SSH si c'est le cas et sur HTTPS sinon. Définissez [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](https://code.claude.com/docs/fr/env-vars#variables) pour ignorer cette vérification et toujours cloner sur HTTPS.243* **Raccourci GitHub `owner/repo`** : Claude Code vérifie si votre clé SSH s'authentifie à `github.com`, puis clone sur SSH si c'est le cas et sur HTTPS sinon. Définissez [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](https://code.claude.com/docs/fr/env-vars#variables) pour ignorer cette vérification et toujours cloner sur HTTPS.

244 244 

Details

41* **Un marché que les paramètres déclarent mais que `known_marketplaces.json` manque** : Claude Code le clone, puis recharge les plugins et télécharge les plugins activés qui ne sont pas en cache41* **Un marché que les paramètres déclarent mais que `known_marketplaces.json` manque** : Claude Code le clone, puis recharge les plugins et télécharge les plugins activés qui ne sont pas en cache

42* **Un marché déclaré dont la source a changé dans les paramètres** : Claude Code le récupère à nouveau à partir de la nouvelle source et affiche `Plugins changed. Run /reload-plugins to activate.`42* **Un marché déclaré dont la source a changé dans les paramètres** : Claude Code le récupère à nouveau à partir de la nouvelle source et affiche `Plugins changed. Run /reload-plugins to activate.`

43 43 

44Un plugin activé qu'aucun chemin n'a récupéré et qui n'a pas de répertoire de cache utilisable affiche `Plugin "<name>" not cached at <path>` dans l'onglet **Errors** de `/plugin`, et `claude plugin list` ajoute `— run /plugin to refresh` à la même ligne. Pour le correctif, voir [`Plugin "<name>" not cached at <path>`](https://code.claude.com/docs/fr/plugins/troubleshooting#plugin-not-cached-at).44Un plugin activé qu'aucun de ces deux chemins n'a récupéré et qui n'a pas de répertoire de cache utilisable affiche `Plugin "<name>" not cached at <path>` dans l'onglet **Errors** de `/plugin`. Pour le correctif, voir [`Plugin "<name>" not cached at <path>`](https://code.claude.com/docs/fr/plugins/troubleshooting#plugin-not-cached-at).

45 45 

46## Trouver d'où vient un plugin46## Trouver d'où vient un plugin

47 47 

Details

155| `workflows` | Path, or array of paths | Fichiers [Workflow](https://code.claude.com/docs/fr/workflows.md#distribute-a-workflow-in-a-plugin) `.js` ou répertoires. Remplace l'analyse par défaut `workflows/` |155| `workflows` | Path, or array of paths | Fichiers [Workflow](https://code.claude.com/docs/fr/workflows.md#distribute-a-workflow-in-a-plugin) `.js` ou répertoires. Remplace l'analyse par défaut `workflows/` |

156| `experimental` | Object | Conteneur pour `themes`, `monitors`, et `evals`, dont la forme de manifeste peut encore changer |156| `experimental` | Object | Conteneur pour `themes`, `monitors`, et `evals`, dont la forme de manifeste peut encore changer |

157| `experimental.themes` | Path, or array of paths | Fichiers de thème ou répertoires. Remplace l'analyse par défaut `themes/`. Une clé `themes` de niveau supérieur se charge toujours, avec un avertissement `claude plugin validate` |157| `experimental.themes` | Path, or array of paths | Fichiers de thème ou répertoires. Remplace l'analyse par défaut `themes/`. Une clé `themes` de niveau supérieur se charge toujours, avec un avertissement `claude plugin validate` |

158| [`experimental.monitors`](#monitors) | Path, or inline array | Un fichier `.json` contenant le tableau monitors, ou le tableau lui-même. Par défaut `monitors/monitors.json`. Une clé `monitors` de niveau supérieur se charge toujours, avec un avertissement `claude plugin validate`. Les monitors ne s'exécutent que dans les sessions interactives, et non sur Amazon Bedrock, Google Cloud's Agent Platform, ou Microsoft Foundry |158| [`experimental.monitors`](#monitors) | Path, or inline array | Un fichier `.json` contenant le tableau monitors, ou le tableau lui-même. Par défaut `monitors/monitors.json`. Une clé `monitors` de niveau supérieur se charge toujours, avec un avertissement `claude plugin validate`. Les monitors [ne démarrent pas avec le flag `-p`](https://code.claude.com/docs/fr/plugins/components#monitors) |

159| `experimental.evals` | Path, or array of paths | Répertoire qui contient les [cas d'évaluation](https://code.claude.com/docs/fr/plugin-evals.md#use-a-different-eval-directory) du plugin lorsqu'il n'est pas le répertoire par défaut `evals/`. `claude plugin eval --eval-dir` le remplace |159| `experimental.evals` | Path, or array of paths | Répertoire qui contient les [cas d'évaluation](https://code.claude.com/docs/fr/plugin-evals.md#use-a-different-eval-directory) du plugin lorsqu'il n'est pas le répertoire par défaut `evals/`. `claude plugin eval --eval-dir` le remplace |

160 160 

161Dans la colonne Type, un chemin est une chaîne relative à la racine du plugin, comme `"./custom/commands"`.161Dans la colonne Type, un chemin est une chaîne relative à la racine du plugin, comme `"./custom/commands"`.


606}606}

607```607```

608 608 

609Sur Windows, les chemins substitués utilisent des barres obliques avant afin qu'un shell ne lise pas les barres obliques inverses comme des échappements.609Sur Windows, la plupart des chemins substitués utilisent des barres obliques avant, comme dans `C:/Users/you/...`. Ils conservent leurs barres obliques inverses natives dans un [hook de forme exec](https://code.claude.com/docs/fr/hooks.md#exec-form-and-shell-form) et dans un hook qui s'exécute via PowerShell, qui est le shell par défaut sur Windows lorsque Git Bash n'est pas installé.

610 610 

611## Disposition standard611## Disposition standard

612 612 

Details

172* **`url`** : Claude Code récupère uniquement `marketplace.json`, donc les chemins relatifs ne peuvent pas se résoudre. Donnez à chaque plugin une source d'objet à la place, telle que `github` ou `git-subdir`.172* **`url`** : Claude Code récupère uniquement `marketplace.json`, donc les chemins relatifs ne peuvent pas se résoudre. Donnez à chaque plugin une source d'objet à la place, telle que `github` ou `git-subdir`.

173* **`settings`** : les chemins relatifs sont rejetés d'emblée.173* **`settings`** : les chemins relatifs sont rejetés d'emblée.

174 174 

175#### Sous-modules Git dans le dépôt de la marketplace

176 

177Lorsque Claude Code clone le dépôt d'une marketplace, il récupère uniquement les sous-modules git qui contiennent des fichiers de plugin. Nécessite Claude Code v2.1.295 ou ultérieure.

178 

179Les versions antérieures récupèrent tous les sous-modules, y compris les sous-modules imbriqués. Si le dépôt contient un sous-module volumineux, Claude Code peut alors dépasser le [délai d'expiration du clone](https://code.claude.com/docs/fr/plugins/troubleshooting.md#git-clone-timed-out-after-120s) pendant sa récupération.

180 

181Pour un plugin situé dans un sous-répertoire, tel que `./plugins/formatter`, Claude Code récupère un sous-module dans les cas suivants :

182 

183* **Le plugin se trouve dans le sous-module** : le sous-module est le répertoire du plugin ou un répertoire situé au-dessus de celui-ci

184* **Le sous-module se trouve dans le plugin** : le sous-module est n'importe où sous le répertoire du plugin

185* **Un lien symbolique pointe vers le sous-module** : un lien commité dans le dépôt a sa cible dans le sous-module

186 

187Un plugin à la racine de la marketplace, avec `"source": "./"`, obtient soit tous les sous-modules du dépôt, soit aucun. Claude Code récupère tous les sous-modules lorsque l'un des éléments suivants pointe vers un sous-module quelconque :

188 

189* **Un répertoire de composants** : un répertoire à la racine qui contient des composants de plugin, tel que `skills/`, `hooks/` ou `bin/`

190* **Un chemin dans la configuration du plugin** : un chemin dans l'entrée marketplace du plugin, dans son `plugin.json`, ou dans un fichier de configuration tel que `.mcp.json` ou `hooks/hooks.json`

191* **Un lien symbolique** : un lien commité dans le dépôt

192* **Du texte dans les fichiers du plugin** : le chemin d'un sous-module, tel que `vendor/tool`, écrit dans un fichier de configuration ou dans un fichier situé sous un répertoire de composants

193 

194Lorsque aucun d'eux ne le fait, Claude Code ne récupère aucun sous-module pour ce plugin. Un dépôt qui est à la fois un projet et un plugin possède souvent des sous-modules que seul le build du projet utilise, et cette règle les laisse de côté.

195 

196Claude Code récupère également tous les sous-modules lorsqu'il ne peut pas déterminer lesquels contiennent des fichiers de plugin, par exemple :

197 

198* **Un `SKILL.md` à la racine** : le dépôt entier est alors le répertoire d'un seul skill

199* **Un fichier que Claude Code ne peut pas lire** : le fichier marketplace, l'un des fichiers de configuration du plugin, ou `.gitmodules`

200 

201Si vous ajoutez une marketplace avec `--sparse`, ou si sa source définit `sparsePaths`, Claude Code extrait uniquement les répertoires qui y sont nommés et ne récupère aucun sous-module. Les versions antérieures font de même.

202 

203Pour exclure du clone un sous-module que vos plugins n'utilisent pas, voir [Exclure les sous-modules inutilisés du clone](https://code.claude.com/docs/fr/plugins/create-marketplace.md#keep-unused-submodules-out-of-the-clone).

204 

175#### Noms nus sous pluginRoot205#### Noms nus sous pluginRoot

176 206 

177Un nom nu est un seul nom de répertoire sans `/`, tel que `"formatter"`. Pour écrire des noms nus au lieu de chemins `./`, définissez [`metadata.pluginRoot`](#top-level-fields) sur le répertoire sous lequel ils se résolvent. Avec `"pluginRoot": "./plugins"`, `"source": "formatter"` se résout à `./plugins/formatter`. Nécessite Claude Code v2.1.239 ou ultérieure.207Un nom nu est un seul nom de répertoire sans `/`, tel que `"formatter"`. Pour écrire des noms nus au lieu de chemins `./`, définissez [`metadata.pluginRoot`](#top-level-fields) sur le répertoire sous lequel ils se résolvent. Avec `"pluginRoot": "./plugins"`, `"source": "formatter"` se résout à `./plugins/formatter`. Nécessite Claude Code v2.1.239 ou ultérieure.

Details

313 313 

314#### Ce que retournent les appels refusés314#### Ce que retournent les appels refusés

315 315 

316Dans les résultats, `<reason>` représente `the session was stopped and nobody has sent input since` :316Dans les résultats, `<reason>` représente la raison pour laquelle l'appel a été refusé. Après une interruption, il s'agit de `the session was stopped and nobody has sent input since`. Pour les autres raisons, consultez [Appels refusés dans les exécutions `claude -p` et les sessions Agent SDK](#calls-refused-in-non-interactive-runs).

317 317 

318| Quelques appels refusés | Résultat jusqu'à la prochaine saisie de l'utilisateur |318| Quelques appels refusés | Résultat |

319| :- | :- |319| :- | :- |

320| `$.prompt.submit` | Se résout avec `{ drop: '<reason>' }` et ne met aucun prompt en file d'attente |320| `$.prompt.submit` | Se résout avec `{ drop: '<reason>' }` et ne met aucun prompt en file d'attente |

321| `$.command.run` | Rejette avec une erreur dont le message se termine par `<reason>` |321| `$.command.run` | Rejette avec une erreur dont le message se termine par `<reason>` |


324| `$.session.send` vers un coéquipier d'une [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md) | Se résout avec `{ isDelivered: false, reason: 'Teammate "<name>" was not messaged: <reason>.' }`, où `<name>` est le nom du coéquipier |324| `$.session.send` vers un coéquipier d'une [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md) | Se résout avec `{ isDelivered: false, reason: 'Teammate "<name>" was not messaged: <reason>.' }`, où `<name>` est le nom du coéquipier |

325| [`$.tool.call`](https://code.claude.com/docs/fr/plugins/mods/reference#mods-api-methods) de Bash avec `run_in_background: true`, Monitor ou CronCreate | Se résout avec `{ deny: '<tool> was not run: it starts background work, a schedule or a goal, and <reason>' }`, où `<tool>` est le nom de l'outil |325| [`$.tool.call`](https://code.claude.com/docs/fr/plugins/mods/reference#mods-api-methods) de Bash avec `run_in_background: true`, Monitor ou CronCreate | Se résout avec `{ deny: '<tool> was not run: it starts background work, a schedule or a goal, and <reason>' }`, où `<tool>` est le nom de l'outil |

326 326 

327En plus de ces résultats de `$.session.send` et `$.tool.call`, l'utilisateur peut voir le [toast `Stopped:`](https://code.claude.com/docs/fr/plugins/mods/troubleshoot#stopped-type-a-message-to-continue).327Quand l'un de ces appels `$.session.send` ou `$.tool.call` est refusé après une interruption dans une session interactive, l'utilisateur peut voir le [toast `Stopped:`](https://code.claude.com/docs/fr/plugins/mods/troubleshoot#stopped-type-a-message-to-continue).

328 328 

329#### Travail que votre mod a démarré avant l'interruption329#### Travail que votre mod a démarré avant l'interruption

330 330 


341 341 

342Quand l'échéance d'une tâche planifiée arrive ou qu'un moniteur émet un événement avant la prochaine saisie de l'utilisateur, l'utilisateur peut voir le [toast `Stopped:`](https://code.claude.com/docs/fr/plugins/mods/troubleshoot#stopped-type-a-message-to-continue).342Quand l'échéance d'une tâche planifiée arrive ou qu'un moniteur émet un événement avant la prochaine saisie de l'utilisateur, l'utilisateur peut voir le [toast `Stopped:`](https://code.claude.com/docs/fr/plugins/mods/troubleshoot#stopped-type-a-message-to-continue).

343 343 

344### Appels refusés dans les exécutions `claude -p` et les sessions Agent SDK

345 

346Dans une exécution `claude -p` ou une session [Agent SDK](https://code.claude.com/docs/fr/agent-sdk/overview.md), un résultat comme `{ drop: 'the run reached its --max-turns limit' }` signifie que l'exécution a refusé l'appel de votre mod.

347 

348Un `$.prompt.submit` refusé se résout avec `{ drop: '<reason>' }`. Les autres appels refusés, comme `$.command.run` et `$.agent.spawn`, donnent les résultats présentés dans [Ce que retournent les appels refusés](#what-refused-calls-return), avec la raison à la place de `<reason>`. Trouvez votre `<reason>` ci-dessous pour savoir quoi faire :

349 

350* **`the run reached its --max-turns limit`** : les tours issus des prompts de votre mod et des sous-agents qu'il lance comptent dans [`--max-turns`](https://code.claude.com/docs/fr/cli-reference#cli-flags) ou dans la [limite de tours](https://code.claude.com/docs/fr/agent-sdk/configuration.md#limit-turns-and-spend) de l'Agent SDK. Pour disposer de plus de tours, démarrez l'exécution avec une limite plus élevée. Si vous ne le pouvez pas, faites en sorte que votre mod cesse d'effectuer l'appel refusé. Si l'exécution reçoit un autre prompt de l'utilisateur ou de l'application SDK, le nombre de tours est réinitialisé et l'exécution accepte de nouveau les appels.

351* **`the run is past its --max-budget-usd limit`** : démarrez l'exécution avec un `--max-budget-usd` plus élevé, ou augmentez la [limite de dépenses](https://code.claude.com/docs/fr/agent-sdk/configuration.md#limit-turns-and-spend) de l'Agent SDK. Si vous ne le pouvez pas, faites en sorte que votre mod cesse d'effectuer l'appel refusé. La limite s'applique au coût total de l'exécution jusqu'à présent. Ce total continue de s'additionner quand l'exécution reçoit un autre prompt, donc une nouvelle tentative retourne la même raison.

352* **`the host has ended its input`** : par exemple, l'application SDK a mis fin à son [entrée en streaming](https://code.claude.com/docs/fr/agent-sdk/streaming-vs-single-mode.md), ou stdin s'est fermé sur une exécution démarrée avec [`--input-format stream-json`](https://code.claude.com/docs/fr/cli-reference#cli-flags). L'exécution se termine et n'accepte plus d'entrée, donc une nouvelle tentative retourne la même raison. Faites en sorte que votre mod cesse d'effectuer l'appel refusé. Si vous démarrez vous-même l'exécution, la prochaine fois, gardez cette entrée ouverte jusqu'à ce que votre mod n'ait plus d'appels à effectuer.

353* **`the session was stopped and nobody has sent input since`** : l'exécution a été [interrompue](#calls-and-background-work-after-the-user-interrupts-a-turn), par exemple avec [`interrupt()`](https://code.claude.com/docs/fr/agent-sdk/typescript#query-object) de l'Agent SDK. Pour refaire l'appel après le prochain message de l'utilisateur ou de l'application SDK, suivez [Réessayer un appel refusé ou abandonné](#retry-a-refused-or-dropped-call).

354 

355### Une exécution `claude -p` avec votre mod ne se termine jamais

356 

357Si votre mod soumet un prompt à la fin de chaque tour, chaque prompt démarre un autre tour. Sans [`--max-turns`](https://code.claude.com/docs/fr/cli-reference#cli-flags) ni `--max-budget-usd`, une exécution `claude -p` qui charge le mod continue jusqu'à ce que vous l'arrêtiez vous-même.

358 

359Pour que l'exécution se termine d'elle-même, ajoutez l'un ou l'autre flag à la commande dans votre shell. Si d'autres personnes démarrent l'exécution, faites en sorte que votre mod cesse de soumettre des prompts une fois son travail terminé. Cette commande ajoute `--max-turns` :

360 

361```bash theme={null}

362claude -p "find the TODOs" --max-turns 5

363```

364 

365Une fois que l'exécution atteint cette limite, le prompt suivant du mod est [refusé](#calls-refused-in-non-interactive-runs) au lieu de démarrer un tour, et l'exécution se termine.

366 

367Si l'exécution dépasse toujours la limite, exécutez `claude --version` dans votre shell, et [mettez à jour Claude Code](https://code.claude.com/docs/fr/setup.md#update-claude-code) si votre version est antérieure à v2.1.304. Les prompts du mod sont refusés à la limite à partir de v2.1.299. Si votre mod lance des sous-agents, leurs tours comptent dans `--max-turns` à partir de v2.1.304.

368 

344## Envoyer et recevoir des messages entre les sessions369## Envoyer et recevoir des messages entre les sessions

345 370 

346Un mod peut envoyer un message en texte brut à une autre de vos sessions, à l'un des sous-agents de cette session ou à un coéquipier de son [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md). Il peut aussi observer les messages qui arrivent et partent.371Un mod peut envoyer un message en texte brut à une autre de vos sessions, à l'un des sous-agents de cette session ou à un coéquipier de son [équipe d'agents](https://code.claude.com/docs/fr/agent-teams.md). Il peut aussi observer les messages qui arrivent et partent.


390| `$.http` | `fetch(url, init)` sur `http` ou `https`. Il se résout en `{ status, ok, headers, text }` une fois le corps lu. |415| `$.http` | `fetch(url, init)` sur `http` ou `https`. Il se résout en `{ status, ok, headers, text }` une fois le corps lu. |

391| `$.store` | Un magasin de paires clé-valeur JSON de votre propre plugin, conservé entre les sessions |416| `$.store` | Un magasin de paires clé-valeur JSON de votre propre plugin, conservé entre les sessions |

392| `$.env` | `get` et `set` les variables d'environnement. Écrivez le nom comme une chaîne littérale. |417| `$.env` | `get` et `set` les variables d'environnement. Écrivez le nom comme une chaîne littérale. |

393| `$.settings` | `read` ce que les fichiers de paramètres et la politique gérée contiennent |418| `$.settings` | `read()` se résout en l'ensemble des paramètres, fusionnés en un seul objet. Avec `{ source }` ou `{ key }`, il se résout plutôt en [paramètres d'une seule source ou en valeur d'une seule clé](#read-one-source-or-one-key). |

394| `$.session` | `messages()` retourne la transcription comme une liste de `{ role, text, toolUses }`. Aussi le répertoire de travail, le modèle, et plus. [`usage()`](https://code.claude.com/docs/fr/plugins/mods/reference#mods-api-methods) retourne l'utilisation de la fenêtre de contexte et les limites du plan. |419| `$.session` | `messages()` retourne la transcription comme une liste de `{ role, text, toolUses }`. Aussi le répertoire de travail, le modèle, et plus. [`usage()`](https://code.claude.com/docs/fr/plugins/mods/reference#mods-api-methods) retourne l'utilisation de la fenêtre de contexte et les limites du plan. |

395| `$.mcp` | `call` un outil sur un serveur MCP connecté |420| `$.mcp` | `call` un outil sur un serveur MCP connecté |

396 421 


408* **`$.process.spawn started, and a plugin withheld its result:`** : le mod qui refuse n'avait pas lu la sortie de la commande jusqu'au bout. Claude Code arrête la commande si elle est toujours en cours d'exécution.433* **`$.process.spawn started, and a plugin withheld its result:`** : le mod qui refuse n'avait pas lu la sortie de la commande jusqu'au bout. Claude Code arrête la commande si elle est toujours en cours d'exécution.

409* **`$.process.spawn ran, and a plugin withheld its result:`** : le mod qui refuse avait lu la sortie de la commande jusqu'au bout, donc la commande s'était terminée434* **`$.process.spawn ran, and a plugin withheld its result:`** : le mod qui refuse avait lu la sortie de la commande jusqu'au bout, donc la commande s'était terminée

410 435 

436### Lire tous les paramètres, une source ou une clé

437 

438`$.settings.read()` se résout en un seul objet qui contient les paramètres de toutes les sources utilisées, fusionnés selon leur [priorité](https://code.claude.com/docs/fr/settings.md#settings-precedence). Passez `{ source }` pour lire plutôt une seule source, `{ key }` pour lire une seule clé, ou les deux :

439 

440| Appel | Se résout en |

441| :- | :- |

442| `$.settings.read()` | Les paramètres fusionnés sous forme d'un seul objet. Ses clés de premier niveau sont celles d'un fichier `settings.json`, comme `permissions` et `hooks`. |

443| `$.settings.read({ source: 'policy' })` | Les paramètres de cette seule source sous forme d'un seul objet, ou `{}` lorsque cette source ne contient aucun paramètre |

444| `$.settings.read({ key: 'spinnerTipsEnabled' })` | La valeur de cette clé dans les paramètres fusionnés, ou `undefined` lorsque la clé n'est pas définie |

445| `$.settings.read({ key: 'spinnerTipsEnabled', source: 'user' })` | La valeur de cette clé dans cette seule source, ou `undefined` lorsque cette source ne la définit pas |

446 

447Pour `source`, passez le nom de la source de paramètres à lire :

448 

449* **`user`** : `~/.claude/settings.json`

450* **`project`** : `.claude/settings.json`

451* **`local`** : `.claude/settings.local.json`

452* **`flag`** : ce que vous passez avec `--settings`, ainsi que les paramètres inline du SDK

453* **`policy`** : [paramètres gérés](https://code.claude.com/docs/fr/managed-settings.md#how-claude-code-combines-managed-sources)

454 

455Pour `key`, passez le nom exact d'une clé de premier niveau, et non un chemin à points vers un objet imbriqué. L'argument `key` nécessite Claude Code v2.1.304 ou une version ultérieure.

456 

411## Prochaines étapes457## Prochaines étapes

412 458 

413* [Réagir aux événements](https://code.claude.com/docs/fr/plugins/mods/events.md) : hook les appels d'outils, les invites et les tours459* [Réagir aux événements](https://code.claude.com/docs/fr/plugins/mods/events.md) : hook les appels d'outils, les invites et les tours

Details

48 48 

49Utilisez ce que vous avez demandé. Pour l'exemple d'invite, le nom de la branche actuelle apparaît au-dessus de la boîte d'invite. Si le mod ne fait pas ce que vous vouliez, dites à Claude ce qu'il faut changer. Le mod se recharge à la fin de chaque tour qui modifie ses fichiers, vous pouvez donc essayer la modification dès que Claude a terminé.49Utilisez ce que vous avez demandé. Pour l'exemple d'invite, le nom de la branche actuelle apparaît au-dessus de la boîte d'invite. Si le mod ne fait pas ce que vous vouliez, dites à Claude ce qu'il faut changer. Le mod se recharge à la fin de chaque tour qui modifie ses fichiers, vous pouvez donc essayer la modification dès que Claude a terminé.

50 50 

51Si une ligne de la transcription commençant par le nom du mod indique que la [modification ne s'est pas chargée](https://code.claude.com/docs/fr/plugins/mods/troubleshoot.md#this-mods-change-didnt-load), collez cette ligne dans votre prochain message lorsque vous demandez un correctif à Claude. Claude ne voit pas la ligne à moins que vous ne la colliez.

52 

51### Utilisez le mod dans d'autres sessions53### Utilisez le mod dans d'autres sessions

52 54 

53Un mod que Claude a écrit ne se charge que dans la session qui l'a créé, et Claude Code supprime le dossier des mods de cette session une fois qu'il est plus ancien que [`cleanupPeriodDays`](https://code.claude.com/docs/fr/settings-reference#cleanupperioddays). Pour conserver le mod, copiez son répertoire hors du dossier des mods vers un endroit qui vous appartient, comme `~/mods/git-branch`. Ensuite, choisissez comment le charger :55Un mod que Claude a écrit ne se charge que dans la session qui l'a créé, et Claude Code supprime le dossier des mods de cette session une fois qu'il est plus ancien que [`cleanupPeriodDays`](https://code.claude.com/docs/fr/settings-reference#cleanupperioddays). Pour conserver le mod, copiez son répertoire hors du dossier des mods vers un endroit qui vous appartient, comme `~/mods/git-branch`. Ensuite, choisissez comment le charger :

Details

93 93 

94## Intercepter ce que fait Claude94## Intercepter ce que fait Claude

95 95 

96Gérez ces événements pour observer ou modifier un appel d'outil, un prompt ou un tour au moment où il se produit. Pour connaître tous les événements et ce qu'un hook peut renvoyer, consultez la [référence des événements](https://code.claude.com/docs/fr/plugins/mods/reference.md#events).96Gérez ces événements pour observer ou modifier un appel d'outil, un prompt, un tour ou une lecture des paramètres au moment où cela se produit. Pour connaître tous les événements et ce qu'un hook peut renvoyer, consultez la [référence des événements](https://code.claude.com/docs/fr/plugins/mods/reference.md#events).

97 97 

98### Contrôler ou modifier un appel d'outil98### Contrôler ou modifier un appel d'outil

99 99 


115 115 

116Lorsque Claude tente `git push --force`, la commande ne s'exécute pas et aucune demande de permission n'apparaît, car le hook n'appelle jamais `next`. Claude lit le texte de `deny` comme résultat de l'outil ; rédigez-le donc comme une instruction sur laquelle Claude peut agir. Toutes les autres commandes Bash s'exécutent comme elles le feraient sans le mod.116Lorsque Claude tente `git push --force`, la commande ne s'exécute pas et aucune demande de permission n'apparaît, car le hook n'appelle jamais `next`. Claude lit le texte de `deny` comme résultat de l'outil ; rédigez-le donc comme une instruction sur laquelle Claude peut agir. Toutes les autres commandes Bash s'exécutent comme elles le feraient sans le mod.

117 117 

118Si ce hook lève une exception ou dépasse le délai, Claude Code l'ignore et la commande se poursuit comme elle le ferait sans le mod. Pour refuser plutôt la commande, [ajoutez un gestionnaire `.catch`](#handle-a-hook-that-fails) au hook.

119 

118Pour agir après l'exécution d'un outil, faites `await next(e)`, effectuez votre traitement, puis renvoyez ce que `next` vous a fourni. Ce hook consigne chaque fichier `.mdx` que Claude modifie, avec [`$.ui.log`](https://code.claude.com/docs/fr/plugins/mods/api#show-something-without-starting-a-turn), qui ajoute à la transcription une ligne estompée que Claude ne lit pas :120Pour agir après l'exécution d'un outil, faites `await next(e)`, effectuez votre traitement, puis renvoyez ce que `next` vous a fourni. Ce hook consigne chaque fichier `.mdx` que Claude modifie, avec [`$.ui.log`](https://code.claude.com/docs/fr/plugins/mods/api#show-something-without-starting-a-turn), qui ajoute à la transcription une ligne estompée que Claude ne lit pas :

119 121 

120```javascript theme={null}122```javascript theme={null}


177* **L'utilisateur saisit une réponse** : `$.ui.ask` se résout avec le texte saisi. Le hook le compare à `Run it`, donc tout autre texte refuse la commande.179* **L'utilisateur saisit une réponse** : `$.ui.ask` se résout avec le texte saisi. Le hook le compare à `Run it`, donc tout autre texte refuse la commande.

178* **Personne ne répond** : `$.ui.ask` est rejetée lorsque l'utilisateur ferme la question ou choisit **Chat about this**, ainsi que lors d'une exécution `claude -p` ; le bloc `catch` laisse donc la réponse à `Refuse`180* **Personne ne répond** : `$.ui.ask` est rejetée lorsque l'utilisateur ferme la question ou choisit **Chat about this**, ainsi que lors d'une exécution `claude -p` ; le bloc `catch` laisse donc la réponse à `Refuse`

179 181 

180Placez l'attente dans un appel à l'API des mods comme `$.ui.ask`, car ce temps n'est pas décompté de la [limite de temps](https://code.claude.com/docs/fr/plugins/mods/reference.md#limits) du hook. Le temps passé à attendre une promesse de votre propre code, en revanche, est décompté. Claude Code ignore un hook qui dépasse le délai, si bien que la commande suspendue s'exécuterait.182Placez l'attente dans un appel à l'API des mods comme `$.ui.ask`, car ce temps n'est pas décompté de la [limite de temps](https://code.claude.com/docs/fr/plugins/mods/reference.md#limits) du hook. Le temps passé à attendre une promesse de votre propre code, en revanche, est décompté.

183 

184Claude Code ignore un hook qui dépasse le délai, si bien que la commande suspendue s'exécuterait. Pour plutôt la refuser, chaînez [un gestionnaire `.catch`](#handle-a-hook-that-fails) sur l'enregistrement que renvoie `on`. Ce gestionnaire est distinct du bloc `catch` situé à l'intérieur du hook.

181 185 

182#### Approuver ou refuser un appel d'outil avant que l'utilisateur ne soit sollicité186#### Approuver ou refuser un appel d'outil avant que l'utilisateur ne soit sollicité

183 187 


207 211 

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

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

214* **Le hook lève une exception ou dépasse le délai** : l'appel obtient également la décision qu'il obtiendrait sans le mod. Pour plutôt refuser l'appel, [ajoutez un gestionnaire `.catch`](#handle-a-hook-that-fails) qui renvoie `{ decision: 'deny', reason: 'the reason' }`.

210 215 

211Le 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.216Le 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.

212 217 


269 274 

270Lorsque vous envoyez un prompt comme `open a PR for this change`, votre message reste identique dans la transcription, et Claude lit également après celui-ci une ligne comme `Current branch: feature/auth`. Un prompt qui ne mentionne pas de pull request passe sans modification, et `git` ne s'exécute pas.275Lorsque vous envoyez un prompt comme `open a PR for this change`, votre message reste identique dans la transcription, et Claude lit également après celui-ci une ligne comme `Current branch: feature/auth`. Un prompt qui ne mentionne pas de pull request passe sans modification, et `git` ne s'exécute pas.

271 276 

272Pour arrêter un prompt, renvoyez `{ drop: 'the reason' }` sans appeler `next`. Le texte revient dans la zone de saisie du prompt de l'utilisateur, qui voit `Prompt dropped by a hook:` suivi de votre motif ; adressez donc ce motif à l'utilisateur. Si votre hook renvoie un `drop` après que son appel `next(e)` a laissé passer le prompt, le tour s'exécute quand même, et le hook [échoue](#handle-a-hook-that-fails) avec un message qui inclut `a drop after its next() was answered`.277Pour arrêter un prompt, renvoyez `{ drop: 'the reason' }` sans appeler `next`. Le texte revient dans la zone de saisie du prompt de l'utilisateur, qui voit `Prompt dropped by a hook:` suivi de votre motif ; adressez donc ce motif à l'utilisateur. Le prompt est tout de même envoyé dans les cas suivants :

278 

279* **Votre hook renvoie un `drop` après que son appel `next(e)` a laissé passer le prompt** : le tour s'exécute quand même, et le hook [échoue](#handle-a-hook-that-fails) avec un message qui inclut `a drop after its next() was answered`

280* **Votre hook lève une exception ou dépasse le délai** : Claude Code l'ignore et envoie le prompt. [Ajoutez un gestionnaire `.catch`](#handle-a-hook-that-fails) afin qu'un échec n'envoie pas un prompt que le hook aurait arrêté.

273 281 

274[D'autres événements](https://code.claude.com/docs/fr/plugins/mods/reference.md#prompts-and-what-claude-reads) couvrent le reste de ce que lit Claude : `prompt.section` pour chaque section du prompt système, `prompt.context` pour le contexte envoyé avec le premier message, et `skill.prompt` pour le texte d'un skill. Un texte issu de ces hooks qui change d'une requête à l'autre [invalide le cache des prompts](https://code.claude.com/docs/fr/prompt-caching.md). Dans un hook `skill.prompt`, vous pouvez également lire [le plugin ou le fichier dont provient le skill](https://code.claude.com/docs/fr/plugins/mods/reference.md#skill-prompt-fields).282[D'autres événements](https://code.claude.com/docs/fr/plugins/mods/reference.md#prompts-and-what-claude-reads) couvrent le reste de ce que lit Claude : `prompt.section` pour chaque section du prompt système, `prompt.context` pour le contexte envoyé avec le premier message, et `skill.prompt` pour le texte d'un skill. Un texte issu de ces hooks qui change d'une requête à l'autre [invalide le cache des prompts](https://code.claude.com/docs/fr/prompt-caching.md). Dans un hook `skill.prompt`, vous pouvez également lire [le plugin ou le fichier dont provient le skill](https://code.claude.com/docs/fr/plugins/mods/reference.md#skill-prompt-fields).

275 283 


305 313 

306Pour voir les appels d'outils que l'API a exécutés elle-même pendant la requête, comme les appels à l'[outil advisor](https://code.claude.com/docs/fr/advisor.md), lisez `result.serverToolUses`. Claude Code n'exécute pas ces appels ; aucun hook `tool.call` ou `tool.check` ne se déclenche donc pour eux. Le champ est absent lorsque la réponse ne contient aucun appel de ce type, et il nécessite Claude Code v2.1.290 ou une version ultérieure.314Pour voir les appels d'outils que l'API a exécutés elle-même pendant la requête, comme les appels à l'[outil advisor](https://code.claude.com/docs/fr/advisor.md), lisez `result.serverToolUses`. Claude Code n'exécute pas ces appels ; aucun hook `tool.call` ou `tool.check` ne se déclenche donc pour eux. Le champ est absent lorsque la réponse ne contient aucun appel de ce type, et il nécessite Claude Code v2.1.290 ou une version ultérieure.

307 315 

316### Modifier ou refuser une lecture des paramètres

317 

318Un hook `settings.read` s'exécute lors de la lecture effectuée par un mod et lors de la lecture propre à Claude Code :

319 

320* **Lecture par un mod** : un mod appelle [`$.settings.read`](https://code.claude.com/docs/fr/plugins/mods/api#read-one-source-or-one-key).

321* **Lecture propre à Claude Code** : Claude Code construit les paramètres fusionnés de la session. Cette lecture se répète lorsque les paramètres ou les plugins chargés changent.

322 

323Avant de vous appuyer sur l'une ou l'autre de ces lectures, vérifiez le garde-fou et votre version :

324 

325* **Le garde-fou intégré** : avec des paramètres gérés, ou avec un [`/login`](https://code.claude.com/docs/fr/authentication#authentication-precedence) Team ou Enterprise comme identifiants de la session, le [garde-fou intégré](https://code.claude.com/docs/fr/plugins/mods/admin.md#know-what-happens-by-default) peut ignorer ce hook dans un mod que vous installez ou chargez avec `--plugin-dir`. Pour le vérifier, recherchez `settings.read bypassed by cc-plugin-sec-default` dans le [log de débogage](https://code.claude.com/docs/fr/plugins/mods/troubleshoot.md#read-the-debug-log). Si une ligne contenant ce texte nomme votre mod, demandez à l'administrateur de votre organisation d'[installer le mod parmi les mods de l'organisation](https://code.claude.com/docs/fr/plugins/mods/admin.md#install-your-organizations-mods).

326* **La version** : le déclenchement de l'événement lors de la lecture propre à Claude Code, ainsi que le champ `e.layers`, nécessitent Claude Code v2.1.304 ou une version ultérieure.

327 

328#### Ce que reçoit un hook `settings.read`

329 

330| Champ | Type | Ce qu'il contient |

331| :- | :- | :- |

332| `e.layers` | array | Un objet `{ source, settings }` pour chaque source utilisée qui contient des paramètres, de la plus faible [priorité](https://code.claude.com/docs/fr/settings.md#settings-precedence) à la plus forte : `plugin`, `user`, `project`, `local`, `flag`, `policy`. Vide dans `claude plugin test`. |

333| `e.source` | string | L'unique source demandée par un mod, comme dans `$.settings.read({ source: 'policy' })`. `e.layers` ne contient alors que cette couche. Absent lors de la lecture propre à Claude Code et de toute autre lecture des paramètres fusionnés. |

334 

335Dans `e.layers`, `plugin` contient les paramètres fournis par les plugins activés ; il s'agit uniquement d'un nom de couche, et non d'une `source` que vous pouvez transmettre à `$.settings.read`. `flag` contient les paramètres transmis avec `--settings`, et `policy` contient les paramètres gérés.

336 

337#### Distinguer la lecture propre à Claude Code de la lecture par un mod

338 

339Lors de la [lecture propre à Claude Code](#settings-read-hook), [`next.origin`](https://code.claude.com/docs/fr/plugins/mods/reference#the-hook-function) vaut `{ plugin: 'engine', tier: 'core' }`, et lors de la lecture par un mod, `next.origin.plugin` est le nom du mod appelant.

340 

341#### Ce que peut renvoyer un hook `settings.read`

342 

343Votre hook peut renvoyer le résultat de [`next(e)`](https://code.claude.com/docs/fr/plugins/mods/reference#the-hook-function) sans modification, son propre `{ value }`, ou `{ deny: reason }`. Lors de la [lecture propre à Claude Code](#settings-read-hook) comme lors de la lecture par un mod, un `{ value }` remplace ce que fournit la lecture et `{ deny: reason }` refuse la lecture :

344 

345| Valeur renvoyée | Lors de la lecture propre à Claude Code | Lors de la lecture par un mod |

346| :- | :- | :- |

347| `{ value }` | Pour chaque clé que vous modifiez, ce que vous renvoyez remplace la valeur entière de cette clé dans les paramètres fusionnés de la session, si elle [respecte le schéma de la clé](https://code.claude.com/docs/fr/plugins/mods/troubleshoot.md#settings-read-key-refused) | L'appel de ce mod se résout avec votre `value`, ou avec la `key` qu'il a demandée extraite de votre `value` ; renvoyez donc un objet complet et non un tableau |

348| `{ deny: reason }` | La session conserve les paramètres tels qu'ils étaient fusionnés avant qu'un hook ne réponde, et le [log de débogage consigne votre `reason`](https://code.claude.com/docs/fr/plugins/mods/troubleshoot#settings-read-refused) | L'appel de ce mod est rejeté avec `<calling mod>: $.settings.read: <reason>` |

349 

350Lors de la lecture propre à Claude Code, construisez votre `{ value }` à partir de la [`value` de `next(e)`](#settings-read-next), car une clé que vous omettez n'est pas définie. Lorsque Claude Code lit une clé comme `env` depuis chaque source séparément, la modifier dans votre `value` [n'a aucun effet](https://code.claude.com/docs/fr/plugins/mods/troubleshoot.md#settings-read-key-no-effect).

351 

352#### Ce que `next(e)` fournit à un hook `settings.read`

353 

354`next(e)` se résout avec `{ value }` ou avec `{ deny }` :

355 

356* **`{ value }`** : `value` correspond aux paramètres fusionnés, ou aux paramètres d'une seule source lorsque [`e.source`](#settings-read-receives) est défini. Si un hook qui [s'exécute après le vôtre](#the-order-mods-run-in) a renvoyé son propre `{ value }`, vous obtenez la `value` de ce hook à la place.

357* **`{ deny }`** : un hook qui s'exécute après le vôtre a refusé la lecture. Renvoyez ce `{ deny }` sans modification.

358 

359#### Modifier un paramètre depuis un hook `settings.read`

360 

361Vérifiez d'abord [quels mods reçoivent cet événement, et à partir de quelle version](#settings-read-hook).

362 

363Pour modifier une clé, décomposez la `value` de [`next(e)`](https://code.claude.com/docs/fr/plugins/mods/reference#the-hook-function) et définissez cette clé, comme le fait ce hook avec [`spinnerTipsEnabled`](https://code.claude.com/docs/fr/settings-reference#spinnertipsenabled). Le hook ne vérifie pas [`next.origin`](#settings-read-origin) ; il modifie donc la clé aussi bien lors de la [lecture propre à Claude Code](#settings-read-hook) que lors de la lecture fusionnée d'un mod :

364 

365```javascript theme={null}

366on('settings.read', async ($, e, next) => {

367 const read = await next(e)

368 // Pass through a read of one source, so that only the merged settings change.

369 // Pass through a { deny } from a later hook too: it has no value.

370 if (e.source || !read.value) return read

371 // Keep every other key and change this one

372 return { value: { ...read.value, spinnerTipsEnabled: false } }

373})

374```

375 

376Lors de la lecture propre à Claude Code, si votre hook renvoie une valeur hors du schéma de la clé, comme une chaîne, seule cette clé conserve la valeur fusionnée avant qu'un hook ne réponde. Le log de débogage indique alors [`the answer for <key> is no value the key can hold`](https://code.claude.com/docs/fr/plugins/mods/troubleshoot#settings-read-key-refused). Si votre valeur respecte le schéma et que la clé ne change toujours pas, consultez [pourquoi une clé renvoyée n'a aucun effet](https://code.claude.com/docs/fr/plugins/mods/troubleshoot.md#settings-read-key-no-effect).

377 

308### Gérer les événements des hooks des paramètres378### Gérer les événements des hooks des paramètres

309 379 

310Les hooks des paramètres sont les hooks de type commande, HTTP, prompt et agent que vous configurez dans les fichiers de paramètres. Chaque [événement de hook des paramètres](https://code.claude.com/docs/fr/hooks.md#hook-events), comme `Stop`, `SessionEnd` ou `PostToolUse`, est aussi un événement nommé `classic.` suivi du nom de l'événement, comme `classic.Stop`. `e` est le JSON qu'un hook des paramètres reçoit sur stdin, y compris `transcript_path`.380Les hooks des paramètres sont les hooks de type commande, HTTP, prompt et agent que vous configurez dans les fichiers de paramètres. Chaque [événement de hook des paramètres](https://code.claude.com/docs/fr/hooks.md#hook-events), comme `Stop`, `SessionEnd` ou `PostToolUse`, est aussi un événement nommé `classic.` suivi du nom de l'événement, comme `classic.Stop`. `e` est le JSON qu'un hook des paramètres reçoit sur stdin, y compris `transcript_path`.

Details

508* **`Input`** : prend `onSubmit(value)` et `onInput(value)`508* **`Input`** : prend `onSubmit(value)` et `onInput(value)`

509* **`Select`** : prend `onSelect(value)` avec ses choix dans `options`, une liste d'au moins un choix avec des valeurs uniques, comme `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`509* **`Select`** : prend `onSelect(value)` avec ses choix dans `options`, une liste d'au moins un choix avec des valeurs uniques, comme `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`

510 510 

511Un test appuie ou tape dans un contrôle par sa `key`, donc donnez-en un à chaque contrôle. Chaque utilisation d'un contrôle déclenche aussi [`ui.press`, `ui.input`, ou `ui.select`](https://code.claude.com/docs/fr/plugins/mods/reference#interface) avec la `key` dans `e.element`, et un autre mod peut gérer ces événements. Son hook s'exécute avant votre callback, donc il voit ce que l'utilisateur tape dans votre `Input` et peut le modifier ou répondre à la place de votre callback. L'API des mods n'a pas de méthode qui appuie sur le bouton d'un autre mod.511### Quels contrôles ont besoin d'une `key`

512 

513Donnez à chaque `Input` et `Select` une prop `key`, comme `key: 'size'`. Un `Button` peut se passer de `key` quand il a une prop `label` ou un seul enfant de type chaîne. Sa clé est alors la valeur de `label` ou cette chaîne.

514 

515Les tests et les autres mods identifient un contrôle par sa clé :

516 

517* **Tests** : un [test](https://code.claude.com/docs/fr/plugins/mods/test.md#test-a-drawing) appuie sur un contrôle ou tape dedans par sa clé.

518* **Autres mods** : Claude Code déclenche [`ui.press`, `ui.input`, ou `ui.select`](https://code.claude.com/docs/fr/plugins/mods/reference#interface) avec la clé du contrôle dans `e.element` avant d'exécuter le callback du contrôle. Le hook d'un autre mod pour cet événement voit ce que l'utilisateur a tapé dans votre `Input` et peut modifier ce texte ou empêcher votre callback de s'exécuter. L'API des mods ne donne à ce mod aucune méthode pour appuyer sur vos boutons.

519 

520Si un message indique `needs a key` ou `is drawn twice`, [trouvez la cause à partir de ce message](https://code.claude.com/docs/fr/plugins/mods/troubleshoot.md#needs-a-key).

512 521 

513### Focus clavier et touches de raccourci522### Focus clavier et touches de raccourci

514 523 

Details

21| `.claude-plugin/plugin.json` | Oui | Le [manifeste](https://code.claude.com/docs/fr/plugins/manifest-reference.md) du plugin. Les mods n'ajoutent aucun champ requis. |21| `.claude-plugin/plugin.json` | Oui | Le [manifeste](https://code.claude.com/docs/fr/plugins/manifest-reference.md) du plugin. Les mods n'ajoutent aucun champ requis. |

22| `hooks/hooks.json` | Oui | `modules` : un tableau contenant un chemin, relatif à ce fichier, vers le module de hooks, comme dans `"modules": ["./register.js"]`. Peut aussi contenir des [hooks de paramètres](https://code.claude.com/docs/fr/hooks.md) sous `hooks`. |22| `hooks/hooks.json` | Oui | `modules` : un tableau contenant un chemin, relatif à ce fichier, vers le module de hooks, comme dans `"modules": ["./register.js"]`. Peut aussi contenir des [hooks de paramètres](https://code.claude.com/docs/fr/hooks.md) sous `hooks`. |

23| Le module de hooks, tel que [`hooks/register.js`](https://code.claude.com/docs/fr/plugins/mods/create#write-a-mod-yourself) | Oui | Le point d'entrée du mod. Exporte `register(on, options)`. Nommé `.js`, `.mjs`, `.cjs`, `.jsx`, `.ts`, `.mts`, `.cts` ou `.tsx`. Un module ES. |23| Le module de hooks, tel que [`hooks/register.js`](https://code.claude.com/docs/fr/plugins/mods/create#write-a-mod-yourself) | Oui | Le point d'entrée du mod. Exporte `register(on, options)`. Nommé `.js`, `.mjs`, `.cjs`, `.jsx`, `.ts`, `.mts`, `.cts` ou `.tsx`. Un module ES. |

24| [`types/index.d.ts`](https://code.claude.com/docs/fr/plugins/mods/interface#declare-the-values), désigné par `types` dans le manifeste | Lorsque le mod utilise `$.state` ou ajoute un namespace à l'API des mods | Déclare les valeurs `PluginState` et tout namespace ajouté par le mod |24| [`types/index.d.ts`](https://code.claude.com/docs/fr/plugins/mods/interface#declare-the-values), sauf si `types` dans le manifeste désigne un autre chemin | Lorsque le mod utilise `$.state` ou ajoute un namespace à l'API des mods | Déclare les valeurs `PluginState` et tout namespace ajouté par le mod. Pour omettre `types` du manifeste, vous avez besoin de la v2.1.299 ou d'une version ultérieure. |

25| Fichiers dont le nom se termine par `.test.ts` ou `.test.tsx` | Non | Tests exécutés par [`claude plugin test`](https://code.claude.com/docs/fr/plugins/mods/test#write-a-test) |25| Fichiers dont le nom se termine par `.test.ts` ou `.test.tsx` | Non | Tests exécutés par [`claude plugin test`](https://code.claude.com/docs/fr/plugins/mods/test#write-a-test) |

26 26 

27`register` reçoit `on` et `options`. `options` contient les valeurs des champs [`userConfig`](https://code.claude.com/docs/fr/plugins/components#user-configuration) déclarés par le manifeste, avec les valeurs par défaut renseignées.27`register` reçoit `on` et `options`. `options` contient les valeurs des champs [`userConfig`](https://code.claude.com/docs/fr/plugins/components#user-configuration) déclarés par le manifeste, avec les valeurs par défaut renseignées.


110 110 

111### Commandes et configuration111### Commandes et configuration

112 112 

113Les événements de commande et de configuration se déclenchent lorsqu'une commande s'exécute ou est listée, et lorsqu'une ligne de `/config` est affichée ou modifiée :113Les événements de commande et de configuration se déclenchent lorsqu'une commande s'exécute ou est listée, lorsqu'une ligne de `/config` est affichée ou modifiée, et lors d'une lecture des paramètres :

114 114 

115| Événement | Se déclenche lorsque | Un hook peut renvoyer |115| Événement | Se déclenche lorsque | Un hook peut renvoyer |

116| :- | :- | :- |116| :- | :- | :- |


118| `command.describe` | Une fois pour chaque commande, pour la liste des commandes | `{ description, argumentHint, isHidden }` |118| `command.describe` | Une fois pour chaque commande, pour la liste des commandes | `{ description, argumentHint, isHidden }` |

119| `config.set` | Une ligne de `/config` est sur le point de changer | `next({ ...e, value })` ou `{ deny: reason }` |119| `config.set` | Une ligne de `/config` est sur le point de changer | `next({ ...e, value })` ou `{ deny: reason }` |

120| `config.describe` | Une fois pour chaque ligne de `/config` | `{ label, description, isHidden }` |120| `config.describe` | Une fois pour chaque ligne de `/config` | `{ label, description, isHidden }` |

121| [`settings.read`](https://code.claude.com/docs/fr/plugins/mods/events#settings-read-hook) | Un mod appelle [`$.settings.read`](https://code.claude.com/docs/fr/plugins/mods/api#reach-files-processes-and-the-network), ou Claude Code construit les paramètres fusionnés de la session | `next(e)`, `{ value }` ou `{ deny: reason }` |

122 

123#### `e.layers` et `e.source` sur `settings.read`

124 

125* **`e.layers`** : un objet `{ source, settings }` pour chaque source utilisée qui contient des paramètres, de la [priorité](https://code.claude.com/docs/fr/settings.md#settings-precedence) la plus faible à la plus élevée. Consultez [Ce que reçoit un hook `settings.read`](https://code.claude.com/docs/fr/plugins/mods/events#settings-read-receives).

126* **`e.source`** : la source unique demandée par un mod, comme dans `$.settings.read({ source: 'policy' })`. Absent lors de la propre lecture de Claude Code et de toute autre lecture des paramètres fusionnés

127 

128Sur `settings.read`, le déclenchement de l'événement lors de la propre lecture de Claude Code et le champ `e.layers` nécessitent Claude Code v2.1.304 ou une version ultérieure. Pour savoir quand le hook s'exécute et ce qu'il peut renvoyer, avec un exemple, consultez [Modifier ou refuser une lecture des paramètres](https://code.claude.com/docs/fr/plugins/mods/events.md#settings-read-hook).

121 129 

122### Tours130### Tours

123 131 

Details

168 168 

169Avant la v2.1.292, l'appel s'exécutait une seconde fois, de sorte que le prompt était soumis, la commande exécutée ou le sous-agent démarré deux fois.169Avant la v2.1.292, l'appel s'exécutait une seconde fois, de sorte que le prompt était soumis, la commande exécutée ou le sous-agent démarré deux fois.

170 170 

171### `This mod's change didn't load` or `the earlier version is no longer running`

172 

173Une modification d'un [mod que Claude a écrit dans cette session](https://code.claude.com/docs/fr/plugins/mods/create.md#ask-claude-for-a-mod) n'a pas pu se charger. La ligne de la transcription commence par le nom du mod et se termine par la raison :

174 

175* `This mod's change didn't load, so the earlier version is still running: <reason>.`

176* `This mod didn't load, and the earlier version is no longer running: <reason>.`

177 

178Claude ne voit pas cette ligne ; collez-la donc dans votre prochain message lorsque vous demandez une correction à Claude.

179 

171### `$.agent.register refused: the hooks module that made the call is no longer loaded`180### `$.agent.register refused: the hooks module that made the call is no longer loaded`

172 181 

173La ligne commence par le nom de votre mod, comme dans `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`, et l'agent n'est pas enregistré. Votre mod a été rechargé ou déchargé avant l'appel. Un rechargement charge une nouvelle copie du module de hooks, et cet appel provenait de code qui s'exécutait encore dans l'ancienne copie, comme un hook qui n'avait pas encore retourné.182La ligne commence par le nom de votre mod, comme dans `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`, et l'agent n'est pas enregistré. Votre mod a été rechargé ou déchargé avant l'appel. Un rechargement charge une nouvelle copie du module de hooks, et cet appel provenait de code qui s'exécutait encore dans l'ancienne copie, comme un hook qui n'avait pas encore retourné.


225 234 

226Lisez la raison sur cette ligne. Les causes courantes sont une prop que l'élément ne prend pas et un élément que l'application n'a pas.235Lisez la raison sur cette ligne. Les causes courantes sont une prop que l'élément ne prend pas et un élément que l'application n'a pas.

227 236 

237### `needs a key`, `is drawn twice` ou `key each once`

238 

239Un élément de l'arbre retourné par votre hook `ui.render` n'a pas de [`key`](https://code.claude.com/docs/fr/plugins/mods/interface#which-controls-need-a-key) valide, ou deux éléments partagent la même. Trouvez le message que vous avez reçu :

240 

241* **`<Input> needs a key` ou `<Select> needs a key`** : l'élément n'a pas de prop `key`, ou sa `key` est vide ou n'est pas une chaîne, comme dans `key: 3`. Donnez-lui une chaîne non vide comme `key`.

242* **`<Button> needs a key`** : donnez au bouton une chaîne non vide comme `key`

243* **`is drawn twice; each takes its own key`** : deux éléments du type indiqué par le message ont la même `key`, comme dans `Input "size" is drawn twice; each takes its own key`. Donnez à chaque élément sa propre `key`.

244* **`key each once` provenant de `press` dans un [test](https://code.claude.com/docs/fr/plugins/mods/test.md#test-a-drawing)** : le dessin contient plus d'un bouton avec la clé que vous avez passée. Les boutons ayant le même libellé et sans prop `key` partagent ce libellé comme clé. Donnez à chaque bouton sa propre `key`.

245 

228### Une ligne `ui.render` indique `threw while drawn`246### Une ligne `ui.render` indique `threw while drawn`

229 247 

230La ligne nomme le [point de rendu](https://code.claude.com/docs/fr/plugins/mods/reference.md#render-sites), puis indique `threw while drawn:` et l'erreur, comme dans `first-mod: ui.render (ToolUse) threw while drawn: <error>; the engine drew its own`. Claude Code a rencontré cette erreur en dessinant l'arbre retourné par votre hook [`ui.render`](https://code.claude.com/docs/fr/plugins/mods/reference#interface), ou en dessinant le point de rendu à partir des [`props` que votre hook a passées à `next`](https://code.claude.com/docs/fr/plugins/mods/interface#change-what-claude-code-already-draws). La fin `the engine drew its own` signifie que le point de rendu affiche le contenu habituel de Claude Code.248La ligne nomme le [point de rendu](https://code.claude.com/docs/fr/plugins/mods/reference.md#render-sites), puis indique `threw while drawn:` et l'erreur, comme dans `first-mod: ui.render (ToolUse) threw while drawn: <error>; the engine drew its own`. Claude Code a rencontré cette erreur en dessinant l'arbre retourné par votre hook [`ui.render`](https://code.claude.com/docs/fr/plugins/mods/reference#interface), ou en dessinant le point de rendu à partir des [`props` que votre hook a passées à `next`](https://code.claude.com/docs/fr/plugins/mods/interface#change-what-claude-code-already-draws). La fin `the engine drew its own` signifie que le point de rendu affiche le contenu habituel de Claude Code.


303 321 

304[Rechargez la valeur enregistrée à nouveau](https://code.claude.com/docs/fr/plugins/mods/interface.md#load-a-saved-value-again-after-clear) dans un hook `classic.SessionStart`.322[Rechargez la valeur enregistrée à nouveau](https://code.claude.com/docs/fr/plugins/mods/interface.md#load-a-saved-value-again-after-clear) dans un hook `classic.SessionStart`.

305 323 

324### Une clé renvoyée par votre hook `settings.read` ne prend pas effet

325 

326Les entrées `env` renvoyées ne deviennent pas des variables d'environnement. Les règles `allow`, `ask` et `deny` renvoyées ne sont pas vérifiées lors des appels d'outils. Définissez-les dans un [fichier de paramètres](https://code.claude.com/docs/fr/settings.md), ou appelez [`$.env.set`](https://code.claude.com/docs/fr/plugins/mods/api#reach-files-processes-and-the-network) pour les variables d'environnement.

327 

328Pour une autre clé, vérifiez [quels mods reçoivent `settings.read` et à partir de quelle version](https://code.claude.com/docs/fr/plugins/mods/events#settings-read-hook), puis recherchez `settings.read` dans le [log de débogage](#read-the-debug-log) et repérez l'une de ces lignes :

329 

330| Ligne de log | Signification et étape |

331| :- | :- |

332| `settings.read hook skipped`, après le nom de votre mod | Votre hook a échoué. [Corrigez l'erreur signalée par la ligne](#hook-skipped). |

333| `settings.read bypassed by cc-plugin-sec-default`, sur une ligne qui nomme votre mod avant | Le [garde-fou intégré](https://code.claude.com/docs/fr/plugins/mods/admin.md#know-what-happens-by-default) a ignoré votre hook. Demandez à l'administrateur de votre organisation d'[installer le mod comme l'un des mods de l'organisation](https://code.claude.com/docs/fr/plugins/mods/admin.md#install-your-organizations-mods). |

334| `settings.read: the answer for <key> is no value the key can hold` | La valeur renvoyée ne correspond pas au schéma de la clé. [Renvoyez-en une qu'il autorise](#settings-read-key-refused). |

335| `settings.read: the merge never settles for <key>` | Les clés nommées par la ligne conservent les valeurs des sources de paramètres. Définissez-les dans un fichier de paramètres. |

336| `answered settings.read without next()`, après le nom d'un mod | Pertinent uniquement si ce mod [s'exécute avant le vôtre](https://code.claude.com/docs/fr/plugins/mods/events.md#the-order-mods-run-in). Dans ce cas, votre hook ne s'est pas exécuté lors de cette lecture. [Désactivez ce mod](https://code.claude.com/docs/fr/plugins/mods/overview.md#turn-mods-on-or-off) ou, si votre organisation l'a déployé, demandez à son administrateur de le faire. |

337| `settings.read: refused to the engine` | La lecture a été refusée, donc aucun `{ value }` de hook ne s'est appliqué. [Trouvez ce qui l'a refusée](#settings-read-refused). |

338 

339Si aucune ligne n'explique la clé, vérifiez si les mods qui s'exécutent avant le vôtre ont un hook `settings.read` qui [modifie la clé](https://code.claude.com/docs/fr/plugins/mods/events.md#settings-read-example). Désactivez ce mod, ou demandez à l'administrateur de votre organisation de le faire. Si aucun hook ne la modifie, définissez la clé dans un fichier de paramètres.

340 

341### `the answer for <key> is no value the key can hold`

342 

343Cette ligne du [log de débogage](#read-the-debug-log) signifie que Claude Code a refusé la valeur renvoyée par votre hook [`settings.read`](https://code.claude.com/docs/fr/plugins/mods/events#settings-read-hook) pour la clé nommée, et pour cette clé uniquement :

344 

345```text theme={null}

346settings.read: the answer for <key> is no value the key can hold; the settings' own value stands

347```

348 

349La valeur que vous avez renvoyée pour la clé nommée ne correspondait pas au schéma de cette clé, par exemple par son type ou sa plage. Renvoyez une valeur autorisée par l'entrée de la clé dans la [référence des paramètres](https://code.claude.com/docs/fr/settings-reference.md). Tant que votre valeur ne correspond pas, la clé conserve la valeur fusionnée à partir des sources de paramètres avant qu'un hook ne réponde. La ligne l'appelle la valeur propre des paramètres.

350 

351### `settings.read: refused to the engine`

352 

353Cette ligne du [log de débogage](#read-the-debug-log) signifie que [la lecture propre de Claude Code](https://code.claude.com/docs/fr/plugins/mods/events.md#settings-read-hook) a été refusée, donc aucun `{ value }` de hook ne s'est appliqué, y compris le vôtre. Lorsqu'un hook `settings.read` refuse cette lecture avec [`{ deny: reason }`](https://code.claude.com/docs/fr/plugins/mods/events#settings-read-returns), la ligne contient la raison de ce hook :

354 

355```text theme={null}

356settings.read: refused to the engine (engine: $.settings.read: <reason>); the settings' own values stand

357```

358 

359Recherchez le texte `<reason>` dans le code de votre propre hook :

360 

361* **Votre code le contient** : votre hook a refusé la lecture. Faites-lui renvoyer `{ value }` lorsque [`next.origin`](https://code.claude.com/docs/fr/plugins/mods/events#settings-read-origin) indique la lecture propre de Claude Code.

362* **Votre code ne le contient pas** : [désactivez](https://code.claude.com/docs/fr/plugins/mods/overview.md#turn-mods-on-or-off) vos autres mods un par un. Après chacun, relancez la commande de cette session depuis votre shell avec un `--debug-file` sur un nouveau chemin, et recherchez `refused to the engine` dans ce fichier. Si la ligne y figure, désactivez le mod suivant. Sinon, le dernier mod que vous avez désactivé a refusé la lecture ; laissez-le donc désactivé.

363 

364S'il ne reste aucun autre mod, utilisez un [fichier de paramètres](https://code.claude.com/docs/fr/settings.md) pour les clés que votre hook renvoie. Ses valeurs s'appliquent tant que la lecture est refusée.

365 

306## Lisez le journal de débogage366## Lisez le journal de débogage

307 367 

308Le journal de débogage a une ligne pour chaque module que Claude Code charge ou refuse, chaque hook qui échoue et chaque résultat qu'il refuse, donc c'est là qu'il faut regarder quand la transcription ne montre rien. Pour en écrire un, dans votre shell, démarrez Claude Code avec `--debug`, ou avec `--debug-file <path>` pour choisir où il va :368Le journal de débogage a une ligne pour chaque module que Claude Code charge ou refuse, chaque hook qui échoue et chaque résultat qu'il refuse, donc c'est là qu'il faut regarder quand la transcription ne montre rien. Pour en écrire un, dans votre shell, démarrez Claude Code avec `--debug`, ou avec `--debug-file <path>` pour choisir où il va :

Details

251 251 

252Vérifiez d'abord le référentiel lui-même : un `owner/repo` mal orthographié, un référentiel qui n'existe pas ou un référentiel privé que vous ne pouvez pas voir se termine également par ce message. Ouvrez l'URL du référentiel dans votre navigateur, ou exécutez `git ls-remote <url>` dans votre terminal, pour confirmer qu'il existe et que vous y avez accès.252Vérifiez d'abord le référentiel lui-même : un `owner/repo` mal orthographié, un référentiel qui n'existe pas ou un référentiel privé que vous ne pouvez pas voir se termine également par ce message. Ouvrez l'URL du référentiel dans votre navigateur, ou exécutez `git ls-remote <url>` dans votre terminal, pour confirmer qu'il existe et que vous y avez accès.

253 253 

254Si le référentiel est correct, la cause est les identifiants. Claude Code exécute git avec les invites interactives désactivées, donc il ne peut pas vous demander un mot de passe, une phrase de passe de clé ou un identifiant de la façon dont votre terminal le ferait. Si git a besoin d'une invite, vous voyez `fatal: Cannot prompt because user interactivity has been disabled` ou `terminal prompts disabled` dans l'erreur d'origine. Seuls les identifiants qui fonctionnent déjà de manière non interactive réussissent :254Si le dépôt est correct, la cause est les identifiants. Claude Code désactive les invites de git et les programmes askpass, y compris celui défini dans `GIT_ASKPASS`, et exécute SSH en mode batch. Lorsque git a besoin d'une invite, l'erreur du clonage inclut `fatal: Cannot prompt because user interactivity has been disabled`, `terminal prompts disabled` ou `fatal: unable to get password from user`. Seuls les identifiants que git peut obtenir sans invite ni programme askpass réussissent :

255 255 

256* **SSH** : `ssh -T git@<host>` doit réussir sans demander de phrase de passe, et l'hôte doit déjà être dans `known_hosts`256* **SSH** : `ssh -T git@<host>` doit réussir sans demander de phrase de passe, et l'hôte doit déjà être dans `known_hosts`

257* **HTTPS** : votre assistant d'identifiants doit contenir un jeton pour l'hôte. Pour GitHub, exécutez `gh auth login` et `gh auth setup-git`. Pour un autre hôte, stockez un jeton d'accès personnel dans votre assistant d'identifiants git. Testez avec `git ls-remote <url>`257* **HTTPS** : votre assistant d'identifiants doit contenir un jeton pour l'hôte. Pour GitHub, exécutez `gh auth login` et `gh auth setup-git`. Pour un autre hôte, stockez un jeton d'accès personnel dans votre assistant d'identifiants git. Pour tester, supprimez la définition de `GIT_ASKPASS` dans votre terminal et exécutez `git -c core.askPass= ls-remote <url>`.

258 258 

259Une fois que `git ls-remote` réussit dans votre terminal sans invite, exécutez à nouveau l'ajout ou la mise à jour. Un ajout réussi imprime `Successfully added marketplace: <name>`. Une mise à jour réussie imprime `Successfully updated marketplace: <name>` à partir de votre shell, ou `✔ Updated 1 marketplace` dans une session.259Une fois que la vérification pour votre protocole réussit sans invite, exécutez à nouveau l'ajout ou la mise à jour. Un ajout réussi imprime `Successfully added marketplace: <name>`. Une mise à jour réussie imprime `Successfully updated marketplace: <name>` à partir de votre shell, ou `✔ Updated 1 marketplace` dans une session.

260 260 

261Pour faire en sorte que Claude Code ignore SSH pour les sources GitHub `owner/repo`, définissez `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`. Sans cela, Claude Code clone ces sources sur SSH lorsqu'une clé SSH pour `github.com` semble configurée, et revient à HTTPS lorsque le clonage SSH échoue.261Pour faire en sorte que Claude Code ignore SSH pour les sources GitHub `owner/repo`, définissez `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`. Sans cela, Claude Code clone ces sources sur SSH lorsqu'une clé SSH pour `github.com` semble configurée, et revient à HTTPS lorsque le clonage SSH échoue.

262 262 


318 318 

319Si le référentiel est un monorepo, limitez le checkout aux répertoires que vous nommez avec `claude plugin marketplace add <source> --sparse <paths>`.319Si le référentiel est un monorepo, limitez le checkout aux répertoires que vous nommez avec `claude plugin marketplace add <source> --sparse <paths>`.

320 320 

321Si le dépôt contient des sous-modules git volumineux, mettez à jour Claude Code. À partir de la v2.1.295, Claude Code ne récupère que les [sous-modules qui contiennent des fichiers de plugin](https://code.claude.com/docs/fr/plugins/marketplace-reference.md#git-submodules-in-the-marketplace-repository). Les versions antérieures récupèrent tous les sous-modules, ce qui peut à lui seul épuiser les 120 secondes.

322 

321### Les mises à jour de la marketplace continuent d'échouer hors ligne323### Les mises à jour de la marketplace continuent d'échouer hors ligne

322 324 

323Vous travaillez dans un environnement où l'hôte git de la marketplace est inaccessible, et chaque session répète un échec d'actualisation en arrière-plan. Votre checkout existant de la marketplace reste en place et le démarrage n'est pas retardé.325Vous travaillez dans un environnement où l'hôte git de la marketplace est inaccessible, et chaque session répète un échec d'actualisation en arrière-plan. Votre checkout existant de la marketplace reste en place et le démarrage n'est pas retardé.


609| `<Plugin or Dependency> "<name>" has conflicting version requirements` | Aucune version ne satisfait chaque plage qui l'épingle. Le message répertorie les plages. | Désinstallez ou mettez à jour l'un des plugins en conflit, ou demandez à l'auteur en amont d'élargir sa contrainte. |611| `<Plugin or Dependency> "<name>" has conflicting version requirements` | Aucune version ne satisfait chaque plage qui l'épingle. Le message répertorie les plages. | Désinstallez ou mettez à jour l'un des plugins en conflit, ou demandez à l'auteur en amont d'élargir sa contrainte. |

610| `... has version requirements too complex to intersect` ou `has an invalid version requirement` | Une plage n'est pas un semver valide, ou les plages combinées ne peuvent pas être intersectées. | Corrigez la plage invalide ou simplifiez les longues chaînes `\|\|`. |612| `... has version requirements too complex to intersect` ou `has an invalid version requirement` | Une plage n'est pas un semver valide, ou les plages combinées ne peuvent pas être intersectées. | Corrigez la plage invalide ou simplifiez les longues chaînes `\|\|`. |

611| `... has no git tag satisfying <range>` | Le dépôt de la dépendance n'a pas de balise `<name>--v*` dans la plage. | Vérifiez que le projet en amont balise ses versions selon cette convention, ou assouplissez la plage. |613| `... has no git tag satisfying <range>` | Le dépôt de la dépendance n'a pas de balise `<name>--v*` dans la plage. | Vérifiez que le projet en amont balise ses versions selon cette convention, ou assouplissez la plage. |

612| `Dependency "<dep>" (required by <plugin>) is in <marketplace>, which is not in the allowlist` | La dépendance se trouve dans une marketplace différente, et la résolution inter-marketplace est désactivée par défaut. | Installez la dépendance vous-même à la même portée, dans votre shell avec `claude plugin install <dep>@<marketplace>` plus le `--scope` auquel vous installez le plugin, puis réessayez. |614| `Dependency "<dep>" (required by <plugin>) is in marketplace "<marketplace>", which is not in the allowlist` | La dépendance se trouve dans une marketplace différente, et la résolution inter-marketplace est désactivée par défaut. | Installez la dépendance vous-même à la même portée, dans votre shell avec `claude plugin install <dep>@<marketplace>` plus le `--scope` auquel vous installez le plugin, puis réessayez. |

613 615 

614Pour voir ces par programmation, exécutez `claude plugin list --json` dans votre shell. Les plugins avec des problèmes portent un champ `errors` avec les messages et un champ `errorDetails` avec un `type` pour chacun : les trois premières lignes sont `dependency-unsatisfied` et la quatrième est `dependency-version-unsatisfied`.616Pour voir ces par programmation, exécutez `claude plugin list --json` dans votre shell. Les plugins avec des problèmes portent un champ `errors` avec les messages et un champ `errorDetails` avec un `type` pour chacun : les trois premières lignes sont `dependency-unsatisfied` et la quatrième est `dependency-version-unsatisfied`.

615 617 


979 981 

980### `${CLAUDE_PLUGIN_ROOT}` affiche des barres obliques avant sur Windows982### `${CLAUDE_PLUGIN_ROOT}` affiche des barres obliques avant sur Windows

981 983 

982Sur Windows, un hook de plugin reçoit `${CLAUDE_PLUGIN_ROOT}` comme `C:/Users/you/...` plutôt que `C:\Users\you\...`, et un script qui s'attendait à des barres obliques inverses se casse.984Sur Windows, un hook de plugin qui s'exécute via Git Bash reçoit `${CLAUDE_PLUGIN_ROOT}` comme `C:/Users/you/...` plutôt que `C:\Users\you\...`, et un script qui s'attendait à des barres obliques inverses se casse.

983 985 

984Claude Code exécute les hooks de forme shell via Git Bash sur Windows et substitue la racine du plugin dans la forme Win32 avec barres obliques avant exprès. Les builtins Bash, les outils MSYS et les binaires Windows natifs acceptent tous cette forme.986Lorsque Git Bash est installé, un [hook de forme shell](https://code.claude.com/docs/fr/hooks.md#exec-form-and-shell-form) s'exécute via Git Bash par défaut. Pour un hook qui s'exécute via Git Bash, Claude Code transmet le chemin avec des barres obliques avant afin que Bash n'interprète pas les barres obliques inverses comme des échappements. Les builtins Bash, les outils MSYS et les binaires Windows natifs acceptent tous cette forme.

985 987 

986Si votre script a besoin de barres obliques inverses, basculez le hook vers l'une des formes qui conservent les chemins natifs, décrites sous [forme exec et forme shell](https://code.claude.com/docs/fr/hooks.md#exec-form-and-shell-form) :988Si votre script a besoin de barres obliques inverses, basculez le hook vers l'une des formes qui conservent les chemins natifs, décrites sous [forme exec et forme shell](https://code.claude.com/docs/fr/hooks.md#exec-form-and-shell-form) :

987 989 


1090 1092 

1091Alternativement, hébergez la marketplace dans un référentiel git et dites aux utilisateurs de l'ajouter avec l'URL du référentiel. Pour une source git, Claude Code clone le référentiel entier, donc les chemins relatifs se résolvent. Les types de source se trouvent sur la [référence de la marketplace](https://code.claude.com/docs/fr/plugins/marketplace-reference.md).1093Alternativement, hébergez la marketplace dans un référentiel git et dites aux utilisateurs de l'ajouter avec l'URL du référentiel. Pour une source git, Claude Code clone le référentiel entier, donc les chemins relatifs se résolvent. Les types de source se trouvent sur la [référence de la marketplace](https://code.claude.com/docs/fr/plugins/marketplace-reference.md).

1092 1094 

1095### Les fichiers d'un plugin racine provenant d'un sous-module git sont manquants après l'installation

1096 

1097Votre plugin se trouve à la racine de la marketplace et exécute ou lit un fichier provenant d'un sous-module git du dépôt. Après l'installation, le répertoire du sous-module est vide. Avant v2.1.295, Claude Code récupérait tous les sous-modules, donc le répertoire était rempli.

1098 

1099Lorsque Claude Code clone votre marketplace, il récupère uniquement les [sous-modules qui contiennent des fichiers de plugin](https://code.claude.com/docs/fr/plugins/marketplace-reference.md#git-submodules-in-the-marketplace-repository). Pour un plugin à la racine, il décide en lisant les chemins dans la configuration du plugin et le texte des fichiers du plugin. Il ne peut pas voir un chemin qu'un script construit pendant son exécution.

1100 

1101Écrivez en entier un chemin vers le sous-module là où Claude Code peut le lire, comme `${CLAUDE_PLUGIN_ROOT}/vendor/tool/run.sh` dans une commande de hook. Claude Code récupère alors tous les sous-modules du dépôt pour ce plugin.

1102 

1093### Erreurs de validation de la marketplace1103### Erreurs de validation de la marketplace

1094 1104 

1095Vous avez exécuté `claude plugin validate .` à partir de votre répertoire de marketplace et il a signalé des erreurs ou des avertissements sur le fichier de marketplace lui-même.1105Vous avez exécuté `claude plugin validate .` à partir de votre répertoire de marketplace et il a signalé des erreurs ou des avertissements sur le fichier de marketplace lui-même.


1121 1131 

1122### `Marketplace source '<source>' is blocked by enterprise policy`1132### `Marketplace source '<source>' is blocked by enterprise policy`

1123 1133 

1124Vous avez exécuté `/plugin marketplace add`, `update` ou une installation, et Claude Code a refusé avec cette ligne. Pour une source GitHub ou git, l'hôte suit la source entre parenthèses, comme dans `'github:owner/repo' (github.com)`.1134Vous avez exécuté `/plugin marketplace add`, `update` ou une installation, et Claude Code a refusé avec cette ligne.

1125 1135 

1126Votre administrateur a défini `blockedMarketplaces` ou `strictKnownMarketplaces` dans les paramètres gérés, et cette source n'est pas autorisée. Demandez à votre administrateur d'autoriser la source, ou ajoutez l'une des sources autorisées que le message répertorie.1136Votre administrateur a défini `blockedMarketplaces` ou `strictKnownMarketplaces` dans les paramètres gérés, et cette source n'est pas autorisée. Demandez à votre administrateur d'autoriser la source, ou ajoutez l'une des sources autorisées que le message répertorie.

1127 1137 

Details

100 100 

101### Activation du mode rapide101### Activation du mode rapide

102 102 

103L'activation du [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) ajoute un en-tête de requête qui fait partie de la clé de cache, donc la première requête que Claude Code envoie avec le mode rapide activé lit l'intégralité de l'historique de conversation sans aucun cache hit. Claude Code définit cet en-tête une fois au démarrage d'un tour et le conserve pour tout le tour, donc lorsque vous activez le mode rapide pendant que Claude travaille, le cache miss de l'en-tête se produit à la première requête de votre tour suivant. Ces tokens d'entrée non mis en cache sont facturés aux [tarifs du mode rapide](https://code.claude.com/docs/fr/fast-mode.md#understand-the-cost-tradeoff), c'est pourquoi l'activation au début d'une session coûte moins cher que l'activation profondément dans une longue session. Si votre modèle actuel ne supporte pas le mode rapide, l'activation du mode rapide [bascule également votre modèle](#switching-models), et ce basculement démarre un nouveau cache à partir de la prochaine requête du tour en cours.103Le [mode rapide](https://code.claude.com/docs/fr/fast-mode.md) et la vitesse standard conservent des caches distincts, donc après avoir activé ou désactivé le mode rapide, la prochaine requête ne peut pas utiliser ce que l'autre vitesse a mis en cache. La première fois que vous activez le mode rapide dans une conversation, la prochaine requête lit l'intégralité de la conversation jusqu'à ce point sans cache, aux [tarifs du mode rapide](https://code.claude.com/docs/fr/fast-mode.md#understand-the-cost-tradeoff). Pour limiter ce coût, activez-le au début d'une session.

104 104 

105Le coût s'applique une fois par conversation. Après le premier tour en mode rapide, Claude Code continue d'envoyer l'en-tête et varie uniquement le paramètre de vitesse de la requête, qui ne fait pas partie de la clé de cache. Désactiver le mode rapide, le [basculement automatique vers la vitesse standard](https://code.claude.com/docs/fr/fast-mode.md#handle-rate-limits) après une limite de débit, et le réactiver plus tard conservent tous le cache. Si vous [manquez de crédits d'utilisation](https://code.claude.com/docs/fr/fast-mode.md#handle-rate-limits) en cours de session, Claude Code réessaie chaque requête en mode rapide rejetée à la vitesse standard de la même manière, donc ce basculement conserve également le cache. `/clear` et `/compact` réinitialisent cela, puisqu'ils reconstruisent le cache à ces points de toute façon.105* Si vous l'activez pendant que Claude travaille, ce tour se termine à la vitesse standard, et vous payez toute lecture non mise en cache à la première requête de votre tour suivant.

106* Si votre modèle actuel ne supporte pas le mode rapide, l'activation du mode rapide [vous bascule également vers Opus](https://code.claude.com/docs/fr/fast-mode.md#toggle-fast-mode). Ce [changement de modèle](#switching-models) démarre à lui seul un nouveau cache à partir de la prochaine requête du tour en cours.

107 

108Chaque basculement ultérieur lit sans cache tout ce que la vitesse vers laquelle vous basculez n'a pas en cache. Les changements de vitesse que Claude Code effectue de lui-même, comme le [basculement vers la vitesse standard](https://code.claude.com/docs/fr/fast-mode.md#handle-rate-limits) après une limite de débit puis le retour au mode rapide plus tard, comptent également comme des basculements.

106 109 

107### Connexion ou suppression d'un serveur MCP110### Connexion ou suppression d'un serveur MCP

108 111 


184>187>

185> 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.188> 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.

186 189 

187Si vous laissez une longue conversation inactive dans une session de terminal alors qu'elle utilise le [TTL d'une heure](#which-ttl-each-request-gets), Claude Code peut la compacter peu avant l'expiration du cache. Pour désactiver la compaction en période d'inactivité, définissez [`idleCompaction`](https://code.claude.com/docs/fr/settings-reference#idlecompaction) sur `false`, ce qui nécessite Claude Code v2.1.290 ou ultérieur.190Si vous laissez une longue conversation inactive alors qu'elle utilise le [TTL d'une heure](#which-ttl-each-request-gets), Claude Code peut la compacter. Pour désactiver la compaction en période d'inactivité, définissez [`idleCompaction`](https://code.claude.com/docs/fr/settings-reference#idlecompaction) sur `false`, ce qui nécessite Claude Code v2.1.290 ou ultérieur.

188 191 

189### Accumulation de nombreuses images192### Accumulation de nombreuses images

190 193 


309 312 

310Dans Claude Code, le cache est effectivement limité à une machine et un répertoire. Le prompt système intègre vos chemins de mémoire automatique, et la conversation s'ouvre avec une annonce du répertoire de travail, de la plateforme, du shell et de la version du système d'exploitation. Deux sessions dans des répertoires différents construisent donc des préfixes différents et manquent le cache de l'autre.313Dans Claude Code, le cache est effectivement limité à une machine et un répertoire. Le prompt système intègre vos chemins de mémoire automatique, et la conversation s'ouvre avec une annonce du répertoire de travail, de la plateforme, du shell et de la version du système d'exploitation. Deux sessions dans des répertoires différents construisent donc des préfixes différents et manquent le cache de l'autre.

311 314 

312Les sessions que vous exécutez en parallèle dans le même répertoire construisent des préfixes correspondants et lisent le cache de l'autre. Les sessions séquentielles partagent le préfixe uniquement quand l'instantané du statut git au démarrage correspond, puisque chaque conversation porte également la branche et les commits récents de cet instantané.315* Les sessions que vous exécutez en parallèle dans le même répertoire construisent des préfixes correspondants et peuvent lire le cache de l'autre.

316* Les sessions séquentielles partagent le préfixe uniquement quand l'instantané du statut git pris au démarrage correspond, puisque chaque conversation porte également la branche et les commits récents de cet instantané.

317 

318Le cache API sous-jacent est plus large. Les caches sont isolés entre les organisations, et sur certains fournisseurs, [entre les espaces de travail au sein d'une organisation](https://platform.claude.com/docs/fr/build-with-claude/prompt-caching#cache-storage-and-sharing). Dans ces limites, deux requêtes partagent un cache uniquement lorsque leur modèle, leur [vitesse](#turning-on-fast-mode) et leur préfixe correspondent.

313 319 

314Le cache API sous-jacent est plus large. Les caches sont isolés entre les organisations, et sur certains fournisseurs, [entre les espaces de travail au sein d'une organisation](https://platform.claude.com/docs/fr/build-with-claude/prompt-caching#cache-storage-and-sharing). Dans ces limites, deux requêtes quelconques avec le même modèle et préfixe lisent le même cache. Pour les appelants du SDK Agent exécutant des flottes de processus automatisés, voir [améliorer le prompt caching entre les utilisateurs et les machines](https://code.claude.com/docs/fr/agent-sdk/modifying-system-prompts.md#improve-prompt-caching-across-users-and-machines) pour déplacer l'emplacement de la mémoire automatique hors du prompt système et partager l'entrée du cache du prompt système entre les utilisateurs et les machines.320Pour les appelants du SDK Agent exécutant des flottes de processus automatisés, voir [améliorer le prompt caching entre les utilisateurs et les machines](https://code.claude.com/docs/fr/agent-sdk/modifying-system-prompts.md#improve-prompt-caching-across-users-and-machines) pour déplacer l'emplacement de la mémoire automatique hors du prompt système.

315 321 

316## Vérifier les performances du cache322## Vérifier les performances du cache

317 323 

Details

179* **Diff de vos modifications** : lorsque le répertoire de la session se trouve dans un référentiel git, le volet diff d'un appareil connecté affiche vos modifications. Sur une branche qui a des commits en avance sur la branche par défaut du référentiel, le volet affiche les modifications depuis que la branche s'en est séparée, y compris vos modifications non validées. Sur la branche par défaut elle-même, ou sur une branche qui n'est pas en avance sur elle, le volet affiche uniquement vos modifications non validées.179* **Diff de vos modifications** : lorsque le répertoire de la session se trouve dans un référentiel git, le volet diff d'un appareil connecté affiche vos modifications. Sur une branche qui a des commits en avance sur la branche par défaut du référentiel, le volet affiche les modifications depuis que la branche s'en est séparée, y compris vos modifications non validées. Sur la branche par défaut elle-même, ou sur une branche qui n'est pas en avance sur elle, le volet affiche uniquement vos modifications non validées.

180* **Modèle** : lorsque vous choisissez un [modèle](https://code.claude.com/docs/fr/model-config.md) depuis un appareil connecté, Claude Code exécute la session sur ce modèle. Nécessite Claude Code v2.1.238 ou version ultérieure. Un modèle que vous choisissez depuis le contrôle de modèle de l'appareil s'applique uniquement à la session actuelle. Lorsque vous envoyez `/model <name>` depuis l'appareil à une session interactive, Claude Code définit également votre défaut pour les nouvelles sessions.180* **Modèle** : lorsque vous choisissez un [modèle](https://code.claude.com/docs/fr/model-config.md) depuis un appareil connecté, Claude Code exécute la session sur ce modèle. Nécessite Claude Code v2.1.238 ou version ultérieure. Un modèle que vous choisissez depuis le contrôle de modèle de l'appareil s'applique uniquement à la session actuelle. Lorsque vous envoyez `/model <name>` depuis l'appareil à une session interactive, Claude Code définit également votre défaut pour les nouvelles sessions.

181* **Niveau d'effort** : lorsque vous définissez le [niveau d'effort](https://code.claude.com/docs/fr/model-config.md#adjust-effort-level) depuis un appareil connecté, avec `/effort` ou le contrôle d'effort de l'appareil, Claude Code l'applique à la session sur votre machine. Si vous avez épinglé un niveau avec `CLAUDE_CODE_EFFORT_LEVEL`, la session conserve ce niveau, et Claude Code refuse un choix différent du contrôle d'effort. Choisir un niveau depuis le contrôle d'effort nécessite Claude Code v2.1.234 ou version ultérieure sur votre machine.181* **Niveau d'effort** : lorsque vous définissez le [niveau d'effort](https://code.claude.com/docs/fr/model-config.md#adjust-effort-level) depuis un appareil connecté, avec `/effort` ou le contrôle d'effort de l'appareil, Claude Code l'applique à la session sur votre machine. Si vous avez épinglé un niveau avec `CLAUDE_CODE_EFFORT_LEVEL`, la session conserve ce niveau, et Claude Code refuse un choix différent du contrôle d'effort. Choisir un niveau depuis le contrôle d'effort nécessite Claude Code v2.1.234 ou version ultérieure sur votre machine.

182* **Reconnexion après une défaillance de connexion** : exécutez `/remote-control` pour vous reconnecter. Si la compaction a réécrit la conversation ou que vous avez basculé les conversations avec `/resume` entre-temps, Claude Code archive la session serveur qu'il utilisait au lieu de la laisser dans la liste des sessions. Vous pouvez toujours la trouver en [filtrant les sessions archivées](https://code.claude.com/docs/fr/claude-code-on-the-web.md#archive-sessions). Basculer les conversations tandis qu'un appareil est toujours connecté n'archive pas la session.182* **Reconnexion après une défaillance de connexion** : exécutez `/remote-control` pour vous reconnecter. Si la compaction a réécrit la conversation ou que vous avez basculé les conversations avec `/resume` entre-temps, Claude Code archive la session serveur qu'il utilisait au lieu de la laisser dans la liste des sessions. Vous pouvez toujours trouver cette session parmi vos [sessions archivées](https://code.claude.com/docs/fr/claude-code-on-the-web.md#find-an-archived-session) sur claude.ai/code. Basculer les conversations tandis qu'un appareil est toujours connecté n'archive pas la session.

183 183 

184### Activer Remote Control pour toutes les sessions184### Activer Remote Control pour toutes les sessions

185 185 


401 401 

402## Dépannage402## Dépannage

403 403 

404### « Remote Control disconnected » ou « Can't reach »

405 

406Sur [claude.ai/code](https://claude.ai/code) ou dans l'application Desktop, le message **Remote Control disconnected** ou **Can't reach** signifie que votre navigateur ou votre application a perdu le contact avec Claude Code sur votre ordinateur. Aucun de ces messages ne vous indique si Claude ou un sous-agent que vous suiviez travaille toujours sur votre ordinateur. Sur cet ordinateur, vérifiez l'état dans lequel se trouve Claude Code et suivez l'étape correspondante pour vous reconnecter :

407 

408* **Une session interactive affiche `Remote Control disconnected`** : suivez [les étapes de reconnexion correspondant à la raison indiquée sur cette ligne](#session-ended-elsewhere)

409* **Claude Code est en cours d'exécution et n'affiche aucun échec** : une session interactive se reconnecte d'elle-même dès que la machine est sortie de veille et en ligne, vous n'avez donc rien à faire. Si vous avez utilisé `claude remote-control`, consultez **Panne réseau prolongée** dans [Limitations](#limitations)

410* **Claude Code n'est pas en cours d'exécution** : [redémarrez-le et restaurez la session](#resume-sessions-after-stopping-the-server)

411 

404### « Remote Control requires a claude.ai subscription »412### « Remote Control requires a claude.ai subscription »

405 413 

406Vous n'êtes pas connecté avec un compte claude.ai, ou d'autres identifiants ont priorité sur votre connexion. Le message prend l'une de ces formes :414Vous n'êtes pas connecté avec un compte claude.ai, ou d'autres identifiants ont priorité sur votre connexion. Le message prend l'une de ces formes :


463* **Avec `/remote-control`, `claude --remote-control` ou [auto-connect](#enable-remote-control-for-all-sessions)** : la session continue de s'exécuter sans Remote Control, et Claude Code l'archive sur claude.ai471* **Avec `/remote-control`, `claude --remote-control` ou [auto-connect](#enable-remote-control-for-all-sessions)** : la session continue de s'exécuter sans Remote Control, et Claude Code l'archive sur claude.ai

464* **Avec `claude remote-control`** : le serveur s'arrête et archive les sessions qu'il servait, puis se ferme472* **Avec `claude remote-control`** : le serveur s'arrête et archive les sessions qu'il servait, puis se ferme

465 473 

466Vous pouvez toujours retrouver une session archivée en [filtrant les sessions archivées](https://code.claude.com/docs/fr/claude-code-on-the-web.md#archive-sessions).474Pour retrouver l'une de ces sessions, ouvrez vos [sessions archivées](https://code.claude.com/docs/fr/claude-code-on-the-web.md#find-an-archived-session) sur claude.ai/code.

467 475 

468Remote Control ne se reconnecte pas de lui-même. Pour le réactiver une fois que votre organisation l'autorise à nouveau, exécutez `/remote-control` dans la session ou `claude remote-control` dans votre shell. L'une ou l'autre commande échoue avec [`Remote Control is disabled by your organization's policy`](#remote-control-is-disabled-by-your-organizations-policy) jusqu'à ce que Claude Code sur cette machine ait récupéré la politique modifiée. Une session ouverte la récupère environ une fois par heure. Pour savoir ce qui bloque Remote Control, comparez le texte complet affiché par la commande avec cette entrée.476Remote Control ne se reconnecte pas de lui-même. Pour le réactiver une fois que votre organisation l'autorise à nouveau, exécutez `/remote-control` dans la session ou `claude remote-control` dans votre shell. L'une ou l'autre commande échoue avec [`Remote Control is disabled by your organization's policy`](#remote-control-is-disabled-by-your-organizations-policy) jusqu'à ce que Claude Code sur cette machine ait récupéré la politique modifiée. Une session ouverte la récupère environ une fois par heure. Pour savoir ce qui bloque Remote Control, comparez le texte complet affiché par la commande avec cette entrée.

469 477 

routines.md +24 −4

Details

293 293 

294#### Événements pris en charge294#### Événements pris en charge

295 295 

296Les déclencheurs GitHub peuvent s'abonner à l'une ou l'autre des catégories d'événements suivantes. Dans chaque catégorie, vous pouvez choisir une action spécifique, comme `pull_request.opened`, ou réagir à toutes les actions de la catégorie.296Choisissez un événement dans l'une des catégories suivantes. Dans chaque catégorie, vous pouvez choisir une action spécifique, comme `pull_request.opened`, ou réagir à toutes les actions de la catégorie.

297 297 

298| Événement | Se déclenche quand |298| Événement | Se déclenche quand |

299| :- | :- |299| :- | :- |

300| Pull request | Une PR est ouverte, fermée, assignée, étiquetée, synchronisée ou mise à jour d'une autre manière |300| Pull request | Une PR est ouverte, fermée, assignée, étiquetée, synchronisée ou mise à jour d'une autre manière |

301| Release | Une release est créée, publiée, modifiée ou supprimée |301| Release | Une release est créée, publiée, modifiée ou supprimée |

302| Issue | Une issue est ouverte, modifiée, fermée, rouverte, étiquetée, assignée ou mise à jour d'une autre manière |

302 303 

303#### Filtrer les pull requests304#### Filtrer les pull requests

304 305 


333 334 

334Cliquez sur n'importe quelle exécution pour l'ouvrir en tant que session complète. De là, vous pouvez voir ce que Claude a fait, examiner les modifications, créer une pull request ou poursuivre la conversation. Chaque session d'exécution fonctionne comme n'importe quelle autre session : utilisez le menu déroulant à côté du titre de la session pour la renommer, l'archiver ou la supprimer.335Cliquez sur n'importe quelle exécution pour l'ouvrir en tant que session complète. De là, vous pouvez voir ce que Claude a fait, examiner les modifications, créer une pull request ou poursuivre la conversation. Chaque session d'exécution fonctionne comme n'importe quelle autre session : utilisez le menu déroulant à côté du titre de la session pour la renommer, l'archiver ou la supprimer.

335 336 

336> [!NOTE]337Sous **History** sur la page de détail de la tâche, la ligne de chaque exécution terminée se termine par **Error** si l'exécution a échoué, par **Cancelled** si elle a été annulée, et par aucun de ces deux mots si elle a réussi. Le filtre **Status** désigne ces trois mêmes résultats par **Failed**, **Cancelled** et **Succeeded**. Ces résultats indiquent comment la session s'est terminée, et non si Claude a accompli le travail décrit par votre prompt ; ouvrez donc l'exécution et lisez sa transcription pour voir ce qui s'est passé.

337>338 

338> Un statut vert dans la liste des exécutions signifie que la session a démarré et s'est terminée sans erreur d'infrastructure. Cela ne signifie pas que le travail décrit par votre prompt a réussi. Ouvrez l'exécution pour lire la transcription et confirmer ce que Claude a réellement fait. Les requêtes réseau bloquées, les outils de connecteur manquants et les échecs du travail lui-même apparaissent tous là plutôt que dans l'indicateur de statut.339* **Succeeded** : la session s'est terminée sans que Claude Code signale d'échec. Les requêtes réseau bloquées, les outils de connecteur manquants et le travail que Claude n'a pas pu accomplir apparaissent dans la transcription plutôt que sur la ligne

340* **Failed** : la session ne s'est pas terminée normalement. Par exemple, elle s'est arrêtée de manière inattendue, s'est terminée sur une erreur ou a été archivée avant le démarrage de l'exécution

341* **Cancelled** : l'exécution n'a pas échoué, et sa session a été archivée. Si vous archivez la session d'une exécution qui a réussi, l'exécution passe à **Cancelled**. Rien n'a besoin d'être modifié dans la tâche

342 

343Si un avertissement apparaît sous **History**, consultez [Avertissements « The last run »](#the-last-run-didnt-start).

339 344 

340### Modifier et contrôler les tâches planifiées345### Modifier et contrôler les tâches planifiées

341 346 


499 504 

500Un propriétaire de votre organisation Team ou Enterprise a probablement désactivé le bouton bascule **Scheduled tasks (Was Routines)** dans [**Organization settings > Capabilities > Remote sessions**](https://claude.ai/admin-settings/capabilities). Sur Claude Code v2.1.227 ou version ultérieure, ce même bouton bascule masque également `/schedule` dans la CLI. Il s'agit d'un paramètre d'organisation côté serveur, il ne peut donc pas être remplacé par votre configuration locale. Demandez à un propriétaire de réactiver les tâches planifiées pour votre organisation.505Un propriétaire de votre organisation Team ou Enterprise a probablement désactivé le bouton bascule **Scheduled tasks (Was Routines)** dans [**Organization settings > Capabilities > Remote sessions**](https://claude.ai/admin-settings/capabilities). Sur Claude Code v2.1.227 ou version ultérieure, ce même bouton bascule masque également `/schedule` dans la CLI. Il s'agit d'un paramètre d'organisation côté serveur, il ne peut donc pas être remplacé par votre configuration locale. Demandez à un propriétaire de réactiver les tâches planifiées pour votre organisation.

501 506 

507### Avertissements « The last run »

508 

509Lorsqu'un avertissement sous **History** commence par « The last run », recherchez-le dans la première colonne et suivez les indications de sa ligne. L'avertissement disparaît dès qu'une exécution ultérieure démarre.

510 

511| Avertissement | Que faire |

512| :- | :- |

513| "The last run didn't start because your organization had reached its limit on cloud sessions running at once." | La tâche ne nécessite aucune modification. Cliquez sur **Run now** plus tard, ou attendez la prochaine exécution |

514| "The last run didn't start because its cloud environment couldn't be found or used." | Sur la page de détails de la tâche, ouvrez le menu à côté de son nom, sélectionnez **Edit** et repérez le [sélecteur d'environnement cloud](#environments-and-network-access). S'il indique **Unavailable environment**, cet environnement a été archivé ou n'est plus disponible pour votre compte : choisissez-en un autre à cet endroit et enregistrez vos modifications. Sinon, réessayez avec **Run now** sur la page de détails, ou choisissez un autre environnement dans le sélecteur et enregistrez vos modifications |

515| "The last run was blocked because it couldn't access something it needs, or your organization's policy doesn't allow it." | Vérifiez que votre [accès GitHub](#repositories-and-branch-permissions) couvre les dépôts de la tâche. Si c'est le cas, demandez à un [propriétaire](https://code.claude.com/docs/fr/server-managed-settings.md#access-control) de votre organisation Claude si une politique bloque la tâche |

516| "The last run didn't start because of a problem that's usually temporary." | Cliquez sur **Run now** pour réessayer, ou attendez la prochaine exécution |

517| "The last run didn't start because its repository or branch wasn't available." | Vérifiez sur GitHub que chaque dépôt de la tâche possède la [branche à partir de laquelle l'exécution démarre](#repositories-and-branch-permissions). Vérifiez également que votre [accès GitHub](#repositories-and-branch-permissions) couvre chaque dépôt, et reconnectez GitHub si votre connexion a expiré |

518| "The last run didn't start because some of its settings weren't accepted." | Sur la page de détails de la tâche, ouvrez le menu à côté de son nom et sélectionnez **Edit**. La boîte de dialogue n'indique pas quel paramètre n'a pas été accepté : vérifiez donc chacun d'eux, notamment le nom de la tâche, son prompt, son modèle, ses dépôts, son environnement, ses connecteurs et ses déclencheurs |

519| "The last run stopped because a usage limit was reached." | Pour savoir quand les exécutions de la tâche peuvent reprendre après une limite d'utilisation, consultez [Utilisation et limites](#usage-and-limits) |

520| "The last run failed." | Cliquez sur **Run now** pour réessayer, ou attendez la prochaine exécution. L'exécution ayant échoué n'a aucune session à ouvrir |

521 

502## Ressources connexes522## Ressources connexes

503 523 

504* [`/loop` et planification en session](https://code.claude.com/docs/fr/scheduled-tasks) : planifiez des tâches locales dans une session CLI ouverte524* [`/loop` et planification en session](https://code.claude.com/docs/fr/scheduled-tasks) : planifiez des tâches locales dans une session CLI ouverte

sandboxing.md +26 −2

Details

223* **Une règle de demande pour le paramètre** : ajoutez une [règle de demande](https://code.claude.com/docs/fr/permissions.md#match-by-input-parameter) pour `Bash(dangerouslyDisableSandbox:true)` afin de recevoir une demande lors des nouvelles tentatives Bash. Vous recevez la demande en mode auto et en mode `bypassPermissions` également, et la règle a priorité sur une règle d'autorisation correspondante223* **Une règle de demande pour le paramètre** : ajoutez une [règle de demande](https://code.claude.com/docs/fr/permissions.md#match-by-input-parameter) pour `Bash(dangerouslyDisableSandbox:true)` afin de recevoir une demande lors des nouvelles tentatives Bash. Vous recevez la demande en mode auto et en mode `bypassPermissions` également, et la règle a priorité sur une règle d'autorisation correspondante

224* **[`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/fr/settings-reference#permissions-blockreadsoutsideworkingdirectories)** : [Actions qu'aucun mode n'approuve automatiquement](https://code.claude.com/docs/fr/permission-modes.md#actions-no-mode-auto-approves) décrit les nouvelles tentatives qui déclenchent une demande lorsque ce paramètre est activé224* **[`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/fr/settings-reference#permissions-blockreadsoutsideworkingdirectories)** : [Actions qu'aucun mode n'approuve automatiquement](https://code.claude.com/docs/fr/permission-modes.md#actions-no-mode-auto-approves) décrit les nouvelles tentatives qui déclenchent une demande lorsque ce paramètre est activé

225 225 

226Tant que les commandes sont refusées avec un [message `Sandbox is required`](#commands-refused-with-sandbox-is-required), Claude Code ignore le paramètre `dangerouslyDisableSandbox` et refuse également la nouvelle tentative.

227 

226#### Désactiver la nouvelle tentative avec le mode sandbox strict228#### Désactiver la nouvelle tentative avec le mode sandbox strict

227 229 

228Vous pouvez désactiver la nouvelle tentative hors sandbox en définissant `"allowUnsandboxedCommands": false` dans vos [paramètres du sandbox](https://code.claude.com/docs/fr/settings-reference.md#sandbox-settings). Lorsque la nouvelle tentative est désactivée, Claude Code ignore le paramètre `dangerouslyDisableSandbox`. Tant que le sandbox fonctionne, les commandes exécutées par Claude sont alors en sandbox, sauf si elles correspondent à une entrée `excludedCommands`. Pour empêcher Claude Code d'exécuter des commandes hors sandbox lorsque le sandbox ne peut pas démarrer, définissez également [`failIfUnavailable`](https://code.claude.com/docs/fr/settings-reference#sandbox-failifunavailable). L'onglet **Overrides** de `/sandbox` affiche ce paramètre sous le nom **Strict sandbox mode**.230Vous pouvez désactiver la nouvelle tentative hors sandbox en définissant `"allowUnsandboxedCommands": false` dans vos [paramètres du sandbox](https://code.claude.com/docs/fr/settings-reference.md#sandbox-settings). Lorsque la nouvelle tentative est désactivée, Claude Code ignore le paramètre `dangerouslyDisableSandbox`. Tant que le sandbox fonctionne, les commandes exécutées par Claude sont alors en sandbox, sauf si elles correspondent à une entrée `excludedCommands`. Pour empêcher Claude Code d'exécuter des commandes hors sandbox lorsque le sandbox ne peut pas démarrer, définissez également [`failIfUnavailable`](https://code.claude.com/docs/fr/settings-reference#sandbox-failifunavailable). L'onglet **Overrides** de `/sandbox` affiche ce paramètre sous le nom **Strict sandbox mode**.


899 901 

900### Des fichiers en lecture seule de 0 octet apparaissent aux chemins des paramètres `.claude`, et « Oui, et ne pas demander à nouveau » ne sauvegarde pas902### Des fichiers en lecture seule de 0 octet apparaissent aux chemins des paramètres `.claude`, et « Oui, et ne pas demander à nouveau » ne sauvegarde pas

901 903 

902Sur Linux et WSL2, le sandbox maintient un refus d'écriture sur un fichier qui n'existe pas encore en créant un espace réservé en lecture seule de 0 octet à cet emplacement pendant qu'une commande sandboxée s'exécute. Le sandbox supprime l'espace réservé ensuite. Si une session est tuée avant que ce nettoyage ne s'exécute, par exemple par SIGKILL, les espaces réservés restent. Les sessions ultérieures les lient à nouveau en lecture seule à chaque démarrage, donc une écriture de paramètres telle que l'enregistrement d'un choix de permission échoue à un chemin où un espace réservé subsiste.904Sur Linux et WSL2, le sandbox maintient un refus d'écriture sur un fichier qui n'existe pas encore en créant un espace réservé en lecture seule de 0 octet à cet emplacement pendant qu'une commande sandboxée s'exécute. Le sandbox supprime l'espace réservé ensuite.

905 

906Un espace réservé subsiste dans des cas tels que les suivants :

907 

908* La session est tuée avant que ce nettoyage ne s'exécute, par exemple par SIGKILL

909* La session se termine alors qu'une commande sandboxée est encore en cours d'exécution, comme une commande en arrière-plan

903 910 

904Exécutez `claude doctor` dans votre terminal pour lister les fichiers d'espace réservé restants. L'avertissement [`Sandbox mask files left behind at write-deny paths`](https://code.claude.com/docs/fr/errors#stale-sandbox-mask-files-left-by-a-killed-session) en nomme certains et compte le reste. Supprimez chaque fichier avec `rm` tandis qu'aucune autre session Claude Code ne s'exécute dans ce projet. Avant v2.1.257, Claude Code laissait les mêmes espaces réservés derrière sans les signaler.911Les sessions ultérieures lient à nouveau les espaces réservés en lecture seule à chaque démarrage, donc une écriture de paramètres telle que l'enregistrement d'un choix de permission échoue à un chemin où un espace réservé subsiste.

912 

913Exécutez `claude doctor` dans votre terminal pour lister les fichiers d'espace réservé restants. L'avertissement [`Sandbox mask files left behind at write-deny paths`](https://code.claude.com/docs/fr/errors#stale-sandbox-mask-files-left-by-a-killed-session) en nomme certains et compte le reste. Supprimez chaque fichier avec `rm` tandis qu'aucune autre session Claude Code ne s'exécute dans ce projet. Avant v2.1.257, Claude Code laissait les mêmes espaces réservés derrière lorsqu'une session était tuée, sans les signaler.

905 914 

906### `git` via SSH échoue lorsque le sandbox est activé915### `git` via SSH échoue lorsque le sandbox est activé

907 916 


1000 1009 

1001Avant v2.1.284, le proxy se connectait à l'adresse en laquelle se résolvait un nom d'hôte autorisé, quelle qu'elle soit.1010Avant v2.1.284, le proxy se connectait à l'adresse en laquelle se résolvait un nom d'hôte autorisé, quelle qu'elle soit.

1002 1011 

1012### Les commandes sont refusées avec `Sandbox is required`

1013 

1014Si vous exigez le sandbox avec [`sandbox.failIfUnavailable`](https://code.claude.com/docs/fr/settings-reference#sandbox-failifunavailable) et qu'il échoue de l'une des manières suivantes après le démarrage de Claude Code, chaque commande sandboxée exécutée par Claude est refusée avec le message indiqué. La session continue de s'exécuter, et la commande refusée ne s'exécute pas hors du sandbox :

1015 

1016* **`Sandbox is required but failed to initialize: <reason>`** : Claude Code a démarré, mais le sandbox n'a ensuite pas pu s'initialiser. Suivez l'étape indiquée par le message : `Restart to retry.` ou `Fix the sandbox settings to retry`.

1017* **`Sandbox is required (sandbox.failIfUnavailable) and stopped being available in this session: <reason>`** : sur Linux ou WSL2, le sandbox a démarré, puis Claude Code a constaté qu'une dépendance manquait. Corrigez ce que la raison indique, par exemple en [installant une dépendance manquante](#set-up-linux-and-wsl2), puis redémarrez Claude Code.

1018 

1019Les commandes exclues et les commandes que vous tapez vous-même continuent de s'exécuter, et Claude ne peut pas réessayer une commande refusée hors du sandbox :

1020 

1021* **Commandes exclues** : les commandes qui correspondent à une entrée [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) continuent de s'exécuter en dehors du sandbox. Lorsque l'une d'elles écrit dans un chemin [`filesystem.allowWrite`](https://code.claude.com/docs/fr/settings-reference#sandbox-filesystem-allowwrite) situé en dehors de votre répertoire de travail, cette écriture passe par le flux de permission habituel. Avec un [sandbox imposé par l'administrateur](#repository-settings-under-an-admin-required-sandbox), Claude Code ignore les entrées provenant des paramètres du dépôt

1022* **Commandes que vous tapez à l'[invite du mode shell `!`](https://code.claude.com/docs/fr/interactive-mode#shell-mode-with-prefix)** : elles continuent de s'exécuter en dehors du sandbox. Dans une [session en arrière-plan](https://code.claude.com/docs/fr/agent-view.md), elles sont également refusées

1023* **Nouvelles tentatives hors sandbox** : Claude Code ignore le paramètre `dangerouslyDisableSandbox` d'une [nouvelle tentative hors sandbox](#the-unsandboxed-retry-escape-hatch)

1024 

1025Dans une session Linux où `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` est défini, chaque commande s'exécute dans le sandbox : les commandes exclues et les commandes que vous tapez sont donc également refusées.

1026 

1003### `/sandbox` échoue avec `Sandbox settings are overridden by a higher-priority configuration`1027### `/sandbox` échoue avec `Sandbox settings are overridden by a higher-priority configuration`

1004 1028 

1005`/sandbox` affiche `Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.` au lieu d'ouvrir son panneau lorsqu'un [niveau de paramètres](https://code.claude.com/docs/fr/settings.md#settings-precedence) supérieur définit `sandbox.enabled`, `sandbox.autoAllowBashIfSandboxed` ou `sandbox.allowUnsandboxedCommands`. Le panneau enregistre vos choix dans `.claude/settings.local.json`, et une valeur enregistrée à cet endroit ne peut pas remplacer ces niveaux.1029`/sandbox` affiche `Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.` au lieu d'ouvrir son panneau lorsqu'un [niveau de paramètres](https://code.claude.com/docs/fr/settings.md#settings-precedence) supérieur définit `sandbox.enabled`, `sandbox.autoAllowBashIfSandboxed` ou `sandbox.allowUnsandboxedCommands`. Le panneau enregistre vos choix dans `.claude/settings.local.json`, et une valeur enregistrée à cet endroit ne peut pas remplacer ces niveaux.

Details

791 791 

792Pour l'ordre dans lequel ces sources s'appliquent, voir [priorité des paramètres](https://code.claude.com/docs/fr/settings.md#settings-precedence).792Pour l'ordre dans lequel ces sources s'appliquent, voir [priorité des paramètres](https://code.claude.com/docs/fr/settings.md#settings-precedence).

793 793 

794Quand le plan de contrôle d'Anthropic fournit une session avec des [hooks Claude Code](https://code.claude.com/docs/fr/hooks.md), le runner les installe aux côtés, pas par-dessus, votre propre configuration. Nécessite Claude Code v2.1.229 ou ultérieur.794Quand le plan de contrôle d'Anthropic fournit une session avec des [hooks Claude Code](https://code.claude.com/docs/fr/hooks.md), le runner les installe aux côtés, pas par-dessus, votre propre configuration. Nécessite Claude Code v2.1.229 ou ultérieur ; les runners plus anciens ignorent les hooks fournis. Les hooks fournis exécutent `python3`, installez donc `python3` dans votre [image runner](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#build-the-runner-image).

795 795 

796* **Où ils atterrissent** : le runner écrit chaque script de hook fourni dans un sous-répertoire réservé `hooks/.ccr-launcher/` du répertoire de configuration de la session et enregistre les scripts dans un fichier de paramètres séparé qu'il transmet à la session avec `--settings`, laissant le `settings.json` semé et vos propres scripts à `hooks/<name>` intacts. Le runner recrée le sous-répertoire réservé pour chaque session et ne sème pas le contenu de l'hôte à `~/.claude/hooks/.ccr-launcher/` dans les sessions.796* **Où ils atterrissent** : le runner écrit chaque script de hook fourni dans un sous-répertoire réservé `hooks/.ccr-launcher/` du répertoire de configuration de la session et enregistre les scripts dans un fichier de paramètres séparé qu'il transmet à la session avec `--settings`, laissant le `settings.json` semé et vos propres scripts à `hooks/<name>` intacts. Le runner recrée le sous-répertoire réservé pour chaque session et ne sème pas le contenu de l'hôte à `~/.claude/hooks/.ccr-launcher/` dans les sessions.

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

Details

348 348 

349Les recettes ci-dessous utilisent `--capacity 4`, donc un conteneur sert jusqu'à quatre sessions concurrentes du même propriétaire verrouillé. Cela ne fournit pas l'isolation du conteneur par session dans la [section de durcissement](#harden-your-deployment) : avant de connecter un environnement aux systèmes de production, soit exécutez les recettes à `--capacity 1` avec un conteneur par session, soit utilisez les [runners à la demande](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners), qui gardent également le secret de l'environnement hors des hôtes exécutant les sessions. Si vous ajoutez le [proxy git Anthropic](#use-the-anthropic-git-proxy) à l'une de ces recettes, changez également `--capacity` à `1`.349Les recettes ci-dessous utilisent `--capacity 4`, donc un conteneur sert jusqu'à quatre sessions concurrentes du même propriétaire verrouillé. Cela ne fournit pas l'isolation du conteneur par session dans la [section de durcissement](#harden-your-deployment) : avant de connecter un environnement aux systèmes de production, soit exécutez les recettes à `--capacity 1` avec un conteneur par session, soit utilisez les [runners à la demande](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#on-demand-runners), qui gardent également le secret de l'environnement hors des hôtes exécutant les sessions. Si vous ajoutez le [proxy git Anthropic](#use-the-anthropic-git-proxy) à l'une de ces recettes, changez également `--capacity` à `1`.

350 350 

351Ce Dockerfile est un point de départ minimal :351Ce Dockerfile est un point de départ minimal. Il installe `python3` car les [hooks fournis par le plan de contrôle d'Anthropic](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled) aux sessions Claude Tag, y compris celui qui permet à Claude de publier sa réponse dans Slack, exécutent `python3`. Conservez `python3` dans le `PATH` de toute image qui sert des sessions Claude Tag :

352 352 

353```dockerfile theme={null}353```dockerfile theme={null}

354FROM debian:bookworm-slim354FROM debian:bookworm-slim

355ARG CLAUDE_CODE_VERSION355ARG CLAUDE_CODE_VERSION

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

357 && rm -rf /var/lib/apt/lists/*357 && rm -rf /var/lib/apt/lists/*

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

359 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude359 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


363ENTRYPOINT ["claude"]363ENTRYPOINT ["claude"]

364```364```

365 365 

366Échangez `linux-x64` pour `linux-arm64` si vos nœuds sont ARM, ou pour `linux-x64-musl` ou `linux-arm64-musl` sur une image basée sur musl comme Alpine ; consultez [Configuration Alpine Linux](https://code.claude.com/docs/fr/setup.md#alpine-linux-and-musl-based-distributions) pour les paquets supplémentaires dont les images musl ont besoin. L'URL est l'emplacement de version standard de Claude Code, donc vous pouvez vérifier le binaire téléchargé par rapport au manifeste signé de la version comme décrit dans [Intégrité binaire et signature de code](https://code.claude.com/docs/fr/setup.md#binary-integrity-and-code-signing). Le runner nécessite Claude Code version 2.1.224 ou ultérieure. Construisez l'image, puis poussez-la vers votre registre et référencez-la dans les recettes ci-dessous :366Échangez `linux-x64` pour `linux-arm64` si vos nœuds sont ARM, ou pour `linux-x64-musl` ou `linux-arm64-musl` sur une image basée sur musl comme Alpine ; consultez [Configuration Alpine Linux](https://code.claude.com/docs/fr/setup.md#alpine-linux-and-musl-based-distributions) pour les paquets supplémentaires dont les images musl ont besoin. L'URL est l'emplacement de version standard de Claude Code, donc vous pouvez vérifier le binaire téléchargé par rapport au manifeste signé de la version comme décrit dans [Intégrité binaire et signature de code](https://code.claude.com/docs/fr/setup.md#binary-integrity-and-code-signing). Le runner nécessite Claude Code version 2.1.224 ou ultérieure, ou 2.1.229 ou ultérieure pour servir des sessions Claude Tag. Construisez l'image, puis poussez-la vers votre registre et référencez-la dans les recettes ci-dessous :

367 367 

368```bash theme={null}368```bash theme={null}

369docker build \369docker build \


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

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

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

771* **Une commande interrompue par la perte d'un runner peut s'exécuter à nouveau** : lorsque la session reprend sur un autre runner, Claude voit l'appel d'outil interrompu avec un résultat indiquant que son issue est inconnue.

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

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

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


824 Une fois le runner mis à niveau ou la cause corrigée, réessayez la session ou démarrez-en une nouvelle. Si aucune de ces vérifications ne révèle la cause, [signalez un problème](#report-an-issue).825 Une fois le runner mis à niveau ou la cause corrigée, réessayez la session ou démarrez-en une nouvelle. Si aucune de ces vérifications ne révèle la cause, [signalez un problème](#report-an-issue).

825 826 

826 Pour la source vers laquelle la session pousse ses résultats, une branche supprimée fait échouer la session. Pour une source git que la session ne fait que lire, le runner ignore cette source et continue avec les autres. Le runner fait échouer la session lorsque l'ignorer la laisserait sans aucun dépôt. Avant la v2.1.228, une telle session démarrait dans un répertoire vide.827 Pour la source vers laquelle la session pousse ses résultats, une branche supprimée fait échouer la session. Pour une source git que la session ne fait que lire, le runner ignore cette source et continue avec les autres. Le runner fait échouer la session lorsque l'ignorer la laisserait sans aucun dépôt. Avant la v2.1.228, une telle session démarrait dans un répertoire vide.

828* **Claude Tag ne publie parfois pas sa réponse dans Slack** : le rappel de réponse est un [hook fourni par le plan de contrôle](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled). Vérifiez avec `claude --version` que le runner exécute Claude Code v2.1.229 ou ultérieure, car les runners plus anciens ignorent les hooks fournis ; vérifiez que `python3 --version` réussit dans l'image du runner, car les hooks exécutent `python3` ; et vérifiez qu'aucun fichier de paramètres ne désactive les hooks, qu'il s'agisse de `disableAllHooks` dans `managed-settings.json`, dans le `~/.claude/settings.json` de l'utilisateur du runner, ou dans le `.claude/settings.json` ou le `.claude/settings.local.json` du dépôt, ou encore de `allowManagedHooksOnly` ou d'un [`strictPluginOnlyCustomization`](https://code.claude.com/docs/fr/settings-reference#strictpluginonlycustomization) couvrant les hooks dans les paramètres gérés.

827* **Une session démarre sans l'un de ses dépôts** : sur un runner sans [hook `checkout`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#checkout), l'hôte git peut refuser la vérification d'accès du runner pour un dépôt que la session ne fait que lire. Le runner ignore alors ce dépôt, journalise une ligne `[runner:warn] could not access context source` indiquant le refus, et démarre la session avec les dépôts restants.829* **Une session démarre sans l'un de ses dépôts** : sur un runner sans [hook `checkout`](https://code.claude.com/docs/fr/self-hosted-environments-configuration#checkout), l'hôte git peut refuser la vérification d'accès du runner pour un dépôt que la session ne fait que lire. Le runner ignore alors ce dépôt, journalise une ligne `[runner:warn] could not access context source` indiquant le refus, et démarre la session avec les dépôts restants.

828 830 

829 Le runner n'ignore qu'un refus explicite : l'hôte répond que le dépôt est introuvable, git ne trouve aucun identifiant pour l'hôte, ou l'authentification échoue. Une défaillance réseau, un délai d'expiration ou un HTTP `403` fait toujours échouer le démarrage de la session, tout comme un refus pour un dépôt vers lequel la session pousse ses résultats. Le runner fait toujours échouer une session qui se retrouverait sans aucun dépôt si les dépôts refusés étaient ignorés. Avec [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), le runner n'ignore qu'un dépôt que le proxy git lui-même refuse.831 Le runner n'ignore qu'un refus explicite : l'hôte répond que le dépôt est introuvable, git ne trouve aucun identifiant pour l'hôte, ou l'authentification échoue. Une défaillance réseau, un délai d'expiration ou un HTTP `403` fait toujours échouer le démarrage de la session, tout comme un refus pour un dépôt vers lequel la session pousse ses résultats. Le runner fait toujours échouer une session qui se retrouverait sans aucun dépôt si les dépôts refusés étaient ignorés. Avec [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), le runner n'ignore qu'un dépôt que le proxy git lui-même refuse.

Details

35 35 

36Installez sur l'hôte avant de commencer :36Installez sur l'hôte avant de commencer :

37 37 

38* **Claude Code v2.1.224 ou ultérieur**, avec l'une des [méthodes d'installation standard](https://code.claude.com/docs/fr/setup.md). Le runner fait partie du binaire `claude` standard, et les versions antérieures ne reconnaissent pas la sous-commande `self-hosted-runner`. Pour épingler la version exacte que votre flotte exécute, consultez [Installer une version spécifique](https://code.claude.com/docs/fr/setup.md#install-a-specific-version). Pour les images de conteneur, consultez le Dockerfile dans [Déployer en production](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#build-the-runner-image).38* **Claude Code v2.1.224 ou ultérieur**, avec l'une des [méthodes d'installation standard](https://code.claude.com/docs/fr/setup.md). Le runner fait partie du binaire `claude` standard, et les versions antérieures ne reconnaissent pas la sous-commande `self-hosted-runner`. Un runner qui sert des sessions Claude Tag nécessite la v2.1.229 ou ultérieure et `python3` dans son `PATH`, car les [hooks fournis par le plan de contrôle](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#how-each-session’s-config-is-assembled) pour ces sessions exécutent `python3`. Pour épingler la version exacte que votre flotte exécute, consultez [Installer une version spécifique](https://code.claude.com/docs/fr/setup.md#install-a-specific-version). Pour les images de conteneur, consultez le Dockerfile dans [Déployer en production](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#build-the-runner-image).

39* **Git 2.24 ou plus récent**. Certaines options git sur la page de déploiement nécessitent des versions plus récentes ; [Configurer git](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#configure-git) indique chaque plancher.39* **Git 2.24 ou plus récent**. Certaines options git sur la page de déploiement nécessitent des versions plus récentes ; [Configurer git](https://code.claude.com/docs/fr/self-hosted-environments-deploy.md#configure-git) indique chaque plancher.

40 40 

41Confirmez que l'hôte est prêt :41Confirmez que l'hôte est prêt :

Details

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

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

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

55| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Libérer un créneau de session si l'enfant n'a pas signalé sur le [canal d'activité](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#keep-stdin-and-file-descriptor-3-attached) qu'il s'était initialisé dans les N minutes. Les N minutes commencent au lancement, après le clonage, et repartent de zéro à chaque message `user` ou `assistant` que l'enfant émet avant de s'être initialisé ou d'avoir signalé son état. Avant v2.1.299, ce délai d'expiration cessait de s'appliquer au premier message de ce type de la session. Pour la libération après le signal d'init, voir `--release-idle-session-min`. `0` désactive. |55| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Durée d'attente d'un processus enfant qui ne s'est pas initialisé avant de libérer le créneau de la session. Voir [Délai d'expiration du démarrage de session](#session-startup-timeout) pour savoir où commence le décompte et quelles sessions il laisse en cours d'exécution. `0` désactive le délai d'expiration. |

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

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

58 58 


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

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

63 63 

64### Délai d'expiration du démarrage de session

65 

66Si une session a perdu son créneau pendant un tour tel que `/code-review`, mettez à jour le runner et le binaire enfant vers v2.1.309 ou ultérieur. De v2.1.299 à v2.1.308, le runner libérait une session, même en plein tour, dès que le délai d'expiration du démarrage s'écoulait sans message `user` ou `assistant`.

67 

68Avec `--startup-timeout-min <n>`, le runner libère le créneau d'une session quand son enfant ne s'est pas initialisé dans les `<n>` minutes qui suivent le clonage. Pendant un tour qui commence avant l'initialisation de l'enfant, la session conserve son créneau jusqu'à ce que `<n>` minutes s'écoulent sans aucune ligne sur le [canal d'activité](https://code.claude.com/docs/fr/self-hosted-environments-configuration.md#keep-stdin-and-file-descriptor-3-attached) de l'enfant. Une fois l'enfant initialisé, le runner remet ce décompte à zéro et `--release-idle-session-min` régit la libération. Pour limiter une session dont l'enfant est actif mais bloqué, définissez `--kill-session-after-min`.

69 

64### Listes de règles du mode auto70### Listes de règles du mode auto

65 71 

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


374 380 

375#### Associer les métriques d'une session à celles du runner381#### Associer les métriques d'une session à celles du runner

376 382 

377Pour placer les métriques propres d'une session à côté de `claude_code_self_hosted_runner_session_idle_seconds`, effectuez une jointure sur le `session_id` du runner :383Pour voir ce qu'ont coûté les sessions inactives, effectuez une jointure entre la métrique `claude_code_self_hosted_runner_session_idle_seconds` du runner et la métrique de coût de Claude Code sur `ccr_session_id`. La métrique du runner ne porte pas ce label ; ajoutez-le donc avec `label_replace`, comme dans cette requête :

384 

385```text theme={null}

386sum by (ccr_session_id) (claude_code_cost_usage_total)

387and on (ccr_session_id)

388label_replace(

389 claude_code_self_hosted_runner_session_idle_seconds > 600,

390 "ccr_session_id", "cse_$1", "session_id", "session_(.*)"

391)

392```

393 

394La requête renvoie un résultat par session inactive depuis plus de dix minutes : le coût en dollars américains que son processus Claude Code a comptabilisé jusqu'à présent. Pour effectuer une jointure avec une autre métrique Claude Code, remplacez `claude_code_cost_usage_total` dans la requête. La requête fonctionne quelle que soit la valeur de `--capacity`.

378 395 

379* **À `--capacity` au-dessus d'un** : effectuez la jointure directement. Sur le `/metrics` du runner, les séries de la session portent le même `session_id` que cette métrique, sous la forme `session_...`.396* **`session_id`** : sur le port 9464, ce label sur les métriques Claude Code contient le [`session.id`](https://code.claude.com/docs/fr/monitoring-usage#standard-attributes) propre à Claude Code, qui ne correspond à aucune série du runner. Une jointure sur celui-ci ne renvoie rien ; effectuez donc la jointure sur `ccr_session_id`.

380* **À `--capacity 1`** : effectuez la jointure sur un `ccr_session_id` converti. Par défaut, chaque métrique Claude Code sur le port 9464 porte ce label, qui contient l'ID de session sous la forme `cse_...`. Dans un nouveau label, remplacez son préfixe `cse_` par `session_` pour obtenir le `session_id` du runner. Le propre `session_id` de la métrique contient le [`session.id`](https://code.claude.com/docs/fr/monitoring-usage#standard-attributes) propre à Claude Code, qui ne correspond à aucune série du runner.397* **Les métriques Claude Code n'ont pas de `ccr_session_id`** : vérifiez que [`OTEL_METRICS_INCLUDE_SESSION_ID`](https://code.claude.com/docs/fr/monitoring-usage#metrics-cardinality-control) n'est pas défini sur `false`

381 398 

382### Sémantique des compteurs du cycle de vie de la session399### Sémantique des compteurs du cycle de vie de la session

383 400 

Details

12 12 

13## Index des paramètres13## Index des paramètres

14 14 

15Chaque clé ci-dessous renvoie à son entrée. La colonne Portée indique les [fichiers](https://code.claude.com/docs/fr/settings.md#settings-files-and-who-they-affect) dans lesquels elle peut figurer : `Utilisateur` correspond à `~/.claude/settings.json`, `Projet` à `.claude/settings.json`, `Local` à `.claude/settings.local.json`, et `Géré` à [ce que votre organisation déploie](https://code.claude.com/docs/fr/managed-settings.md). `Tout fichier` désigne les quatre, et `Config globale` désigne [`~/.claude.json`](#global-config-settings).15Chaque clé ci-dessous renvoie à son entrée. La portée indique les [fichiers](https://code.claude.com/docs/fr/settings.md#settings-files-and-who-they-affect) dans lesquels elle peut figurer : `Utilisateur` correspond à `~/.claude/settings.json`, `Projet` à `.claude/settings.json`, `Local` à `.claude/settings.local.json`, et `Géré` à [ce que votre organisation déploie](https://code.claude.com/docs/fr/managed-settings.md). `Tout fichier` désigne les quatre, et `Config globale` désigne [`~/.claude.json`](#global-config-settings).

16 16 

17| Clé | Description | Thème | Portée |17| Key | Description | Topic | Scope |

18| :- | :- | :- | :- |18| :- | :- | :- | :- |

19| [`advisorModel`](#advisormodel) | Choisir le modèle qui répond lorsque Claude interroge l'[outil advisor](https://code.claude.com/docs/fr/advisor.md) | Modèle et réponses | Tout fichier |19| [`advisorModel`](#advisormodel) | Choisir le modèle qui répond lorsque Claude interroge l'[outil advisor](https://code.claude.com/docs/fr/advisor.md) | Modèle et réponses | Tout fichier |

20| [`agent`](#agent) | Démarrer chaque session en tant que [sous-agent](https://code.claude.com/docs/fr/sub-agents.md) nommé, avec son prompt, ses outils et son modèle | Agents, sessions et worktrees | Tout fichier |20| [`agent`](#agent) | Démarrer chaque session en tant que [sous-agent](https://code.claude.com/docs/fr/sub-agents.md) nommé, avec son prompt, ses outils et son modèle | Agents, sessions et worktrees | Tout fichier |


117| [`gcpAuthRefresh`](#gcpauthrefresh) | Actualiser les [identifiants Google Cloud](https://code.claude.com/docs/fr/google-vertex-ai.md#advanced-credential-configuration) avec votre propre commande | Authentification et fournisseurs | Tout fichier |117| [`gcpAuthRefresh`](#gcpauthrefresh) | Actualiser les [identifiants Google Cloud](https://code.claude.com/docs/fr/google-vertex-ai.md#advanced-credential-configuration) avec votre propre commande | Authentification et fournisseurs | Tout fichier |

118| [`hooks`](#hooks) | Exécuter vos propres commandes en tant que [hooks](https://code.claude.com/docs/fr/hooks.md) à différents moments du cycle de vie de Claude Code | Hooks et automatisation | Tout fichier |118| [`hooks`](#hooks) | Exécuter vos propres commandes en tant que [hooks](https://code.claude.com/docs/fr/hooks.md) à différents moments du cycle de vie de Claude Code | Hooks et automatisation | Tout fichier |

119| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | Limiter les variables d'environnement que les [hooks HTTP](https://code.claude.com/docs/fr/hooks.md) peuvent placer dans les en-têtes | Hooks et automatisation | Tout fichier |119| [`httpHookAllowedEnvVars`](#httphookallowedenvvars) | Limiter les variables d'environnement que les [hooks HTTP](https://code.claude.com/docs/fr/hooks.md) peuvent placer dans les en-têtes | Hooks et automatisation | Tout fichier |

120| [`idleCompaction`](#idlecompaction) | Empêcher Claude Code de compacter une longue conversation pendant que votre session de terminal est inactive | Mémoire et contexte | Tout fichier |120| [`idleCompaction`](#idlecompaction) | Empêcher Claude Code de compacter une longue conversation que vous avez laissée de côté | Mémoire et contexte | Tout fichier |

121| [`includeCoAuthoredBy`](#includecoauthoredby) | Déprécié ; utilisez `attribution` pour masquer ou modifier l'attribution des commits et des PR | Git et attribution | Tout fichier |121| [`includeCoAuthoredBy`](#includecoauthoredby) | Déprécié ; utilisez `attribution` pour masquer ou modifier l'attribution des commits et des PR | Git et attribution | Tout fichier |

122| [`includeGitInstructions`](#includegitinstructions) | Retirer du contexte de Claude les instructions intégrées sur les commits et les PR | Git et attribution | Tout fichier |122| [`includeGitInstructions`](#includegitinstructions) | Retirer du contexte de Claude les instructions intégrées sur les commits et les PR | Git et attribution | Tout fichier |

123| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | Recevoir une [notification push](https://code.claude.com/docs/fr/remote-control.md#mobile-push-notifications) lorsque Claude attend votre intervention | Distant, bureau et notifications | Tout fichier |123| [`inputNeededNotifEnabled`](#inputneedednotifenabled) | Recevoir une [notification push](https://code.claude.com/docs/fr/remote-control.md#mobile-push-notifications) lorsque Claude attend votre intervention | Distant, bureau et notifications | Tout fichier |


1229Sur une plateforme que le sandbox ne supporte pas, Claude Code ne démarre pas lorsque cette clé est activée. Consultez [Enforce sandboxing with managed settings](https://code.claude.com/docs/fr/sandboxing.md#enforce-sandboxing-with-managed-settings).1229Sur une plateforme que le sandbox ne supporte pas, Claude Code ne démarre pas lorsque cette clé est activée. Consultez [Enforce sandboxing with managed settings](https://code.claude.com/docs/fr/sandboxing.md#enforce-sandboxing-with-managed-settings).

1230 1230 

1231* **Scope** : [`Any file`](#scopes), avec des [limites sur les paramètres de projet et locaux](https://code.claude.com/docs/fr/sandboxing.md#repository-settings-under-an-admin-required-sandbox)1231* **Scope** : [`Any file`](#scopes), avec des [limites sur les paramètres de projet et locaux](https://code.claude.com/docs/fr/sandboxing.md#repository-settings-under-an-admin-required-sandbox)

1232* **Type** : Booléen1232* **Type** : booléen

1233 * `true` : Claude Code se termine avec une erreur au démarrage lorsque `sandbox.enabled` est `true` mais que le sandbox ne peut pas démarrer1233 * `true` : Claude Code se termine avec une erreur au démarrage lorsque `sandbox.enabled` vaut `true` mais que le sandbox ne peut pas démarrer. Si le sandbox passe cette vérification puis échoue à s'initialiser, la session continue et Claude Code [refuse chaque commande en sandbox](https://code.claude.com/docs/fr/sandboxing.md#commands-refused-with-sandbox-is-required)

1234 * `false` : Claude Code exécute les commandes sans sandbox lorsque le sandbox ne peut pas démarrer1234 * `false` : Claude Code exécute les commandes hors sandbox lorsque le sandbox ne peut pas démarrer

1235* **Default** : `false`1235* **Default** : `false`

1236 1236 

1237Ceci fait en sorte que chaque machine gérée mette en sandbox les commandes ou refuse de démarrer :1237Cet exemple active le sandbox sur les machines gérées et définit `failIfUnavailable` sur `true` :

1238 1238 

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

1240{1240{


2415 2415 

2416### `idleCompaction`2416### `idleCompaction`

2417 2417 

2418La compaction en cas d'inactivité [compacte](https://code.claude.com/docs/fr/context-window.md#what-survives-compaction) une longue conversation que vous avez laissée de côté, peu avant l'expiration de son cache de prompt. Votre prochain message envoie alors un résumé au lieu de la conversation entière. À votre retour, la conversation affiche une ligne qui commence par `Compacted while idle, before the prompt cache expired`.2418La compaction en cas d'inactivité [compacte](https://code.claude.com/docs/fr/context-window.md#what-survives-compaction) une longue conversation que vous avez laissée de côté. Votre prochain message envoie alors un résumé au lieu de la conversation entière. Une fois compactée, la conversation affiche un avis :

2419 

2420* **Terminal** : une ligne qui commence par `Compacted while idle, before the prompt cache expired`

2421* **[Panneau de chat VS Code](#idle-compaction-in-vs-code-and-the-desktop-app)** : un avis qui inclut `a summary written while you were away`

2422* **[Application de bureau](#idle-compaction-in-vs-code-and-the-desktop-app)** : le même avis, dans une ligne dont le libellé inclut `Claude Code notice`. Si vous ne voyez pas cette ligne ou son texte, passez au [mode d'affichage Verbose](https://code.claude.com/docs/fr/desktop.md#switch-view-modes).

2419 2423 

2420La compaction en cas d'inactivité est activée par défaut pour les conversations qui remplissent toutes ces conditions :2424La compaction en cas d'inactivité est activée par défaut pour les conversations qui remplissent toutes ces conditions :

2421 2425 

2422* **Session** : vous êtes dans une session de terminal interactive2426* **Session** : vous êtes dans une session de terminal interactive, ou dans le panneau de chat de l'extension VS Code ou l'onglet Code de l'application de bureau sur un [compte sélectionné par Anthropic](#idle-compaction-in-vs-code-and-the-desktop-app)

2423* **Compaction automatique** : [`autoCompactEnabled`](#autocompactenabled) est activé2427* **Compaction automatique** : [`autoCompactEnabled`](#autocompactenabled) est activé

2424* **Cache de prompt** : la conversation utilise le [TTL d'une heure du cache de prompt](https://code.claude.com/docs/fr/prompt-caching.md#which-ttl-each-request-gets)2428* **Cache de prompt** : la conversation utilise le [TTL d'une heure du cache de prompt](https://code.claude.com/docs/fr/prompt-caching.md#which-ttl-each-request-gets)

2425* **Feature flags** : Claude Code peut [récupérer les feature flags auprès d'Anthropic](https://code.claude.com/docs/fr/env-vars.md#features-that-need-feature-flag-fetching)2429* **Feature flags** : Claude Code peut [récupérer les feature flags auprès d'Anthropic](https://code.claude.com/docs/fr/env-vars.md#features-that-need-feature-flag-fetching)


2441}2445}

2442```2446```

2443 2447 

2444Pour désactiver ou activer la compaction en cas d'inactivité depuis une session, exécutez `/config` et modifiez la ligne **Idle compaction**. Votre choix est enregistré dans vos paramètres utilisateur et s'applique immédiatement. La ligne nécessite Claude Code v2.1.302 ou ultérieur. Si vous utilisez l'une de ces versions et que `/config` n'affiche pas la ligne, vérifiez les causes suivantes :2448Pour désactiver ou activer la compaction en cas d'inactivité depuis une session de terminal, exécutez `/config` et modifiez la ligne **Idle compaction**. Votre choix est enregistré dans vos paramètres utilisateur et s'applique immédiatement. La ligne nécessite Claude Code v2.1.302 ou ultérieur. Si vous utilisez l'une de ces versions et que `/config` n'affiche pas la ligne, vérifiez les causes suivantes :

2445 2449 

2446* **Une autre source de paramètres définit la clé** : une valeur dans les paramètres gérés, le flag `--settings` ou un fichier de paramètres de projet ou local remplace vos paramètres utilisateur. Modifiez plutôt la clé dans cette source2450* **Une autre source de paramètres définit la clé** : une valeur dans les paramètres gérés, le flag `--settings` ou un fichier de paramètres de projet ou local remplace vos paramètres utilisateur. Modifiez plutôt la clé dans cette source

2447* **Les feature flags sont indisponibles** : lorsque Claude Code ne peut pas [récupérer les feature flags auprès d'Anthropic](https://code.claude.com/docs/fr/env-vars.md#features-that-need-feature-flag-fetching), la compaction en cas d'inactivité ne s'exécute pas, il n'y a donc rien à désactiver2451* **Les feature flags sont indisponibles** : lorsque Claude Code ne peut pas [récupérer les feature flags auprès d'Anthropic](https://code.claude.com/docs/fr/env-vars.md#features-that-need-feature-flag-fetching), la compaction en cas d'inactivité ne s'exécute pas, il n'y a donc rien à désactiver


2462}2466}

2463```2467```

2464 2468 

2469#### Compaction en cas d'inactivité dans VS Code et l'application de bureau

2470 

2471Un avis comme celui-ci signifie que Claude Code [a remplacé votre conversation précédente par un résumé](https://code.claude.com/docs/fr/context-window.md#what-survives-compaction) à partir duquel Claude travaille désormais :

2472 

2473```text theme={null}

2474Compacted using a summary written while you were away · turn off with "idleCompaction": false in settings.json

2475```

2476 

2477Vous n'avez rien à faire. Pour désactiver la compaction en cas d'inactivité, définissez `idleCompaction` sur `false` dans `~/.claude/settings.json` ou un autre [fichier de paramètres](https://code.claude.com/docs/fr/settings.md#settings-files-and-who-they-affect).

2478 

2479Dans le panneau de chat de l'extension VS Code et l'onglet Code de l'application de bureau, la compaction en cas d'inactivité s'exécute pour les comptes sélectionnés par Anthropic. Claude Code rédige le résumé pendant votre absence, puis ne compacte avec celui-ci que si votre prochain message arrive une heure ou plus après la dernière requête.

2480 

2465### `plansDirectory`2481### `plansDirectory`

2466 2482 

2467Choisissez où Claude Code stocke les fichiers de plan qu'il écrit en [mode plan](https://code.claude.com/docs/fr/permission-modes.md#analyze-before-you-edit-with-plan-mode). Claude Code résout le chemin par rapport à la racine du projet.2483Choisissez où Claude Code stocke les fichiers de plan qu'il écrit en [mode plan](https://code.claude.com/docs/fr/permission-modes.md#analyze-before-you-edit-with-plan-mode). Claude Code résout le chemin par rapport à la racine du projet.


3522 3538 

3523* **Les hooks gérés et SDK s'exécutent** : les hooks des paramètres gérés et les hooks que l'[Agent SDK](https://code.claude.com/docs/fr/agent-sdk/overview.md) enregistre en processus3539* **Les hooks gérés et SDK s'exécutent** : les hooks des paramètres gérés et les hooks que l'[Agent SDK](https://code.claude.com/docs/fr/agent-sdk/overview.md) enregistre en processus

3524* **Les hooks des plugins force-enabled s'exécutent** : les hooks des plugins que vos paramètres gérés force-enable via [`enabledPlugins`](#enabledplugins). Claude Code correspond sur l'ID complet `plugin@marketplace`, donc un plugin portant le même nom d'une marketplace différente reste bloqué. Cela vous permet de distribuer des hooks vérifiés via une marketplace d'organisation tout en bloquant tout le reste. Un [mod](https://code.claude.com/docs/fr/plugins/mods/overview.md) dans un tel plugin se charge uniquement lorsqu'il [compte comme celui de votre organisation](https://code.claude.com/docs/fr/plugins/mods/admin.md#install-your-organizations-mods)3540* **Les hooks des plugins force-enabled s'exécutent** : les hooks des plugins que vos paramètres gérés force-enable via [`enabledPlugins`](#enabledplugins). Claude Code correspond sur l'ID complet `plugin@marketplace`, donc un plugin portant le même nom d'une marketplace différente reste bloqué. Cela vous permet de distribuer des hooks vérifiés via une marketplace d'organisation tout en bloquant tout le reste. Un [mod](https://code.claude.com/docs/fr/plugins/mods/overview.md) dans un tel plugin se charge uniquement lorsqu'il [compte comme celui de votre organisation](https://code.claude.com/docs/fr/plugins/mods/admin.md#install-your-organizations-mods)

3541* **Les moniteurs des autres plugins sont bloqués** : les [moniteurs](https://code.claude.com/docs/fr/plugins/components.md#monitors) d'un plugin ne démarrent pas sauf si le plugin est force-enabled. Nécessite Claude Code v2.1.310 ou ultérieur

3525* **Tout le reste est bloqué** : les hooks utilisateur, projet et local, les hooks et mods d'autres plugins installés, et les hooks déclarés dans le frontmatter de l'agent. Les [mods intégrés à Claude Code](https://code.claude.com/docs/fr/plugins/mods/overview.md#mods-built-into-claude-code) continuent de s'exécuter. Pour bloquer uniquement les mods des utilisateurs, définissez [`allowManagedModsOnly`](https://code.claude.com/docs/fr/plugins/mods/admin#set-options-on-the-built-in-guard) à la place.3542* **Tout le reste est bloqué** : les hooks utilisateur, projet et local, les hooks et mods d'autres plugins installés, et les hooks déclarés dans le frontmatter de l'agent. Les [mods intégrés à Claude Code](https://code.claude.com/docs/fr/plugins/mods/overview.md#mods-built-into-claude-code) continuent de s'exécuter. Pour bloquer uniquement les mods des utilisateurs, définissez [`allowManagedModsOnly`](https://code.claude.com/docs/fr/plugins/mods/admin#set-options-on-the-built-in-guard) à la place.

3526* **Les plugins sourced par commande sont désactivés** : Claude Code désactive également les plugins avec une [`command` source](https://code.claude.com/docs/fr/plugins/marketplace-reference#command-plugin-source), y compris les plugins force-enabled dans les `enabledPlugins` gérés, sauf si vous définissez [`disableCommandPluginSources`](#disablecommandpluginsources) explicitement à `false`3543* **Les plugins sourced par commande sont désactivés** : Claude Code désactive également les plugins avec une [`command` source](https://code.claude.com/docs/fr/plugins/marketplace-reference#command-plugin-source), y compris les plugins force-enabled dans les `enabledPlugins` gérés, sauf si vous définissez [`disableCommandPluginSources`](#disablecommandpluginsources) explicitement à `false`

3527* **Les commandes `headersHelper` de la marketplace sont bloquées** : Claude Code bloque également les commandes [`headersHelper`](https://code.claude.com/docs/fr/plugins/host-marketplace#authenticate-archive-downloads) de la marketplace sauf si [`disableCommandPluginSources`](#disablecommandpluginsources) est explicitement défini à `false`, sauf pour une marketplace que les paramètres gérés eux-mêmes déclarent. Nécessite Claude Code v2.1.238 ou ultérieur3544* **Les commandes `headersHelper` de la marketplace sont bloquées** : Claude Code bloque également les commandes [`headersHelper`](https://code.claude.com/docs/fr/plugins/host-marketplace#authenticate-archive-downloads) de la marketplace sauf si [`disableCommandPluginSources`](#disablecommandpluginsources) est explicitement défini à `false`, sauf pour une marketplace que les paramètres gérés eux-mêmes déclarent. Nécessite Claude Code v2.1.238 ou ultérieur

statusline.md +1 −1

Details

380* `used_percentage` et `resets_at` : arrivent avec chaque réponse, ils sont donc présents chaque fois que `spend_limit` l'est. `used_percentage` va de 0 à 100, ou au-dessus de 100 une fois que vous dépassez la limite, et `resets_at` correspond aux secondes d'époque Unix auxquelles la période de la limite se réinitialise.380* `used_percentage` et `resets_at` : arrivent avec chaque réponse, ils sont donc présents chaque fois que `spend_limit` l'est. `used_percentage` va de 0 à 100, ou au-dessus de 100 une fois que vous dépassez la limite, et `resets_at` correspond aux secondes d'époque Unix auxquelles la période de la limite se réinitialise.

381* `used_usd`, `limit_usd` et `period` : vos dépenses estimées jusqu'à présent et votre limite en dollars américains, ainsi que la période couverte par la limite, parmi `daily`, `weekly` ou `monthly`. La passerelle [calcule `used_usd` à partir des comptages de tokens](https://code.claude.com/docs/fr/claude-apps-gateway-spend-limits#how-requests-are-priced), il s'agit donc d'une estimation et non d'un montant facturé. Claude Code les lit depuis la passerelle dans une requête distincte, environ toutes les cinq minutes pendant que vous envoyez des requêtes. Les montants en dollars peuvent avoir environ cinq minutes de retard sur `used_percentage`, si bien que les deux peuvent brièvement diverger. Nécessite v2.1.284 ou ultérieur à la fois sur Claude Code et sur la passerelle.381* `used_usd`, `limit_usd` et `period` : vos dépenses estimées jusqu'à présent et votre limite en dollars américains, ainsi que la période couverte par la limite, parmi `daily`, `weekly` ou `monthly`. La passerelle [calcule `used_usd` à partir des comptages de tokens](https://code.claude.com/docs/fr/claude-apps-gateway-spend-limits#how-requests-are-priced), il s'agit donc d'une estimation et non d'un montant facturé. Claude Code les lit depuis la passerelle dans une requête distincte, environ toutes les cinq minutes pendant que vous envoyez des requêtes. Les montants en dollars peuvent avoir environ cinq minutes de retard sur `used_percentage`, si bien que les deux peuvent brièvement diverger. Nécessite v2.1.284 ou ultérieur à la fois sur Claude Code et sur la passerelle.

382 382 

383Traitez `used_usd`, `limit_usd` et `period` comme facultatifs même quand `spend_limit` est présent. Votre script reçoit le pourcentage avant eux, et ils restent absents si vous définissez `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, qui désactive cette requête. Lisez chacun avec une valeur de secours dans votre script, par exemple `jq -r '.rate_limits.spend_limit.used_usd // empty'`.383Traitez `used_usd`, `limit_usd` et `period` comme facultatifs même quand `spend_limit` est présent, car votre script reçoit le pourcentage avant eux. Lisez chacun avec une valeur de secours dans votre script, par exemple `jq -r '.rate_limits.spend_limit.used_usd // empty'`. Avant Claude Code v2.1.295, ils restaient absents si vous définissiez `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, qui désactivait cette requête.

384 384 

385### Champs de cache d'invite385### Champs de cache d'invite

386 386 

Details

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

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

123 123 

124Le titre de l'onglet ne commence pas par un glyphe de statut dans un terminal qui signale sa prise en charge du protocole. Le terminal affiche lui-même l'état de la session ; Claude Code omet donc le glyphe qu'il place devant le titre dans les autres terminaux.

125 

124## Configurer tmux126## Configurer tmux

125 127 

126Quand Claude Code s'exécute dans tmux, par défaut Shift+Entrée soumet au lieu d'insérer une nouvelle ligne, et les notifications de bureau et la [barre de progression](https://code.claude.com/docs/fr/settings-reference.md#terminalprogressbarenabled) n'atteignent jamais le terminal externe. Ajoutez ces lignes à `~/.tmux.conf`, puis exécutez `tmux source-file ~/.tmux.conf` pour les appliquer au serveur en cours d'exécution :128Quand Claude Code s'exécute dans tmux, par défaut Shift+Entrée soumet au lieu d'insérer une nouvelle ligne, et les notifications de bureau et la [barre de progression](https://code.claude.com/docs/fr/settings-reference.md#terminalprogressbarenabled) n'atteignent jamais le terminal externe. Ajoutez ces lignes à `~/.tmux.conf`, puis exécutez `tmux source-file ~/.tmux.conf` pour les appliquer au serveur en cours d'exécution :

Details

258 258 

259Un fichier qui a changé sur le disque après la dernière lecture par Claude peut toujours être modifié lorsque `old_string` correspond exactement au contenu actuel et sans ambiguïté et que Claude Code peut lire le fichier sans demande de permission. La correspondance avec le contenu actuel du fichier maintient la sécurité, et le résultat note que le fichier contient d'autres modifications afin que Claude le relise avant les modifications qui dépendent du contenu environnant. Dans tout autre cas, comme une `old_string` obsolète ou une qui correspond à plus d'une occurrence sans `replace_all`, Claude lit le fichier à nouveau avant la modification.259Un fichier qui a changé sur le disque après la dernière lecture par Claude peut toujours être modifié lorsque `old_string` correspond exactement au contenu actuel et sans ambiguïté et que Claude Code peut lire le fichier sans demande de permission. La correspondance avec le contenu actuel du fichier maintient la sécurité, et le résultat note que le fichier contient d'autres modifications afin que Claude le relise avant les modifications qui dépendent du contenu environnant. Dans tout autre cas, comme une `old_string` obsolète ou une qui correspond à plus d'une occurrence sans `replace_all`, Claude lit le fichier à nouveau avant la modification.

260 260 

261Claude peut également modifier un fichier sans Read distinct après l'avoir affiché avec une commande Bash telle que `cat` ou `grep`. Ces commandes sont `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep` et `rg`, chacune exécutée sur un seul fichier sans pipes ni redirections. Une recherche qui n'affiche aucune correspondance ne compte pas comme une lecture, pas plus que toute commande absente de cette liste.261Claude peut également modifier un fichier sans Read distinct après l'avoir affiché avec une commande Bash telle que `cat` ou `grep`. Ces commandes sont `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep` et `rg`, chacune exécutée sur un seul fichier sans pipes ni redirections. Si la commande n'a affiché aucune partie du texte du fichier, comme lorsqu'une recherche ne trouve aucune correspondance, la vérification read-before-edit s'applique toujours.

262 262 

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

264 264 


383 383 

384La [source WebSocket](#websocket-source) a sa propre demande d'approbation, que le classificateur décide également en mode auto.384La [source WebSocket](#websocket-source) a sa propre demande d'approbation, que le classificateur décide également en mode auto.

385 385 

386L'outil n'est pas disponible sur Amazon Bedrock, Google Cloud's Agent Platform, ou Microsoft Foundry. Il n'est également pas disponible quand `DISABLE_TELEMETRY` ou `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` est défini. Sous Windows, l'outil n'est disponible que lorsque [Git Bash](https://code.claude.com/docs/fr/setup.md#set-up-on-windows) est installé.386Monitor nécessite une version minimale ou Git Bash dans les cas suivants :

387 

388* **Version minimale** : sur Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform ou Microsoft Foundry, ou lorsque `DISABLE_TELEMETRY` ou `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` est défini, Monitor nécessite Claude Code v2.1.310 ou une version ultérieure. Cette exigence s'applique lorsque la [récupération des feature flags](https://code.claude.com/docs/fr/env-vars.md#features-that-need-feature-flag-fetching) est désactivée

389* **Windows** : l'outil n'est disponible que lorsque [Git Bash](https://code.claude.com/docs/fr/setup.md#set-up-on-windows) est installé

387 390 

388Les plugins peuvent déclarer des moniteurs qui démarrent automatiquement quand le plugin est actif, au lieu de demander à Claude de les démarrer. Voir [moniteurs de plugin](https://code.claude.com/docs/fr/plugins/components.md#monitors).391Les plugins peuvent déclarer des moniteurs qui démarrent automatiquement quand le plugin est actif, au lieu de demander à Claude de les démarrer. Voir [moniteurs de plugin](https://code.claude.com/docs/fr/plugins/components.md#monitors).

389 392 

Details

177 177 

178**1. Ouvrez la vue diff**178**1. Ouvrez la vue diff**

179 179 

180Un indicateur diff affiche les lignes ajoutées et supprimées dans la session, par exemple `+42 -18`. Sélectionnez-le pour ouvrir la vue diff, avec une liste de fichiers à gauche et les modifications à droite.180Une fois que Claude a poussé ses modifications vers une branche, la carte **Changes** dans le panneau à côté du chat affiche les lignes ajoutées et supprimées dans la session, par exemple `+42 -18`. Cliquez sur ces chiffres pour ouvrir la vue diff.

181 181 

182Le diff compare les modifications de la session par rapport à sa branche de base par défaut. Pour comparer par rapport à une branche différente, sélectionnez **Comparer par rapport à** et choisissez-en une.182* Vous pouvez aussi cliquer sur **Changes** dans la barre de titre de la session, ou dans le menu **⋮** de la barre.

183* Pour afficher le panneau lorsqu'il est masqué, cliquez sur l'icône **Show session rail** dans la barre de titre de la session, ou dans le menu **⋮** de la barre.

184 

185Le diff compare les modifications de la session par rapport à sa branche de base par défaut. Pour comparer par rapport à une branche différente, sélectionnez **Compare against** et choisissez-en une.

183 186 

184**2. Laissez des commentaires en ligne**187**2. Laissez des commentaires en ligne**

185 188 

186Sélectionnez n'importe quelle ligne dans le diff, tapez vos commentaires et appuyez sur Entrée. Les commentaires s'accumulent jusqu'à ce que vous envoyiez votre prochain message, puis ils sont regroupés avec celui-ci. Claude voit « à `src/auth.ts:47`, ne capturez pas l'erreur ici » aux côtés de votre instruction principale, vous n'avez donc pas à décrire où se trouve le problème.189Sélectionnez n'importe quelle ligne dans le diff, tapez vos commentaires et appuyez sur Entrée. Les commentaires s'accumulent jusqu'à ce que vous envoyiez votre prochain message, puis ils sont regroupés avec celui-ci. Claude voit « à `src/auth.ts:47`, ne capturez pas l'erreur ici » aux côtés de votre instruction principale, vous n'avez donc pas à décrire où se trouve le problème.

187 190 

188**3. Créez une demande de tirage**191**3. Créez une pull request**

192 

193Quand le diff est correct, [affichez à nouveau le panneau](https://code.claude.com/docs/fr/claude-code-on-the-web.md#review-changes) si la carte **Changes** n'est pas visible, puis créez une pull request ou un brouillon depuis la carte :

189 194 

190Quand le diff est correct, sélectionnez **Créer une PR** en haut de la vue diff. Vous pouvez l'ouvrir comme une PR complète, un brouillon, ou accéder à la page de composition de GitHub avec un titre et une description générés.195* Cliquez sur **Create PR**. Claude Code crée la pull request avec un titre et une description générés.

196* Pour ouvrir plutôt un brouillon, faites un clic droit sur **Create PR**, sélectionnez **Create draft PR** pour modifier l'action du bouton, puis cliquez sur le bouton

191 197 

192**4. Continuez à itérer après la PR**198**4. Continuez à itérer après la PR**

193 199 

194La session reste active après la création de la PR. Collez la sortie d'échec CI ou les commentaires des examinateurs dans le chat et demandez à Claude de les traiter. Pour que Claude surveille la PR automatiquement, consultez [Correction automatique des demandes de tirage](https://code.claude.com/docs/fr/claude-code-on-the-web.md#auto-fix-pull-requests).200La session reste active après la création de la PR. Collez la sortie d'échec CI ou les commentaires des examinateurs dans le chat et demandez à Claude de les traiter. Pour que Claude surveille la PR automatiquement, consultez [Correction automatique des pull requests](https://code.claude.com/docs/fr/claude-code-on-the-web.md#auto-fix-pull-requests).

195 201 

196## Dépanner la configuration202## Dépanner la configuration

197 203